diff options
| author | Marc Vertes <mvertes@free.fr> | 2026-01-09 19:10:27 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2026-01-09 19:10:27 +0100 |
| commit | 7520aa4474ea30985cf26631c6bbdebf38484a0d (patch) | |
| tree | e1e344c2fdc04affc0095eab26a39eef1fc3ba91 /vm/vm.go | |
| parent | 6ae0a2530c9a57fc093d2159591d9cae8140d641 (diff) | |
feat: initial support for maps
Diffstat (limited to 'vm/vm.go')
| -rw-r--r-- | vm/vm.go | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -42,6 +42,7 @@ const ( Grow // -- ; sp += $1 Index // a i -- a[i] ; IndexSet // a i v -- a; a[i] = v + MapSet // a i v -- a; a[i] = v Jump // -- ; ip += $1 JumpTrue // cond -- ; if cond { ip += $1 } JumpFalse // cond -- ; if cond { ip += $1 } @@ -170,11 +171,7 @@ func (m *Machine) Run() (err error) { case Fdup: mem = append(mem, mem[c.Arg[0]+fp-1]) case Fnew: - mem = append(mem, NewValue(mem[c.Arg[0]].Type)) - if len(c.Arg) > 1 { - mem[len(mem)-1].Grow(c.Arg[1]) - mem[len(mem)-1].SetLen(c.Arg[1]) - } + mem = append(mem, NewValue(mem[c.Arg[0]].Type, c.Arg[1:]...)) case Field: fv := mem[sp-1].FieldByIndex(c.Arg) if !fv.CanSet() { @@ -268,9 +265,11 @@ func (m *Machine) Run() (err error) { mem[sp-2].Value = mem[sp-2].Index(int(mem[sp-1].Int())) mem = mem[:sp-1] case IndexSet: - log.Println("## IndexSet:", sp-3, mem[sp-3].Type) mem[sp-3].Value.Index(int(mem[sp-2].Int())).Set(mem[sp-1].Value) mem = mem[:sp-2] + case MapSet: + mem[sp-3].SetMapIndex(mem[sp-2].Value, mem[sp-1].Value) + mem = mem[:sp-2] case Vassign: mem[sp-2].Set(mem[sp-1].Value) mem = mem[:sp-2] |
