parseExpr less allocation
diff --git a/parser.go b/parser.go
index 603b812..fed8eac 100644
--- a/parser.go
+++ b/parser.go
@@ -170,11 +170,11 @@
 }
 
 func newAssignAST(p *parser, lhsBytes []byte, rhsBytes []byte, op string) *AssignAST {
-	lhs, _, err := parseExpr(lhsBytes, nil)
+	lhs, _, err := parseExpr(lhsBytes, nil, true)
 	if err != nil {
 		panic(err)
 	}
-	rhs, _, err := parseExpr(rhsBytes, nil)
+	rhs, _, err := parseExpr(rhsBytes, nil, true)
 	if err != nil {
 		panic(err)
 	}
@@ -225,7 +225,7 @@
 		term = '='
 	}
 
-	v, _, err := parseExpr(expr, nil)
+	v, _, err := parseExpr(expr, nil, true)
 	if err != nil {
 		panic(fmt.Errorf("parse %s:%d %v", p.mk.filename, p.lineno, err))
 	}
@@ -252,7 +252,7 @@
 }
 
 func (p *parser) parseIfdef(line []byte, oplen int) AST {
-	lhs, _, err := parseExpr(trimLeftSpaceBytes(line[oplen+1:]), nil)
+	lhs, _, err := parseExpr(trimLeftSpaceBytes(line[oplen+1:]), nil, true)
 	if err != nil {
 		panic(fmt.Errorf("ifdef parse %s:%d %v", p.mk.filename, p.lineno, err))
 	}
@@ -300,14 +300,14 @@
 		s = s[1 : len(s)-1]
 		term := []byte{','}
 		in := []byte(s)
-		v, n, err := parseExpr(in, term)
+		v, n, err := parseExpr(in, term, false)
 		if err != nil {
 			return "", "", false
 		}
 		lhs := v.String()
 		n++
 		n += skipSpaces(in[n:], nil)
-		v, n, err = parseExpr(in[n:], nil)
+		v, n, err = parseExpr(in[n:], nil, false)
 		if err != nil {
 			return "", "", false
 		}
@@ -328,11 +328,11 @@
 		Error(p.mk.filename, p.lineno, `*** invalid syntax in conditional.`)
 	}
 
-	lhs, _, err := parseExpr([]byte(lhsBytes), nil)
+	lhs, _, err := parseExpr([]byte(lhsBytes), nil, true)
 	if err != nil {
 		panic(fmt.Errorf("parse ifeq lhs %s:%d %v", p.mk.filename, p.lineno, err))
 	}
-	rhs, _, err := parseExpr([]byte(rhsBytes), nil)
+	rhs, _, err := parseExpr([]byte(rhsBytes), nil, true)
 	if err != nil {
 		panic(fmt.Errorf("parse ifeq rhs %s:%d %v", p.mk.filename, p.lineno, err))
 	}