Index: src/ast/scopes.cc |
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc |
index 9dc1f422ec0c9c9f3023b566163d174c1cc34679..7a5b6a4d733e1936eb94de61f3edf05d583d5b82 100644 |
--- a/src/ast/scopes.cc |
+++ b/src/ast/scopes.cc |
@@ -674,10 +674,11 @@ Variable* Scope::DeclareLocal(const AstRawString* name, VariableMode mode, |
maybe_assigned_flag); |
} |
-Variable* DeclarationScope::DeclareDynamicGlobal(const AstRawString* name) { |
+Variable* DeclarationScope::DeclareDynamicGlobal(const AstRawString* name, |
+ Variable::Kind kind) { |
DCHECK(is_script_scope()); |
- return variables_.Declare(zone(), this, name, DYNAMIC_GLOBAL, |
- Variable::NORMAL, kCreatedInitialized); |
+ return variables_.Declare(zone(), this, name, DYNAMIC_GLOBAL, kind, |
+ kCreatedInitialized); |
} |
@@ -1251,8 +1252,8 @@ void Scope::CheckZones() { |
} |
#endif // DEBUG |
- |
-Variable* Scope::NonLocal(const AstRawString* name, VariableMode mode) { |
+Variable* Scope::NonLocal(const AstRawString* name, VariableMode mode, |
+ Variable::Kind kind) { |
if (dynamics_ == NULL) dynamics_ = new (zone()) DynamicScopePart(zone()); |
VariableMap* map = dynamics_->GetMap(mode); |
Variable* var = map->Lookup(name); |
@@ -1260,7 +1261,7 @@ Variable* Scope::NonLocal(const AstRawString* name, VariableMode mode) { |
// Declare a new non-local. |
InitializationFlag init_flag = (mode == VAR) |
? kCreatedInitialized : kNeedsInitialization; |
- var = map->Declare(zone(), NULL, name, mode, Variable::NORMAL, init_flag); |
+ var = map->Declare(zone(), NULL, name, mode, kind, init_flag); |
// Allocate it by giving it a dynamic lookup. |
var->AllocateTo(VariableLocation::LOOKUP, -1); |
} |
@@ -1394,29 +1395,30 @@ void Scope::ResolveTo(ParseInfo* info, BindingKind binding_kind, |
// scope which was not promoted to a context, this can happen if we use |
// debugger to evaluate arbitrary expressions at a break point). |
if (var->IsGlobalObjectProperty()) { |
- var = NonLocal(proxy->raw_name(), DYNAMIC_GLOBAL); |
+ var = NonLocal(proxy->raw_name(), DYNAMIC_GLOBAL, proxy->var_kind()); |
} else if (var->is_dynamic()) { |
- var = NonLocal(proxy->raw_name(), DYNAMIC); |
+ var = NonLocal(proxy->raw_name(), DYNAMIC, proxy->var_kind()); |
} else { |
Variable* invalidated = var; |
- var = NonLocal(proxy->raw_name(), DYNAMIC_LOCAL); |
+ var = NonLocal(proxy->raw_name(), DYNAMIC_LOCAL, proxy->var_kind()); |
var->set_local_if_not_shadowed(invalidated); |
} |
break; |
case UNBOUND: |
// No binding has been found. Declare a variable on the global object. |
- var = info->script_scope()->DeclareDynamicGlobal(proxy->raw_name()); |
+ var = info->script_scope()->DeclareDynamicGlobal(proxy->raw_name(), |
+ proxy->var_kind()); |
break; |
case UNBOUND_EVAL_SHADOWED: |
// No binding has been found. But some scope makes a sloppy 'eval' call. |
- var = NonLocal(proxy->raw_name(), DYNAMIC_GLOBAL); |
+ var = NonLocal(proxy->raw_name(), DYNAMIC_GLOBAL, proxy->var_kind()); |
break; |
case DYNAMIC_LOOKUP: |
// The variable could not be resolved statically. |
- var = NonLocal(proxy->raw_name(), DYNAMIC); |
+ var = NonLocal(proxy->raw_name(), DYNAMIC, proxy->var_kind()); |
break; |
} |