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 "src/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 2208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2219 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); | 2219 if (!raw_obj->IsJSObject()) return v8::Local<Value>(); |
2220 PREPARE_FOR_EXECUTION(context, "v8::TryCatch::StackTrace", Value); | 2220 PREPARE_FOR_EXECUTION(context, "v8::TryCatch::StackTrace", Value); |
2221 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); | 2221 i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_); |
2222 i::Handle<i::String> name = isolate->factory()->stack_string(); | 2222 i::Handle<i::String> name = isolate->factory()->stack_string(); |
2223 Maybe<bool> maybe = i::JSReceiver::HasProperty(obj, name); | 2223 Maybe<bool> maybe = i::JSReceiver::HasProperty(obj, name); |
2224 has_pending_exception = !maybe.IsJust(); | 2224 has_pending_exception = !maybe.IsJust(); |
2225 RETURN_ON_FAILED_EXECUTION(Value); | 2225 RETURN_ON_FAILED_EXECUTION(Value); |
2226 if (!maybe.FromJust()) return v8::Local<Value>(); | 2226 if (!maybe.FromJust()) return v8::Local<Value>(); |
2227 Local<Value> result; | 2227 Local<Value> result; |
2228 has_pending_exception = | 2228 has_pending_exception = |
2229 !ToLocal<Value>(i::Object::GetProperty(obj, name), &result); | 2229 !ToLocal<Value>(i::JSReceiver::GetProperty(obj, name), &result); |
2230 RETURN_ON_FAILED_EXECUTION(Value); | 2230 RETURN_ON_FAILED_EXECUTION(Value); |
2231 RETURN_ESCAPED(result); | 2231 RETURN_ESCAPED(result); |
2232 } | 2232 } |
2233 | 2233 |
2234 | 2234 |
2235 v8::Local<Value> v8::TryCatch::StackTrace() const { | 2235 v8::Local<Value> v8::TryCatch::StackTrace() const { |
2236 auto context = reinterpret_cast<v8::Isolate*>(isolate_)->GetCurrentContext(); | 2236 auto context = reinterpret_cast<v8::Isolate*>(isolate_)->GetCurrentContext(); |
2237 RETURN_TO_LOCAL_UNCHECKED(StackTrace(context), Value); | 2237 RETURN_TO_LOCAL_UNCHECKED(StackTrace(context), Value); |
2238 } | 2238 } |
2239 | 2239 |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2450 } | 2450 } |
2451 | 2451 |
2452 | 2452 |
2453 // --- S t a c k T r a c e --- | 2453 // --- S t a c k T r a c e --- |
2454 | 2454 |
2455 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { | 2455 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
2456 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); | 2456 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
2457 ENTER_V8(isolate); | 2457 ENTER_V8(isolate); |
2458 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2458 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2459 auto self = Utils::OpenHandle(this); | 2459 auto self = Utils::OpenHandle(this); |
2460 auto obj = i::Object::GetElement(isolate, self, index).ToHandleChecked(); | 2460 auto obj = i::JSReceiver::GetElement(isolate, self, index).ToHandleChecked(); |
2461 auto jsobj = i::Handle<i::JSObject>::cast(obj); | 2461 auto jsobj = i::Handle<i::JSObject>::cast(obj); |
2462 return scope.Escape(Utils::StackFrameToLocal(jsobj)); | 2462 return scope.Escape(Utils::StackFrameToLocal(jsobj)); |
2463 } | 2463 } |
2464 | 2464 |
2465 | 2465 |
2466 int StackTrace::GetFrameCount() const { | 2466 int StackTrace::GetFrameCount() const { |
2467 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); | 2467 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); |
2468 } | 2468 } |
2469 | 2469 |
2470 | 2470 |
(...skipping 19 matching lines...) Expand all Loading... |
2490 | 2490 |
2491 // --- S t a c k F r a m e --- | 2491 // --- S t a c k F r a m e --- |
2492 | 2492 |
2493 static int getIntProperty(const StackFrame* f, const char* propertyName, | 2493 static int getIntProperty(const StackFrame* f, const char* propertyName, |
2494 int defaultValue) { | 2494 int defaultValue) { |
2495 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); | 2495 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
2496 ENTER_V8(isolate); | 2496 ENTER_V8(isolate); |
2497 i::HandleScope scope(isolate); | 2497 i::HandleScope scope(isolate); |
2498 i::Handle<i::JSObject> self = Utils::OpenHandle(f); | 2498 i::Handle<i::JSObject> self = Utils::OpenHandle(f); |
2499 i::Handle<i::Object> obj = | 2499 i::Handle<i::Object> obj = |
2500 i::Object::GetProperty(isolate, self, propertyName).ToHandleChecked(); | 2500 i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked(); |
2501 return obj->IsSmi() ? i::Smi::cast(*obj)->value() : defaultValue; | 2501 return obj->IsSmi() ? i::Smi::cast(*obj)->value() : defaultValue; |
2502 } | 2502 } |
2503 | 2503 |
2504 | 2504 |
2505 int StackFrame::GetLineNumber() const { | 2505 int StackFrame::GetLineNumber() const { |
2506 return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo); | 2506 return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo); |
2507 } | 2507 } |
2508 | 2508 |
2509 | 2509 |
2510 int StackFrame::GetColumn() const { | 2510 int StackFrame::GetColumn() const { |
2511 return getIntProperty(this, "column", Message::kNoColumnInfo); | 2511 return getIntProperty(this, "column", Message::kNoColumnInfo); |
2512 } | 2512 } |
2513 | 2513 |
2514 | 2514 |
2515 int StackFrame::GetScriptId() const { | 2515 int StackFrame::GetScriptId() const { |
2516 return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo); | 2516 return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo); |
2517 } | 2517 } |
2518 | 2518 |
2519 | 2519 |
2520 static Local<String> getStringProperty(const StackFrame* f, | 2520 static Local<String> getStringProperty(const StackFrame* f, |
2521 const char* propertyName) { | 2521 const char* propertyName) { |
2522 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); | 2522 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
2523 ENTER_V8(isolate); | 2523 ENTER_V8(isolate); |
2524 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); | 2524 EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
2525 i::Handle<i::JSObject> self = Utils::OpenHandle(f); | 2525 i::Handle<i::JSObject> self = Utils::OpenHandle(f); |
2526 i::Handle<i::Object> obj = | 2526 i::Handle<i::Object> obj = |
2527 i::Object::GetProperty(isolate, self, propertyName).ToHandleChecked(); | 2527 i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked(); |
2528 return obj->IsString() | 2528 return obj->IsString() |
2529 ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj))) | 2529 ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj))) |
2530 : Local<String>(); | 2530 : Local<String>(); |
2531 } | 2531 } |
2532 | 2532 |
2533 | 2533 |
2534 Local<String> StackFrame::GetScriptName() const { | 2534 Local<String> StackFrame::GetScriptName() const { |
2535 return getStringProperty(this, "scriptName"); | 2535 return getStringProperty(this, "scriptName"); |
2536 } | 2536 } |
2537 | 2537 |
2538 | 2538 |
2539 Local<String> StackFrame::GetScriptNameOrSourceURL() const { | 2539 Local<String> StackFrame::GetScriptNameOrSourceURL() const { |
2540 return getStringProperty(this, "scriptNameOrSourceURL"); | 2540 return getStringProperty(this, "scriptNameOrSourceURL"); |
2541 } | 2541 } |
2542 | 2542 |
2543 | 2543 |
2544 Local<String> StackFrame::GetFunctionName() const { | 2544 Local<String> StackFrame::GetFunctionName() const { |
2545 return getStringProperty(this, "functionName"); | 2545 return getStringProperty(this, "functionName"); |
2546 } | 2546 } |
2547 | 2547 |
2548 | 2548 |
2549 static bool getBoolProperty(const StackFrame* f, const char* propertyName) { | 2549 static bool getBoolProperty(const StackFrame* f, const char* propertyName) { |
2550 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); | 2550 i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
2551 ENTER_V8(isolate); | 2551 ENTER_V8(isolate); |
2552 i::HandleScope scope(isolate); | 2552 i::HandleScope scope(isolate); |
2553 i::Handle<i::JSObject> self = Utils::OpenHandle(f); | 2553 i::Handle<i::JSObject> self = Utils::OpenHandle(f); |
2554 i::Handle<i::Object> obj = | 2554 i::Handle<i::Object> obj = |
2555 i::Object::GetProperty(isolate, self, propertyName).ToHandleChecked(); | 2555 i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked(); |
2556 return obj->IsTrue(); | 2556 return obj->IsTrue(); |
2557 } | 2557 } |
2558 | 2558 |
2559 bool StackFrame::IsEval() const { return getBoolProperty(this, "isEval"); } | 2559 bool StackFrame::IsEval() const { return getBoolProperty(this, "isEval"); } |
2560 | 2560 |
2561 | 2561 |
2562 bool StackFrame::IsConstructor() const { | 2562 bool StackFrame::IsConstructor() const { |
2563 return getBoolProperty(this, "isConstructor"); | 2563 return getBoolProperty(this, "isConstructor"); |
2564 } | 2564 } |
2565 | 2565 |
(...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3649 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 3649 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
3650 RETURN_TO_LOCAL_UNCHECKED(Get(context, key), Value); | 3650 RETURN_TO_LOCAL_UNCHECKED(Get(context, key), Value); |
3651 } | 3651 } |
3652 | 3652 |
3653 | 3653 |
3654 MaybeLocal<Value> v8::Object::Get(Local<Context> context, uint32_t index) { | 3654 MaybeLocal<Value> v8::Object::Get(Local<Context> context, uint32_t index) { |
3655 PREPARE_FOR_EXECUTION(context, "v8::Object::Get()", Value); | 3655 PREPARE_FOR_EXECUTION(context, "v8::Object::Get()", Value); |
3656 auto self = Utils::OpenHandle(this); | 3656 auto self = Utils::OpenHandle(this); |
3657 i::Handle<i::Object> result; | 3657 i::Handle<i::Object> result; |
3658 has_pending_exception = | 3658 has_pending_exception = |
3659 !i::Object::GetElement(isolate, self, index).ToHandle(&result); | 3659 !i::JSReceiver::GetElement(isolate, self, index).ToHandle(&result); |
3660 RETURN_ON_FAILED_EXECUTION(Value); | 3660 RETURN_ON_FAILED_EXECUTION(Value); |
3661 RETURN_ESCAPED(Utils::ToLocal(result)); | 3661 RETURN_ESCAPED(Utils::ToLocal(result)); |
3662 } | 3662 } |
3663 | 3663 |
3664 | 3664 |
3665 Local<Value> v8::Object::Get(uint32_t index) { | 3665 Local<Value> v8::Object::Get(uint32_t index) { |
3666 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); | 3666 auto context = ContextFromHeapObject(Utils::OpenHandle(this)); |
3667 RETURN_TO_LOCAL_UNCHECKED(Get(context, index), Value); | 3667 RETURN_TO_LOCAL_UNCHECKED(Get(context, index), Value); |
3668 } | 3668 } |
3669 | 3669 |
(...skipping 4300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7970 | 7970 |
7971 | 7971 |
7972 MaybeLocal<Value> Debug::GetMirror(Local<Context> context, | 7972 MaybeLocal<Value> Debug::GetMirror(Local<Context> context, |
7973 v8::Local<v8::Value> obj) { | 7973 v8::Local<v8::Value> obj) { |
7974 PREPARE_FOR_EXECUTION(context, "v8::Debug::GetMirror()", Value); | 7974 PREPARE_FOR_EXECUTION(context, "v8::Debug::GetMirror()", Value); |
7975 i::Debug* isolate_debug = isolate->debug(); | 7975 i::Debug* isolate_debug = isolate->debug(); |
7976 has_pending_exception = !isolate_debug->Load(); | 7976 has_pending_exception = !isolate_debug->Load(); |
7977 RETURN_ON_FAILED_EXECUTION(Value); | 7977 RETURN_ON_FAILED_EXECUTION(Value); |
7978 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); | 7978 i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object()); |
7979 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); | 7979 auto name = isolate->factory()->NewStringFromStaticChars("MakeMirror"); |
7980 auto fun_obj = i::Object::GetProperty(debug, name).ToHandleChecked(); | 7980 auto fun_obj = i::JSReceiver::GetProperty(debug, name).ToHandleChecked(); |
7981 auto v8_fun = Utils::CallableToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); | 7981 auto v8_fun = Utils::CallableToLocal(i::Handle<i::JSFunction>::cast(fun_obj)); |
7982 const int kArgc = 1; | 7982 const int kArgc = 1; |
7983 v8::Local<v8::Value> argv[kArgc] = {obj}; | 7983 v8::Local<v8::Value> argv[kArgc] = {obj}; |
7984 Local<Value> result; | 7984 Local<Value> result; |
7985 has_pending_exception = | 7985 has_pending_exception = |
7986 !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, argv) | 7986 !v8_fun->Call(context, Utils::ToLocal(debug), kArgc, argv) |
7987 .ToLocal(&result); | 7987 .ToLocal(&result); |
7988 RETURN_ON_FAILED_EXECUTION(Value); | 7988 RETURN_ON_FAILED_EXECUTION(Value); |
7989 RETURN_ESCAPED(result); | 7989 RETURN_ESCAPED(result); |
7990 } | 7990 } |
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8694 Address callback_address = | 8694 Address callback_address = |
8695 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 8695 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
8696 VMState<EXTERNAL> state(isolate); | 8696 VMState<EXTERNAL> state(isolate); |
8697 ExternalCallbackScope call_scope(isolate, callback_address); | 8697 ExternalCallbackScope call_scope(isolate, callback_address); |
8698 callback(info); | 8698 callback(info); |
8699 } | 8699 } |
8700 | 8700 |
8701 | 8701 |
8702 } // namespace internal | 8702 } // namespace internal |
8703 } // namespace v8 | 8703 } // namespace v8 |
OLD | NEW |