src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/LocalVariableTypesCalculator.java
changeset 48354 c96d4c720995
parent 47276 bfa048898f11
equal deleted inserted replaced
48353:315c690bb90b 48354:c96d4c720995
    41 import java.util.List;
    41 import java.util.List;
    42 import java.util.Map;
    42 import java.util.Map;
    43 import java.util.Set;
    43 import java.util.Set;
    44 import jdk.nashorn.internal.codegen.types.Type;
    44 import jdk.nashorn.internal.codegen.types.Type;
    45 import jdk.nashorn.internal.ir.AccessNode;
    45 import jdk.nashorn.internal.ir.AccessNode;
       
    46 import jdk.nashorn.internal.ir.BaseNode;
    46 import jdk.nashorn.internal.ir.BinaryNode;
    47 import jdk.nashorn.internal.ir.BinaryNode;
    47 import jdk.nashorn.internal.ir.Block;
    48 import jdk.nashorn.internal.ir.Block;
    48 import jdk.nashorn.internal.ir.BreakNode;
    49 import jdk.nashorn.internal.ir.BreakNode;
    49 import jdk.nashorn.internal.ir.BreakableNode;
    50 import jdk.nashorn.internal.ir.BreakableNode;
    50 import jdk.nashorn.internal.ir.CallNode;
    51 import jdk.nashorn.internal.ir.CallNode;
  1091 
  1092 
  1092 
  1093 
  1093     @Override
  1094     @Override
  1094     public boolean enterUnaryNode(final UnaryNode unaryNode) {
  1095     public boolean enterUnaryNode(final UnaryNode unaryNode) {
  1095         final Expression expr = unaryNode.getExpression();
  1096         final Expression expr = unaryNode.getExpression();
  1096         final LvarType unaryType = toLvarType(unaryNode.setExpression(visitExpression(expr).typeExpression).getType());
  1097         final LvarType unaryType;
  1097         if(unaryNode.isSelfModifying() && expr instanceof IdentNode) {
  1098         if (unaryNode.tokenType() == TokenType.DELETE && expr instanceof IdentNode) {
  1098             onSelfAssignment((IdentNode)expr, unaryType);
  1099             // not visiting deleted identifiers; they don't count as use
       
  1100             unaryType = toLvarType(unaryNode.getType());
       
  1101         } else {
       
  1102             unaryType = toLvarType(unaryNode.setExpression(visitExpression(expr).typeExpression).getType());
       
  1103             if (unaryNode.isSelfModifying() && expr instanceof IdentNode) {
       
  1104                 onSelfAssignment((IdentNode) expr, unaryType);
       
  1105             }
  1099         }
  1106         }
  1100         typeStack.push(unaryType);
  1107         typeStack.push(unaryType);
  1101         return false;
  1108         return false;
  1102     }
  1109     }
  1103 
  1110 
  1344                     // Only calculate nested function local variable types if we're doing eager compilation
  1351                     // Only calculate nested function local variable types if we're doing eager compilation
  1345                     return false;
  1352                     return false;
  1346                 }
  1353                 }
  1347                 inOuterFunction = false;
  1354                 inOuterFunction = false;
  1348                 return true;
  1355                 return true;
       
  1356             }
       
  1357 
       
  1358             @Override
       
  1359             public boolean enterUnaryNode(final UnaryNode unaryNode) {
       
  1360                 // not visiting deleted identifiers; they don't count as use
       
  1361                 return !(unaryNode.tokenType() == TokenType.DELETE && unaryNode.getExpression() instanceof IdentNode);
  1349             }
  1362             }
  1350 
  1363 
  1351             @SuppressWarnings("fallthrough")
  1364             @SuppressWarnings("fallthrough")
  1352             @Override
  1365             @Override
  1353             public Node leaveBinaryNode(final BinaryNode binaryNode) {
  1366             public Node leaveBinaryNode(final BinaryNode binaryNode) {