package core import ( "git.akyoto.dev/cli/q/src/build/asm" "git.akyoto.dev/cli/q/src/build/ast" "git.akyoto.dev/cli/q/src/build/cpu" "git.akyoto.dev/cli/q/src/build/expression" ) // ExpressionToRegister puts the result of an expression into the specified register. func (f *Function) ExpressionToRegister(root *expression.Expression, register cpu.Register) error { if root.IsLeaf() { return f.TokenToRegister(root.Token, register) } if ast.IsFunctionCall(root) { err := f.CompileCall(root) f.assembler.RegisterRegister(asm.MOVE, register, f.cpu.Output[0]) return err } left := root.Children[0] right := root.Children[1] err := f.ExpressionToRegister(left, register) if err != nil { return err } f.SaveRegister(register) return f.Execute(root.Token, register, right) }