 Chromium Code Reviews
 Chromium Code Reviews Issue 14846017:
  Becuase of cross-context calls, hydrogen-based Array constructor needs to ensure  (Closed) 
  Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
    
  
    Issue 14846017:
  Becuase of cross-context calls, hydrogen-based Array constructor needs to ensure  (Closed) 
  Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge| Index: src/ia32/code-stubs-ia32.cc | 
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc | 
| index bfa49d51d0ac4e3dfdd458f26e1bcc9d2f5fd86a..cdb03dfa0e911679c95c0720c0c0264f16d5b519 100644 | 
| --- a/src/ia32/code-stubs-ia32.cc | 
| +++ b/src/ia32/code-stubs-ia32.cc | 
| @@ -130,9 +130,10 @@ static void InitializeArrayConstructorDescriptor( | 
| int constant_stack_parameter_count) { | 
| // register state | 
| // eax -- number of arguments | 
| + // edi -- function | 
| // ebx -- type info cell with elements kind | 
| - static Register registers[] = { ebx }; | 
| - descriptor->register_param_count_ = 1; | 
| + static Register registers[] = { edi, ebx }; | 
| + descriptor->register_param_count_ = 2; | 
| if (constant_stack_parameter_count != 0) { | 
| // stack param count needs (constructor pointer, and single argument) | 
| @@ -7922,14 +7923,7 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) { | 
| __ cmp(ebx, Immediate(undefined_sentinel)); | 
| __ j(equal, &no_info); | 
| __ mov(edx, FieldOperand(ebx, kPointerSize)); | 
| 
Toon Verwaest
2013/05/07 11:02:06
Don't you want to use JSGlobalPropertyCell::kValue
 
mvstanton
2013/05/07 12:40:50
Done.
 | 
| - | 
| - // There is no info if the call site went megamorphic either | 
| - | 
| - // TODO(mvstanton): Really? I thought if it was the array function that | 
| - // the cell wouldn't get stamped as megamorphic. | 
| - __ cmp(edx, Immediate(TypeFeedbackCells::MegamorphicSentinel( | 
| - masm->isolate()))); | 
| - __ j(equal, &no_info); | 
| + __ JumpIfNotSmi(edx, &no_info); | 
| __ SmiUntag(edx); | 
| __ jmp(&switch_ready); | 
| __ bind(&no_info); |