diff options
| author | Mel <einebeere@gmail.com> | 2022-05-28 01:22:17 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-28 01:22:17 +0000 |
| commit | 0a7700112f82e634a957685bee0cbaa3458f4945 (patch) | |
| tree | 847c397970d7d852bc988a7a01f4625eae443edb /pkg/lang/vm/value/value.go | |
| parent | 83d1dc87f3336d70ccda476627c70c282b7b6e11 (diff) | |
| download | jinx-0a7700112f82e634a957685bee0cbaa3458f4945.tar.zst jinx-0a7700112f82e634a957685bee0cbaa3458f4945.zip | |
Harden VM Mem
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 } |
