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

Unified Diff: src/ast/scopes.cc

Issue 2655623005: [parser] Skipping inner funcs: add info about variables. (Closed)
Patch Set: create variables only when the flag is on Created 3 years, 11 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 | « no previous file | src/parsing/preparsed-scope-data.h » ('j') | test/cctest/test-parsing.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/scopes.cc
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc
index cc7a975c16cd8c8d09b0839723b9762505a20714..98a34be8ef7bb7fe629ef7dd33fa783d53cefa07 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -657,7 +657,7 @@ void DeclarationScope::DeclareArguments(AstValueFactory* ast_value_factory) {
// Note that it might never be accessed, in which case it won't be
// allocated during variable allocation.
arguments_ = Declare(zone(), ast_value_factory->arguments_string(), VAR);
- } else if (IsLexicalVariableMode(arguments_->mode())) {
+ } else if (IsLexical(arguments_)) {
// Check if there's lexically declared variable named arguments to avoid
// redeclaration. See ES#sec-functiondeclarationinstantiation, step 20.
arguments_ = nullptr;
@@ -950,7 +950,8 @@ Variable* Scope::DeclareLocal(const AstRawString* name, VariableMode mode,
// introduced during variable allocation, and TEMPORARY variables are
// allocated via NewTemporary().
DCHECK(IsDeclaredVariableMode(mode));
- DCHECK(!GetDeclarationScope()->is_being_lazily_parsed());
+ DCHECK_IMPLIES(GetDeclarationScope()->is_being_lazily_parsed(),
+ mode == VAR || mode == LET || mode == CONST);
DCHECK(!GetDeclarationScope()->was_lazily_parsed());
return Declare(zone(), name, mode, kind, init_flag, maybe_assigned_flag);
}
@@ -1080,7 +1081,15 @@ void Scope::DeclareVariableName(const AstRawString* name, VariableMode mode) {
DCHECK(scope_info_.is_null());
// Declare the variable in the declaration scope.
- variables_.DeclareName(zone(), name, mode);
+ if (FLAG_preparser_scope_analysis) {
+ Variable* var = LookupLocal(name);
+ if (var == nullptr) {
+ var = DeclareLocal(name, mode);
+ }
+ var->set_is_used();
+ } else {
+ variables_.DeclareName(zone(), name, mode);
+ }
}
VariableProxy* Scope::NewUnresolved(AstNodeFactory* factory,
@@ -1909,6 +1918,9 @@ VariableProxy* Scope::FetchFreeVariables(DeclarationScope* max_outer_scope,
}
bool Scope::MustAllocate(Variable* var) {
+ if (var == kDummyPreParserLexicalVariable || var == kDummyPreParserVariable) {
+ return true;
+ }
DCHECK(var->location() != VariableLocation::MODULE);
// Give var a read/write use if there is a chance it might be accessed
// via an eval() call. This is only possible if the variable has a
@@ -2085,7 +2097,8 @@ void ModuleScope::AllocateModuleVariables() {
void Scope::AllocateVariablesRecursively() {
DCHECK(!already_resolved_);
- DCHECK_EQ(0, num_stack_slots_);
+ DCHECK_IMPLIES(!FLAG_preparser_scope_analysis, num_stack_slots_ == 0);
+
// Don't allocate variables of preparsed scopes.
if (is_declaration_scope() && AsDeclarationScope()->was_lazily_parsed()) {
return;
@@ -2164,8 +2177,12 @@ void Scope::AllocateDebuggerScopeInfos(Isolate* isolate,
void Scope::CollectVariableData(PreParsedScopeData* data) {
PreParsedScopeData::ScopeScope scope_scope(data, scope_type(),
start_position(), end_position());
- // TODO(marja): Add data about the variables.
-
+ for (Variable* local : locals_) {
+ if (local->mode() == VAR || local->mode() == LET ||
+ local->mode() == CONST) {
+ scope_scope.AddVariable(local->location(), local->maybe_assigned());
+ }
+ }
for (Scope* inner = inner_scope_; inner != nullptr; inner = inner->sibling_) {
inner->CollectVariableData(data);
}
« no previous file with comments | « no previous file | src/parsing/preparsed-scope-data.h » ('j') | test/cctest/test-parsing.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698