diff options
| author | Marc Vertes <mvertes@free.fr> | 2026-01-26 18:44:29 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2026-01-26 18:44:29 +0100 |
| commit | aa5861917ac2543f85bf4cfefbb69cf501d4de41 (patch) | |
| tree | 94122ea3167c295da822f03d075a085b4f87e9ea /parser/expr.go | |
| parent | ece8bdbc45afc3ea626db884ea3283d9a8395ae5 (diff) | |
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.go | 15 |
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)) } |
