package core import ( "git.urbach.dev/cli/q/src/asm" "git.urbach.dev/cli/q/src/ast" ) // CompileLoop compiles an infinite loop. func (f *Function) CompileLoop(loop *ast.Loop) error { for _, register := range f.CPU.Input { f.SaveRegister(register) } f.count.loop++ label := f.CreateLabel("loop", f.count.loop) f.AddLabel(label) scope := f.PushScope(loop.Body, f.File.Bytes) scope.InLoop = true err := f.CompileAST(loop.Body) f.Jump(asm.JUMP, label) f.PopScope() return err }