| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index 09813ea6a75ba20397156bfcab59e95c0e3c64c1..48e5c3d96e8d7f3146cecfef1c252b12e2575b1f 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -859,6 +859,9 @@ FunctionLiteral* Parser::ParseFunction(Isolate* isolate, ParseInfo* info) {
|
| }
|
| Handle<SharedFunctionInfo> shared_info = info->shared_info();
|
| DeserializeScopeChain(info, info->maybe_outer_scope_info());
|
| + if (info->asm_function_scope()) {
|
| + original_scope_ = info->asm_function_scope();
|
| + }
|
|
|
| // Initialize parser state.
|
| source = String::Flatten(source);
|
| @@ -908,9 +911,12 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info,
|
| fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone());
|
| fni_->PushEnclosingName(raw_name);
|
|
|
| - ResetFunctionLiteralId();
|
| - DCHECK_LT(0, info->function_literal_id());
|
| - SkipFunctionLiterals(info->function_literal_id() - 1);
|
| + // Asm functions don't get IDs.
|
| + if (!info->asm_function_scope()) {
|
| + ResetFunctionLiteralId();
|
| + DCHECK_LT(0, info->function_literal_id());
|
| + SkipFunctionLiterals(info->function_literal_id() - 1);
|
| + }
|
|
|
| ParsingModeScope parsing_mode(this, PARSE_EAGERLY);
|
|
|
| @@ -1043,10 +1049,13 @@ FunctionLiteral* Parser::DoParseFunction(ParseInfo* info,
|
| DCHECK(ok == (result != nullptr));
|
| }
|
|
|
| - // Make sure the target stack is empty.
|
| - DCHECK_NULL(target_stack_);
|
| - DCHECK_IMPLIES(result,
|
| - info->function_literal_id() == result->function_literal_id());
|
| + // Asm functions don't get IDs.
|
| + if (!info->asm_function_scope()) {
|
| + // Make sure the target stack is empty.
|
| + DCHECK_NULL(target_stack_);
|
| + DCHECK_IMPLIES(
|
| + result, info->function_literal_id() == result->function_literal_id());
|
| + }
|
| return result;
|
| }
|
|
|
| @@ -2631,8 +2640,6 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| // FunctionExpression; even without enclosing parentheses it might be
|
| // immediately invoked.
|
| // - The function literal shouldn't be hinted to eagerly compile.
|
| - // - For asm.js functions the body needs to be available when module
|
| - // validation is active, because we examine the entire module at once.
|
|
|
| // Inner functions will be parsed using a temporary Zone. After parsing, we
|
| // will migrate unresolved variable into a Scope in the main Zone.
|
| @@ -2642,8 +2649,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| ? can_preparse
|
| : (is_lazy_top_level_function ||
|
| (allow_lazy_ && function_type == FunctionLiteral::kDeclaration &&
|
| - eager_compile_hint == FunctionLiteral::kShouldLazyCompile))) &&
|
| - !(FLAG_validate_asm && scope()->IsAsmModule());
|
| + eager_compile_hint == FunctionLiteral::kShouldLazyCompile)));
|
| bool is_lazy_inner_function =
|
| use_temp_zone && FLAG_lazy_inner_functions && !is_lazy_top_level_function;
|
|
|
|
|