Index: src/x64/stub-cache-x64.cc |
=================================================================== |
--- src/x64/stub-cache-x64.cc (revision 6449) |
+++ src/x64/stub-cache-x64.cc (working copy) |
@@ -437,10 +437,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 ------------- |
// -- rsp[0] : return address |
// -- rsp[8] : object passing the type check |
@@ -504,13 +503,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); |
} |
@@ -523,17 +517,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()); |
@@ -553,8 +546,7 @@ |
lookup, |
name, |
optimization, |
- miss, |
- failure); |
+ miss); |
} else { |
CompileRegular(masm, |
object, |
@@ -565,23 +557,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()); |
@@ -643,13 +634,10 @@ |
// 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); |
@@ -668,7 +656,7 @@ |
FreeSpaceForFastApiCall(masm, scratch1); |
} |
- return true; |
+ return Heap::undefined_value(); // Success. |
} |
void CompileRegular(MacroAssembler* masm, |
@@ -1021,17 +1009,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. |
__ JumpIfSmi(receiver, miss); |
@@ -1095,12 +1082,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); |
} |
@@ -2135,17 +2117,14 @@ |
} |
if (depth != kInvalidProtoDepth) { |
- Failure* failure; |
// Move the return address on top of the stack. |
__ movq(rax, Operand(rsp, 3 * kPointerSize)); |
__ movq(Operand(rsp, 0 * kPointerSize), rax); |
// rsp[2 * kPointerSize] is uninitialized, rsp[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); |
} |
@@ -2194,21 +2173,17 @@ |
__ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize)); |
CallInterceptorCompiler compiler(this, arguments(), rcx); |
- Failure* failure; |
- bool success = compiler.Compile(masm(), |
- object, |
- holder, |
- name, |
- &lookup, |
- rdx, |
- rbx, |
- rdi, |
- rax, |
- &miss, |
- &failure); |
- if (!success) { |
- return failure; |
- } |
+ MaybeObject* result = compiler.Compile(masm(), |
+ object, |
+ holder, |
+ name, |
+ &lookup, |
+ rdx, |
+ rbx, |
+ rdi, |
+ rax, |
+ &miss); |
+ if (result->IsFailure()) return result; |
// Restore receiver. |
__ movq(rdx, Operand(rsp, (argc + 1) * kPointerSize)); |
@@ -2648,12 +2623,11 @@ |
// ----------------------------------- |
Label miss; |
- Failure* failure = Failure::InternalError(); |
- bool success = GenerateLoadCallback(object, holder, rax, rcx, rdx, rbx, rdi, |
- callback, name, &miss, &failure); |
- if (!success) { |
+ MaybeObject* result = GenerateLoadCallback(object, holder, rax, rcx, rdx, rbx, |
+ rdi, callback, name, &miss); |
+ if (result->IsFailure()) { |
miss.Unuse(); |
- return failure; |
+ return result; |
} |
__ bind(&miss); |
@@ -2812,12 +2786,11 @@ |
__ Cmp(rax, Handle<String>(name)); |
__ j(not_equal, &miss); |
- Failure* failure = Failure::InternalError(); |
- bool success = GenerateLoadCallback(receiver, holder, rdx, rax, rbx, rcx, rdi, |
- callback, name, &miss, &failure); |
- if (!success) { |
+ MaybeObject* result = GenerateLoadCallback(receiver, holder, rdx, rax, rbx, |
+ rcx, rdi, callback, name, &miss); |
+ if (result->IsFailure()) { |
miss.Unuse(); |
- return failure; |
+ return result; |
} |
__ bind(&miss); |