diff options
| author | Mel <einebeere@gmail.com> | 2022-05-31 01:01:32 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-31 01:02:20 +0000 |
| commit | 338744d066704e48e22d8ec56a43acb4b20da7f1 (patch) | |
| tree | b508eb6764efc64ac611b6ea063ab44d9e6b0a9c /pkg/lang/vm/value/value.go | |
| parent | 78a29c41098db5e5f8291e0345a3cd443c52b329 (diff) | |
| download | jinx-338744d066704e48e22d8ec56a43acb4b20da7f1.tar.zst jinx-338744d066704e48e22d8ec56a43acb4b20da7f1.zip | |
Add untyped Objects (for now)
Diffstat (limited to 'pkg/lang/vm/value/value.go')
| -rw-r--r-- | pkg/lang/vm/value/value.go | 21 |
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 { |
