diff options
| author | Mel <einebeere@gmail.com> | 2022-05-29 21:42:32 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-29 21:42:32 +0000 |
| commit | d2f69dccb3643834a79da79be4ece189a7178c9e (patch) | |
| tree | 7e32365a25f37bee199dde36dfdfef12916de46f /pkg/lang/vm/vm.go | |
| parent | 11bcf772bf8d9aa353eb4c04bfb85378ba392b1e (diff) | |
| download | jinx-d2f69dccb3643834a79da79be4ece189a7178c9e.tar.zst jinx-d2f69dccb3643834a79da79be4ece189a7178c9e.zip | |
Types, Methods and basic Core Lib
Diffstat (limited to 'pkg/lang/vm/vm.go')
| -rw-r--r-- | pkg/lang/vm/vm.go | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/pkg/lang/vm/vm.go b/pkg/lang/vm/vm.go index 2ac689b..d4a1366 100644 --- a/pkg/lang/vm/vm.go +++ b/pkg/lang/vm/vm.go @@ -14,12 +14,18 @@ type VM struct { } func New(code *code.Code) *VM { - return &VM{ + vm := &VM{ code: code, pc: 0, stack: stack.New(), memory: mem.New(), } + + if err := vm.setup(); err != nil { + panic(err) + } + + return vm } func (vm *VM) GetResult() (string, error) { @@ -116,9 +122,10 @@ func (vm *VM) step(op code.Op) (stepDecision, error) { err = vm.execGetLocal(int(offset)) case code.OpGetMember: - panic("not implemented") - case code.OpGetMethod: - panic("not implemented") + name, advance := vm.code.GetString(vm.pc) + vm.pc += advance + + err = vm.execGetMember(name) case code.OpGetEnv: envIndex, advance := vm.code.GetUint(vm.pc) |
