about summary refs log tree commit diff
path: root/pkg/lang/vm/value/value.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/value/value.go')
-rw-r--r--pkg/lang/vm/value/value.go21
1 files changed, 17 insertions, 4 deletions
diff --git a/pkg/lang/vm/value/value.go b/pkg/lang/vm/value/value.go
index 05d3f09..5e222a3 100644
--- a/pkg/lang/vm/value/value.go
+++ b/pkg/lang/vm/value/value.go
@@ -24,7 +24,9 @@ func NewString(m mem.Mem, str string) (Value, error) {
 		return Value{}, err
 	}
 
-	m.Set(ptr, StringCell(str))
+	if err = m.Set(ptr, StringCell(str)); err != nil {
+		return Value{}, err
+	}
 
 	return Value{t: CORE_TYPE_STRING, d: StringData{data: ptr}}, nil
 }
@@ -39,7 +41,9 @@ func NewArray(m mem.Mem, arr []Value) (Value, error) {
 		return Value{}, err
 	}
 
-	m.Set(ptr, ArrayCell(arr))
+	if err = m.Set(ptr, ArrayCell(arr)); err != nil {
+		return Value{}, err
+	}
 
 	return Value{t: CORE_TYPE_ARRAY, d: ArrayData{data: ptr}}, nil
 }
@@ -56,8 +60,17 @@ func NewNativeFunction(f NativeFunc, args uint) Value {
 	return Value{t: CORE_TYPE_FUNCTION, d: FunctionData{native: f, args: args}}
 }
 
-func NewObject() Value {
-	panic("not implemented")
+func NewObject(m mem.Mem, t mem.Ptr) (Value, error) {
+	ptr, err := m.Allocate(mem.CellKindObject)
+	if err != nil {
+		return Value{}, err
+	}
+
+	if err = m.Set(ptr, ObjectCell{make(map[string]Value)}); err != nil {
+		return Value{}, err
+	}
+
+	return Value{t: t, d: ObjectData{obj: ptr}}, nil
 }
 
 func (v Value) TypePtr() mem.Ptr {