1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_ISOLATE_INL_H_ 6 #define V8_ISOLATE_INL_H_ 7 8 #include "src/isolate.h" 9 #include "src/objects-inl.h" 10 11 namespace v8 { 12 namespace internal { 13 14 set_context(Context * context)15void Isolate::set_context(Context* context) { 16 DCHECK(context == NULL || context->IsContext()); 17 thread_local_top_.context_ = context; 18 } 19 20 pending_exception()21Object* Isolate::pending_exception() { 22 DCHECK(has_pending_exception()); 23 DCHECK(!thread_local_top_.pending_exception_->IsException()); 24 return thread_local_top_.pending_exception_; 25 } 26 27 set_pending_exception(Object * exception_obj)28void Isolate::set_pending_exception(Object* exception_obj) { 29 DCHECK(!exception_obj->IsException()); 30 thread_local_top_.pending_exception_ = exception_obj; 31 } 32 33 clear_pending_exception()34void Isolate::clear_pending_exception() { 35 DCHECK(!thread_local_top_.pending_exception_->IsException()); 36 thread_local_top_.pending_exception_ = heap_.the_hole_value(); 37 } 38 39 has_pending_exception()40bool Isolate::has_pending_exception() { 41 DCHECK(!thread_local_top_.pending_exception_->IsException()); 42 return !thread_local_top_.pending_exception_->IsTheHole(); 43 } 44 45 clear_pending_message()46void Isolate::clear_pending_message() { 47 thread_local_top_.pending_message_obj_ = heap_.the_hole_value(); 48 } 49 50 scheduled_exception()51Object* Isolate::scheduled_exception() { 52 DCHECK(has_scheduled_exception()); 53 DCHECK(!thread_local_top_.scheduled_exception_->IsException()); 54 return thread_local_top_.scheduled_exception_; 55 } 56 57 has_scheduled_exception()58bool Isolate::has_scheduled_exception() { 59 DCHECK(!thread_local_top_.scheduled_exception_->IsException()); 60 return thread_local_top_.scheduled_exception_ != heap_.the_hole_value(); 61 } 62 63 clear_scheduled_exception()64void Isolate::clear_scheduled_exception() { 65 DCHECK(!thread_local_top_.scheduled_exception_->IsException()); 66 thread_local_top_.scheduled_exception_ = heap_.the_hole_value(); 67 } 68 69 is_catchable_by_javascript(Object * exception)70bool Isolate::is_catchable_by_javascript(Object* exception) { 71 return exception != heap()->termination_exception(); 72 } 73 74 global_object()75Handle<JSGlobalObject> Isolate::global_object() { 76 return Handle<JSGlobalObject>(context()->global_object(), this); 77 } 78 79 ExceptionScope(Isolate * isolate)80Isolate::ExceptionScope::ExceptionScope(Isolate* isolate) 81 : isolate_(isolate), 82 pending_exception_(isolate_->pending_exception(), isolate_) {} 83 84 ~ExceptionScope()85Isolate::ExceptionScope::~ExceptionScope() { 86 isolate_->set_pending_exception(*pending_exception_); 87 } 88 89 90 #define NATIVE_CONTEXT_FIELD_ACCESSOR(index, type, name) \ 91 Handle<type> Isolate::name() { \ 92 return Handle<type>(native_context()->name(), this); \ 93 } \ 94 bool Isolate::is_##name(type* value) { \ 95 return native_context()->is_##name(value); \ 96 } 97 NATIVE_CONTEXT_FIELDS(NATIVE_CONTEXT_FIELD_ACCESSOR) 98 #undef NATIVE_CONTEXT_FIELD_ACCESSOR 99 100 101 } // namespace internal 102 } // namespace v8 103 104 #endif // V8_ISOLATE_INL_H_ 105