Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(450)

Unified Diff: src/parsing/parser.cc

Issue 2398023002: [wasm] asm.js - Parse and convert asm.js to wasm a function at a time. (Closed)
Patch Set: git cl try Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698