diff options
Diffstat (limited to 'pkg/lang/vm/value/value.go')
| -rw-r--r-- | pkg/lang/vm/value/value.go | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/pkg/lang/vm/value/value.go b/pkg/lang/vm/value/value.go index d19bbd6..f98740e 100644 --- a/pkg/lang/vm/value/value.go +++ b/pkg/lang/vm/value/value.go @@ -20,13 +20,17 @@ func NewFloat(x float64) Value { return Value{t: t, d: FloatData(x)} } -func NewString(m *mem.Mem, str string) Value { +func NewString(m *mem.Mem, str string) (Value, error) { t := Type{Kind: StringType} - ptr := m.Allocate(mem.CellKindString) - m.Set(ptr, str) + ptr, err := m.Allocate(mem.CellKindString) + if err != nil { + return Value{}, err + } + + m.Set(ptr, StringCell(str)) - return Value{t: t, d: StringData{data: ptr}} + return Value{t: t, d: StringData{data: ptr}}, nil } func NewBool(b bool) Value { @@ -34,13 +38,17 @@ func NewBool(b bool) Value { return Value{t: t, d: BoolData(b)} } -func NewArray(m *mem.Mem, arr []Value) Value { +func NewArray(m *mem.Mem, arr []Value) (Value, error) { t := Type{Kind: ArrayType} - ptr := m.Allocate(mem.CellKindArray) - m.Set(ptr, arr) + ptr, err := m.Allocate(mem.CellKindArray) + if err != nil { + return Value{}, err + } + + m.Set(ptr, ArrayCell(arr)) - return Value{t: t, d: ArrayData{data: ptr}} + return Value{t: t, d: ArrayData{data: ptr}}, nil } func NewNull() Value { @@ -99,7 +107,7 @@ func (v Value) Clone(m *mem.Mem) Value { func (v Value) Drop(m *mem.Mem) { // If value has an outlet, don't drop it and instead move it to the outlet. if !v.outlet.IsNull() { - m.Set(v.outlet, v) + m.Set(v.outlet, OutletCell(v)) return } |
