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

Unified Diff: src/ast/scopes.cc

Issue 2655623005: [parser] Skipping inner funcs: add info about variables. (Closed)
Patch Set: alt fix 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..9bdcc5c5825baf25c6eab5923016bd7e0d995bfe 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -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);
}
@@ -1079,8 +1080,11 @@ void Scope::DeclareVariableName(const AstRawString* name, VariableMode mode) {
(is_block_scope() || is_catch_scope())));
DCHECK(scope_info_.is_null());
- // Declare the variable in the declaration scope.
- variables_.DeclareName(zone(), name, mode);
+ Variable* var = LookupLocal(name);
jochen (gone - plz use gerrit) 2017/01/25 16:34:14 can you please explain this change?
marja 2017/01/25 17:10:44 This is kinda covered by the title line; in order
+ if (var == nullptr) {
+ var = DeclareLocal(name, mode);
+ }
+ var->set_is_used();
}
VariableProxy* Scope::NewUnresolved(AstNodeFactory* factory,
@@ -2084,13 +2088,14 @@ void ModuleScope::AllocateModuleVariables() {
}
void Scope::AllocateVariablesRecursively() {
- DCHECK(!already_resolved_);
- DCHECK_EQ(0, num_stack_slots_);
// Don't allocate variables of preparsed scopes.
if (is_declaration_scope() && AsDeclarationScope()->was_lazily_parsed()) {
return;
}
+ DCHECK(!already_resolved_);
+ DCHECK_EQ(0, num_stack_slots_);
+
// Allocate variables for inner scopes.
for (Scope* scope = inner_scope_; scope != nullptr; scope = scope->sibling_) {
scope->AllocateVariablesRecursively();
@@ -2164,8 +2169,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