Index: src/isolate.h |
diff --git a/src/isolate.h b/src/isolate.h |
index d416fbad8342a5dba48c937d29d902b34c0aabab..b9ee070ccf69ec25b1805a0c14d656aae0a57e71 100644 |
--- a/src/isolate.h |
+++ b/src/isolate.h |
@@ -544,10 +544,7 @@ class Isolate { |
// Access to top context (where the current function object was created). |
Context* context() { return thread_local_top_.context_; } |
- void set_context(Context* context) { |
- DCHECK(context == NULL || context->IsContext()); |
- thread_local_top_.context_ = context; |
- } |
+ inline void set_context(Context* context); |
Context** context_address() { return &thread_local_top_.context_; } |
THREAD_LOCAL_TOP_ACCESSOR(SaveContext*, save_context) |
@@ -556,28 +553,13 @@ class Isolate { |
THREAD_LOCAL_TOP_ACCESSOR(ThreadId, thread_id) |
// Interface to pending exception. |
- Object* pending_exception() { |
- DCHECK(has_pending_exception()); |
- DCHECK(!thread_local_top_.pending_exception_->IsException()); |
- return thread_local_top_.pending_exception_; |
- } |
- |
- void set_pending_exception(Object* exception_obj) { |
- DCHECK(!exception_obj->IsException()); |
- thread_local_top_.pending_exception_ = exception_obj; |
- } |
- |
- void clear_pending_exception() { |
- DCHECK(!thread_local_top_.pending_exception_->IsException()); |
- thread_local_top_.pending_exception_ = heap_.the_hole_value(); |
- } |
+ inline Object* pending_exception(); |
+ inline void set_pending_exception(Object* exception_obj); |
+ inline void clear_pending_exception(); |
THREAD_LOCAL_TOP_ADDRESS(Object*, pending_exception) |
- bool has_pending_exception() { |
- DCHECK(!thread_local_top_.pending_exception_->IsException()); |
- return !thread_local_top_.pending_exception_->IsTheHole(); |
- } |
+ inline bool has_pending_exception(); |
THREAD_LOCAL_TOP_ADDRESS(Context*, pending_handler_context) |
THREAD_LOCAL_TOP_ADDRESS(Code*, pending_handler_code) |
@@ -587,9 +569,6 @@ class Isolate { |
THREAD_LOCAL_TOP_ACCESSOR(bool, external_caught_exception) |
- void clear_pending_message() { |
- thread_local_top_.pending_message_obj_ = heap_.the_hole_value(); |
- } |
v8::TryCatch* try_catch_handler() { |
return thread_local_top_.try_catch_handler(); |
} |
@@ -599,30 +578,19 @@ class Isolate { |
THREAD_LOCAL_TOP_ADDRESS(Object*, scheduled_exception) |
+ inline void clear_pending_message(); |
Address pending_message_obj_address() { |
return reinterpret_cast<Address>(&thread_local_top_.pending_message_obj_); |
} |
- Object* scheduled_exception() { |
- DCHECK(has_scheduled_exception()); |
- DCHECK(!thread_local_top_.scheduled_exception_->IsException()); |
- return thread_local_top_.scheduled_exception_; |
- } |
- bool has_scheduled_exception() { |
- DCHECK(!thread_local_top_.scheduled_exception_->IsException()); |
- return thread_local_top_.scheduled_exception_ != heap_.the_hole_value(); |
- } |
- void clear_scheduled_exception() { |
- DCHECK(!thread_local_top_.scheduled_exception_->IsException()); |
- thread_local_top_.scheduled_exception_ = heap_.the_hole_value(); |
- } |
+ inline Object* scheduled_exception(); |
+ inline bool has_scheduled_exception(); |
+ inline void clear_scheduled_exception(); |
bool IsJavaScriptHandlerOnTop(Object* exception); |
bool IsExternalHandlerOnTop(Object* exception); |
- bool is_catchable_by_javascript(Object* exception) { |
- return exception != heap()->termination_exception(); |
- } |
+ inline bool is_catchable_by_javascript(Object* exception); |
// JS execution stack (see frames.h). |
static Address c_entry_fp(ThreadLocalTop* thread) { |
@@ -649,9 +617,7 @@ class Isolate { |
// Returns the global object of the current context. It could be |
// a builtin object, or a JS global object. |
- Handle<GlobalObject> global_object() { |
- return Handle<GlobalObject>(context()->global_object()); |
- } |
+ inline Handle<GlobalObject> global_object(); |
// Returns the global proxy object of the current context. |
JSObject* global_proxy() { |
@@ -676,13 +642,8 @@ class Isolate { |
public: |
// Scope currently can only be used for regular exceptions, |
// not termination exception. |
- explicit ExceptionScope(Isolate* isolate) |
- : isolate_(isolate), |
- pending_exception_(isolate_->pending_exception(), isolate_) {} |
- |
- ~ExceptionScope() { |
- isolate_->set_pending_exception(*pending_exception_); |
- } |
+ inline explicit ExceptionScope(Isolate* isolate); |
+ inline ~ExceptionScope(); |
private: |
Isolate* isolate_; |
@@ -830,13 +791,9 @@ class Isolate { |
ISOLATE_INIT_ARRAY_LIST(GLOBAL_ARRAY_ACCESSOR) |
#undef GLOBAL_ARRAY_ACCESSOR |
-#define NATIVE_CONTEXT_FIELD_ACCESSOR(index, type, name) \ |
- Handle<type> name() { \ |
- return Handle<type>(native_context()->name(), this); \ |
- } \ |
- bool is_##name(type* value) { \ |
- return native_context()->is_##name(value); \ |
- } |
+#define NATIVE_CONTEXT_FIELD_ACCESSOR(index, type, name) \ |
+ inline Handle<type> name(); \ |
+ inline bool is_##name(type* value); |
NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSOR) |
#undef NATIVE_CONTEXT_FIELD_ACCESSOR |
@@ -1407,11 +1364,7 @@ class PromiseOnStack { |
class SaveContext BASE_EMBEDDED { |
public: |
explicit SaveContext(Isolate* isolate); |
- |
- ~SaveContext() { |
- isolate_->set_context(context_.is_null() ? NULL : *context_); |
- isolate_->set_save_context(prev_); |
- } |
+ ~SaveContext(); |
Handle<Context> context() { return context_; } |
SaveContext* prev() { return prev_; } |
@@ -1432,9 +1385,7 @@ class SaveContext BASE_EMBEDDED { |
class AssertNoContextChange BASE_EMBEDDED { |
#ifdef DEBUG |
public: |
- explicit AssertNoContextChange(Isolate* isolate) |
- : isolate_(isolate), |
- context_(isolate->context(), isolate) { } |
+ explicit AssertNoContextChange(Isolate* isolate); |
~AssertNoContextChange() { |
DCHECK(isolate_->context() == *context_); |
} |