src/jdk/nashorn/internal/parser/Parser.java

Print this page




  42 import static jdk.nashorn.internal.parser.TokenType.FUNCTION;
  43 import static jdk.nashorn.internal.parser.TokenType.IDENT;
  44 import static jdk.nashorn.internal.parser.TokenType.IF;
  45 import static jdk.nashorn.internal.parser.TokenType.INCPOSTFIX;
  46 import static jdk.nashorn.internal.parser.TokenType.LBRACE;
  47 import static jdk.nashorn.internal.parser.TokenType.LPAREN;
  48 import static jdk.nashorn.internal.parser.TokenType.RBRACE;
  49 import static jdk.nashorn.internal.parser.TokenType.RBRACKET;
  50 import static jdk.nashorn.internal.parser.TokenType.RPAREN;
  51 import static jdk.nashorn.internal.parser.TokenType.SEMICOLON;
  52 import static jdk.nashorn.internal.parser.TokenType.TERNARY;
  53 import static jdk.nashorn.internal.parser.TokenType.WHILE;
  54 
  55 import java.util.ArrayList;
  56 import java.util.Collections;
  57 import java.util.HashMap;
  58 import java.util.HashSet;
  59 import java.util.Iterator;
  60 import java.util.List;
  61 import java.util.Map;

  62 import jdk.nashorn.internal.codegen.CompilerConstants;
  63 import jdk.nashorn.internal.codegen.Namespace;
  64 import jdk.nashorn.internal.ir.AccessNode;
  65 import jdk.nashorn.internal.ir.BaseNode;
  66 import jdk.nashorn.internal.ir.BinaryNode;
  67 import jdk.nashorn.internal.ir.Block;
  68 import jdk.nashorn.internal.ir.BlockLexicalContext;
  69 import jdk.nashorn.internal.ir.BlockStatement;
  70 import jdk.nashorn.internal.ir.BreakNode;
  71 import jdk.nashorn.internal.ir.BreakableNode;
  72 import jdk.nashorn.internal.ir.CallNode;
  73 import jdk.nashorn.internal.ir.CaseNode;
  74 import jdk.nashorn.internal.ir.CatchNode;
  75 import jdk.nashorn.internal.ir.ContinueNode;
  76 import jdk.nashorn.internal.ir.EmptyNode;
  77 import jdk.nashorn.internal.ir.Expression;
  78 import jdk.nashorn.internal.ir.ExpressionStatement;
  79 import jdk.nashorn.internal.ir.ForNode;
  80 import jdk.nashorn.internal.ir.FunctionNode;
  81 import jdk.nashorn.internal.ir.FunctionNode.CompilationState;


2091      * @return Property or reference node.
2092      */
2093     private PropertyNode propertyAssignment() {
2094         // Capture firstToken.
2095         final long propertyToken = token;
2096 
2097         FunctionNode functionNode;
2098         PropertyKey propertyName;
2099 
2100         if (type == IDENT) {
2101             // Get IDENT.
2102             final String ident = (String)expectValue(IDENT);
2103 
2104             if (type != COLON) {
2105                 final long getSetToken = token;
2106 
2107                 switch (ident) {
2108                 case "get":
2109                     final PropertyKey getIdent = propertyName();
2110                     final String getterName = getIdent.getPropertyName();
2111                     final IdentNode getNameNode = new IdentNode(((Node)getIdent).getToken(), finish, "get " + getterName);
2112                     expect(LPAREN);
2113                     expect(RPAREN);
2114                     functionNode = functionBody(getSetToken, getNameNode, new ArrayList<IdentNode>(), FunctionNode.Kind.GETTER);
2115                     return new PropertyNode(propertyToken, finish, getIdent, null, functionNode, null);
2116 
2117                 case "set":
2118                     final PropertyKey setIdent = propertyName();
2119                     final String setterName = setIdent.getPropertyName();
2120                     final IdentNode setNameNode = new IdentNode(((Node)setIdent).getToken(), finish, "set " + setterName);
2121                     expect(LPAREN);
2122                     final IdentNode argIdent = getIdent();
2123                     verifyStrictIdent(argIdent, "setter argument");
2124                     expect(RPAREN);
2125                     List<IdentNode> parameters = new ArrayList<>();
2126                     parameters.add(argIdent);
2127                     functionNode = functionBody(getSetToken, setNameNode, parameters, FunctionNode.Kind.SETTER);
2128                     return new PropertyNode(propertyToken, finish, setIdent, null, null, functionNode);
2129 
2130                 default:
2131                     break;
2132                 }
2133             }
2134 
2135             propertyName =  new IdentNode(propertyToken, finish, ident).setIsPropertyName();
2136         } else {
2137             propertyName = propertyName();
2138         }
2139 
2140         expect(COLON);




  42 import static jdk.nashorn.internal.parser.TokenType.FUNCTION;
  43 import static jdk.nashorn.internal.parser.TokenType.IDENT;
  44 import static jdk.nashorn.internal.parser.TokenType.IF;
  45 import static jdk.nashorn.internal.parser.TokenType.INCPOSTFIX;
  46 import static jdk.nashorn.internal.parser.TokenType.LBRACE;
  47 import static jdk.nashorn.internal.parser.TokenType.LPAREN;
  48 import static jdk.nashorn.internal.parser.TokenType.RBRACE;
  49 import static jdk.nashorn.internal.parser.TokenType.RBRACKET;
  50 import static jdk.nashorn.internal.parser.TokenType.RPAREN;
  51 import static jdk.nashorn.internal.parser.TokenType.SEMICOLON;
  52 import static jdk.nashorn.internal.parser.TokenType.TERNARY;
  53 import static jdk.nashorn.internal.parser.TokenType.WHILE;
  54 
  55 import java.util.ArrayList;
  56 import java.util.Collections;
  57 import java.util.HashMap;
  58 import java.util.HashSet;
  59 import java.util.Iterator;
  60 import java.util.List;
  61 import java.util.Map;
  62 import jdk.internal.dynalink.support.NameCodec;
  63 import jdk.nashorn.internal.codegen.CompilerConstants;
  64 import jdk.nashorn.internal.codegen.Namespace;
  65 import jdk.nashorn.internal.ir.AccessNode;
  66 import jdk.nashorn.internal.ir.BaseNode;
  67 import jdk.nashorn.internal.ir.BinaryNode;
  68 import jdk.nashorn.internal.ir.Block;
  69 import jdk.nashorn.internal.ir.BlockLexicalContext;
  70 import jdk.nashorn.internal.ir.BlockStatement;
  71 import jdk.nashorn.internal.ir.BreakNode;
  72 import jdk.nashorn.internal.ir.BreakableNode;
  73 import jdk.nashorn.internal.ir.CallNode;
  74 import jdk.nashorn.internal.ir.CaseNode;
  75 import jdk.nashorn.internal.ir.CatchNode;
  76 import jdk.nashorn.internal.ir.ContinueNode;
  77 import jdk.nashorn.internal.ir.EmptyNode;
  78 import jdk.nashorn.internal.ir.Expression;
  79 import jdk.nashorn.internal.ir.ExpressionStatement;
  80 import jdk.nashorn.internal.ir.ForNode;
  81 import jdk.nashorn.internal.ir.FunctionNode;
  82 import jdk.nashorn.internal.ir.FunctionNode.CompilationState;


2092      * @return Property or reference node.
2093      */
2094     private PropertyNode propertyAssignment() {
2095         // Capture firstToken.
2096         final long propertyToken = token;
2097 
2098         FunctionNode functionNode;
2099         PropertyKey propertyName;
2100 
2101         if (type == IDENT) {
2102             // Get IDENT.
2103             final String ident = (String)expectValue(IDENT);
2104 
2105             if (type != COLON) {
2106                 final long getSetToken = token;
2107 
2108                 switch (ident) {
2109                 case "get":
2110                     final PropertyKey getIdent = propertyName();
2111                     final String getterName = getIdent.getPropertyName();
2112                     final IdentNode getNameNode = new IdentNode(((Node)getIdent).getToken(), finish, "get " + NameCodec.encode(getterName));
2113                     expect(LPAREN);
2114                     expect(RPAREN);
2115                     functionNode = functionBody(getSetToken, getNameNode, new ArrayList<IdentNode>(), FunctionNode.Kind.GETTER);
2116                     return new PropertyNode(propertyToken, finish, getIdent, null, functionNode, null);
2117 
2118                 case "set":
2119                     final PropertyKey setIdent = propertyName();
2120                     final String setterName = setIdent.getPropertyName();
2121                     final IdentNode setNameNode = new IdentNode(((Node)setIdent).getToken(), finish, "set " + NameCodec.encode(setterName));
2122                     expect(LPAREN);
2123                     final IdentNode argIdent = getIdent();
2124                     verifyStrictIdent(argIdent, "setter argument");
2125                     expect(RPAREN);
2126                     List<IdentNode> parameters = new ArrayList<>();
2127                     parameters.add(argIdent);
2128                     functionNode = functionBody(getSetToken, setNameNode, parameters, FunctionNode.Kind.SETTER);
2129                     return new PropertyNode(propertyToken, finish, setIdent, null, null, functionNode);
2130 
2131                 default:
2132                     break;
2133                 }
2134             }
2135 
2136             propertyName =  new IdentNode(propertyToken, finish, ident).setIsPropertyName();
2137         } else {
2138             propertyName = propertyName();
2139         }
2140 
2141         expect(COLON);