| Index: src/scopes.cc
 | 
| diff --git a/src/scopes.cc b/src/scopes.cc
 | 
| index e577d78743443133d9ce19f6d12715b12d11d625..be9c9b6857397d633c50fb0eb5684c56108a73cd 100644
 | 
| --- a/src/scopes.cc
 | 
| +++ b/src/scopes.cc
 | 
| @@ -118,10 +118,8 @@ Scope::Scope(Scope* outer_scope, ScopeType type, Zone* zone)
 | 
|        already_resolved_(false),
 | 
|        zone_(zone) {
 | 
|    SetDefaults(type, outer_scope, Handle<ScopeInfo>::null());
 | 
| -  // At some point we might want to provide outer scopes to
 | 
| -  // eval scopes (by walking the stack and reading the scope info).
 | 
| -  // In that case, the ASSERT below needs to be adjusted.
 | 
| -  ASSERT_EQ(type == GLOBAL_SCOPE, outer_scope == NULL);
 | 
| +  // The outermost scope must be a global scope.
 | 
| +  ASSERT(type == GLOBAL_SCOPE || outer_scope != NULL);
 | 
|    ASSERT(!HasIllegalRedeclaration());
 | 
|  }
 | 
|  
 | 
| @@ -1041,7 +1039,7 @@ bool Scope::ResolveVariable(CompilationInfo* info,
 | 
|        // gave up on it (e.g. by encountering a local with the same in the outer
 | 
|        // 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->is_global()) {
 | 
| +      if (var->IsGlobalObjectProperty()) {
 | 
|          var = NonLocal(proxy->name(), DYNAMIC_GLOBAL);
 | 
|        } else if (var->is_dynamic()) {
 | 
|          var = NonLocal(proxy->name(), DYNAMIC);
 | 
| @@ -1162,11 +1160,12 @@ bool Scope::MustAllocate(Variable* var) {
 | 
|         scope_contains_with_ ||
 | 
|         is_catch_scope() ||
 | 
|         is_block_scope() ||
 | 
| -       is_module_scope())) {
 | 
| +       is_module_scope() ||
 | 
| +       is_global_scope())) {
 | 
|      var->set_is_used(true);
 | 
|    }
 | 
|    // Global variables do not need to be allocated.
 | 
| -  return !var->is_global() && var->is_used();
 | 
| +  return !var->IsGlobalObjectProperty() && var->is_used();
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -1180,11 +1179,12 @@ bool Scope::MustAllocateInContext(Variable* var) {
 | 
|    // catch-bound variables are always allocated in a context.
 | 
|    if (var->mode() == TEMPORARY) return false;
 | 
|    if (is_catch_scope() || is_block_scope() || is_module_scope()) return true;
 | 
| +  if (is_global_scope() && (var->mode() == LET || var->mode() == CONST_HARMONY))
 | 
| +    return true;
 | 
|    return var->has_forced_context_allocation() ||
 | 
|        scope_calls_eval_ ||
 | 
|        inner_scope_calls_eval_ ||
 | 
| -      scope_contains_with_ ||
 | 
| -      var->is_global();
 | 
| +      scope_contains_with_;
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |