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

Unified Diff: src/parsing/parser-base.h

Issue 2405813002: Allow lazy parsing of functions nested in eager compiled functions (Closed)
Patch Set: Rebase Created 4 years, 2 months 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
« no previous file with comments | « src/parsing/parser.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser-base.h
diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h
index 9ea328daf9fd32e3f1158adbc4338549c7a072bf..d430297c28ca276847e256a0edff5769eda445e9 100644
--- a/src/parsing/parser-base.h
+++ b/src/parsing/parser-base.h
@@ -3922,6 +3922,12 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
FunctionKind kind = formal_parameters.scope->function_kind();
FunctionLiteral::EagerCompileHint eager_compile_hint =
default_eager_compile_hint_;
+ bool can_preparse = mode() == PARSE_LAZILY &&
+ eager_compile_hint == FunctionLiteral::kShouldLazyCompile;
+ // TODO(marja): consider lazy-parsing inner arrow functions too. is_this
+ // handling in Scope::ResolveVariable needs to change.
+ bool is_lazy_top_level_function =
+ can_preparse && scope()->AllowsLazyParsingWithoutUnresolvedVariables();
bool should_be_used_once_hint = false;
{
FunctionState function_state(&function_state_, &scope_state_,
@@ -3938,14 +3944,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
// Multiple statement body
Consume(Token::LBRACE);
DCHECK_EQ(scope(), formal_parameters.scope);
- bool is_lazily_parsed =
- (mode() == PARSE_LAZILY &&
- formal_parameters.scope
- ->AllowsLazyParsingWithoutUnresolvedVariables() &&
- eager_compile_hint == FunctionLiteral::kShouldLazyCompile);
- // TODO(marja): consider lazy-parsing inner arrow functions too. is_this
- // handling in Scope::ResolveVariable needs to change.
- if (is_lazily_parsed) {
+ if (is_lazy_top_level_function) {
Scanner::BookmarkScope bookmark(scanner());
bookmark.Set();
LazyParsingResult result = impl()->SkipLazyFunctionBody(
@@ -3962,7 +3961,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
if (result == kLazyParsingAborted) {
bookmark.Apply();
// Trigger eager (re-)parsing, just below this block.
- is_lazily_parsed = false;
+ is_lazy_top_level_function = false;
// This is probably an initialization function. Inform the compiler it
// should also eager-compile this function, and that we expect it to
@@ -3971,7 +3970,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
should_be_used_once_hint = true;
}
}
- if (!is_lazily_parsed) {
+ if (!is_lazy_top_level_function) {
body = impl()->ParseEagerFunctionBody(
impl()->EmptyIdentifier(), kNoSourcePosition, formal_parameters,
kind, FunctionLiteral::kAnonymousExpression, CHECK_OK);
« no previous file with comments | « src/parsing/parser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698