28 lines
604 B
Go
28 lines
604 B
Go
package core
|
|
|
|
import (
|
|
"git.urbach.dev/cli/q/src/asm"
|
|
"git.urbach.dev/cli/q/src/ast"
|
|
)
|
|
|
|
// CompileAssert compiles an assertion.
|
|
func (f *Function) CompileAssert(assert *ast.Assert) error {
|
|
f.count.assert++
|
|
success := f.CreateLabel("assert true", f.count.assert, asm.ControlLabel)
|
|
fail := f.CreateLabel("assert false", f.count.assert, asm.ControlLabel)
|
|
err := f.CompileCondition(assert.Condition, success, fail)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
f.AddLabel(success)
|
|
|
|
f.Defer(func() {
|
|
f.AddLabel(fail)
|
|
f.Jump(asm.JUMP, asm.Label{Name: "core.crash", Type: asm.ControlLabel})
|
|
})
|
|
|
|
return err
|
|
}
|