q/src/build/core/CompileLoop.go

20 lines
411 B
Go

package core
import (
"fmt"
"git.akyoto.dev/cli/q/src/build/asm"
"git.akyoto.dev/cli/q/src/build/ast"
)
// CompileLoop compiles a loop instruction.
func (f *Function) CompileLoop(loop *ast.Loop) error {
f.count.loop++
label := fmt.Sprintf("%s_loop_%d", f.Name, f.count.loop)
f.AddLabel(label)
f.pushScope(loop.Body)
err := f.CompileAST(loop.Body)
f.popScope()
f.Jump(asm.JUMP, label)
return err
}