Chromium Code Reviews| Index: runtime/vm/code_generator.cc |
| =================================================================== |
| --- runtime/vm/code_generator.cc (revision 2291) |
| +++ runtime/vm/code_generator.cc (working copy) |
| @@ -821,12 +821,31 @@ |
| DEFINE_RUNTIME_ENTRY(StackOverflow, 0) { |
| ASSERT(arguments.Count() == |
| kStackOverflowRuntimeEntry.argument_count()); |
| - // Use a preallocated stack overflow exception to avoid calling into |
| - // dart code. |
| - const Instance& exception = |
| - Instance::Handle(isolate->object_store()->stack_overflow()); |
| - Exceptions::Throw(exception); |
| - UNREACHABLE(); |
| + uword stack_pos; |
| + stack_pos = (uword) &stack_pos; |
|
Ivan Posva
2011/12/14 23:59:50
Wrong style cast. How about:
uword stack_pos = rei
turnidge
2011/12/15 21:30:07
Done.
|
| + |
| + // If an interrupt happens at the same time as a stack overflow, we |
| + // process the stack overflow first. |
| + if (stack_pos < isolate->saved_stack_limit()) { |
| + // Use a preallocated stack overflow exception to avoid calling |
|
Ivan Posva
2011/12/14 23:59:50
"Use the preallocated"?
turnidge
2011/12/15 21:30:07
Done.
|
| + // into dart code. |
| + const Instance& exception = |
| + Instance::Handle(isolate->object_store()->stack_overflow()); |
| + Exceptions::Throw(exception); |
| + UNREACHABLE(); |
| + } |
| + |
| + uword interrupt_bits = isolate->GetAndClearInterrupts(); |
| + if (interrupt_bits & Isolate::kApiInterrupt) { |
| + Dart_IsolateInterruptCallback callback = isolate->InterruptCallback(); |
| + if (callback) { |
| + if ((*callback)()) { |
| + return; |
| + } else { |
| + UNIMPLEMENTED(); |
| + } |
| + } |
| + } |
| } |