about summary refs log tree commit diff
path: root/pkg/lang/vm/vm.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/vm.go')
-rw-r--r--pkg/lang/vm/vm.go15
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)