From 3498876f06104515002191468fd99019d40051c2 Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 14 Jun 2022 00:07:40 +0000 Subject: Fix BinExpr precendence not being drilled down --- pkg/lang/parser/exprs.go | 35 +++++------------------------------ 1 file changed, 5 insertions(+), 30 deletions(-) (limited to 'pkg/lang/parser/exprs.go') diff --git a/pkg/lang/parser/exprs.go b/pkg/lang/parser/exprs.go index b08864a..ceda018 100644 --- a/pkg/lang/parser/exprs.go +++ b/pkg/lang/parser/exprs.go @@ -26,38 +26,13 @@ func (p *Parser) parseBinaryExpr() (ast.Expr, error) { return ast.Expr{}, err } - // Check precedence and associativity. - if right.Kind == ast.ExprKindBinary { - rightBin := right.Value.(ast.ExprBinary) - - needsSwitch := (op.Precedence() > rightBin.Op.Precedence()) || - (op.Precedence() == rightBin.Op.Precedence() && op.Associativity() == ast.AssociativityLeft) - - if needsSwitch { - left = ast.Expr{ - At: left.At, - Kind: ast.ExprKindBinary, - Value: ast.ExprBinary{ - Left: left, - Op: op, - Right: rightBin.Left, - }, - } - - right = rightBin.Right - - op = rightBin.Op - } - } + // Adjust for precedence and associativity. + binary := p.mergeIntoBinary(left, op, right) left = ast.Expr{ - At: left.At, - Kind: ast.ExprKindBinary, - Value: ast.ExprBinary{ - Left: left, - Op: op, - Right: right, - }, + At: left.At, + Kind: ast.ExprKindBinary, + Value: binary, } } -- cgit 1.4.1