From 5a04b5512a128bd1805792cca4eabacf5fd49b27 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Sun, 11 Jan 2026 19:02:27 +0100 Subject: fix: handle assign statements on map elements A new token MapAssign is added to implement assignements involving a map, slice or array, an index key expression and a value expression. --- vm/vm.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'vm/vm.go') diff --git a/vm/vm.go b/vm/vm.go index 709b459..2baf384 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -42,6 +42,7 @@ const ( Grow // -- ; sp += $1 Index // a i -- a[i] ; IndexSet // a i v -- a; a[i] = v + MapIndex // a i -- a[i] MapSet // a i v -- a; a[i] = v Jump // -- ; ip += $1 JumpTrue // cond -- ; if cond { ip += $1 } @@ -267,6 +268,9 @@ func (m *Machine) Run() (err error) { case IndexSet: mem[sp-3].Value.Index(int(mem[sp-2].Int())).Set(mem[sp-1].Value) mem = mem[:sp-2] + case MapIndex: + mem[sp-2].Value = mem[sp-2].MapIndex(mem[sp-1].Value) + mem = mem[:sp-1] case MapSet: mem[sp-3].SetMapIndex(mem[sp-2].Value, mem[sp-1].Value) mem = mem[:sp-2] -- cgit v1.2.3