(expr js.IExpr, invert bool, prec js.OpPrec)
| 686 | } |
| 687 | |
| 688 | func optimizeBooleanExpr(expr js.IExpr, invert bool, prec js.OpPrec) js.IExpr { |
| 689 | if invert { |
| 690 | // unary !(boolean) has already been handled |
| 691 | if binaryExpr, ok := expr.(*js.BinaryExpr); ok && binaryOpPrecMap[binaryExpr.Op] == js.OpEquals { |
| 692 | binaryExpr.Op = invertBooleanOp(binaryExpr.Op) |
| 693 | return expr |
| 694 | } else { |
| 695 | return optimizeUnaryExpr(&js.UnaryExpr{js.NotToken, groupExpr(expr, js.OpUnary)}, prec) |
| 696 | } |
| 697 | } else if isBooleanExpr(expr) { |
| 698 | return groupExpr(expr, prec) |
| 699 | } else { |
| 700 | return &js.UnaryExpr{js.NotToken, &js.UnaryExpr{js.NotToken, groupExpr(expr, js.OpUnary)}} |
| 701 | } |
| 702 | } |
| 703 | |
| 704 | func optimizeUnaryExpr(expr *js.UnaryExpr, prec js.OpPrec) js.IExpr { |
| 705 | if expr.Op == js.NotToken { |
no test coverage detected
searching dependent graphs…