diff options
Diffstat (limited to 'pkg/lang/vm/utils.go')
| -rw-r--r-- | pkg/lang/vm/utils.go | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/pkg/lang/vm/utils.go b/pkg/lang/vm/utils.go index 00311ef..2b7fa6f 100644 --- a/pkg/lang/vm/utils.go +++ b/pkg/lang/vm/utils.go @@ -1,6 +1,7 @@ package vm import ( + "jinx/pkg/lang/vm/code" "jinx/pkg/lang/vm/mem" "jinx/pkg/lang/vm/value" ) @@ -14,14 +15,14 @@ func (vm *VM) popAndDrop() (value.Value, error) { return v, nil } -func (vm *VM) popCallAndDrop() (int, error) { +func (vm *VM) popCallAndDrop() (code.Pos, error) { envPtr := vm.stack.CurrentCallEnv() vm.memory.Release(envPtr) for !vm.stack.ReachedBaseOfCall() { _, err := vm.popAndDrop() if err != nil { - return 0, err + return code.Pos{}, err } } @@ -63,6 +64,8 @@ func (vm *VM) getMemCell(ptr mem.Ptr, kind mem.CellKind, allowNil bool) (mem.Cel _, ok = cell.(value.TypeCell) case mem.CellKindObject: _, ok = cell.(value.ObjectCell) + case mem.CellKindGlobal: + _, ok = cell.(value.GlobalCell) } if !ok { @@ -71,3 +74,23 @@ func (vm *VM) getMemCell(ptr mem.Ptr, kind mem.CellKind, allowNil bool) (mem.Cel return cell, nil } + +func (vm *VM) module() int { + return vm.pos.Module +} + +func (vm *VM) pc() int { + return vm.pos.PC +} + +func (vm *VM) setPC(pc int) { + vm.pos.PC = pc +} + +func (vm *VM) advancePC(by int) { + vm.pos.PC += by +} + +func (vm *VM) setPos(pos code.Pos) { + vm.pos = pos +} |
