Index: src/scopes.h |
diff --git a/src/scopes.h b/src/scopes.h |
index 5e3dc1f0654bf65c3ee738665fcb7bf2107be63b..7d326cf33135b68eb9dbf6ad11225b12b0f6239a 100644 |
--- a/src/scopes.h |
+++ b/src/scopes.h |
@@ -145,13 +145,14 @@ class Scope: public ZoneObject { |
VariableProxy* NewUnresolved(AstNodeFactory* factory, |
const AstRawString* name, |
int start_position = RelocInfo::kNoPosition, |
- int end_position = RelocInfo::kNoPosition) { |
+ int end_position = RelocInfo::kNoPosition, |
+ Variable::Kind kind = Variable::NORMAL) { |
arv (Not doing code reviews)
2015/04/28 14:26:18
Can we keep the position last for consistency.
wingo
2015/04/28 15:07:42
Acknowledged.
|
// 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, Variable::NORMAL, start_position, end_position); |
+ VariableProxy* proxy = |
+ factory->NewVariableProxy(name, kind, start_position, end_position); |
unresolved_.Add(proxy, zone_); |
return proxy; |
} |
@@ -346,7 +347,18 @@ class Scope: public ZoneObject { |
LanguageMode language_mode() const { return language_mode_; } |
// The variable corresponding to the 'this' value. |
- Variable* receiver() { return receiver_; } |
+ Variable* receiver() { |
+ DCHECK(has_this_declaration()); |
+ DCHECK_NOT_NULL(receiver_); |
+ return receiver_; |
+ } |
+ |
+ Variable* LookupThis() { return Lookup(ast_value_factory_->this_string()); } |
+ |
+ bool has_this_declaration() const { |
+ return (is_function_scope() && !is_arrow_scope()) || is_module_scope() || |
+ is_script_scope(); |
arv (Not doing code reviews)
2015/04/28 14:26:18
What about eval scope?
wingo
2015/04/28 15:07:42
Doesn't declare a "this" :) Grep the spec for Get
|
+ } |
// The variable corresponding to the 'new.target' value. |
Variable* new_target_var() { return new_target_; } |
@@ -706,6 +718,8 @@ class Scope: public ZoneObject { |
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 |