OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 bool should_report_exception = | 1045 bool should_report_exception = |
1046 ShouldReportException(&can_be_caught_externally, catchable_by_javascript); | 1046 ShouldReportException(&can_be_caught_externally, catchable_by_javascript); |
1047 bool report_exception = catchable_by_javascript && should_report_exception; | 1047 bool report_exception = catchable_by_javascript && should_report_exception; |
1048 bool try_catch_needs_message = | 1048 bool try_catch_needs_message = |
1049 can_be_caught_externally && try_catch_handler()->capture_message_ && | 1049 can_be_caught_externally && try_catch_handler()->capture_message_ && |
1050 !thread_local_top()->rethrowing_message_; | 1050 !thread_local_top()->rethrowing_message_; |
1051 bool bootstrapping = bootstrapper()->IsActive(); | 1051 bool bootstrapping = bootstrapper()->IsActive(); |
1052 | 1052 |
1053 thread_local_top()->rethrowing_message_ = false; | 1053 thread_local_top()->rethrowing_message_ = false; |
1054 | 1054 |
1055 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1056 // Notify debugger of exception. | 1055 // Notify debugger of exception. |
1057 if (catchable_by_javascript) { | 1056 if (catchable_by_javascript) { |
1058 debugger_->OnException( | 1057 debugger_->OnException( |
1059 exception_handle, report_exception, factory()->undefined_value()); | 1058 exception_handle, report_exception, factory()->undefined_value()); |
1060 } | 1059 } |
1061 #endif | |
1062 | 1060 |
1063 // Generate the message if required. | 1061 // Generate the message if required. |
1064 if (report_exception || try_catch_needs_message) { | 1062 if (report_exception || try_catch_needs_message) { |
1065 MessageLocation potential_computed_location; | 1063 MessageLocation potential_computed_location; |
1066 if (location == NULL) { | 1064 if (location == NULL) { |
1067 // If no location was specified we use a computed one instead. | 1065 // If no location was specified we use a computed one instead. |
1068 ComputeLocation(&potential_computed_location); | 1066 ComputeLocation(&potential_computed_location); |
1069 location = &potential_computed_location; | 1067 location = &potential_computed_location; |
1070 } | 1068 } |
1071 // It's not safe to try to make message objects or collect stack traces | 1069 // It's not safe to try to make message objects or collect stack traces |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1320 } | 1318 } |
1321 | 1319 |
1322 | 1320 |
1323 Handle<Context> Isolate::global_context() { | 1321 Handle<Context> Isolate::global_context() { |
1324 return Handle<Context>(context()->global_object()->global_context()); | 1322 return Handle<Context>(context()->global_object()->global_context()); |
1325 } | 1323 } |
1326 | 1324 |
1327 | 1325 |
1328 Handle<Context> Isolate::GetCallingNativeContext() { | 1326 Handle<Context> Isolate::GetCallingNativeContext() { |
1329 JavaScriptFrameIterator it(this); | 1327 JavaScriptFrameIterator it(this); |
1330 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1331 if (debug_->InDebugger()) { | 1328 if (debug_->InDebugger()) { |
1332 while (!it.done()) { | 1329 while (!it.done()) { |
1333 JavaScriptFrame* frame = it.frame(); | 1330 JavaScriptFrame* frame = it.frame(); |
1334 Context* context = Context::cast(frame->context()); | 1331 Context* context = Context::cast(frame->context()); |
1335 if (context->native_context() == *debug_->debug_context()) { | 1332 if (context->native_context() == *debug_->debug_context()) { |
1336 it.Advance(); | 1333 it.Advance(); |
1337 } else { | 1334 } else { |
1338 break; | 1335 break; |
1339 } | 1336 } |
1340 } | 1337 } |
1341 } | 1338 } |
1342 #endif // ENABLE_DEBUGGER_SUPPORT | |
1343 if (it.done()) return Handle<Context>::null(); | 1339 if (it.done()) return Handle<Context>::null(); |
1344 JavaScriptFrame* frame = it.frame(); | 1340 JavaScriptFrame* frame = it.frame(); |
1345 Context* context = Context::cast(frame->context()); | 1341 Context* context = Context::cast(frame->context()); |
1346 return Handle<Context>(context->native_context()); | 1342 return Handle<Context>(context->native_context()); |
1347 } | 1343 } |
1348 | 1344 |
1349 | 1345 |
1350 char* Isolate::ArchiveThread(char* to) { | 1346 char* Isolate::ArchiveThread(char* to) { |
1351 OS::MemCopy(to, reinterpret_cast<char*>(thread_local_top()), | 1347 OS::MemCopy(to, reinterpret_cast<char*>(thread_local_top()), |
1352 sizeof(ThreadLocalTop)); | 1348 sizeof(ThreadLocalTop)); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 // ThreadManager is initialized early to support locking an isolate | 1500 // ThreadManager is initialized early to support locking an isolate |
1505 // before it is entered. | 1501 // before it is entered. |
1506 thread_manager_ = new ThreadManager(); | 1502 thread_manager_ = new ThreadManager(); |
1507 thread_manager_->isolate_ = this; | 1503 thread_manager_->isolate_ = this; |
1508 | 1504 |
1509 #ifdef DEBUG | 1505 #ifdef DEBUG |
1510 // heap_histograms_ initializes itself. | 1506 // heap_histograms_ initializes itself. |
1511 memset(&js_spill_information_, 0, sizeof(js_spill_information_)); | 1507 memset(&js_spill_information_, 0, sizeof(js_spill_information_)); |
1512 #endif | 1508 #endif |
1513 | 1509 |
1514 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1515 debug_ = NULL; | 1510 debug_ = NULL; |
1516 debugger_ = NULL; | 1511 debugger_ = NULL; |
1517 #endif | |
1518 | 1512 |
1519 handle_scope_data_.Initialize(); | 1513 handle_scope_data_.Initialize(); |
1520 | 1514 |
1521 #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \ | 1515 #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \ |
1522 name##_ = (initial_value); | 1516 name##_ = (initial_value); |
1523 ISOLATE_INIT_LIST(ISOLATE_INIT_EXECUTE) | 1517 ISOLATE_INIT_LIST(ISOLATE_INIT_EXECUTE) |
1524 #undef ISOLATE_INIT_EXECUTE | 1518 #undef ISOLATE_INIT_EXECUTE |
1525 | 1519 |
1526 #define ISOLATE_INIT_ARRAY_EXECUTE(type, name, length) \ | 1520 #define ISOLATE_INIT_ARRAY_EXECUTE(type, name, length) \ |
1527 memset(name##_, 0, sizeof(type) * length); | 1521 memset(name##_, 0, sizeof(type) * length); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1563 | 1557 |
1564 void Isolate::GlobalTearDown() { | 1558 void Isolate::GlobalTearDown() { |
1565 delete thread_data_table_; | 1559 delete thread_data_table_; |
1566 } | 1560 } |
1567 | 1561 |
1568 | 1562 |
1569 void Isolate::Deinit() { | 1563 void Isolate::Deinit() { |
1570 if (state_ == INITIALIZED) { | 1564 if (state_ == INITIALIZED) { |
1571 TRACE_ISOLATE(deinit); | 1565 TRACE_ISOLATE(deinit); |
1572 | 1566 |
1573 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1574 debugger()->UnloadDebugger(); | 1567 debugger()->UnloadDebugger(); |
1575 #endif | |
1576 | 1568 |
1577 if (concurrent_recompilation_enabled()) { | 1569 if (concurrent_recompilation_enabled()) { |
1578 optimizing_compiler_thread_->Stop(); | 1570 optimizing_compiler_thread_->Stop(); |
1579 delete optimizing_compiler_thread_; | 1571 delete optimizing_compiler_thread_; |
1580 optimizing_compiler_thread_ = NULL; | 1572 optimizing_compiler_thread_ = NULL; |
1581 } | 1573 } |
1582 | 1574 |
1583 for (int i = 0; i < num_sweeper_threads_; i++) { | 1575 for (int i = 0; i < num_sweeper_threads_; i++) { |
1584 sweeper_thread_[i]->Stop(); | 1576 sweeper_thread_[i]->Stop(); |
1585 delete sweeper_thread_[i]; | 1577 delete sweeper_thread_[i]; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1733 | 1725 |
1734 delete string_stream_debug_object_cache_; | 1726 delete string_stream_debug_object_cache_; |
1735 string_stream_debug_object_cache_ = NULL; | 1727 string_stream_debug_object_cache_ = NULL; |
1736 | 1728 |
1737 delete external_reference_table_; | 1729 delete external_reference_table_; |
1738 external_reference_table_ = NULL; | 1730 external_reference_table_ = NULL; |
1739 | 1731 |
1740 delete random_number_generator_; | 1732 delete random_number_generator_; |
1741 random_number_generator_ = NULL; | 1733 random_number_generator_ = NULL; |
1742 | 1734 |
1743 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1744 delete debugger_; | 1735 delete debugger_; |
1745 debugger_ = NULL; | 1736 debugger_ = NULL; |
1746 delete debug_; | 1737 delete debug_; |
1747 debug_ = NULL; | 1738 debug_ = NULL; |
1748 #endif | |
1749 } | 1739 } |
1750 | 1740 |
1751 | 1741 |
1752 void Isolate::InitializeThreadLocal() { | 1742 void Isolate::InitializeThreadLocal() { |
1753 thread_local_top_.isolate_ = this; | 1743 thread_local_top_.isolate_ = this; |
1754 thread_local_top_.Initialize(); | 1744 thread_local_top_.Initialize(); |
1755 } | 1745 } |
1756 | 1746 |
1757 | 1747 |
1758 void Isolate::PropagatePendingExceptionToExternalTryCatch() { | 1748 void Isolate::PropagatePendingExceptionToExternalTryCatch() { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1792 if (logger_ == NULL) { | 1782 if (logger_ == NULL) { |
1793 logger_ = new Logger(this); | 1783 logger_ = new Logger(this); |
1794 } | 1784 } |
1795 if (counters_ == NULL) { | 1785 if (counters_ == NULL) { |
1796 counters_ = new Counters(this); | 1786 counters_ = new Counters(this); |
1797 } | 1787 } |
1798 } | 1788 } |
1799 | 1789 |
1800 | 1790 |
1801 void Isolate::InitializeDebugger() { | 1791 void Isolate::InitializeDebugger() { |
1802 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1803 LockGuard<RecursiveMutex> lock_guard(debugger_access()); | 1792 LockGuard<RecursiveMutex> lock_guard(debugger_access()); |
1804 if (NoBarrier_Load(&debugger_initialized_)) return; | 1793 if (NoBarrier_Load(&debugger_initialized_)) return; |
1805 InitializeLoggingAndCounters(); | 1794 InitializeLoggingAndCounters(); |
1806 debug_ = new Debug(this); | 1795 debug_ = new Debug(this); |
1807 debugger_ = new Debugger(this); | 1796 debugger_ = new Debugger(this); |
1808 Release_Store(&debugger_initialized_, true); | 1797 Release_Store(&debugger_initialized_, true); |
1809 #endif | |
1810 } | 1798 } |
1811 | 1799 |
1812 | 1800 |
1813 bool Isolate::Init(Deserializer* des) { | 1801 bool Isolate::Init(Deserializer* des) { |
1814 ASSERT(state_ != INITIALIZED); | 1802 ASSERT(state_ != INITIALIZED); |
1815 TRACE_ISOLATE(init); | 1803 TRACE_ISOLATE(init); |
1816 | 1804 |
1817 stress_deopt_count_ = FLAG_deopt_every_n_times; | 1805 stress_deopt_count_ = FLAG_deopt_every_n_times; |
1818 | 1806 |
1819 has_fatal_error_ = false; | 1807 has_fatal_error_ = false; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1944 } | 1932 } |
1945 | 1933 |
1946 if (num_sweeper_threads_ > 0) { | 1934 if (num_sweeper_threads_ > 0) { |
1947 sweeper_thread_ = new SweeperThread*[num_sweeper_threads_]; | 1935 sweeper_thread_ = new SweeperThread*[num_sweeper_threads_]; |
1948 for (int i = 0; i < num_sweeper_threads_; i++) { | 1936 for (int i = 0; i < num_sweeper_threads_; i++) { |
1949 sweeper_thread_[i] = new SweeperThread(this); | 1937 sweeper_thread_[i] = new SweeperThread(this); |
1950 sweeper_thread_[i]->Start(); | 1938 sweeper_thread_[i]->Start(); |
1951 } | 1939 } |
1952 } | 1940 } |
1953 | 1941 |
1954 #ifdef ENABLE_DEBUGGER_SUPPORT | |
1955 debug_->SetUp(create_heap_objects); | 1942 debug_->SetUp(create_heap_objects); |
1956 #endif | |
1957 | 1943 |
1958 // If we are deserializing, read the state into the now-empty heap. | 1944 // If we are deserializing, read the state into the now-empty heap. |
1959 if (!create_heap_objects) { | 1945 if (!create_heap_objects) { |
1960 des->Deserialize(this); | 1946 des->Deserialize(this); |
1961 } | 1947 } |
1962 stub_cache_->Initialize(); | 1948 stub_cache_->Initialize(); |
1963 | 1949 |
1964 // Finish initialization of ThreadLocal after deserialization is done. | 1950 // Finish initialization of ThreadLocal after deserialization is done. |
1965 clear_pending_exception(); | 1951 clear_pending_exception(); |
1966 clear_pending_message(); | 1952 clear_pending_message(); |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2251 Handle<JSObject> obj = factory()->NewJSObjectFromMap(map); | 2237 Handle<JSObject> obj = factory()->NewJSObjectFromMap(map); |
2252 JSObject::NormalizeProperties(obj, KEEP_INOBJECT_PROPERTIES, 8); | 2238 JSObject::NormalizeProperties(obj, KEEP_INOBJECT_PROPERTIES, 8); |
2253 JSObject::SetProperty(registry, name, obj, NONE, STRICT).Assert(); | 2239 JSObject::SetProperty(registry, name, obj, NONE, STRICT).Assert(); |
2254 } | 2240 } |
2255 } | 2241 } |
2256 return Handle<JSObject>::cast(factory()->symbol_registry()); | 2242 return Handle<JSObject>::cast(factory()->symbol_registry()); |
2257 } | 2243 } |
2258 | 2244 |
2259 | 2245 |
2260 } } // namespace v8::internal | 2246 } } // namespace v8::internal |
OLD | NEW |