| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_ISOLATE_H_ | 5 #ifndef V8_ISOLATE_H_ |
| 6 #define V8_ISOLATE_H_ | 6 #define V8_ISOLATE_H_ |
| 7 | 7 |
| 8 #include "include/v8-debug.h" | 8 #include "include/v8-debug.h" |
| 9 #include "src/allocation.h" | 9 #include "src/allocation.h" |
| 10 #include "src/assert-scope.h" | 10 #include "src/assert-scope.h" |
| 11 #include "src/base/atomicops.h" | 11 #include "src/base/atomicops.h" |
| 12 #include "src/builtins.h" | 12 #include "src/builtins.h" |
| 13 #include "src/contexts.h" | 13 #include "src/contexts.h" |
| 14 #include "src/date.h" | 14 #include "src/date.h" |
| 15 #include "src/execution.h" | 15 #include "src/execution.h" |
| 16 #include "src/frames.h" | 16 #include "src/frames.h" |
| 17 #include "src/global-handles.h" | 17 #include "src/global-handles.h" |
| 18 #include "src/handles.h" | 18 #include "src/handles.h" |
| 19 #include "src/hashmap.h" | 19 #include "src/hashmap.h" |
| 20 #include "src/heap.h" | 20 #include "src/heap.h" |
| 21 #include "src/optimizing-compiler-thread.h" | 21 #include "src/optimizing-compiler-thread.h" |
| 22 #include "src/regexp-stack.h" | 22 #include "src/regexp-stack.h" |
| 23 #include "src/runtime.h" | 23 #include "src/runtime.h" |
| 24 #include "src/runtime-profiler.h" | 24 #include "src/runtime-profiler.h" |
| 25 #include "src/zone.h" | 25 #include "src/zone.h" |
| 26 | 26 |
| 27 namespace v8 { | 27 namespace v8 { |
| 28 |
| 29 namespace base { |
| 30 class RandomNumberGenerator; |
| 31 } |
| 32 |
| 28 namespace internal { | 33 namespace internal { |
| 29 | 34 |
| 30 class Bootstrapper; | 35 class Bootstrapper; |
| 31 class CallInterfaceDescriptor; | 36 class CallInterfaceDescriptor; |
| 32 class CodeGenerator; | 37 class CodeGenerator; |
| 33 class CodeRange; | 38 class CodeRange; |
| 34 class CodeStubInterfaceDescriptor; | 39 class CodeStubInterfaceDescriptor; |
| 35 class CodeTracer; | 40 class CodeTracer; |
| 36 class CompilationCache; | 41 class CompilationCache; |
| 37 class ConsStringIteratorOp; | 42 class ConsStringIteratorOp; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 48 class FunctionInfoListener; | 53 class FunctionInfoListener; |
| 49 class HandleScopeImplementer; | 54 class HandleScopeImplementer; |
| 50 class HeapProfiler; | 55 class HeapProfiler; |
| 51 class HStatistics; | 56 class HStatistics; |
| 52 class HTracer; | 57 class HTracer; |
| 53 class InlineRuntimeFunctionsTable; | 58 class InlineRuntimeFunctionsTable; |
| 54 class InnerPointerToCodeCache; | 59 class InnerPointerToCodeCache; |
| 55 class MaterializedObjectStore; | 60 class MaterializedObjectStore; |
| 56 class NoAllocationStringAllocator; | 61 class NoAllocationStringAllocator; |
| 57 class CodeAgingHelper; | 62 class CodeAgingHelper; |
| 58 class RandomNumberGenerator; | |
| 59 class RegExpStack; | 63 class RegExpStack; |
| 60 class SaveContext; | 64 class SaveContext; |
| 61 class StringTracker; | 65 class StringTracker; |
| 62 class StubCache; | 66 class StubCache; |
| 63 class SweeperThread; | 67 class SweeperThread; |
| 64 class ThreadManager; | 68 class ThreadManager; |
| 65 class ThreadState; | 69 class ThreadState; |
| 66 class ThreadVisitor; // Defined in v8threads.h | 70 class ThreadVisitor; // Defined in v8threads.h |
| 67 class UnicodeCache; | 71 class UnicodeCache; |
| 68 template <StateTag Tag> class VMState; | 72 template <StateTag Tag> class VMState; |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 #define DECLARE_ENUM(CamelName, hacker_name) k##CamelName##Address, | 442 #define DECLARE_ENUM(CamelName, hacker_name) k##CamelName##Address, |
| 439 FOR_EACH_ISOLATE_ADDRESS_NAME(DECLARE_ENUM) | 443 FOR_EACH_ISOLATE_ADDRESS_NAME(DECLARE_ENUM) |
| 440 #undef DECLARE_ENUM | 444 #undef DECLARE_ENUM |
| 441 kIsolateAddressCount | 445 kIsolateAddressCount |
| 442 }; | 446 }; |
| 443 | 447 |
| 444 // Returns the PerIsolateThreadData for the current thread (or NULL if one is | 448 // Returns the PerIsolateThreadData for the current thread (or NULL if one is |
| 445 // not currently set). | 449 // not currently set). |
| 446 static PerIsolateThreadData* CurrentPerIsolateThreadData() { | 450 static PerIsolateThreadData* CurrentPerIsolateThreadData() { |
| 447 return reinterpret_cast<PerIsolateThreadData*>( | 451 return reinterpret_cast<PerIsolateThreadData*>( |
| 448 Thread::GetThreadLocal(per_isolate_thread_data_key_)); | 452 base::Thread::GetThreadLocal(per_isolate_thread_data_key_)); |
| 449 } | 453 } |
| 450 | 454 |
| 451 // Returns the isolate inside which the current thread is running. | 455 // Returns the isolate inside which the current thread is running. |
| 452 INLINE(static Isolate* Current()) { | 456 INLINE(static Isolate* Current()) { |
| 453 Isolate* isolate = reinterpret_cast<Isolate*>( | 457 Isolate* isolate = reinterpret_cast<Isolate*>( |
| 454 Thread::GetExistingThreadLocal(isolate_key_)); | 458 base::Thread::GetExistingThreadLocal(isolate_key_)); |
| 455 ASSERT(isolate != NULL); | 459 ASSERT(isolate != NULL); |
| 456 return isolate; | 460 return isolate; |
| 457 } | 461 } |
| 458 | 462 |
| 459 INLINE(static Isolate* UncheckedCurrent()) { | 463 INLINE(static Isolate* UncheckedCurrent()) { |
| 460 return reinterpret_cast<Isolate*>(Thread::GetThreadLocal(isolate_key_)); | 464 return reinterpret_cast<Isolate*>( |
| 465 base::Thread::GetThreadLocal(isolate_key_)); |
| 461 } | 466 } |
| 462 | 467 |
| 463 // Usually called by Init(), but can be called early e.g. to allow | 468 // Usually called by Init(), but can be called early e.g. to allow |
| 464 // testing components that require logging but not the whole | 469 // testing components that require logging but not the whole |
| 465 // isolate. | 470 // isolate. |
| 466 // | 471 // |
| 467 // Safe to call more than once. | 472 // Safe to call more than once. |
| 468 void InitializeLoggingAndCounters(); | 473 void InitializeLoggingAndCounters(); |
| 469 | 474 |
| 470 bool Init(Deserializer* des); | 475 bool Init(Deserializer* des); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 492 // If one does not yet exist, return null. | 497 // If one does not yet exist, return null. |
| 493 PerIsolateThreadData* FindPerThreadDataForThisThread(); | 498 PerIsolateThreadData* FindPerThreadDataForThisThread(); |
| 494 | 499 |
| 495 // Find the PerThread for given (isolate, thread) combination | 500 // Find the PerThread for given (isolate, thread) combination |
| 496 // If one does not yet exist, return null. | 501 // If one does not yet exist, return null. |
| 497 PerIsolateThreadData* FindPerThreadDataForThread(ThreadId thread_id); | 502 PerIsolateThreadData* FindPerThreadDataForThread(ThreadId thread_id); |
| 498 | 503 |
| 499 // Returns the key used to store the pointer to the current isolate. | 504 // Returns the key used to store the pointer to the current isolate. |
| 500 // Used internally for V8 threads that do not execute JavaScript but still | 505 // Used internally for V8 threads that do not execute JavaScript but still |
| 501 // are part of the domain of an isolate (like the context switcher). | 506 // are part of the domain of an isolate (like the context switcher). |
| 502 static Thread::LocalStorageKey isolate_key() { | 507 static base::Thread::LocalStorageKey isolate_key() { |
| 503 return isolate_key_; | 508 return isolate_key_; |
| 504 } | 509 } |
| 505 | 510 |
| 506 // Returns the key used to store process-wide thread IDs. | 511 // Returns the key used to store process-wide thread IDs. |
| 507 static Thread::LocalStorageKey thread_id_key() { | 512 static base::Thread::LocalStorageKey thread_id_key() { |
| 508 return thread_id_key_; | 513 return thread_id_key_; |
| 509 } | 514 } |
| 510 | 515 |
| 511 static Thread::LocalStorageKey per_isolate_thread_data_key(); | 516 static base::Thread::LocalStorageKey per_isolate_thread_data_key(); |
| 512 | 517 |
| 513 // Mutex for serializing access to break control structures. | 518 // Mutex for serializing access to break control structures. |
| 514 RecursiveMutex* break_access() { return &break_access_; } | 519 base::RecursiveMutex* break_access() { return &break_access_; } |
| 515 | 520 |
| 516 Address get_address_from_id(AddressId id); | 521 Address get_address_from_id(AddressId id); |
| 517 | 522 |
| 518 // Access to top context (where the current function object was created). | 523 // Access to top context (where the current function object was created). |
| 519 Context* context() { return thread_local_top_.context_; } | 524 Context* context() { return thread_local_top_.context_; } |
| 520 void set_context(Context* context) { | 525 void set_context(Context* context) { |
| 521 ASSERT(context == NULL || context->IsContext()); | 526 ASSERT(context == NULL || context->IsContext()); |
| 522 thread_local_top_.context_ = context; | 527 thread_local_top_.context_ = context; |
| 523 } | 528 } |
| 524 Context** context_address() { return &thread_local_top_.context_; } | 529 Context** context_address() { return &thread_local_top_.context_; } |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 972 bool serializer_enabled() const { return serializer_enabled_; } | 977 bool serializer_enabled() const { return serializer_enabled_; } |
| 973 | 978 |
| 974 bool IsDead() { return has_fatal_error_; } | 979 bool IsDead() { return has_fatal_error_; } |
| 975 void SignalFatalError() { has_fatal_error_ = true; } | 980 void SignalFatalError() { has_fatal_error_ = true; } |
| 976 | 981 |
| 977 bool use_crankshaft() const; | 982 bool use_crankshaft() const; |
| 978 | 983 |
| 979 bool initialized_from_snapshot() { return initialized_from_snapshot_; } | 984 bool initialized_from_snapshot() { return initialized_from_snapshot_; } |
| 980 | 985 |
| 981 double time_millis_since_init() { | 986 double time_millis_since_init() { |
| 982 return OS::TimeCurrentMillis() - time_millis_at_init_; | 987 return base::OS::TimeCurrentMillis() - time_millis_at_init_; |
| 983 } | 988 } |
| 984 | 989 |
| 985 DateCache* date_cache() { | 990 DateCache* date_cache() { |
| 986 return date_cache_; | 991 return date_cache_; |
| 987 } | 992 } |
| 988 | 993 |
| 989 void set_date_cache(DateCache* date_cache) { | 994 void set_date_cache(DateCache* date_cache) { |
| 990 if (date_cache != date_cache_) { | 995 if (date_cache != date_cache_) { |
| 991 delete date_cache_; | 996 delete date_cache_; |
| 992 } | 997 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1051 HTracer* GetHTracer(); | 1056 HTracer* GetHTracer(); |
| 1052 CodeTracer* GetCodeTracer(); | 1057 CodeTracer* GetCodeTracer(); |
| 1053 | 1058 |
| 1054 FunctionEntryHook function_entry_hook() { return function_entry_hook_; } | 1059 FunctionEntryHook function_entry_hook() { return function_entry_hook_; } |
| 1055 void set_function_entry_hook(FunctionEntryHook function_entry_hook) { | 1060 void set_function_entry_hook(FunctionEntryHook function_entry_hook) { |
| 1056 function_entry_hook_ = function_entry_hook; | 1061 function_entry_hook_ = function_entry_hook; |
| 1057 } | 1062 } |
| 1058 | 1063 |
| 1059 void* stress_deopt_count_address() { return &stress_deopt_count_; } | 1064 void* stress_deopt_count_address() { return &stress_deopt_count_; } |
| 1060 | 1065 |
| 1061 inline RandomNumberGenerator* random_number_generator(); | 1066 inline base::RandomNumberGenerator* random_number_generator(); |
| 1062 | 1067 |
| 1063 // Given an address occupied by a live code object, return that object. | 1068 // Given an address occupied by a live code object, return that object. |
| 1064 Object* FindCodeObject(Address a); | 1069 Object* FindCodeObject(Address a); |
| 1065 | 1070 |
| 1066 int NextOptimizationId() { | 1071 int NextOptimizationId() { |
| 1067 int id = next_optimization_id_++; | 1072 int id = next_optimization_id_++; |
| 1068 if (!Smi::IsValid(next_optimization_id_)) { | 1073 if (!Smi::IsValid(next_optimization_id_)) { |
| 1069 next_optimization_id_ = 0; | 1074 next_optimization_id_ = 0; |
| 1070 } | 1075 } |
| 1071 return id; | 1076 return id; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 int entry_count; | 1142 int entry_count; |
| 1138 PerIsolateThreadData* previous_thread_data; | 1143 PerIsolateThreadData* previous_thread_data; |
| 1139 Isolate* previous_isolate; | 1144 Isolate* previous_isolate; |
| 1140 EntryStackItem* previous_item; | 1145 EntryStackItem* previous_item; |
| 1141 | 1146 |
| 1142 private: | 1147 private: |
| 1143 DISALLOW_COPY_AND_ASSIGN(EntryStackItem); | 1148 DISALLOW_COPY_AND_ASSIGN(EntryStackItem); |
| 1144 }; | 1149 }; |
| 1145 | 1150 |
| 1146 // This mutex protects highest_thread_id_ and thread_data_table_. | 1151 // This mutex protects highest_thread_id_ and thread_data_table_. |
| 1147 static Mutex process_wide_mutex_; | 1152 static base::Mutex process_wide_mutex_; |
| 1148 | 1153 |
| 1149 static Thread::LocalStorageKey per_isolate_thread_data_key_; | 1154 static base::Thread::LocalStorageKey per_isolate_thread_data_key_; |
| 1150 static Thread::LocalStorageKey isolate_key_; | 1155 static base::Thread::LocalStorageKey isolate_key_; |
| 1151 static Thread::LocalStorageKey thread_id_key_; | 1156 static base::Thread::LocalStorageKey thread_id_key_; |
| 1152 static ThreadDataTable* thread_data_table_; | 1157 static ThreadDataTable* thread_data_table_; |
| 1153 | 1158 |
| 1154 // A global counter for all generated Isolates, might overflow. | 1159 // A global counter for all generated Isolates, might overflow. |
| 1155 static base::Atomic32 isolate_counter_; | 1160 static base::Atomic32 isolate_counter_; |
| 1156 | 1161 |
| 1157 void Deinit(); | 1162 void Deinit(); |
| 1158 | 1163 |
| 1159 static void SetIsolateThreadLocals(Isolate* isolate, | 1164 static void SetIsolateThreadLocals(Isolate* isolate, |
| 1160 PerIsolateThreadData* data); | 1165 PerIsolateThreadData* data); |
| 1161 | 1166 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 base::Atomic32 id_; | 1200 base::Atomic32 id_; |
| 1196 EntryStackItem* entry_stack_; | 1201 EntryStackItem* entry_stack_; |
| 1197 int stack_trace_nesting_level_; | 1202 int stack_trace_nesting_level_; |
| 1198 StringStream* incomplete_message_; | 1203 StringStream* incomplete_message_; |
| 1199 Address isolate_addresses_[kIsolateAddressCount + 1]; // NOLINT | 1204 Address isolate_addresses_[kIsolateAddressCount + 1]; // NOLINT |
| 1200 Bootstrapper* bootstrapper_; | 1205 Bootstrapper* bootstrapper_; |
| 1201 RuntimeProfiler* runtime_profiler_; | 1206 RuntimeProfiler* runtime_profiler_; |
| 1202 CompilationCache* compilation_cache_; | 1207 CompilationCache* compilation_cache_; |
| 1203 Counters* counters_; | 1208 Counters* counters_; |
| 1204 CodeRange* code_range_; | 1209 CodeRange* code_range_; |
| 1205 RecursiveMutex break_access_; | 1210 base::RecursiveMutex break_access_; |
| 1206 base::Atomic32 debugger_initialized_; | 1211 base::Atomic32 debugger_initialized_; |
| 1207 Logger* logger_; | 1212 Logger* logger_; |
| 1208 StackGuard stack_guard_; | 1213 StackGuard stack_guard_; |
| 1209 StatsTable* stats_table_; | 1214 StatsTable* stats_table_; |
| 1210 StubCache* stub_cache_; | 1215 StubCache* stub_cache_; |
| 1211 CodeAgingHelper* code_aging_helper_; | 1216 CodeAgingHelper* code_aging_helper_; |
| 1212 DeoptimizerData* deoptimizer_data_; | 1217 DeoptimizerData* deoptimizer_data_; |
| 1213 MaterializedObjectStore* materialized_object_store_; | 1218 MaterializedObjectStore* materialized_object_store_; |
| 1214 ThreadLocalTop thread_local_top_; | 1219 ThreadLocalTop thread_local_top_; |
| 1215 bool capture_stack_trace_for_uncaught_exceptions_; | 1220 bool capture_stack_trace_for_uncaught_exceptions_; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1237 ConsStringIteratorOp objects_string_compare_iterator_a_; | 1242 ConsStringIteratorOp objects_string_compare_iterator_a_; |
| 1238 ConsStringIteratorOp objects_string_compare_iterator_b_; | 1243 ConsStringIteratorOp objects_string_compare_iterator_b_; |
| 1239 StaticResource<ConsStringIteratorOp> objects_string_iterator_; | 1244 StaticResource<ConsStringIteratorOp> objects_string_iterator_; |
| 1240 unibrow::Mapping<unibrow::Ecma262Canonicalize> | 1245 unibrow::Mapping<unibrow::Ecma262Canonicalize> |
| 1241 regexp_macro_assembler_canonicalize_; | 1246 regexp_macro_assembler_canonicalize_; |
| 1242 RegExpStack* regexp_stack_; | 1247 RegExpStack* regexp_stack_; |
| 1243 DateCache* date_cache_; | 1248 DateCache* date_cache_; |
| 1244 unibrow::Mapping<unibrow::Ecma262Canonicalize> interp_canonicalize_mapping_; | 1249 unibrow::Mapping<unibrow::Ecma262Canonicalize> interp_canonicalize_mapping_; |
| 1245 CodeStubInterfaceDescriptor* code_stub_interface_descriptors_; | 1250 CodeStubInterfaceDescriptor* code_stub_interface_descriptors_; |
| 1246 CallInterfaceDescriptor* call_descriptors_; | 1251 CallInterfaceDescriptor* call_descriptors_; |
| 1247 RandomNumberGenerator* random_number_generator_; | 1252 base::RandomNumberGenerator* random_number_generator_; |
| 1248 | 1253 |
| 1249 // Whether the isolate has been created for snapshotting. | 1254 // Whether the isolate has been created for snapshotting. |
| 1250 bool serializer_enabled_; | 1255 bool serializer_enabled_; |
| 1251 | 1256 |
| 1252 // True if fatal error has been signaled for this isolate. | 1257 // True if fatal error has been signaled for this isolate. |
| 1253 bool has_fatal_error_; | 1258 bool has_fatal_error_; |
| 1254 | 1259 |
| 1255 // True if this isolate was initialized from a snapshot. | 1260 // True if this isolate was initialized from a snapshot. |
| 1256 bool initialized_from_snapshot_; | 1261 bool initialized_from_snapshot_; |
| 1257 | 1262 |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1445 : file_(NULL), | 1450 : file_(NULL), |
| 1446 scope_depth_(0) { | 1451 scope_depth_(0) { |
| 1447 if (!ShouldRedirect()) { | 1452 if (!ShouldRedirect()) { |
| 1448 file_ = stdout; | 1453 file_ = stdout; |
| 1449 return; | 1454 return; |
| 1450 } | 1455 } |
| 1451 | 1456 |
| 1452 if (FLAG_redirect_code_traces_to == NULL) { | 1457 if (FLAG_redirect_code_traces_to == NULL) { |
| 1453 SNPrintF(filename_, | 1458 SNPrintF(filename_, |
| 1454 "code-%d-%d.asm", | 1459 "code-%d-%d.asm", |
| 1455 OS::GetCurrentProcessId(), | 1460 base::OS::GetCurrentProcessId(), |
| 1456 isolate_id); | 1461 isolate_id); |
| 1457 } else { | 1462 } else { |
| 1458 StrNCpy(filename_, FLAG_redirect_code_traces_to, filename_.length()); | 1463 StrNCpy(filename_, FLAG_redirect_code_traces_to, filename_.length()); |
| 1459 } | 1464 } |
| 1460 | 1465 |
| 1461 WriteChars(filename_.start(), "", 0, false); | 1466 WriteChars(filename_.start(), "", 0, false); |
| 1462 } | 1467 } |
| 1463 | 1468 |
| 1464 class Scope { | 1469 class Scope { |
| 1465 public: | 1470 public: |
| 1466 explicit Scope(CodeTracer* tracer) : tracer_(tracer) { tracer->OpenFile(); } | 1471 explicit Scope(CodeTracer* tracer) : tracer_(tracer) { tracer->OpenFile(); } |
| 1467 ~Scope() { tracer_->CloseFile(); } | 1472 ~Scope() { tracer_->CloseFile(); } |
| 1468 | 1473 |
| 1469 FILE* file() const { return tracer_->file(); } | 1474 FILE* file() const { return tracer_->file(); } |
| 1470 | 1475 |
| 1471 private: | 1476 private: |
| 1472 CodeTracer* tracer_; | 1477 CodeTracer* tracer_; |
| 1473 }; | 1478 }; |
| 1474 | 1479 |
| 1475 void OpenFile() { | 1480 void OpenFile() { |
| 1476 if (!ShouldRedirect()) { | 1481 if (!ShouldRedirect()) { |
| 1477 return; | 1482 return; |
| 1478 } | 1483 } |
| 1479 | 1484 |
| 1480 if (file_ == NULL) { | 1485 if (file_ == NULL) { |
| 1481 file_ = OS::FOpen(filename_.start(), "a"); | 1486 file_ = base::OS::FOpen(filename_.start(), "a"); |
| 1482 } | 1487 } |
| 1483 | 1488 |
| 1484 scope_depth_++; | 1489 scope_depth_++; |
| 1485 } | 1490 } |
| 1486 | 1491 |
| 1487 void CloseFile() { | 1492 void CloseFile() { |
| 1488 if (!ShouldRedirect()) { | 1493 if (!ShouldRedirect()) { |
| 1489 return; | 1494 return; |
| 1490 } | 1495 } |
| 1491 | 1496 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1503 } | 1508 } |
| 1504 | 1509 |
| 1505 EmbeddedVector<char, 128> filename_; | 1510 EmbeddedVector<char, 128> filename_; |
| 1506 FILE* file_; | 1511 FILE* file_; |
| 1507 int scope_depth_; | 1512 int scope_depth_; |
| 1508 }; | 1513 }; |
| 1509 | 1514 |
| 1510 } } // namespace v8::internal | 1515 } } // namespace v8::internal |
| 1511 | 1516 |
| 1512 #endif // V8_ISOLATE_H_ | 1517 #endif // V8_ISOLATE_H_ |
| OLD | NEW |