package core import ( "git.urbach.dev/cli/q/src/asm" "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/expression" ) // CompileMemoryStore compiles a variable-width store to memory. func (f *Function) CompileMemoryStore(root *expression.Expression) error { parameters := root.Children[1:] name := parameters[0].Token.Text(f.File.Bytes) numBytes, err := f.ToNumber(parameters[1].Token) if err != nil { return err } value := parameters[2] variable := f.VariableByName(name) if variable == nil { return errors.New(&errors.UnknownIdentifier{Name: name}, f.File, parameters[0].Token.Position) } defer f.UseVariable(variable) memory := asm.Memory{ Base: variable.Value.Register, OffsetRegister: -1, Length: byte(numBytes), } _, err = f.ExpressionToMemory(value, memory) return err }