Index: src/ia32/stub-cache-ia32.cc |
=================================================================== |
--- src/ia32/stub-cache-ia32.cc (revision 5696) |
+++ src/ia32/stub-cache-ia32.cc (working copy) |
@@ -807,13 +807,16 @@ |
// Generate code to check that a global property cell is empty. Create |
// the property cell at compilation time if no cell exists for the |
// property. |
-static Object* GenerateCheckPropertyCell(MacroAssembler* masm, |
- GlobalObject* global, |
- String* name, |
- Register scratch, |
- Label* miss) { |
- Object* probe = global->EnsurePropertyCell(name); |
- if (probe->IsFailure()) return probe; |
+MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCell( |
+ MacroAssembler* masm, |
+ GlobalObject* global, |
+ String* name, |
+ Register scratch, |
+ Label* miss) { |
+ Object* probe; |
+ { MaybeObject* maybe_probe = global->EnsurePropertyCell(name); |
+ if (!maybe_probe->ToObject(&probe)) return maybe_probe; |
+ } |
JSGlobalPropertyCell* cell = JSGlobalPropertyCell::cast(probe); |
ASSERT(cell->value()->IsTheHole()); |
__ mov(scratch, Immediate(Handle<Object>(cell))); |
@@ -826,23 +829,24 @@ |
// Calls GenerateCheckPropertyCell for each global object in the prototype chain |
// from object to (but not including) holder. |
-static Object* GenerateCheckPropertyCells(MacroAssembler* masm, |
- JSObject* object, |
- JSObject* holder, |
- String* name, |
- Register scratch, |
- Label* miss) { |
+MUST_USE_RESULT static MaybeObject* GenerateCheckPropertyCells( |
+ MacroAssembler* masm, |
+ JSObject* object, |
+ JSObject* holder, |
+ String* name, |
+ Register scratch, |
+ Label* miss) { |
JSObject* current = object; |
while (current != holder) { |
if (current->IsGlobalObject()) { |
- Object* cell = GenerateCheckPropertyCell(masm, |
- GlobalObject::cast(current), |
- name, |
- scratch, |
- miss); |
- if (cell->IsFailure()) { |
- return cell; |
- } |
+ // Returns a cell or a failure. |
+ MaybeObject* result = GenerateCheckPropertyCell( |
+ masm, |
+ GlobalObject::cast(current), |
+ name, |
+ scratch, |
+ miss); |
+ if (result->IsFailure()) return t; |
} |
ASSERT(current->IsJSObject()); |
current = JSObject::cast(current->GetPrototype()); |
@@ -892,13 +896,13 @@ |
!current->IsJSGlobalObject() && |
!current->IsJSGlobalProxy()) { |
if (!name->IsSymbol()) { |
- Object* lookup_result = Heap::LookupSymbol(name); |
- if (lookup_result->IsFailure()) { |
+ MaybeObject* maybe_lookup_result = Heap::LookupSymbol(name); |
+ Object* lookup_result = NULL; // Initialization to please compiler. |
+ if (!maybe_lookup_result->ToObject(&lookup_result)) { |
set_failure(Failure::cast(lookup_result)); |
return reg; |
- } else { |
- name = String::cast(lookup_result); |
} |
+ name = String::cast(lookup_result); |
} |
ASSERT(current->property_dictionary()->FindEntry(name) == |
StringDictionary::kNotFound); |
@@ -975,12 +979,12 @@ |
// If we've skipped any global objects, it's not enough to verify |
// that their maps haven't changed. We also need to check that the |
// property cell for the property is still empty. |
- Object* result = GenerateCheckPropertyCells(masm(), |
- object, |
- holder, |
- name, |
- scratch1, |
- miss); |
+ MaybeObject* result = GenerateCheckPropertyCells(masm(), |
+ object, |
+ holder, |
+ name, |
+ scratch1, |
+ miss); |
if (result->IsFailure()) set_failure(Failure::cast(result)); |
// Return the register containing the holder. |
@@ -1064,10 +1068,12 @@ |
// already generated). Do not allow the assembler to perform a |
// garbage collection but instead return the allocation failure |
// object. |
- Object* result = masm()->TryCallStub(&stub); |
- if (result->IsFailure()) { |
- *failure = Failure::cast(result); |
- return false; |
+ Object* result = NULL; // Initialization to please compiler. |
+ { MaybeObject* try_call_result = masm()->TryCallStub(&stub); |
+ if (!try_call_result->ToObject(&result)) { |
+ *failure = Failure::cast(result); |
+ return false; |
+ } |
} |
__ LeaveInternalFrame(); |
@@ -1302,18 +1308,22 @@ |
} |
-Object* CallStubCompiler::GenerateMissBranch() { |
- Object* obj = StubCache::ComputeCallMiss(arguments().immediate(), kind_); |
- if (obj->IsFailure()) return obj; |
+MaybeObject* CallStubCompiler::GenerateMissBranch() { |
+ Object* obj; |
+ { MaybeObject* maybe_obj = |
+ StubCache::ComputeCallMiss(arguments().immediate(), kind_); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
__ jmp(Handle<Code>(Code::cast(obj)), RelocInfo::CODE_TARGET); |
return obj; |
} |
-Object* CallStubCompiler::CompileCallField(JSObject* object, |
- JSObject* holder, |
- int index, |
- String* name) { |
+MUST_USE_RESULT MaybeObject* CallStubCompiler::CompileCallField( |
+ JSObject* object, |
+ JSObject* holder, |
+ int index, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -1357,19 +1367,21 @@ |
// Handle call cache miss. |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(FIELD, name); |
} |
-Object* CallStubCompiler::CompileArrayPushCall(Object* object, |
- JSObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object, |
+ JSObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -1507,19 +1519,21 @@ |
} |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(function); |
} |
-Object* CallStubCompiler::CompileArrayPopCall(Object* object, |
- JSObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object, |
+ JSObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -1588,15 +1602,17 @@ |
1); |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(function); |
} |
-Object* CallStubCompiler::CompileStringCharCodeAtCall( |
+MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall( |
Object* object, |
JSObject* holder, |
JSGlobalPropertyCell* cell, |
@@ -1658,19 +1674,22 @@ |
__ ret((argc + 1) * kPointerSize); |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(function); |
} |
-Object* CallStubCompiler::CompileStringCharAtCall(Object* object, |
- JSObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileStringCharAtCall( |
+ Object* object, |
+ JSObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : function name |
// -- esp[0] : return address |
@@ -1730,15 +1749,17 @@ |
__ ret((argc + 1) * kPointerSize); |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(function); |
} |
-Object* CallStubCompiler::CompileStringFromCharCodeCall( |
+MaybeObject* CallStubCompiler::CompileStringFromCharCodeCall( |
Object* object, |
JSObject* holder, |
JSGlobalPropertyCell* cell, |
@@ -1803,19 +1824,21 @@ |
__ bind(&miss); |
// ecx: function name. |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
} |
-Object* CallStubCompiler::CompileMathFloorCall(Object* object, |
- JSObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object, |
+ JSObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -1928,19 +1951,21 @@ |
__ bind(&miss); |
// ecx: function name. |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
} |
-Object* CallStubCompiler::CompileMathAbsCall(Object* object, |
- JSObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object, |
+ JSObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -2031,19 +2056,21 @@ |
__ bind(&miss); |
// ecx: function name. |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return (cell == NULL) ? GetCode(function) : GetCode(NORMAL, name); |
} |
-Object* CallStubCompiler::CompileCallConstant(Object* object, |
- JSObject* holder, |
- JSFunction* function, |
- String* name, |
- CheckType check) { |
+MaybeObject* CallStubCompiler::CompileCallConstant(Object* object, |
+ JSObject* holder, |
+ JSFunction* function, |
+ String* name, |
+ CheckType check) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -2055,8 +2082,10 @@ |
SharedFunctionInfo* function_info = function->shared(); |
if (function_info->HasCustomCallGenerator()) { |
const int id = function_info->custom_call_generator_id(); |
- Object* result = CompileCustomCall( |
+ MaybeObject* maybe_result = CompileCustomCall( |
id, object, holder, NULL, function, name); |
+ Object* result; |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
// undefined means bail out to regular compiler. |
if (!result->IsUndefined()) return result; |
} |
@@ -2184,17 +2213,19 @@ |
FreeSpaceForFastApiCall(masm(), eax); |
} |
__ bind(&miss_in_smi_check); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(function); |
} |
-Object* CallStubCompiler::CompileCallInterceptor(JSObject* object, |
- JSObject* holder, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileCallInterceptor(JSObject* object, |
+ JSObject* holder, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -2249,19 +2280,21 @@ |
// Handle load cache miss. |
__ bind(&miss); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(INTERCEPTOR, name); |
} |
-Object* CallStubCompiler::CompileCallGlobal(JSObject* object, |
- GlobalObject* holder, |
- JSGlobalPropertyCell* cell, |
- JSFunction* function, |
- String* name) { |
+MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object, |
+ GlobalObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ JSFunction* function, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- ecx : name |
// -- esp[0] : return address |
@@ -2273,8 +2306,10 @@ |
SharedFunctionInfo* function_info = function->shared(); |
if (function_info->HasCustomCallGenerator()) { |
const int id = function_info->custom_call_generator_id(); |
- Object* result = CompileCustomCall( |
+ MaybeObject* maybe_result = CompileCustomCall( |
id, object, holder, cell, function, name); |
+ Object* result; |
+ if (!maybe_result->ToObject(&result)) return maybe_result; |
// undefined means bail out to regular compiler. |
if (!result->IsUndefined()) return result; |
} |
@@ -2310,18 +2345,20 @@ |
// Handle call cache miss. |
__ bind(&miss); |
__ IncrementCounter(&Counters::call_global_inline_miss, 1); |
- Object* obj = GenerateMissBranch(); |
- if (obj->IsFailure()) return obj; |
+ Object* obj; |
+ { MaybeObject* maybe_obj = GenerateMissBranch(); |
+ if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
+ } |
// Return the generated code. |
return GetCode(NORMAL, name); |
} |
-Object* StoreStubCompiler::CompileStoreField(JSObject* object, |
- int index, |
- Map* transition, |
- String* name) { |
+MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object, |
+ int index, |
+ Map* transition, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : value |
// -- ecx : name |
@@ -2349,9 +2386,9 @@ |
} |
-Object* StoreStubCompiler::CompileStoreCallback(JSObject* object, |
- AccessorInfo* callback, |
- String* name) { |
+MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object, |
+ AccessorInfo* callback, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : value |
// -- ecx : name |
@@ -2400,8 +2437,8 @@ |
} |
-Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, |
- String* name) { |
+MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : value |
// -- ecx : name |
@@ -2449,9 +2486,9 @@ |
} |
-Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, |
- JSGlobalPropertyCell* cell, |
- String* name) { |
+MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object, |
+ JSGlobalPropertyCell* cell, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : value |
// -- ecx : name |
@@ -2484,10 +2521,10 @@ |
} |
-Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, |
- int index, |
- Map* transition, |
- String* name) { |
+MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object, |
+ int index, |
+ Map* transition, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : value |
// -- ecx : key |
@@ -2521,9 +2558,9 @@ |
} |
-Object* LoadStubCompiler::CompileLoadNonexistent(String* name, |
- JSObject* object, |
- JSObject* last) { |
+MaybeObject* LoadStubCompiler::CompileLoadNonexistent(String* name, |
+ JSObject* object, |
+ JSObject* last) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2545,11 +2582,11 @@ |
// If the last object in the prototype chain is a global object, |
// check that the global property cell is empty. |
if (last->IsGlobalObject()) { |
- Object* cell = GenerateCheckPropertyCell(masm(), |
- GlobalObject::cast(last), |
- name, |
- edx, |
- &miss); |
+ MaybeObject* cell = GenerateCheckPropertyCell(masm(), |
+ GlobalObject::cast(last), |
+ name, |
+ edx, |
+ &miss); |
if (cell->IsFailure()) { |
miss.Unuse(); |
return cell; |
@@ -2569,10 +2606,10 @@ |
} |
-Object* LoadStubCompiler::CompileLoadField(JSObject* object, |
- JSObject* holder, |
- int index, |
- String* name) { |
+MaybeObject* LoadStubCompiler::CompileLoadField(JSObject* object, |
+ JSObject* holder, |
+ int index, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2589,10 +2626,10 @@ |
} |
-Object* LoadStubCompiler::CompileLoadCallback(String* name, |
- JSObject* object, |
- JSObject* holder, |
- AccessorInfo* callback) { |
+MaybeObject* LoadStubCompiler::CompileLoadCallback(String* name, |
+ JSObject* object, |
+ JSObject* holder, |
+ AccessorInfo* callback) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2616,10 +2653,10 @@ |
} |
-Object* LoadStubCompiler::CompileLoadConstant(JSObject* object, |
- JSObject* holder, |
- Object* value, |
- String* name) { |
+MaybeObject* LoadStubCompiler::CompileLoadConstant(JSObject* object, |
+ JSObject* holder, |
+ Object* value, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2636,9 +2673,9 @@ |
} |
-Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, |
- JSObject* holder, |
- String* name) { |
+MaybeObject* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, |
+ JSObject* holder, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2670,11 +2707,11 @@ |
} |
-Object* LoadStubCompiler::CompileLoadGlobal(JSObject* object, |
- GlobalObject* holder, |
- JSGlobalPropertyCell* cell, |
- String* name, |
- bool is_dont_delete) { |
+MaybeObject* LoadStubCompiler::CompileLoadGlobal(JSObject* object, |
+ GlobalObject* holder, |
+ JSGlobalPropertyCell* cell, |
+ String* name, |
+ bool is_dont_delete) { |
// ----------- S t a t e ------------- |
// -- eax : receiver |
// -- ecx : name |
@@ -2719,10 +2756,10 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadField(String* name, |
- JSObject* receiver, |
- JSObject* holder, |
- int index) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadField(String* name, |
+ JSObject* receiver, |
+ JSObject* holder, |
+ int index) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2747,10 +2784,11 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name, |
- JSObject* receiver, |
- JSObject* holder, |
- AccessorInfo* callback) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadCallback( |
+ String* name, |
+ JSObject* receiver, |
+ JSObject* holder, |
+ AccessorInfo* callback) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2782,10 +2820,10 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name, |
- JSObject* receiver, |
- JSObject* holder, |
- Object* value) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadConstant(String* name, |
+ JSObject* receiver, |
+ JSObject* holder, |
+ Object* value) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2810,9 +2848,9 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, |
- JSObject* holder, |
- String* name) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver, |
+ JSObject* holder, |
+ String* name) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2847,9 +2885,7 @@ |
} |
- |
- |
-Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2873,7 +2909,7 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2897,7 +2933,7 @@ |
} |
-Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) { |
+MaybeObject* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) { |
// ----------- S t a t e ------------- |
// -- eax : key |
// -- edx : receiver |
@@ -2923,7 +2959,7 @@ |
// Specialized stub for constructing objects from functions which only have only |
// simple assignments of the form this.x = ...; in their body. |
-Object* ConstructStubCompiler::CompileConstructStub( |
+MaybeObject* ConstructStubCompiler::CompileConstructStub( |
SharedFunctionInfo* shared) { |
// ----------- S t a t e ------------- |
// -- eax : argc |