Index: src/execution.h |
diff --git a/src/execution.h b/src/execution.h |
index c165faba0b16651b70df477cd38c88bbd8eb9f51..6d0b15f214762a65082492ad7fe7af826893dd15 100644 |
--- a/src/execution.h |
+++ b/src/execution.h |
@@ -10,21 +10,6 @@ |
namespace v8 { |
namespace internal { |
-// Flag used to set the interrupt causes. |
-enum InterruptFlag { |
- INTERRUPT = 1 << 0, |
- DEBUGBREAK = 1 << 1, |
- DEBUGCOMMAND = 1 << 2, |
- PREEMPT = 1 << 3, |
- TERMINATE = 1 << 4, |
- GC_REQUEST = 1 << 5, |
- FULL_DEOPT = 1 << 6, |
- INSTALL_CODE = 1 << 7, |
- API_INTERRUPT = 1 << 8, |
- DEOPT_MARKED_ALLOCATION_SITES = 1 << 9 |
-}; |
- |
- |
class Execution V8_FINAL : public AllStatic { |
public: |
// Call a function, the caller supplies a receiver and an array |
@@ -119,13 +104,9 @@ class Execution V8_FINAL : public AllStatic { |
Handle<Object> pos, |
Handle<Object> is_global); |
- static Object* DebugBreakHelper(Isolate* isolate); |
+ static void DebugBreakHelper(Isolate* isolate); |
static void ProcessDebugMessages(Isolate* isolate, bool debug_command_only); |
- // If the stack guard is triggered, but it is not an actual |
- // stack overflow, then handle the interruption accordingly. |
- static Object* HandleStackGuardInterrupt(Isolate* isolate); |
- |
// Get a function delegate (or undefined) for the given non-function |
// object. Used for support calling objects as functions. |
static Handle<Object> GetFunctionDelegate(Isolate* isolate, |
@@ -171,31 +152,23 @@ class StackGuard V8_FINAL { |
void ClearThread(const ExecutionAccess& lock); |
bool IsStackOverflow(); |
- bool IsPreempted(); |
- void Preempt(); |
- bool IsInterrupted(); |
- void Interrupt(); |
- bool IsTerminateExecution(); |
- void TerminateExecution(); |
- void CancelTerminateExecution(); |
- bool IsDebugBreak(); |
- void DebugBreak(); |
- bool IsDebugCommand(); |
- void DebugCommand(); |
- bool IsGCRequest(); |
- void RequestGC(); |
- bool IsInstallCodeRequest(); |
- void RequestInstallCode(); |
- bool IsFullDeopt(); |
- void FullDeopt(); |
- bool IsDeoptMarkedAllocationSites(); |
- void DeoptMarkedAllocationSites(); |
- void Continue(InterruptFlag after_what); |
- |
- void RequestInterrupt(InterruptCallback callback, void* data); |
- void ClearInterrupt(); |
- bool IsAPIInterrupt(); |
- void InvokeInterruptCallback(); |
+ |
+#define INTERRUPT_LIST(V) \ |
+ V(DEBUGBREAK, DebugBreak) \ |
+ V(DEBUGCOMMAND, DebugCommand) \ |
+ V(TERMINATE_EXECUTION, TerminateExecution) \ |
+ V(GC_REQUEST, GC) \ |
+ V(FULL_DEOPT, FullDeopt) \ |
+ V(INSTALL_CODE, InstallCode) \ |
+ V(API_INTERRUPT, ApiInterrupt) \ |
+ V(DEOPT_MARKED_ALLOCATION_SITES, DeoptMarkedAllocationSites) |
+ |
+#define V(NAME, Name) \ |
+ inline bool Check##Name() { return CheckInterrupt(1 << NAME); } \ |
+ inline void Request##Name() { RequestInterrupt(1 << NAME); } \ |
+ inline void Clear##Name() { ClearInterrupt(1 << NAME); } |
+ INTERRUPT_LIST(V) |
+#undef V |
// This provides an asynchronous read of the stack limits for the current |
// thread. There are no locks protecting this, but it is assumed that you |
@@ -218,11 +191,29 @@ class StackGuard V8_FINAL { |
Address address_of_real_jslimit() { |
return reinterpret_cast<Address>(&thread_local_.real_jslimit_); |
} |
- bool ShouldPostponeInterrupts(); |
+ |
+ // If the stack guard is triggered, but it is not an actual |
+ // stack overflow, then handle the interruption accordingly. |
+ Object* HandleInterrupts(); |
private: |
StackGuard(); |
+// Flag used to set the interrupt causes. |
+enum InterruptFlag { |
+#define V(NAME, Name) NAME, |
+ INTERRUPT_LIST(V) |
+#undef V |
+ NUMBER_OF_INTERRUPTS |
+}; |
+ |
+ bool CheckInterrupt(int flagbit); |
+ void RequestInterrupt(int flagbit); |
+ void ClearInterrupt(int flagbit); |
+ bool CheckAndClearInterrupt(InterruptFlag flag, const ExecutionAccess& lock); |
+ |
+ void InvokeApiInterruptCallback(); |
+ |
// You should hold the ExecutionAccess lock when calling this method. |
bool has_pending_interrupts(const ExecutionAccess& lock) { |
// Sanity check: We shouldn't be asking about pending interrupts |
@@ -282,9 +273,6 @@ class StackGuard V8_FINAL { |
int nesting_; |
int postpone_interrupts_nesting_; |
int interrupt_flags_; |
- |
- InterruptCallback interrupt_callback_; |
- void* interrupt_callback_data_; |
}; |
// TODO(isolates): Technically this could be calculated directly from a |