(limit int)
| 256 | const unaryPriority = 8 |
| 257 | |
| 258 | func (p *parser) subExpression(limit int) (e exprDesc, op int) { |
| 259 | p.enterLevel() |
| 260 | if u := unaryOp(p.t); u != oprNoUnary { |
| 261 | line := p.lineNumber |
| 262 | p.next() |
| 263 | e, _ = p.subExpression(unaryPriority) |
| 264 | e = p.function.Prefix(u, e, line) |
| 265 | } else { |
| 266 | e = p.simpleExpression() |
| 267 | } |
| 268 | op = binaryOp(p.t) |
| 269 | for op != oprNoBinary && priority[op].left > limit { |
| 270 | line := p.lineNumber |
| 271 | p.next() |
| 272 | e = p.function.Infix(op, e) |
| 273 | e2, next := p.subExpression(priority[op].right) |
| 274 | e = p.function.Postfix(op, e, e2, line) |
| 275 | op = next |
| 276 | } |
| 277 | p.leaveLevel() |
| 278 | return |
| 279 | } |
| 280 | |
| 281 | func (p *parser) expression() (e exprDesc) { |
| 282 | e, _ = p.subExpression(0) |
no test coverage detected