src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/LocalVariableTypesCalculator.java
equal
deleted
inserted
replaced
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) { |