summaryrefslogtreecommitdiff
path: root/parser/expr.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2026-01-11 19:02:27 +0100
committerMarc Vertes <mvertes@free.fr>2026-01-11 19:02:27 +0100
commit5a04b5512a128bd1805792cca4eabacf5fd49b27 (patch)
treea9d4fa09d14bc2b1e17ea2ff14878f556ed41536 /parser/expr.go
parent7520aa4474ea30985cf26631c6bbdebf38484a0d (diff)
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.
Diffstat (limited to 'parser/expr.go')
-rw-r--r--parser/expr.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/parser/expr.go b/parser/expr.go
index 0a87999..35e54ff 100644
--- a/parser/expr.go
+++ b/parser/expr.go
@@ -145,7 +145,14 @@ func (p *Parser) parseExpr(in Tokens, typeStr string) (out Tokens, err error) {
return out, err
}
out = append(out, toks...)
- ops = append(ops, scanner.Token{Tok: lang.Index, Pos: t.Pos})
+ if i < len(in)-2 && in[i+1].Tok == lang.Assign {
+ // A brace block followed by assign implies a MapAssing token,
+ // as assignement to a map element cannot be implemented through a normal Assign.
+ ops = append(ops, scanner.Token{Tok: lang.MapAssign, Pos: t.Pos})
+ i++
+ } else {
+ ops = append(ops, scanner.Token{Tok: lang.Index, Pos: t.Pos})
+ }
case lang.Struct:
typ, err := p.parseTypeExpr(in[i : i+2])