2274 expect(COLON);
2275
2276 defaultNames.push(propertyName);
2277 try {
2278 return new PropertyNode(propertyToken, finish, propertyName, assignmentExpression(false), null, null);
2279 } finally {
2280 defaultNames.pop();
2281 }
2282 }
2283
2284 private PropertyFunction propertyGetterFunction(final long getSetToken, final int functionLine) {
2285 final PropertyKey getIdent = propertyName();
2286 final String getterName = getIdent.getPropertyName();
2287 final IdentNode getNameNode = createIdentNode(((Node)getIdent).getToken(), finish, NameCodec.encode("get " + getterName));
2288 expect(LPAREN);
2289 expect(RPAREN);
2290
2291 final ParserContextFunctionNode functionNode = createParserContextFunctionNode(getNameNode, getSetToken, FunctionNode.Kind.GETTER, functionLine, Collections.<IdentNode>emptyList());
2292 lc.push(functionNode);
2293
2294 final Block functionBody = functionBody(functionNode);
2295
2296 lc.pop(functionNode);
2297
2298 final FunctionNode function = createFunctionNode(
2299 functionNode,
2300 getSetToken,
2301 getNameNode,
2302 Collections.<IdentNode>emptyList(),
2303 FunctionNode.Kind.GETTER,
2304 functionLine,
2305 functionBody);
2306
2307 return new PropertyFunction(getIdent, function);
2308 }
2309
2310 private PropertyFunction propertySetterFunction(final long getSetToken, final int functionLine) {
2311 final PropertyKey setIdent = propertyName();
2312 final String setterName = setIdent.getPropertyName();
2313 final IdentNode setNameNode = createIdentNode(((Node)setIdent).getToken(), finish, NameCodec.encode("set " + setterName));
2314 expect(LPAREN);
2315 // be sloppy and allow missing setter parameter even though
2316 // spec does not permit it!
2317 final IdentNode argIdent;
2318 if (type == IDENT || isNonStrictModeIdent()) {
2319 argIdent = getIdent();
2320 verifyStrictIdent(argIdent, "setter argument");
2321 } else {
2322 argIdent = null;
2323 }
2324 expect(RPAREN);
2325 final List<IdentNode> parameters = new ArrayList<>();
2326 if (argIdent != null) {
2327 parameters.add(argIdent);
2328 }
2329
2330
2331 final ParserContextFunctionNode functionNode = createParserContextFunctionNode(setNameNode, getSetToken, FunctionNode.Kind.SETTER, functionLine, parameters);
2332 lc.push(functionNode);
2333
2334 final Block functionBody = functionBody(functionNode);
2335
2336 lc.pop(functionNode);
2337
2338 final FunctionNode function = createFunctionNode(
2339 functionNode,
2340 getSetToken,
2341 setNameNode,
2342 parameters,
2343 FunctionNode.Kind.SETTER,
2344 functionLine,
2345 functionBody);
2346
2347 return new PropertyFunction(setIdent, function);
2348 }
2349
2350 private static class PropertyFunction {
2351 final PropertyKey ident;
2352 final FunctionNode functionNode;
2353
2354 PropertyFunction(final PropertyKey ident, final FunctionNode function) {
2355 this.ident = ident;
2356 this.functionNode = function;
|
2274 expect(COLON);
2275
2276 defaultNames.push(propertyName);
2277 try {
2278 return new PropertyNode(propertyToken, finish, propertyName, assignmentExpression(false), null, null);
2279 } finally {
2280 defaultNames.pop();
2281 }
2282 }
2283
2284 private PropertyFunction propertyGetterFunction(final long getSetToken, final int functionLine) {
2285 final PropertyKey getIdent = propertyName();
2286 final String getterName = getIdent.getPropertyName();
2287 final IdentNode getNameNode = createIdentNode(((Node)getIdent).getToken(), finish, NameCodec.encode("get " + getterName));
2288 expect(LPAREN);
2289 expect(RPAREN);
2290
2291 final ParserContextFunctionNode functionNode = createParserContextFunctionNode(getNameNode, getSetToken, FunctionNode.Kind.GETTER, functionLine, Collections.<IdentNode>emptyList());
2292 lc.push(functionNode);
2293
2294 Block functionBody;
2295
2296
2297 try {
2298 functionBody = functionBody(functionNode);
2299 } finally {
2300 lc.pop(functionNode);
2301 }
2302
2303 final FunctionNode function = createFunctionNode(
2304 functionNode,
2305 getSetToken,
2306 getNameNode,
2307 Collections.<IdentNode>emptyList(),
2308 FunctionNode.Kind.GETTER,
2309 functionLine,
2310 functionBody);
2311
2312 return new PropertyFunction(getIdent, function);
2313 }
2314
2315 private PropertyFunction propertySetterFunction(final long getSetToken, final int functionLine) {
2316 final PropertyKey setIdent = propertyName();
2317 final String setterName = setIdent.getPropertyName();
2318 final IdentNode setNameNode = createIdentNode(((Node)setIdent).getToken(), finish, NameCodec.encode("set " + setterName));
2319 expect(LPAREN);
2320 // be sloppy and allow missing setter parameter even though
2321 // spec does not permit it!
2322 final IdentNode argIdent;
2323 if (type == IDENT || isNonStrictModeIdent()) {
2324 argIdent = getIdent();
2325 verifyStrictIdent(argIdent, "setter argument");
2326 } else {
2327 argIdent = null;
2328 }
2329 expect(RPAREN);
2330 final List<IdentNode> parameters = new ArrayList<>();
2331 if (argIdent != null) {
2332 parameters.add(argIdent);
2333 }
2334
2335
2336 final ParserContextFunctionNode functionNode = createParserContextFunctionNode(setNameNode, getSetToken, FunctionNode.Kind.SETTER, functionLine, parameters);
2337 lc.push(functionNode);
2338
2339 Block functionBody;
2340 try {
2341 functionBody = functionBody(functionNode);
2342 } finally {
2343 lc.pop(functionNode);
2344 }
2345
2346
2347 final FunctionNode function = createFunctionNode(
2348 functionNode,
2349 getSetToken,
2350 setNameNode,
2351 parameters,
2352 FunctionNode.Kind.SETTER,
2353 functionLine,
2354 functionBody);
2355
2356 return new PropertyFunction(setIdent, function);
2357 }
2358
2359 private static class PropertyFunction {
2360 final PropertyKey ident;
2361 final FunctionNode functionNode;
2362
2363 PropertyFunction(final PropertyKey ident, final FunctionNode function) {
2364 this.ident = ident;
2365 this.functionNode = function;
|