@Override
 public boolean enterBinaryNode(final BinaryNode binaryNode) {
   if (binaryNode.isAssignment()) {
     final Expression lhs = binaryNode.lhs();
     if (!binaryNode.isSelfModifying()) {
       tagNeverOptimistic(lhs);
     }
     if (lhs instanceof IdentNode) {
       final Symbol symbol = ((IdentNode) lhs).getSymbol();
       // Assignment to internal symbols is never optimistic, except for self-assignment
       // expressions
       if (symbol.isInternal() && !binaryNode.rhs().isSelfModifying()) {
         tagNeverOptimistic(binaryNode.rhs());
       }
     }
   } else if (binaryNode.isTokenType(TokenType.INSTANCEOF)) {
     tagNeverOptimistic(binaryNode.lhs());
     tagNeverOptimistic(binaryNode.rhs());
   }
   return true;
 }