package core import ( "git.urbach.dev/cli/q/src/asm" "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/expression" ) // MultiAssign assigns multiple return values to local variables. func (f *Function) MultiAssign(left *expression.Expression, right *expression.Expression) error { count := 0 _, err := f.CompileCall(right) if err != nil { return err } return left.EachLeaf(func(leaf *expression.Expression) error { name := leaf.Token.Text(f.File.Bytes) variable := f.VariableByName(name) if variable == nil { return errors.New(&errors.UnknownIdentifier{Name: name}, f.File, left.Token.Position) } f.RegisterRegister(asm.MOVE, variable.Value.Register, f.CPU.Output[count]) f.UseVariable(variable) count++ return nil }) }