Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: src/isolate.cc

Issue 8130002: Make accessors for oddball objects return Oddball* instead of Object*. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: split InitializeThreadLocal into two parts Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ic.cc ('k') | src/messages.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 js_entry_sp_ = NULL; 91 js_entry_sp_ = NULL;
92 external_callback_ = NULL; 92 external_callback_ = NULL;
93 current_vm_state_ = EXTERNAL; 93 current_vm_state_ = EXTERNAL;
94 try_catch_handler_address_ = NULL; 94 try_catch_handler_address_ = NULL;
95 context_ = NULL; 95 context_ = NULL;
96 thread_id_ = ThreadId::Invalid(); 96 thread_id_ = ThreadId::Invalid();
97 external_caught_exception_ = false; 97 external_caught_exception_ = false;
98 failed_access_check_callback_ = NULL; 98 failed_access_check_callback_ = NULL;
99 save_context_ = NULL; 99 save_context_ = NULL;
100 catcher_ = NULL; 100 catcher_ = NULL;
101
102 // These members are re-initialized later after deserialization
103 // is complete.
104 pending_exception_ = NULL;
105 has_pending_message_ = false;
106 pending_message_obj_ = NULL;
107 pending_message_script_ = NULL;
108 scheduled_exception_ = NULL;
101 } 109 }
102 110
103 111
104 void ThreadLocalTop::Initialize() { 112 void ThreadLocalTop::Initialize() {
105 InitializeInternal(); 113 InitializeInternal();
106 #ifdef USE_SIMULATOR 114 #ifdef USE_SIMULATOR
107 #ifdef V8_TARGET_ARCH_ARM 115 #ifdef V8_TARGET_ARCH_ARM
108 simulator_ = Simulator::current(isolate_); 116 simulator_ = Simulator::current(isolate_);
109 #elif V8_TARGET_ARCH_MIPS 117 #elif V8_TARGET_ARCH_MIPS
110 simulator_ = Simulator::current(isolate_); 118 simulator_ = Simulator::current(isolate_);
(...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 } 1285 }
1278 1286
1279 1287
1280 char* Isolate::ArchiveThread(char* to) { 1288 char* Isolate::ArchiveThread(char* to) {
1281 if (RuntimeProfiler::IsEnabled() && current_vm_state() == JS) { 1289 if (RuntimeProfiler::IsEnabled() && current_vm_state() == JS) {
1282 RuntimeProfiler::IsolateExitedJS(this); 1290 RuntimeProfiler::IsolateExitedJS(this);
1283 } 1291 }
1284 memcpy(to, reinterpret_cast<char*>(thread_local_top()), 1292 memcpy(to, reinterpret_cast<char*>(thread_local_top()),
1285 sizeof(ThreadLocalTop)); 1293 sizeof(ThreadLocalTop));
1286 InitializeThreadLocal(); 1294 InitializeThreadLocal();
1295 clear_pending_exception();
1296 clear_pending_message();
1297 clear_scheduled_exception();
1287 return to + sizeof(ThreadLocalTop); 1298 return to + sizeof(ThreadLocalTop);
1288 } 1299 }
1289 1300
1290 1301
1291 char* Isolate::RestoreThread(char* from) { 1302 char* Isolate::RestoreThread(char* from) {
1292 memcpy(reinterpret_cast<char*>(thread_local_top()), from, 1303 memcpy(reinterpret_cast<char*>(thread_local_top()), from,
1293 sizeof(ThreadLocalTop)); 1304 sizeof(ThreadLocalTop));
1294 // This might be just paranoia, but it seems to be needed in case a 1305 // This might be just paranoia, but it seems to be needed in case a
1295 // thread_local_top_ is restored on a separate OS thread. 1306 // thread_local_top_ is restored on a separate OS thread.
1296 #ifdef USE_SIMULATOR 1307 #ifdef USE_SIMULATOR
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 debugger_ = NULL; 1615 debugger_ = NULL;
1605 delete debug_; 1616 delete debug_;
1606 debug_ = NULL; 1617 debug_ = NULL;
1607 #endif 1618 #endif
1608 } 1619 }
1609 1620
1610 1621
1611 void Isolate::InitializeThreadLocal() { 1622 void Isolate::InitializeThreadLocal() {
1612 thread_local_top_.isolate_ = this; 1623 thread_local_top_.isolate_ = this;
1613 thread_local_top_.Initialize(); 1624 thread_local_top_.Initialize();
1614 clear_pending_exception();
1615 clear_pending_message();
1616 clear_scheduled_exception();
1617 } 1625 }
1618 1626
1619 1627
1620 void Isolate::PropagatePendingExceptionToExternalTryCatch() { 1628 void Isolate::PropagatePendingExceptionToExternalTryCatch() {
1621 ASSERT(has_pending_exception()); 1629 ASSERT(has_pending_exception());
1622 1630
1623 bool external_caught = IsExternallyCaught(); 1631 bool external_caught = IsExternallyCaught();
1624 thread_local_top_.external_caught_exception_ = external_caught; 1632 thread_local_top_.external_caught_exception_ = external_caught;
1625 1633
1626 if (!external_caught) return; 1634 if (!external_caught) return;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 debug_->Setup(create_heap_objects); 1772 debug_->Setup(create_heap_objects);
1765 #endif 1773 #endif
1766 stub_cache_->Initialize(create_heap_objects); 1774 stub_cache_->Initialize(create_heap_objects);
1767 1775
1768 // If we are deserializing, read the state into the now-empty heap. 1776 // If we are deserializing, read the state into the now-empty heap.
1769 if (des != NULL) { 1777 if (des != NULL) {
1770 des->Deserialize(); 1778 des->Deserialize();
1771 stub_cache_->Initialize(true); 1779 stub_cache_->Initialize(true);
1772 } 1780 }
1773 1781
1782 // Finish initialization of ThreadLocal after deserialization is done.
1783 clear_pending_exception();
1784 clear_pending_message();
1785 clear_scheduled_exception();
1786
1774 // Deserializing may put strange things in the root array's copy of the 1787 // Deserializing may put strange things in the root array's copy of the
1775 // stack guard. 1788 // stack guard.
1776 heap_.SetStackLimits(); 1789 heap_.SetStackLimits();
1777 1790
1778 deoptimizer_data_ = new DeoptimizerData; 1791 deoptimizer_data_ = new DeoptimizerData;
1779 runtime_profiler_ = new RuntimeProfiler(this); 1792 runtime_profiler_ = new RuntimeProfiler(this);
1780 runtime_profiler_->Setup(); 1793 runtime_profiler_->Setup();
1781 1794
1782 // If we are deserializing, log non-function code objects and compiled 1795 // If we are deserializing, log non-function code objects and compiled
1783 // functions found in the snapshot. 1796 // functions found in the snapshot.
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1873 1886
1874 #ifdef DEBUG 1887 #ifdef DEBUG
1875 #define ISOLATE_FIELD_OFFSET(type, name, ignored) \ 1888 #define ISOLATE_FIELD_OFFSET(type, name, ignored) \
1876 const intptr_t Isolate::name##_debug_offset_ = OFFSET_OF(Isolate, name##_); 1889 const intptr_t Isolate::name##_debug_offset_ = OFFSET_OF(Isolate, name##_);
1877 ISOLATE_INIT_LIST(ISOLATE_FIELD_OFFSET) 1890 ISOLATE_INIT_LIST(ISOLATE_FIELD_OFFSET)
1878 ISOLATE_INIT_ARRAY_LIST(ISOLATE_FIELD_OFFSET) 1891 ISOLATE_INIT_ARRAY_LIST(ISOLATE_FIELD_OFFSET)
1879 #undef ISOLATE_FIELD_OFFSET 1892 #undef ISOLATE_FIELD_OFFSET
1880 #endif 1893 #endif
1881 1894
1882 } } // namespace v8::internal 1895 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ic.cc ('k') | src/messages.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698