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);
|