Index: src/scopes.h |
diff --git a/src/scopes.h b/src/scopes.h |
index f3c64f9eadf73c7c4f9c1671779c4f55926697f9..5e3dc1f0654bf65c3ee738665fcb7bf2107be63b 100644 |
--- a/src/scopes.h |
+++ b/src/scopes.h |
@@ -144,15 +144,14 @@ |
// Create a new unresolved variable. |
VariableProxy* NewUnresolved(AstNodeFactory* factory, |
const AstRawString* name, |
- Variable::Kind kind = Variable::NORMAL, |
int start_position = RelocInfo::kNoPosition, |
int end_position = RelocInfo::kNoPosition) { |
// Note that we must not share the unresolved variables with |
// the same name because they may be removed selectively via |
// RemoveUnresolved(). |
DCHECK(!already_resolved()); |
- VariableProxy* proxy = |
- factory->NewVariableProxy(name, kind, start_position, end_position); |
+ VariableProxy* proxy = factory->NewVariableProxy( |
+ name, Variable::NORMAL, start_position, end_position); |
unresolved_.Add(proxy, zone_); |
return proxy; |
} |
@@ -217,6 +216,9 @@ |
// Inform the scope that the corresponding code uses "super". |
void RecordSuperPropertyUsage() { scope_uses_super_property_ = true; } |
+ |
+ // Inform the scope that the corresponding code uses "this". |
+ void RecordThisUsage() { scope_uses_this_ = true; } |
// Set the language mode flag (unless disabled by a global flag). |
void SetLanguageMode(LanguageMode language_mode) { |
@@ -321,6 +323,10 @@ |
bool inner_uses_super_property() const { |
return inner_scope_uses_super_property_; |
} |
+ // Does this scope access "this". |
+ bool uses_this() const { return scope_uses_this_; } |
+ // Does any inner scope access "this". |
+ bool inner_uses_this() const { return inner_scope_uses_this_; } |
const Scope* NearestOuterEvalScope() const { |
if (is_eval_scope()) return this; |
@@ -340,21 +346,7 @@ |
LanguageMode language_mode() const { return language_mode_; } |
// The variable corresponding to the 'this' value. |
- Variable* receiver() { |
- DCHECK(has_this_declaration()); |
- DCHECK_NOT_NULL(receiver_); |
- return receiver_; |
- } |
- |
- Variable* LookupThis() { return Lookup(ast_value_factory_->this_string()); } |
- |
- // TODO(wingo): Add a GLOBAL_SCOPE scope type which will lexically allocate |
- // "this" (and no other variable) on the native context. Script scopes then |
- // will not have a "this" declaration. |
- bool has_this_declaration() const { |
- return (is_function_scope() && !is_arrow_scope()) || is_module_scope() || |
- is_script_scope(); |
- } |
+ Variable* receiver() { return receiver_; } |
// The variable corresponding to the 'new.target' value. |
Variable* new_target_var() { return new_target_; } |
@@ -585,6 +577,8 @@ |
bool scope_uses_arguments_; |
// This scope uses "super" property ('super.foo'). |
bool scope_uses_super_property_; |
+ // This scope uses "this". |
+ bool scope_uses_this_; |
// This scope contains an "use asm" annotation. |
bool asm_module_; |
// This scope's outer context is an asm module. |
@@ -600,6 +594,7 @@ |
bool inner_scope_calls_eval_; |
bool inner_scope_uses_arguments_; |
bool inner_scope_uses_super_property_; |
+ bool inner_scope_uses_this_; |
bool force_eager_compilation_; |
bool force_context_allocation_; |
@@ -711,8 +706,6 @@ |
void AllocateNonParameterLocal(Isolate* isolate, Variable* var); |
void AllocateNonParameterLocals(Isolate* isolate); |
void AllocateVariablesRecursively(Isolate* isolate); |
- void AllocateParameter(Variable* var, int index); |
- void AllocateReceiver(); |
void AllocateModules(); |
// Resolve and fill in the allocation information for all variables |