nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/AssignSymbols.java
changeset 29281 8cc2618a07aa
parent 28690 78317797ab62
child 30392 dc4a419b2982
equal deleted inserted replaced
29280:8a79b4040d2a 29281:8cc2618a07aa
   710         final FunctionNode definingFn = lc.getDefiningFunction(symbol);
   710         final FunctionNode definingFn = lc.getDefiningFunction(symbol);
   711         assert definingFn != null;
   711         assert definingFn != null;
   712         return definingFn == function;
   712         return definingFn == function;
   713     }
   713     }
   714 
   714 
   715     private void checkConstAssignment(final IdentNode ident) {
       
   716         // Check for reassignment of constant
       
   717         final Symbol symbol = ident.getSymbol();
       
   718         if (symbol.isConst()) {
       
   719             throwParserException(ECMAErrors.getMessage("syntax.error.assign.constant", symbol.getName()), ident);
       
   720         }
       
   721     }
       
   722 
       
   723     @Override
   715     @Override
   724     public Node leaveBinaryNode(final BinaryNode binaryNode) {
   716     public Node leaveBinaryNode(final BinaryNode binaryNode) {
   725         if (binaryNode.isAssignment() && binaryNode.lhs() instanceof IdentNode) {
       
   726             checkConstAssignment((IdentNode) binaryNode.lhs());
       
   727         }
       
   728         switch (binaryNode.tokenType()) {
   717         switch (binaryNode.tokenType()) {
   729         case ASSIGN:
   718         case ASSIGN:
   730             return leaveASSIGN(binaryNode);
   719             return leaveASSIGN(binaryNode);
   731         default:
   720         default:
   732             return super.leaveBinaryNode(binaryNode);
   721             return super.leaveBinaryNode(binaryNode);
   749         return binaryNode;
   738         return binaryNode;
   750     }
   739     }
   751 
   740 
   752     @Override
   741     @Override
   753     public Node leaveUnaryNode(final UnaryNode unaryNode) {
   742     public Node leaveUnaryNode(final UnaryNode unaryNode) {
   754         if (unaryNode.isAssignment() && unaryNode.getExpression() instanceof IdentNode) {
       
   755             checkConstAssignment((IdentNode) unaryNode.getExpression());
       
   756         }
       
   757         switch (unaryNode.tokenType()) {
   743         switch (unaryNode.tokenType()) {
   758         case DELETE:
   744         case DELETE:
   759             return leaveDELETE(unaryNode);
   745             return leaveDELETE(unaryNode);
   760         case TYPEOF:
   746         case TYPEOF:
   761             return leaveTYPEOF(unaryNode);
   747             return leaveTYPEOF(unaryNode);