2386 * See 13
2387 *
2388 * Parse function declaration.
2389 * @param isStatement True if for is a statement.
2390 *
2391 * @return Expression node.
2392 */
2393 private Node functionExpression(final boolean isStatement, final boolean topLevel) {
2394 final long functionToken = token;
2395 final int functionLine = line;
2396 // FUNCTION is tested in caller.
2397 next();
2398
2399 IdentNode name = null;
2400
2401 if (type == IDENT || isNonStrictModeIdent()) {
2402 name = getIdent();
2403 verifyStrictIdent(name, "function name");
2404 } else if (isStatement) {
2405 // Nashorn extension: anonymous function statements
2406 if (env._no_syntax_extensions || !env._anon_functions) {
2407 expect(IDENT);
2408 }
2409 }
2410
2411 // name is null, generate anonymous name
2412 boolean isAnonymous = false;
2413 if (name == null) {
2414 final String tmpName = "_L" + source.getLine(Token.descPosition(token));
2415 name = new IdentNode(functionToken, Token.descPosition(functionToken), tmpName);
2416 isAnonymous = true;
2417 }
2418
2419 expect(LPAREN);
2420 final List<IdentNode> parameters = formalParameterList();
2421 expect(RPAREN);
2422
2423 FunctionNode functionNode = functionBody(functionToken, name, parameters, FunctionNode.Kind.NORMAL);
2424
2425 if (isStatement) {
2426 if (topLevel) {
|
2386 * See 13
2387 *
2388 * Parse function declaration.
2389 * @param isStatement True if for is a statement.
2390 *
2391 * @return Expression node.
2392 */
2393 private Node functionExpression(final boolean isStatement, final boolean topLevel) {
2394 final long functionToken = token;
2395 final int functionLine = line;
2396 // FUNCTION is tested in caller.
2397 next();
2398
2399 IdentNode name = null;
2400
2401 if (type == IDENT || isNonStrictModeIdent()) {
2402 name = getIdent();
2403 verifyStrictIdent(name, "function name");
2404 } else if (isStatement) {
2405 // Nashorn extension: anonymous function statements
2406 if (env._no_syntax_extensions) {
2407 expect(IDENT);
2408 }
2409 }
2410
2411 // name is null, generate anonymous name
2412 boolean isAnonymous = false;
2413 if (name == null) {
2414 final String tmpName = "_L" + source.getLine(Token.descPosition(token));
2415 name = new IdentNode(functionToken, Token.descPosition(functionToken), tmpName);
2416 isAnonymous = true;
2417 }
2418
2419 expect(LPAREN);
2420 final List<IdentNode> parameters = formalParameterList();
2421 expect(RPAREN);
2422
2423 FunctionNode functionNode = functionBody(functionToken, name, parameters, FunctionNode.Kind.NORMAL);
2424
2425 if (isStatement) {
2426 if (topLevel) {
|