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