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

Print this page




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