| Index: src/codegen-ia32.cc
 | 
| ===================================================================
 | 
| --- src/codegen-ia32.cc	(revision 1015)
 | 
| +++ src/codegen-ia32.cc	(working copy)
 | 
| @@ -3875,6 +3875,8 @@
 | 
|        // distinction between expressions in a typeof and not in a
 | 
|        // typeof.
 | 
|        Variable* var = expression_->AsVariableProxy()->AsVariable();
 | 
| +      bool is_global = var != NULL;
 | 
| +      ASSERT(!is_global || var->is_global());
 | 
|        // Inline array load code if inside of a loop.  We do not know
 | 
|        // the receiver map yet, so we initially generate the code with
 | 
|        // a check against an invalid map.  In the inline cache code, we
 | 
| @@ -3882,11 +3884,12 @@
 | 
|        if (cgen_->loop_nesting() > 0) {
 | 
|          Comment cmnt(masm, "[ Inlined array index load");
 | 
|          DeferredReferenceGetKeyedValue* deferred =
 | 
| -            new DeferredReferenceGetKeyedValue(cgen_, var != NULL);
 | 
| +            new DeferredReferenceGetKeyedValue(cgen_, is_global);
 | 
|          // Load receiver and check that it is not a smi (only needed
 | 
| -        // if not contextual) and that it has the expected map.
 | 
| +        // if this is not a load from the global context) and that it
 | 
| +        // has the expected map.
 | 
|          __ mov(edx, Operand(esp, kPointerSize));
 | 
| -        if (var == NULL) {
 | 
| +        if (!is_global) {
 | 
|            __ test(edx, Immediate(kSmiTagMask));
 | 
|            __ j(zero, deferred->enter(), not_taken);
 | 
|          }
 | 
| @@ -3921,8 +3924,7 @@
 | 
|        } else {
 | 
|          Comment cmnt(masm, "[ Load from keyed Property");
 | 
|          Handle<Code> ic(Builtins::builtin(Builtins::KeyedLoadIC_Initialize));
 | 
| -        if (var != NULL) {
 | 
| -          ASSERT(var->is_global());
 | 
| +        if (is_global) {
 | 
|            __ call(ic, RelocInfo::CODE_TARGET_CONTEXT);
 | 
|          } else {
 | 
|            __ call(ic, RelocInfo::CODE_TARGET);
 | 
| 
 |