summaryrefslogtreecommitdiff
path: root/parser/expr.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2026-01-26 18:44:29 +0100
committerMarc Vertes <mvertes@free.fr>2026-01-26 18:44:29 +0100
commitaa5861917ac2543f85bf4cfefbb69cf501d4de41 (patch)
tree94122ea3167c295da822f03d075a085b4f87e9ea /parser/expr.go
parentece8bdbc45afc3ea626db884ea3283d9a8395ae5 (diff)
fix: improve multi assignHEADmain
Do not consider assign operators in expression handling, they are part of statements. Isolate parsing of left hand side and right hand side in assignments.
Diffstat (limited to 'parser/expr.go')
-rw-r--r--parser/expr.go15
1 files changed, 2 insertions, 13 deletions
diff --git a/parser/expr.go b/parser/expr.go
index 1f15185..d49cfd5 100644
--- a/parser/expr.go
+++ b/parser/expr.go
@@ -62,14 +62,13 @@ func (p *Parser) parseExpr(in Tokens, typeStr string) (out Tokens, err error) {
out = append(out, t)
case lang.Range:
- ops = ops[:len(ops)-1] // Suppress previous assign or define.
addop(t)
case lang.Colon:
t.Str = typeStr
addop(t)
- case lang.Add, lang.And, lang.Assign, lang.Define, lang.Equal, lang.Greater, lang.Less, lang.Mul, lang.Not, lang.Sub, lang.Shl, lang.Shr:
+ case lang.Add, lang.And, lang.Equal, lang.Greater, lang.Less, lang.Mul, lang.Not, lang.Sub, lang.Shl, lang.Shr:
if i == 0 || in[i-1].Tok.IsOperator() {
// An operator preceded by an operator or no token is unary.
t.Tok = lang.UnaryOp[t.Tok]
@@ -100,10 +99,6 @@ func (p *Parser) parseExpr(in Tokens, typeStr string) (out Tokens, err error) {
ctype = s.Type.String()
}
out = append(out, t)
- if i+1 < len(in) && in[i+1].Tok == lang.Define {
- // Ident is to be assigned next. Define it as a var.
- p.Symbols.Add(symbol.UnsetAddr, t.Str, vm.Value{}, symbol.Var, nil, false)
- }
case lang.ParenBlock:
toks, err := p.parseBlock(t, typeStr)
@@ -145,7 +140,6 @@ func (p *Parser) parseExpr(in Tokens, typeStr string) (out Tokens, err error) {
return out, err
}
ctype = typ.String()
- // p.Symbols.Add(symbol.UnsetAddr, ctype, vm.NewValue(typ), symbol.Type, typ, p.funcScope != "")
p.Symbols.Add(symbol.UnsetAddr, ctype, vm.NewValue(typ), symbol.Type, typ, false)
out = append(out, newIdent(ctype, t.Pos))
i += n - 1
@@ -159,12 +153,7 @@ func (p *Parser) parseExpr(in Tokens, typeStr string) (out Tokens, err error) {
break
}
out = append(out, toks...)
- if i < len(in)-2 && in[i+1].Tok == lang.Assign {
- // A bracket block followed by assign implies an IndexAssign token,
- // as assignement to a map element cannot be implemented through a normal Assign.
- ops = append(ops, newIndexAssign(t.Pos))
- i++
- } else if toks[len(toks)-1].Tok != lang.Slice {
+ if toks[len(toks)-1].Tok != lang.Slice {
ops = append(ops, newIndex(t.Pos))
}