| 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 #include "api.h" | 5 #include "api.h" |
| 6 | 6 |
| 7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
| 8 #include <cmath> // For isnan. | 8 #include <cmath> // For isnan. |
| 9 #ifdef V8_USE_ADDRESS_SANITIZER |
| 10 #include <sanitizer/asan_interface.h> |
| 11 #endif // V8_USE_ADDRESS_SANITIZER |
| 9 #include "../include/v8-debug.h" | 12 #include "../include/v8-debug.h" |
| 10 #include "../include/v8-profiler.h" | 13 #include "../include/v8-profiler.h" |
| 11 #include "../include/v8-testing.h" | 14 #include "../include/v8-testing.h" |
| 12 #include "assert-scope.h" | 15 #include "assert-scope.h" |
| 13 #include "bootstrapper.h" | 16 #include "bootstrapper.h" |
| 14 #include "code-stubs.h" | 17 #include "code-stubs.h" |
| 15 #include "compiler.h" | 18 #include "compiler.h" |
| 16 #include "conversions-inl.h" | 19 #include "conversions-inl.h" |
| 17 #include "counters.h" | 20 #include "counters.h" |
| 18 #include "cpu-profiler.h" | 21 #include "cpu-profiler.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 30 #endif | 33 #endif |
| 31 #include "parser.h" | 34 #include "parser.h" |
| 32 #include "platform.h" | 35 #include "platform.h" |
| 33 #include "platform/time.h" | 36 #include "platform/time.h" |
| 34 #include "profile-generator-inl.h" | 37 #include "profile-generator-inl.h" |
| 35 #include "property-details.h" | 38 #include "property-details.h" |
| 36 #include "property.h" | 39 #include "property.h" |
| 37 #include "runtime.h" | 40 #include "runtime.h" |
| 38 #include "runtime-profiler.h" | 41 #include "runtime-profiler.h" |
| 39 #include "scanner-character-streams.h" | 42 #include "scanner-character-streams.h" |
| 43 #include "simulator.h" |
| 40 #include "snapshot.h" | 44 #include "snapshot.h" |
| 41 #include "unicode-inl.h" | 45 #include "unicode-inl.h" |
| 42 #include "utils/random-number-generator.h" | 46 #include "utils/random-number-generator.h" |
| 43 #include "v8threads.h" | 47 #include "v8threads.h" |
| 44 #include "version.h" | 48 #include "version.h" |
| 45 #include "vm-state-inl.h" | 49 #include "vm-state-inl.h" |
| 46 | 50 |
| 47 | 51 |
| 48 #define LOG_API(isolate, expr) LOG(isolate, ApiEntryCall(expr)) | 52 #define LOG_API(isolate, expr) LOG(isolate, ApiEntryCall(expr)) |
| 49 | 53 |
| (...skipping 1728 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1778 ScriptOrigin origin(file_name); | 1782 ScriptOrigin origin(file_name); |
| 1779 return Compile(source, &origin); | 1783 return Compile(source, &origin); |
| 1780 } | 1784 } |
| 1781 | 1785 |
| 1782 | 1786 |
| 1783 // --- E x c e p t i o n s --- | 1787 // --- E x c e p t i o n s --- |
| 1784 | 1788 |
| 1785 | 1789 |
| 1786 v8::TryCatch::TryCatch() | 1790 v8::TryCatch::TryCatch() |
| 1787 : isolate_(i::Isolate::Current()), | 1791 : isolate_(i::Isolate::Current()), |
| 1788 next_(isolate_->try_catch_handler_address()), | 1792 next_(isolate_->try_catch_handler()), |
| 1789 is_verbose_(false), | 1793 is_verbose_(false), |
| 1790 can_continue_(true), | 1794 can_continue_(true), |
| 1791 capture_message_(true), | 1795 capture_message_(true), |
| 1792 rethrow_(false), | 1796 rethrow_(false), |
| 1793 has_terminated_(false) { | 1797 has_terminated_(false) { |
| 1794 Reset(); | 1798 Reset(); |
| 1799 js_stack_comparable_address_ = this; |
| 1800 #ifdef V8_USE_ADDRESS_SANITIZER |
| 1801 void* asan_fake_stack_handle = __asan_get_current_fake_stack(); |
| 1802 if (asan_fake_stack_handle != NULL) { |
| 1803 js_stack_comparable_address_ = __asan_addr_is_in_fake_stack( |
| 1804 asan_fake_stack_handle, js_stack_comparable_address_, NULL, NULL); |
| 1805 CHECK(js_stack_comparable_address_ != NULL); |
| 1806 } |
| 1807 #endif |
| 1808 // Special handling for simulators which have a separate JS stack. |
| 1809 js_stack_comparable_address_ = reinterpret_cast<void*>( |
| 1810 v8::internal::SimulatorStack::RegisterCTryCatch( |
| 1811 reinterpret_cast<uintptr_t>(js_stack_comparable_address_))); |
| 1795 isolate_->RegisterTryCatchHandler(this); | 1812 isolate_->RegisterTryCatchHandler(this); |
| 1796 } | 1813 } |
| 1797 | 1814 |
| 1798 | 1815 |
| 1799 v8::TryCatch::~TryCatch() { | 1816 v8::TryCatch::~TryCatch() { |
| 1800 ASSERT(isolate_ == i::Isolate::Current()); | 1817 ASSERT(isolate_ == i::Isolate::Current()); |
| 1801 if (rethrow_) { | 1818 if (rethrow_) { |
| 1802 v8::Isolate* isolate = reinterpret_cast<Isolate*>(isolate_); | 1819 v8::Isolate* isolate = reinterpret_cast<Isolate*>(isolate_); |
| 1803 v8::HandleScope scope(isolate); | 1820 v8::HandleScope scope(isolate); |
| 1804 v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(isolate, Exception()); | 1821 v8::Local<v8::Value> exc = v8::Local<v8::Value>::New(isolate, Exception()); |
| 1805 if (HasCaught() && capture_message_) { | 1822 if (HasCaught() && capture_message_) { |
| 1806 // If an exception was caught and rethrow_ is indicated, the saved | 1823 // If an exception was caught and rethrow_ is indicated, the saved |
| 1807 // message, script, and location need to be restored to Isolate TLS | 1824 // message, script, and location need to be restored to Isolate TLS |
| 1808 // for reuse. capture_message_ needs to be disabled so that DoThrow() | 1825 // for reuse. capture_message_ needs to be disabled so that DoThrow() |
| 1809 // does not create a new message. | 1826 // does not create a new message. |
| 1810 isolate_->thread_local_top()->rethrowing_message_ = true; | 1827 isolate_->thread_local_top()->rethrowing_message_ = true; |
| 1811 isolate_->RestorePendingMessageFromTryCatch(this); | 1828 isolate_->RestorePendingMessageFromTryCatch(this); |
| 1812 } | 1829 } |
| 1813 isolate_->UnregisterTryCatchHandler(this); | 1830 isolate_->UnregisterTryCatchHandler(this); |
| 1831 v8::internal::SimulatorStack::UnregisterCTryCatch(); |
| 1814 reinterpret_cast<Isolate*>(isolate_)->ThrowException(exc); | 1832 reinterpret_cast<Isolate*>(isolate_)->ThrowException(exc); |
| 1815 ASSERT(!isolate_->thread_local_top()->rethrowing_message_); | 1833 ASSERT(!isolate_->thread_local_top()->rethrowing_message_); |
| 1816 } else { | 1834 } else { |
| 1817 isolate_->UnregisterTryCatchHandler(this); | 1835 isolate_->UnregisterTryCatchHandler(this); |
| 1836 v8::internal::SimulatorStack::UnregisterCTryCatch(); |
| 1818 } | 1837 } |
| 1819 } | 1838 } |
| 1820 | 1839 |
| 1821 | 1840 |
| 1822 bool v8::TryCatch::HasCaught() const { | 1841 bool v8::TryCatch::HasCaught() const { |
| 1823 return !reinterpret_cast<i::Object*>(exception_)->IsTheHole(); | 1842 return !reinterpret_cast<i::Object*>(exception_)->IsTheHole(); |
| 1824 } | 1843 } |
| 1825 | 1844 |
| 1826 | 1845 |
| 1827 bool v8::TryCatch::CanContinue() const { | 1846 bool v8::TryCatch::CanContinue() const { |
| (...skipping 5735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7563 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 7582 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |
| 7564 Address callback_address = | 7583 Address callback_address = |
| 7565 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 7584 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
| 7566 VMState<EXTERNAL> state(isolate); | 7585 VMState<EXTERNAL> state(isolate); |
| 7567 ExternalCallbackScope call_scope(isolate, callback_address); | 7586 ExternalCallbackScope call_scope(isolate, callback_address); |
| 7568 callback(info); | 7587 callback(info); |
| 7569 } | 7588 } |
| 7570 | 7589 |
| 7571 | 7590 |
| 7572 } } // namespace v8::internal | 7591 } } // namespace v8::internal |
| OLD | NEW |