Index: src/codegen-arm.cc |
=================================================================== |
--- src/codegen-arm.cc (revision 636) |
+++ src/codegen-arm.cc (working copy) |
@@ -3920,23 +3920,27 @@ |
Label throw_out_of_memory_exception; |
Label throw_normal_exception; |
-#ifdef DEBUG |
+ // Call into the runtime system. Collect garbage before the call if |
+ // running with --gc-greedy set. |
if (FLAG_gc_greedy) { |
Failure* failure = Failure::RetryAfterGC(0); |
__ mov(r0, Operand(reinterpret_cast<intptr_t>(failure))); |
} |
- GenerateCore(masm, |
- &throw_normal_exception, |
+ GenerateCore(masm, &throw_normal_exception, |
&throw_out_of_memory_exception, |
frame_type, |
FLAG_gc_greedy); |
-#else |
+ |
+ // Do space-specific GC and retry runtime call. |
GenerateCore(masm, |
&throw_normal_exception, |
&throw_out_of_memory_exception, |
frame_type, |
- false); |
-#endif |
+ true); |
+ |
+ // Do full GC and retry runtime call one final time. |
+ Failure* failure = Failure::InternalError(); |
+ __ mov(r0, Operand(reinterpret_cast<int32_t>(failure))); |
GenerateCore(masm, |
&throw_normal_exception, |
&throw_out_of_memory_exception, |