| Index: src/x64/stub-cache-x64.cc
|
| diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc
|
| index eb48da9a9c5bd1baaff4ac853f7269998bc30192..3891e1d5a3bdb8b1305d1f4238932639ee0533f4 100644
|
| --- a/src/x64/stub-cache-x64.cc
|
| +++ b/src/x64/stub-cache-x64.cc
|
| @@ -796,13 +796,16 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| // 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());
|
| __ Move(scratch, Handle<Object>(cell));
|
| @@ -879,19 +882,23 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
|
| }
|
|
|
|
|
| -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;
|
| + }
|
| __ Jump(Handle<Code>(Code::cast(obj)), RelocInfo::CODE_TARGET);
|
| return obj;
|
| }
|
|
|
|
|
| -Object* CallStubCompiler::CompileCallConstant(Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| - StubCompiler::CheckType check) {
|
| +MaybeObject* CallStubCompiler::CompileCallConstant(
|
| + Object* object,
|
| + JSObject* holder,
|
| + JSFunction* function,
|
| + String* name,
|
| + StubCompiler::CheckType check) {
|
| // ----------- S t a t e -------------
|
| // rcx : function name
|
| // rsp[0] : return address
|
| @@ -905,8 +912,10 @@ Object* CallStubCompiler::CompileCallConstant(Object* object,
|
| 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;
|
| }
|
| @@ -1034,18 +1043,20 @@ Object* CallStubCompiler::CompileCallConstant(Object* object,
|
|
|
| // Handle call cache miss.
|
| __ 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::CompileCallField(JSObject* object,
|
| - JSObject* holder,
|
| - int index,
|
| - String* name) {
|
| +MaybeObject* CallStubCompiler::CompileCallField(JSObject* object,
|
| + JSObject* holder,
|
| + int index,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // rcx : function name
|
| // rsp[0] : return address
|
| @@ -1089,19 +1100,21 @@ Object* CallStubCompiler::CompileCallField(JSObject* object,
|
|
|
| // 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 -------------
|
| // -- rcx : name
|
| // -- rsp[0] : return address
|
| @@ -1191,6 +1204,10 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| __ ret((argc + 1) * kPointerSize);
|
|
|
| __ bind(&attempt_to_grow_elements);
|
| + if (!FLAG_inline_new) {
|
| + __ jmp(&call_builtin);
|
| + }
|
| +
|
| ExternalReference new_space_allocation_top =
|
| ExternalReference::new_space_allocation_top_address();
|
| ExternalReference new_space_allocation_limit =
|
| @@ -1247,19 +1264,21 @@ Object* CallStubCompiler::CompileArrayPushCall(Object* object,
|
| }
|
|
|
| __ 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 -------------
|
| // -- rcx : name
|
| // -- rsp[0] : return address
|
| @@ -1329,19 +1348,22 @@ Object* CallStubCompiler::CompileArrayPopCall(Object* object,
|
| 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::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 -------------
|
| // -- rcx : function name
|
| // -- rsp[0] : return address
|
| @@ -1401,15 +1423,17 @@ Object* CallStubCompiler::CompileStringCharAtCall(Object* object,
|
| __ 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::CompileStringCharCodeAtCall(
|
| +MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall(
|
| Object* object,
|
| JSObject* holder,
|
| JSGlobalPropertyCell* cell,
|
| @@ -1471,15 +1495,17 @@ Object* CallStubCompiler::CompileStringCharCodeAtCall(
|
| __ 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,
|
| @@ -1540,29 +1566,31 @@ Object* CallStubCompiler::CompileStringFromCharCodeCall(
|
|
|
| __ bind(&miss);
|
| // rcx: 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) {
|
| // TODO(872): implement this.
|
| return Heap::undefined_value();
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rcx : function name
|
| // -- rsp[0] : return address
|
| @@ -1653,17 +1681,19 @@ Object* CallStubCompiler::CompileMathAbsCall(Object* object,
|
|
|
| __ bind(&miss);
|
| // rcx: 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::CompileCallInterceptor(JSObject* object,
|
| - JSObject* holder,
|
| - String* name) {
|
| +MaybeObject* CallStubCompiler::CompileCallInterceptor(JSObject* object,
|
| + JSObject* holder,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // rcx : function name
|
| // rsp[0] : return address
|
| @@ -1719,19 +1749,21 @@ Object* CallStubCompiler::CompileCallInterceptor(JSObject* object,
|
|
|
| // 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 -------------
|
| // rcx : function name
|
| // rsp[0] : return address
|
| @@ -1745,8 +1777,10 @@ Object* CallStubCompiler::CompileCallGlobal(JSObject* object,
|
| 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;
|
| }
|
| @@ -1782,18 +1816,20 @@ Object* CallStubCompiler::CompileCallGlobal(JSObject* object,
|
| // 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* 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 -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1817,10 +1853,10 @@ Object* LoadStubCompiler::CompileLoadCallback(String* name,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1837,9 +1873,9 @@ Object* LoadStubCompiler::CompileLoadConstant(JSObject* object,
|
| }
|
|
|
|
|
| -Object* LoadStubCompiler::CompileLoadNonexistent(String* name,
|
| - JSObject* object,
|
| - JSObject* last) {
|
| +MaybeObject* LoadStubCompiler::CompileLoadNonexistent(String* name,
|
| + JSObject* object,
|
| + JSObject* last) {
|
| // ----------- S t a t e -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1858,11 +1894,11 @@ Object* LoadStubCompiler::CompileLoadNonexistent(String* name,
|
| // 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,
|
| - rdx,
|
| - &miss);
|
| + MaybeObject* cell = GenerateCheckPropertyCell(masm(),
|
| + GlobalObject::cast(last),
|
| + name,
|
| + rdx,
|
| + &miss);
|
| if (cell->IsFailure()) {
|
| miss.Unuse();
|
| return cell;
|
| @@ -1882,10 +1918,10 @@ Object* LoadStubCompiler::CompileLoadNonexistent(String* name,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1902,9 +1938,9 @@ Object* LoadStubCompiler::CompileLoadField(JSObject* object,
|
| }
|
|
|
|
|
| -Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| - JSObject* holder,
|
| - String* name) {
|
| +MaybeObject* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| + JSObject* holder,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1936,11 +1972,11 @@ Object* LoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : receiver
|
| // -- rcx : name
|
| @@ -1984,10 +2020,11 @@ Object* LoadStubCompiler::CompileLoadGlobal(JSObject* object,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2018,7 +2055,7 @@ Object* KeyedLoadStubCompiler::CompileLoadCallback(String* name,
|
| }
|
|
|
|
|
| -Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
|
| +MaybeObject* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2042,10 +2079,10 @@ Object* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2070,7 +2107,7 @@ Object* KeyedLoadStubCompiler::CompileLoadConstant(String* name,
|
| }
|
|
|
|
|
| -Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
|
| +MaybeObject* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2094,9 +2131,9 @@ Object* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
|
| }
|
|
|
|
|
| -Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| - JSObject* holder,
|
| - String* name) {
|
| +MaybeObject* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| + JSObject* holder,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2131,7 +2168,7 @@ Object* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
|
| }
|
|
|
|
|
| -Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
|
| +MaybeObject* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2155,9 +2192,9 @@ Object* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
|
| }
|
|
|
|
|
| -Object* StoreStubCompiler::CompileStoreCallback(JSObject* object,
|
| - AccessorInfo* callback,
|
| - String* name) {
|
| +MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
|
| + AccessorInfo* callback,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : value
|
| // -- rcx : name
|
| @@ -2205,10 +2242,10 @@ Object* StoreStubCompiler::CompileStoreCallback(JSObject* object,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : value
|
| // -- rcx : name
|
| @@ -2235,8 +2272,8 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
|
| }
|
|
|
|
|
| -Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
|
| - String* name) {
|
| +MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : value
|
| // -- rcx : name
|
| @@ -2283,9 +2320,9 @@ Object* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
|
| }
|
|
|
|
|
| -Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
|
| - JSGlobalPropertyCell* cell,
|
| - String* name) {
|
| +MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
|
| + JSGlobalPropertyCell* cell,
|
| + String* name) {
|
| // ----------- S t a t e -------------
|
| // -- rax : value
|
| // -- rcx : name
|
| @@ -2318,10 +2355,10 @@ Object* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : key
|
| // -- rdx : receiver
|
| @@ -2346,10 +2383,10 @@ Object* KeyedLoadStubCompiler::CompileLoadField(String* name,
|
| }
|
|
|
|
|
| -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 -------------
|
| // -- rax : value
|
| // -- rcx : key
|
| @@ -2543,7 +2580,6 @@ bool StubCompiler::GenerateLoadCallback(JSObject* object,
|
| Handle<AccessorInfo> callback_handle(callback);
|
|
|
| __ EnterInternalFrame();
|
| - __ PushHandleScope(scratch2);
|
| // Push the stack address where the list of arguments ends.
|
| __ movq(scratch2, rsp);
|
| __ subq(scratch2, Immediate(2 * kPointerSize));
|
| @@ -2588,7 +2624,7 @@ bool StubCompiler::GenerateLoadCallback(JSObject* object,
|
| // already generated). Do not allow the assembler to perform a
|
| // garbage collection but instead return the allocation failure
|
| // object.
|
| - Object* result = masm()->TryCallStub(&stub);
|
| + MaybeObject* result = masm()->TryCallStub(&stub);
|
| if (result->IsFailure()) {
|
| *failure = Failure::cast(result);
|
| return false;
|
| @@ -2597,17 +2633,6 @@ bool StubCompiler::GenerateLoadCallback(JSObject* object,
|
| // Discard allocated slot.
|
| __ addq(rsp, Immediate(kPointerSize));
|
| #endif
|
| -
|
| - // We need to avoid using rax since that now holds the result.
|
| - Register tmp = scratch2.is(rax) ? reg : scratch2;
|
| - // Emitting PopHandleScope may try to allocate. Do not allow the
|
| - // assembler to perform a garbage collection but instead return a
|
| - // failure object.
|
| - result = masm()->TryPopHandleScope(rax, tmp);
|
| - if (result->IsFailure()) {
|
| - *failure = Failure::cast(result);
|
| - return false;
|
| - }
|
| __ LeaveInternalFrame();
|
|
|
| __ ret(0);
|
| @@ -2655,12 +2680,12 @@ Register StubCompiler::CheckPrototypes(JSObject* object,
|
| !current->IsJSGlobalObject() &&
|
| !current->IsJSGlobalProxy()) {
|
| if (!name->IsSymbol()) {
|
| - Object* lookup_result = Heap::LookupSymbol(name);
|
| + MaybeObject* lookup_result = Heap::LookupSymbol(name);
|
| if (lookup_result->IsFailure()) {
|
| set_failure(Failure::cast(lookup_result));
|
| return reg;
|
| } else {
|
| - name = String::cast(lookup_result);
|
| + name = String::cast(lookup_result->ToObjectUnchecked());
|
| }
|
| }
|
| ASSERT(current->property_dictionary()->FindEntry(name) ==
|
| @@ -2742,11 +2767,11 @@ Register StubCompiler::CheckPrototypes(JSObject* object,
|
| current = object;
|
| while (current != holder) {
|
| if (current->IsGlobalObject()) {
|
| - Object* cell = GenerateCheckPropertyCell(masm(),
|
| - GlobalObject::cast(current),
|
| - name,
|
| - scratch1,
|
| - miss);
|
| + MaybeObject* cell = GenerateCheckPropertyCell(masm(),
|
| + GlobalObject::cast(current),
|
| + name,
|
| + scratch1,
|
| + miss);
|
| if (cell->IsFailure()) {
|
| set_failure(Failure::cast(cell));
|
| return reg;
|
| @@ -2808,7 +2833,7 @@ void StubCompiler::GenerateLoadConstant(JSObject* object,
|
|
|
| // 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 -------------
|
| // -- rax : argc
|
|
|