47 StackGuard::StackGuard()
52 void StackGuard::set_interrupt_limits(
const ExecutionAccess& lock) {
55 if (should_postpone_interrupts(lock))
return;
56 thread_local_.jslimit_ = kInterruptLimit;
57 thread_local_.climit_ = kInterruptLimit;
62 void StackGuard::reset_limits(
const ExecutionAccess& lock) {
64 thread_local_.jslimit_ = thread_local_.real_jslimit_;
65 thread_local_.climit_ = thread_local_.real_climit_;
70 static Handle<Object> Invoke(
bool is_construct,
71 Handle<JSFunction>
function,
72 Handle<Object> receiver,
74 Handle<Object> args[],
75 bool* has_pending_exception) {
76 Isolate* isolate =
function->GetIsolate();
79 VMState<JS> state(isolate);
82 isolate->ThrowIllegalOperation();
83 *has_pending_exception =
true;
84 isolate->ReportPendingMessages();
85 return Handle<Object>();
91 typedef Object* (*JSEntryFunction)(
byte* entry,
97 Handle<Code>
code = is_construct
98 ? isolate->factory()->js_construct_entry_code()
99 : isolate->factory()->js_entry_code();
104 if (receiver->IsGlobalObject()) {
106 receiver = Handle<JSObject>(global->global_receiver());
111 ASSERT(function->context()->global_object()->IsGlobalObject());
116 SaveContext save(isolate);
117 SealHandleScope shs(isolate);
118 JSEntryFunction stub_entry = FUNCTION_CAST<JSEntryFunction>(code->entry());
121 byte* function_entry =
function->code()->entry();
122 JSFunction* func = *
function;
123 Object* recv = *receiver;
124 Object*** argv =
reinterpret_cast<Object***
>(args);
134 *has_pending_exception = value->IsException();
135 ASSERT(*has_pending_exception == isolate->has_pending_exception());
136 if (*has_pending_exception) {
137 isolate->ReportPendingMessages();
138 #ifdef ENABLE_DEBUGGER_SUPPORT
140 if (isolate->debugger()->IsDebuggerActive()) {
141 isolate->debug()->ClearStepping();
143 #endif // ENABLE_DEBUGGER_SUPPORT
144 return Handle<Object>();
146 isolate->clear_pending_message();
149 return Handle<Object>(value->ToObjectUnchecked(), isolate);
158 bool* pending_exception,
159 bool convert_receiver) {
160 *pending_exception =
false;
162 if (!callable->IsJSFunction()) {
164 if (*pending_exception)
return callable;
169 if (convert_receiver && !receiver->IsJSReceiver() &&
170 !func->shared()->native() &&
171 func->shared()->strict_mode() ==
SLOPPY) {
173 Object* global = func->context()->global_object()->global_receiver();
177 if (!global->IsJSBuiltinsObject()) {
181 receiver =
ToObject(isolate, receiver, pending_exception);
183 if (*pending_exception)
return callable;
186 return Invoke(
false, func, receiver, argc, argv, pending_exception);
193 bool* pending_exception) {
194 return Invoke(
true, func, func->GetIsolate()->global_object(), argc, argv,
203 bool* caught_exception) {
211 *caught_exception =
false;
215 Isolate* isolate = func->GetIsolate();
219 if (*caught_exception) {
222 ASSERT(isolate->external_caught_exception());
224 isolate->
heap()->termination_exception()) {
225 result = isolate->
factory()->termination_exception();
233 ASSERT(!isolate->external_caught_exception());
240 ASSERT(!object->IsJSFunction());
247 Object* fun = *object;
248 while (fun->IsJSFunctionProxy()) {
255 if (fun->IsHeapObject() &&
261 return factory->undefined_value();
267 bool* has_pending_exception) {
268 ASSERT(!object->IsJSFunction());
271 Object* fun = *object;
272 while (fun->IsJSFunctionProxy()) {
279 if (fun->IsHeapObject() &&
288 "called_non_callable", i::HandleVector<i::Object>(&
object, 1));
289 isolate->
Throw(*error_obj);
290 *has_pending_exception =
true;
292 return isolate->
factory()->undefined_value();
298 ASSERT(!object->IsJSFunction());
304 Object* fun = *object;
305 while (fun->IsJSFunctionProxy()) {
312 if (fun->IsHeapObject() &&
318 return isolate->
factory()->undefined_value();
325 bool* has_pending_exception) {
326 ASSERT(!object->IsJSFunction());
332 Object* fun = *object;
333 while (fun->IsJSFunctionProxy()) {
340 if (fun->IsHeapObject() &&
349 "called_non_callable", i::HandleVector<i::Object>(&
object, 1));
350 isolate->
Throw(*error_obj);
351 *has_pending_exception =
true;
353 return isolate->
factory()->undefined_value();
358 ASSERT(isolate->microtask_pending());
362 isolate->run_microtasks(),
363 isolate->
factory()->undefined_value(),
376 isolate->enqueue_external_microtask(),
377 isolate->
factory()->undefined_value(),
386 ExecutionAccess access(isolate_);
387 return (thread_local_.jslimit_ != kInterruptLimit &&
388 thread_local_.climit_ != kInterruptLimit);
392 void StackGuard::EnableInterrupts() {
393 ExecutionAccess access(isolate_);
394 if (has_pending_interrupts(access)) {
395 set_interrupt_limits(access);
401 ExecutionAccess access(isolate_);
405 if (thread_local_.jslimit_ == thread_local_.real_jslimit_) {
406 thread_local_.jslimit_ =
jslimit;
408 if (thread_local_.climit_ == thread_local_.real_climit_) {
409 thread_local_.climit_ = limit;
411 thread_local_.real_climit_ = limit;
412 thread_local_.real_jslimit_ =
jslimit;
416 void StackGuard::DisableInterrupts() {
417 ExecutionAccess access(isolate_);
418 reset_limits(access);
423 ExecutionAccess access(isolate_);
424 return should_postpone_interrupts(access);
429 ExecutionAccess access(isolate_);
430 return (thread_local_.interrupt_flags_ &
INTERRUPT) != 0;
435 ExecutionAccess access(isolate_);
436 thread_local_.interrupt_flags_ |=
INTERRUPT;
437 set_interrupt_limits(access);
442 ExecutionAccess access(isolate_);
443 return thread_local_.interrupt_flags_ &
PREEMPT;
448 ExecutionAccess access(isolate_);
449 thread_local_.interrupt_flags_ |=
PREEMPT;
450 set_interrupt_limits(access);
455 ExecutionAccess access(isolate_);
456 return (thread_local_.interrupt_flags_ &
TERMINATE) != 0;
461 ExecutionAccess access(isolate_);
468 ExecutionAccess access(isolate_);
469 thread_local_.interrupt_flags_ |=
TERMINATE;
470 set_interrupt_limits(access);
475 ExecutionAccess access(isolate_);
476 return (thread_local_.interrupt_flags_ &
GC_REQUEST) != 0;
481 ExecutionAccess access(isolate_);
483 if (thread_local_.postpone_interrupts_nesting_ == 0) {
484 thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit;
491 ExecutionAccess access(isolate_);
492 return (thread_local_.interrupt_flags_ &
INSTALL_CODE) != 0;
497 ExecutionAccess access(isolate_);
499 if (thread_local_.postpone_interrupts_nesting_ == 0) {
500 thread_local_.jslimit_ = thread_local_.climit_ = kInterruptLimit;
507 ExecutionAccess access(isolate_);
508 return (thread_local_.interrupt_flags_ &
FULL_DEOPT) != 0;
513 ExecutionAccess access(isolate_);
515 set_interrupt_limits(access);
520 ExecutionAccess access(isolate_);
526 ExecutionAccess access(isolate_);
528 set_interrupt_limits(access);
532 #ifdef ENABLE_DEBUGGER_SUPPORT
533 bool StackGuard::IsDebugBreak() {
534 ExecutionAccess access(isolate_);
535 return thread_local_.interrupt_flags_ &
DEBUGBREAK;
539 void StackGuard::DebugBreak() {
540 ExecutionAccess access(isolate_);
542 set_interrupt_limits(access);
546 bool StackGuard::IsDebugCommand() {
547 ExecutionAccess access(isolate_);
552 void StackGuard::DebugCommand() {
553 if (FLAG_debugger_auto_break) {
554 ExecutionAccess access(isolate_);
556 set_interrupt_limits(access);
562 ExecutionAccess access(isolate_);
563 thread_local_.interrupt_flags_ &= ~static_cast<
int>(after_what);
564 if (!should_postpone_interrupts(access) && !has_pending_interrupts(access)) {
565 reset_limits(access);
571 ExecutionAccess access(isolate_);
573 thread_local_.interrupt_callback_ = callback;
574 thread_local_.interrupt_callback_data_ = data;
575 set_interrupt_limits(access);
580 thread_local_.interrupt_callback_ = 0;
581 thread_local_.interrupt_callback_data_ = 0;
587 ExecutionAccess access(isolate_);
597 ExecutionAccess access(isolate_);
598 callback = thread_local_.interrupt_callback_;
599 data = thread_local_.interrupt_callback_data_;
600 thread_local_.interrupt_callback_ =
NULL;
601 thread_local_.interrupt_callback_data_ =
NULL;
604 if (callback !=
NULL) {
607 callback(reinterpret_cast<v8::Isolate*>(isolate_), data);
613 ExecutionAccess access(isolate_);
614 OS::MemCopy(to, reinterpret_cast<char*>(&thread_local_),
sizeof(ThreadLocal));
623 thread_local_ = blank;
625 return to +
sizeof(ThreadLocal);
630 ExecutionAccess access(isolate_);
632 reinterpret_cast<char*>(&thread_local_), from,
sizeof(ThreadLocal));
634 return from +
sizeof(ThreadLocal);
640 isolate_->FindOrAllocatePerThreadDataForThisThread();
641 per_thread->set_stack_limit(thread_local_.real_climit_);
645 void StackGuard::ThreadLocal::Clear() {
646 real_jslimit_ = kIllegalLimit;
647 jslimit_ = kIllegalLimit;
648 real_climit_ = kIllegalLimit;
649 climit_ = kIllegalLimit;
651 postpone_interrupts_nesting_ = 0;
652 interrupt_flags_ = 0;
653 interrupt_callback_ =
NULL;
654 interrupt_callback_data_ =
NULL;
658 bool StackGuard::ThreadLocal::Initialize(
Isolate* isolate) {
659 bool should_set_stack_limits =
false;
660 if (real_climit_ == kIllegalLimit) {
663 const uintptr_t kLimitSize = FLAG_stack_size *
KB;
664 uintptr_t limit =
reinterpret_cast<uintptr_t
>(&limit) - kLimitSize;
665 ASSERT(reinterpret_cast<uintptr_t>(&limit) > kLimitSize);
668 real_climit_ = limit;
670 should_set_stack_limits =
true;
673 postpone_interrupts_nesting_ = 0;
674 interrupt_flags_ = 0;
675 interrupt_callback_ =
NULL;
676 interrupt_callback_data_ =
NULL;
677 return should_set_stack_limits;
682 thread_local_.Clear();
690 isolate_->FindOrAllocatePerThreadDataForThisThread();
691 uintptr_t stored_limit = per_thread->stack_limit();
693 if (stored_limit != 0) {
701 #define RETURN_NATIVE_CALL(name, args, has_pending_exception) \
703 Handle<Object> argv[] = args; \
704 ASSERT(has_pending_exception != NULL); \
705 return Call(isolate, \
706 isolate->name##_fun(), \
707 isolate->js_builtins_object(), \
708 ARRAY_SIZE(argv), argv, \
709 has_pending_exception); \
733 if (obj->IsSpecObject())
return obj;
762 #undef RETURN_NATIVE_CALL
769 pattern->GetIsolate()->native_context()->regexp_function());
771 function, pattern, flags, exc);
778 Isolate* isolate =
string->GetIsolate();
781 int int_index =
static_cast<int>(index);
782 if (int_index < 0 || int_index >= string->length()) {
783 return factory->undefined_value();
788 if (!char_at->IsJSFunction()) {
789 return factory->undefined_value();
792 bool caught_exception;
800 if (caught_exception) {
801 return factory->undefined_value();
810 Isolate* isolate = data->GetIsolate();
811 if (!data->do_not_cache()) {
813 int serial_number =
Smi::cast(data->serial_number())->value();
822 isolate->instantiate_fun(),
834 Isolate* isolate = data->GetIsolate();
835 if (data->property_list()->IsUndefined() &&
836 !data->constructor()->IsUndefined()) {
838 Object* result =
NULL;
855 isolate->instantiate_fun(),
872 isolate->configure_instance_fun(),
884 Isolate* isolate = fun->GetIsolate();
886 bool caught_exception;
892 if (caught_exception || !result->
IsString()) {
893 return isolate->
factory()->empty_string();
900 static Object* RuntimePreempt(
Isolate* isolate) {
904 #ifdef ENABLE_DEBUGGER_SUPPORT
905 if (isolate->debug()->InDebugger()) {
908 isolate->debug()->PreemptionWhileInDebugger();
911 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
917 v8::Unlocker unlocker(reinterpret_cast<v8::Isolate*>(isolate));
922 return isolate->
heap()->undefined_value();
926 #ifdef ENABLE_DEBUGGER_SUPPORT
927 Object* Execution::DebugBreakHelper(Isolate* isolate) {
929 if (isolate->debug()->disable_break()) {
930 return isolate->heap()->undefined_value();
934 if (isolate->bootstrapper()->IsActive()) {
935 return isolate->heap()->undefined_value();
939 if (!isolate->debugger()->IsDebuggerActive()) {
940 return isolate->heap()->undefined_value();
943 StackLimitCheck
check(isolate);
944 if (
check.HasOverflowed()) {
945 return isolate->heap()->undefined_value();
949 JavaScriptFrameIterator it(isolate);
951 Object* fun = it.frame()->function();
952 if (fun && fun->IsJSFunction()) {
955 return isolate->heap()->undefined_value();
959 if (isolate->debug()->IsDebugGlobal(global)) {
960 return isolate->heap()->undefined_value();
966 bool debug_command_only =
967 isolate->stack_guard()->IsDebugCommand() &&
968 !isolate->stack_guard()->IsDebugBreak();
973 ProcessDebugMessages(isolate, debug_command_only);
976 return isolate->heap()->undefined_value();
980 void Execution::ProcessDebugMessages(Isolate* isolate,
981 bool debug_command_only) {
985 StackLimitCheck
check(isolate);
986 if (
check.HasOverflowed()) {
990 HandleScope scope(isolate);
992 EnterDebugger debugger(isolate);
993 if (debugger.FailedToEnter()) {
999 isolate->debugger()->OnDebugBreak(isolate->factory()->undefined_value(),
1000 debug_command_only);
1009 return isolate->
heap()->undefined_value();
1019 "StackGuard GC request");
1023 isolate->
counters()->stack_interrupts()->Increment();
1024 isolate->
counters()->runtime_profiler_ticks()->Increment();
1025 #ifdef ENABLE_DEBUGGER_SUPPORT
1026 if (stack_guard->IsDebugBreak() || stack_guard->IsDebugCommand()) {
1027 DebugBreakHelper(isolate);
1030 if (stack_guard->
IsPreempted()) RuntimePreempt(isolate);
1053 return isolate->
heap()->undefined_value();
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
static Handle< Object > New(Handle< JSFunction > func, int argc, Handle< Object > argv[], bool *pending_exception)
Failure * StackOverflow()
void InstallOptimizedFunctions()
static Handle< Object > TryCall(Handle< JSFunction > func, Handle< Object > receiver, int argc, Handle< Object > argv[], bool *caught_exception)
MaybeObject * pending_exception()
void DeoptMarkedAllocationSites()
void CollectAllGarbage(int flags, const char *gc_reason=NULL, const GCCallbackFlags gc_callback_flags=kNoGCCallbackFlags)
Local< Value > Exception() const
static Handle< Object > ToNumber(Isolate *isolate, Handle< Object > obj, bool *exc)
static Handle< Object > ToObject(Isolate *isolate, Handle< Object > obj, bool *exc)
void SetCaptureMessage(bool value)
static HeapObject * cast(Object *obj)
static Handle< T > cast(Handle< S > that)
static Handle< Object > CreateRegExpLiteral(Handle< JSFunction > constructor, Handle< String > pattern, Handle< String > flags, bool *has_pending_exception)
kSerializedDataOffset Object
static Handle< Object > GetFunctionDelegate(Isolate *isolate, Handle< Object > object)
static Handle< Object > GetElementNoExceptionThrown(Isolate *isolate, Handle< Object > object, uint32_t index)
static Handle< Object > NewDate(Isolate *isolate, double time, bool *exc)
#define ASSERT(condition)
static Handle< Object > TryGetFunctionDelegate(Isolate *isolate, Handle< Object > object, bool *has_pending_exception)
bool concurrent_recompilation_enabled()
static Handle< Object > ToDetailString(Isolate *isolate, Handle< Object > obj, bool *exc)
static bool IsAllowed(Isolate *isolate)
Handle< Object > NewNumber(double value, PretenureFlag pretenure=NOT_TENURED)
bool IsDeoptMarkedAllocationSites()
void SetVerbose(bool value)
Handle< Object > GetProperty(Handle< JSReceiver > obj, const char *name)
static Smi * cast(Object *object)
StackGuard * stack_guard()
bool has_instance_call_handler()
bool OptionalRescheduleException(bool is_bottom_call)
GlobalObject * global_object()
void InvokeInterruptCallback()
static JSFunctionProxy * cast(Object *obj)
V8_INLINE bool IsNull() const
static Handle< Object > CharAt(Handle< String > str, uint32_t index)
char * RestoreStackGuard(char *from)
void ClearThread(const ExecutionAccess &lock)
void RequestInterrupt(InterruptCallback callback, void *data)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage including flags
static void MemCopy(void *dest, const void *src, size_t size)
RuntimeProfiler * runtime_profiler()
char * ArchiveStackGuard(char *to)
static MUST_USE_RESULT MaybeObject * HandleStackGuardInterrupt(Isolate *isolate)
bool IsTerminateExecution()
static const int kNoGCFlags
void TerminateExecution()
void check(i::Vector< const uint8_t > string)
Handle< Object > NewTypeError(const char *message, Vector< Handle< Object > > args)
static void ConfigureInstance(Isolate *isolate, Handle< Object > instance, Handle< Object > data, bool *exc)
static uintptr_t JsLimitFromCLimit(v8::internal::Isolate *isolate, uintptr_t c_limit)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
static FunctionTemplateInfo * cast(Object *obj)
static void DeoptimizeAll(Isolate *isolate)
static Handle< Object > ToInteger(Isolate *isolate, Handle< Object > obj, bool *exc)
void DeoptMarkedAllocationSites()
static Handle< Object > TryGetConstructorDelegate(Isolate *isolate, Handle< Object > object, bool *has_pending_exception)
void CancelTerminateExecution()
static Handle< JSRegExp > NewJSRegExp(Handle< String > pattern, Handle< String > flags, bool *exc)
#define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4)
bool has_pending_exception()
static void EnqueueMicrotask(Isolate *isolate, Handle< Object > microtask)
Handle< JSBuiltinsObject > js_builtins_object()
Failure * Throw(Object *exception, MessageLocation *location=NULL)
V8_INLINE bool IsUndefined() const
static v8::internal::Handle< To > OpenHandle(v8::Local< From > handle)
V8_INLINE bool IsString() const
Handle< Object > NewNumberFromInt(int32_t value, PretenureFlag pretenure=NOT_TENURED)
static Handle< JSFunction > InstantiateFunction(Handle< FunctionTemplateInfo > data, bool *exc)
bool ShouldPostponeInterrupts()
static Handle< Object > Call(Isolate *isolate, Handle< Object > callable, Handle< Object > receiver, int argc, Handle< Object > argv[], bool *pending_exception, bool convert_receiver=false)
void Continue(InterruptFlag after_what)
static Handle< Object > ToInt32(Isolate *isolate, Handle< Object > obj, bool *exc)
bool IsInstallCodeRequest()
static Handle< Object > GetConstructorDelegate(Isolate *isolate, Handle< Object > object)
static Handle< T > null()
#define RETURN_NATIVE_CALL(name, args, has_pending_exception)
void(* InterruptCallback)(Isolate *isolate, void *data)
static Handle< Object > ToUint32(Isolate *isolate, Handle< Object > obj, bool *exc)
static Handle< JSObject > InstantiateObject(Handle< ObjectTemplateInfo > data, bool *exc)
Failure * TerminateExecution()
OptimizingCompilerThread * optimizing_compiler_thread()
static Handle< String > GetStackTraceLine(Handle< Object > recv, Handle< JSFunction > fun, Handle< Object > pos, Handle< Object > is_global)
Handle< Context > native_context()
void FreeThreadResources()
static void RunMicrotasks(Isolate *isolate)
void SetStackLimit(uintptr_t limit)
static Handle< Object > ToString(Isolate *isolate, Handle< Object > obj, bool *exc)
static JSObject * cast(Object *obj)
void RequestInstallCode()
void CancelTerminateExecution()
void InitThread(const ExecutionAccess &lock)
static JSFunction * cast(Object *obj)