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

Unified Diff: src/ast/scopes.cc

Issue 2275943005: [modules] Minor refactorings in scopes and scopeinfos. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@modules-serialize-entry
Patch Set: Rebase. Created 4 years, 4 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/ast/scopes.h ('k') | src/crankshaft/typing.cc » ('j') | no next file with comments »
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 ead1b4ead39f43b957775cb17e9e553dde9b9540..a0b23234166506e9ca328677d6056071d55dce64 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -148,9 +148,10 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* outer_scope,
asm_function_ = outer_scope_->IsAsmModule();
}
-ModuleScope::ModuleScope(Zone* zone, DeclarationScope* script_scope,
+ModuleScope::ModuleScope(DeclarationScope* script_scope,
AstValueFactory* ast_value_factory)
- : DeclarationScope(zone, script_scope, MODULE_SCOPE) {
+ : DeclarationScope(ast_value_factory->zone(), script_scope, MODULE_SCOPE) {
+ Zone* zone = ast_value_factory->zone();
module_descriptor_ = new (zone) ModuleDescriptor(zone);
set_language_mode(STRICT);
DeclareThis(ast_value_factory);
@@ -617,35 +618,36 @@ Variable* Scope::LookupInScopeInfo(const AstRawString* name) {
// There should be no local slot with the given name.
DCHECK(scope_info_->StackSlotIndex(*name_handle) < 0);
- // Check context slot lookup.
VariableMode mode;
- VariableLocation location = VariableLocation::CONTEXT;
InitializationFlag init_flag;
MaybeAssignedFlag maybe_assigned_flag;
+
+ VariableLocation location = VariableLocation::CONTEXT;
int index = ScopeInfo::ContextSlotIndex(scope_info_, name_handle, &mode,
&init_flag, &maybe_assigned_flag);
if (index < 0) {
location = VariableLocation::GLOBAL;
index = ScopeInfo::ContextGlobalSlotIndex(scope_info_, name_handle, &mode,
&init_flag, &maybe_assigned_flag);
+ DCHECK(index < 0 || (is_script_scope() && mode == VAR));
}
if (index < 0) {
- // Check parameters.
- index = scope_info_->ParameterIndex(*name_handle);
- if (index < 0) return NULL;
-
- mode = DYNAMIC;
location = VariableLocation::LOOKUP;
- init_flag = kCreatedInitialized;
- // Be conservative and flag parameters as maybe assigned. Better information
- // would require ScopeInfo to serialize the maybe_assigned bit also for
- // parameters.
- maybe_assigned_flag = kMaybeAssigned;
- } else {
- DCHECK(location != VariableLocation::GLOBAL ||
- (is_script_scope() && IsDeclaredVariableMode(mode) &&
- !IsLexicalVariableMode(mode)));
+ index = scope_info_->ParameterIndex(*name_handle);
+ if (index >= 0) {
+ mode = DYNAMIC;
+ init_flag = kCreatedInitialized;
+ // Be conservative and flag parameters as maybe assigned. Better
+ // information would require ScopeInfo to serialize the maybe_assigned bit
+ // also for parameters.
+ maybe_assigned_flag = kMaybeAssigned;
+ }
+ }
+ if (index < 0 && scope_type() == MODULE_SCOPE) {
+ location = VariableLocation::MODULE;
+ index = -1; // TODO(neis): Find module variables in scope info.
}
+ if (index < 0) return nullptr; // Nowhere found.
Variable::Kind kind = Variable::NORMAL;
if (location == VariableLocation::CONTEXT &&
@@ -822,9 +824,9 @@ Declaration* Scope::CheckLexDeclarationsConflictingWith(
return nullptr;
}
-void Scope::CollectStackAndContextLocals(ZoneList<Variable*>* stack_locals,
- ZoneList<Variable*>* context_locals,
- ZoneList<Variable*>* context_globals) {
+void Scope::CollectVariables(ZoneList<Variable*>* stack_locals,
+ ZoneList<Variable*>* context_locals,
+ ZoneList<Variable*>* context_globals) {
// TODO(verwaest): Just pass out locals_ directly and walk it?
DCHECK_NOT_NULL(stack_locals);
DCHECK_NOT_NULL(context_locals);
« no previous file with comments | « src/ast/scopes.h ('k') | src/crankshaft/typing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698