| Index: src/ia32/stub-cache-ia32.cc
|
| ===================================================================
|
| --- src/ia32/stub-cache-ia32.cc (revision 6449)
|
| +++ src/ia32/stub-cache-ia32.cc (working copy)
|
| @@ -451,10 +451,9 @@
|
|
|
|
|
| // Generates call to API function.
|
| -static bool GenerateFastApiCall(MacroAssembler* masm,
|
| - const CallOptimization& optimization,
|
| - int argc,
|
| - Failure** failure) {
|
| +static MaybeObject* GenerateFastApiCall(MacroAssembler* masm,
|
| + const CallOptimization& optimization,
|
| + int argc) {
|
| // ----------- S t a t e -------------
|
| // -- esp[0] : return address
|
| // -- esp[4] : object passing the type check
|
| @@ -516,13 +515,8 @@
|
| // already generated). Do not allow the assembler to perform a
|
| // garbage collection but instead return the allocation failure
|
| // object.
|
| - MaybeObject* result =
|
| - masm->TryCallApiFunctionAndReturn(&fun, argc + kFastApiCallArguments + 1);
|
| - if (result->IsFailure()) {
|
| - *failure = Failure::cast(result);
|
| - return false;
|
| - }
|
| - return true;
|
| + return masm->TryCallApiFunctionAndReturn(&fun,
|
| + argc + kFastApiCallArguments + 1);
|
| }
|
|
|
|
|
| @@ -535,17 +529,16 @@
|
| arguments_(arguments),
|
| name_(name) {}
|
|
|
| - bool Compile(MacroAssembler* masm,
|
| - JSObject* object,
|
| - JSObject* holder,
|
| - String* name,
|
| - LookupResult* lookup,
|
| - Register receiver,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - Label* miss,
|
| - Failure** failure) {
|
| + MaybeObject* Compile(MacroAssembler* masm,
|
| + JSObject* object,
|
| + JSObject* holder,
|
| + String* name,
|
| + LookupResult* lookup,
|
| + Register receiver,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + Label* miss) {
|
| ASSERT(holder->HasNamedInterceptor());
|
| ASSERT(!holder->GetNamedInterceptor()->getter()->IsUndefined());
|
|
|
| @@ -566,8 +559,7 @@
|
| lookup,
|
| name,
|
| optimization,
|
| - miss,
|
| - failure);
|
| + miss);
|
| } else {
|
| CompileRegular(masm,
|
| object,
|
| @@ -578,23 +570,22 @@
|
| name,
|
| holder,
|
| miss);
|
| - return true;
|
| + return Heap::undefined_value(); // Success.
|
| }
|
| }
|
|
|
| private:
|
| - bool CompileCacheable(MacroAssembler* masm,
|
| - JSObject* object,
|
| - Register receiver,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - JSObject* interceptor_holder,
|
| - LookupResult* lookup,
|
| - String* name,
|
| - const CallOptimization& optimization,
|
| - Label* miss_label,
|
| - Failure** failure) {
|
| + MaybeObject* CompileCacheable(MacroAssembler* masm,
|
| + JSObject* object,
|
| + Register receiver,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + JSObject* interceptor_holder,
|
| + LookupResult* lookup,
|
| + String* name,
|
| + const CallOptimization& optimization,
|
| + Label* miss_label) {
|
| ASSERT(optimization.is_constant_call());
|
| ASSERT(!lookup->holder()->IsGlobalObject());
|
|
|
| @@ -656,11 +647,9 @@
|
|
|
| // Invoke function.
|
| if (can_do_fast_api_call) {
|
| - bool success = GenerateFastApiCall(masm, optimization,
|
| - arguments_.immediate(), failure);
|
| - if (!success) {
|
| - return false;
|
| - }
|
| + MaybeObject* result =
|
| + GenerateFastApiCall(masm, optimization, arguments_.immediate());
|
| + if (result->IsFailure()) return result;
|
| } else {
|
| __ InvokeFunction(optimization.constant_function(), arguments_,
|
| JUMP_FUNCTION);
|
| @@ -679,7 +668,7 @@
|
| FreeSpaceForFastApiCall(masm, scratch1);
|
| }
|
|
|
| - return true;
|
| + return Heap::undefined_value(); // Success.
|
| }
|
|
|
| void CompileRegular(MacroAssembler* masm,
|
| @@ -1057,17 +1046,16 @@
|
| }
|
|
|
|
|
| -bool StubCompiler::GenerateLoadCallback(JSObject* object,
|
| - JSObject* holder,
|
| - Register receiver,
|
| - Register name_reg,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - AccessorInfo* callback,
|
| - String* name,
|
| - Label* miss,
|
| - Failure** failure) {
|
| +MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
|
| + JSObject* holder,
|
| + Register receiver,
|
| + Register name_reg,
|
| + Register scratch1,
|
| + Register scratch2,
|
| + Register scratch3,
|
| + AccessorInfo* callback,
|
| + String* name,
|
| + Label* miss) {
|
| // Check that the receiver isn't a smi.
|
| __ test(receiver, Immediate(kSmiTagMask));
|
| __ j(zero, miss, not_taken);
|
| @@ -1122,13 +1110,7 @@
|
| // already generated). Do not allow the assembler to perform a
|
| // garbage collection but instead return the allocation failure
|
| // object.
|
| - MaybeObject* result = masm()->TryCallApiFunctionAndReturn(&fun, kStackSpace);
|
| - if (result->IsFailure()) {
|
| - *failure = Failure::cast(result);
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| + return masm()->TryCallApiFunctionAndReturn(&fun, kStackSpace);
|
| }
|
|
|
|
|
| @@ -2280,17 +2262,14 @@
|
| }
|
|
|
| if (depth != kInvalidProtoDepth) {
|
| - Failure* failure;
|
| // Move the return address on top of the stack.
|
| __ mov(eax, Operand(esp, 3 * kPointerSize));
|
| __ mov(Operand(esp, 0 * kPointerSize), eax);
|
|
|
| // esp[2 * kPointerSize] is uninitialized, esp[3 * kPointerSize] contains
|
| // duplicate of return address and will be overwritten.
|
| - bool success = GenerateFastApiCall(masm(), optimization, argc, &failure);
|
| - if (!success) {
|
| - return failure;
|
| - }
|
| + MaybeObject* result = GenerateFastApiCall(masm(), optimization, argc);
|
| + if (result->IsFailure()) return result;
|
| } else {
|
| __ InvokeFunction(function, arguments(), JUMP_FUNCTION);
|
| }
|
| @@ -2335,21 +2314,17 @@
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
|
|
| CallInterceptorCompiler compiler(this, arguments(), ecx);
|
| - Failure* failure;
|
| - bool success = compiler.Compile(masm(),
|
| - object,
|
| - holder,
|
| - name,
|
| - &lookup,
|
| - edx,
|
| - ebx,
|
| - edi,
|
| - eax,
|
| - &miss,
|
| - &failure);
|
| - if (!success) {
|
| - return failure;
|
| - }
|
| + MaybeObject* result = compiler.Compile(masm(),
|
| + object,
|
| + holder,
|
| + name,
|
| + &lookup,
|
| + edx,
|
| + ebx,
|
| + edi,
|
| + eax,
|
| + &miss);
|
| + if (result->IsFailure()) return result;
|
|
|
| // Restore receiver.
|
| __ mov(edx, Operand(esp, (argc + 1) * kPointerSize));
|
| @@ -2799,12 +2774,11 @@
|
| // -----------------------------------
|
| Label miss;
|
|
|
| - Failure* failure = Failure::InternalError();
|
| - bool success = GenerateLoadCallback(object, holder, eax, ecx, ebx, edx, edi,
|
| - callback, name, &miss, &failure);
|
| - if (!success) {
|
| + MaybeObject* result = GenerateLoadCallback(object, holder, eax, ecx, ebx, edx,
|
| + edi, callback, name, &miss);
|
| + if (result->IsFailure()) {
|
| miss.Unuse();
|
| - return failure;
|
| + return result;
|
| }
|
|
|
| __ bind(&miss);
|
| @@ -2968,12 +2942,11 @@
|
| __ cmp(Operand(eax), Immediate(Handle<String>(name)));
|
| __ j(not_equal, &miss, not_taken);
|
|
|
| - Failure* failure = Failure::InternalError();
|
| - bool success = GenerateLoadCallback(receiver, holder, edx, eax, ebx, ecx, edi,
|
| - callback, name, &miss, &failure);
|
| - if (!success) {
|
| + MaybeObject* result = GenerateLoadCallback(receiver, holder, edx, eax, ebx,
|
| + ecx, edi, callback, name, &miss);
|
| + if (result->IsFailure()) {
|
| miss.Unuse();
|
| - return failure;
|
| + return result;
|
| }
|
|
|
| __ bind(&miss);
|
|
|