Index: src/scopes.h |
diff --git a/src/scopes.h b/src/scopes.h |
index 9ce4cd7b1f119ee651f2523e0aa9ea98cf8b167a..d315b7e5dcf806f883c9fcfe66124f23aa03c492 100644 |
--- a/src/scopes.h |
+++ b/src/scopes.h |
@@ -49,7 +49,8 @@ class VariableMap: public ZoneHashMap { |
VariableMode mode, |
bool is_valid_lhs, |
Variable::Kind kind, |
- InitializationFlag initialization_flag); |
+ InitializationFlag initialization_flag, |
+ Interface* interface = Interface::NewValue()); |
Variable* Lookup(Handle<String> name); |
}; |
@@ -145,7 +146,8 @@ class Scope: public ZoneObject { |
// declared before, the previously declared variable is returned. |
Variable* DeclareLocal(Handle<String> name, |
VariableMode mode, |
- InitializationFlag init_flag); |
+ InitializationFlag init_flag, |
+ Interface* interface = Interface::NewValue()); |
// Declare an implicit global variable in this scope which must be a |
// global scope. The variable was introduced (possibly from an inner |
@@ -157,12 +159,14 @@ class Scope: public ZoneObject { |
template<class Visitor> |
VariableProxy* NewUnresolved(AstNodeFactory<Visitor>* factory, |
Handle<String> name, |
- int position = RelocInfo::kNoPosition) { |
+ int position = RelocInfo::kNoPosition, |
+ Interface* interface = Interface::NewValue()) { |
// Note that we must not share the unresolved variables with |
// the same name because they may be removed selectively via |
// RemoveUnresolved(). |
ASSERT(!already_resolved()); |
- VariableProxy* proxy = factory->NewVariableProxy(name, false, position); |
+ VariableProxy* proxy = |
+ factory->NewVariableProxy(name, false, position, interface); |
unresolved_.Add(proxy); |
return proxy; |
} |
@@ -295,9 +299,6 @@ class Scope: public ZoneObject { |
// Does this scope contain a with statement. |
bool contains_with() const { return scope_contains_with_; } |
- // The scope immediately surrounding this scope, or NULL. |
- Scope* outer_scope() const { return outer_scope_; } |
- |
// --------------------------------------------------------------------------- |
// Accessors. |
@@ -336,6 +337,12 @@ class Scope: public ZoneObject { |
// Inner scope list. |
ZoneList<Scope*>* inner_scopes() { return &inner_scopes_; } |
+ // The scope immediately surrounding this scope, or NULL. |
+ Scope* outer_scope() const { return outer_scope_; } |
+ |
+ // The interface as inferred so far; only for module scopes. |
+ Interface* interface() const { return interface_; } |
+ |
// --------------------------------------------------------------------------- |
// Variable allocation. |
@@ -345,17 +352,6 @@ class Scope: public ZoneObject { |
void CollectStackAndContextLocals(ZoneList<Variable*>* stack_locals, |
ZoneList<Variable*>* context_locals); |
- // Resolve and fill in the allocation information for all variables |
- // in this scopes. Must be called *after* all scopes have been |
- // processed (parsed) to ensure that unresolved variables can be |
- // resolved properly. |
- // |
- // In the case of code compiled and run using 'eval', the context |
- // parameter is the context in which eval was called. In all other |
- // cases the context parameter is an empty handle. |
- void AllocateVariables(Scope* global_scope, |
- AstNodeFactory<AstNullVisitor>* factory); |
- |
// Current number of var or const locals. |
int num_var_or_const() { return num_var_or_const_; } |
@@ -453,6 +449,8 @@ class Scope: public ZoneObject { |
VariableProxy* function_; |
// Convenience variable; function scopes only. |
Variable* arguments_; |
+ // Interface; module scopes only. |
+ Interface* interface_; |
// Illegal redeclaration. |
Expression* illegal_redecl_; |
@@ -548,10 +546,12 @@ class Scope: public ZoneObject { |
Variable* LookupRecursive(Handle<String> name, |
BindingKind* binding_kind, |
AstNodeFactory<AstNullVisitor>* factory); |
- void ResolveVariable(Scope* global_scope, |
+ MUST_USE_RESULT |
+ bool ResolveVariable(CompilationInfo* info, |
VariableProxy* proxy, |
AstNodeFactory<AstNullVisitor>* factory); |
- void ResolveVariablesRecursively(Scope* global_scope, |
+ MUST_USE_RESULT |
+ bool ResolveVariablesRecursively(CompilationInfo* info, |
AstNodeFactory<AstNullVisitor>* factory); |
// Scope analysis. |
@@ -571,6 +571,18 @@ class Scope: public ZoneObject { |
void AllocateNonParameterLocals(); |
void AllocateVariablesRecursively(); |
+ // Resolve and fill in the allocation information for all variables |
+ // in this scopes. Must be called *after* all scopes have been |
+ // processed (parsed) to ensure that unresolved variables can be |
+ // resolved properly. |
+ // |
+ // In the case of code compiled and run using 'eval', the context |
+ // parameter is the context in which eval was called. In all other |
+ // cases the context parameter is an empty handle. |
+ MUST_USE_RESULT |
+ bool AllocateVariables(CompilationInfo* info, |
+ AstNodeFactory<AstNullVisitor>* factory); |
+ |
private: |
// Construct a scope based on the scope info. |
Scope(Scope* inner_scope, ScopeType type, Handle<ScopeInfo> scope_info); |