(e *ast.BinaryExpr, parent string)
| 328 | } |
| 329 | |
| 330 | func (c *canon) binary(e *ast.BinaryExpr, parent string) { |
| 331 | switch e.Op { |
| 332 | case ".": |
| 333 | if !isThis(e.LHS) { |
| 334 | c.expr(e.LHS, "") |
| 335 | c.write(".") |
| 336 | } |
| 337 | c.expr(e.RHS, "") |
| 338 | case "and", "or", "in": |
| 339 | parens := needsparens(parent, e.Op) |
| 340 | c.maybewrite("(", parens) |
| 341 | c.expr(e.LHS, e.Op) |
| 342 | c.write(" %s ", e.Op) |
| 343 | c.expr(e.RHS, e.Op) |
| 344 | c.maybewrite(")", parens) |
| 345 | default: |
| 346 | parens := needsparens(parent, e.Op) |
| 347 | c.maybewrite("(", parens) |
| 348 | // do need parens calc |
| 349 | c.expr(e.LHS, e.Op) |
| 350 | c.write("%s", e.Op) |
| 351 | c.expr(e.RHS, e.Op) |
| 352 | c.maybewrite(")", parens) |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | func needsparens(parent, op string) bool { |
| 357 | return precedence(parent)-precedence(op) < 0 |
no test coverage detected