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); |