| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 6a3ecdbdac298350e6d5e1de3bd821e5a2a67c21..0dc8c1946e2f5973a4922ded1ead08e51e91be29 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -2844,8 +2844,8 @@ Local<StackFrame> StackTrace::GetFrame(uint32_t index) const {
|
| EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
|
| auto self = Utils::OpenHandle(this);
|
| auto obj = i::JSReceiver::GetElement(isolate, self, index).ToHandleChecked();
|
| - auto jsobj = i::Handle<i::JSObject>::cast(obj);
|
| - return scope.Escape(Utils::StackFrameToLocal(jsobj));
|
| + auto info = i::Handle<i::StackFrameInfo>::cast(obj);
|
| + return scope.Escape(Utils::StackFrameToLocal(info));
|
| }
|
|
|
|
|
| @@ -2873,77 +2873,59 @@ Local<StackTrace> StackTrace::CurrentStackTrace(
|
|
|
| // --- S t a c k F r a m e ---
|
|
|
| -static int getIntProperty(const StackFrame* f, const char* propertyName,
|
| - int defaultValue) {
|
| - i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate();
|
| - ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| - i::HandleScope scope(isolate);
|
| - i::Handle<i::JSObject> self = Utils::OpenHandle(f);
|
| - i::Handle<i::Object> obj =
|
| - i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked();
|
| - return obj->IsSmi() ? i::Smi::cast(*obj)->value() : defaultValue;
|
| -}
|
| -
|
| -
|
| int StackFrame::GetLineNumber() const {
|
| - return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo);
|
| + int v = Utils::OpenHandle(this)->line_number();
|
| + return v ? v : Message::kNoLineNumberInfo;
|
| }
|
|
|
|
|
| int StackFrame::GetColumn() const {
|
| - return getIntProperty(this, "column", Message::kNoColumnInfo);
|
| + int v = Utils::OpenHandle(this)->column_number();
|
| + return v ? v : Message::kNoLineNumberInfo;
|
| }
|
|
|
|
|
| int StackFrame::GetScriptId() const {
|
| - return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo);
|
| + int v = Utils::OpenHandle(this)->script_id();
|
| + return v ? v : Message::kNoScriptIdInfo;
|
| }
|
|
|
| -
|
| -static Local<String> getStringProperty(const StackFrame* f,
|
| - const char* propertyName) {
|
| - i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate();
|
| - ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| +Local<String> StackFrame::GetScriptName() const {
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
|
| - i::Handle<i::JSObject> self = Utils::OpenHandle(f);
|
| - i::Handle<i::Object> obj =
|
| - i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked();
|
| + i::Handle<i::StackFrameInfo> self = Utils::OpenHandle(this);
|
| + i::Handle<i::Object> obj(self->script_name(), isolate);
|
| return obj->IsString()
|
| ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj)))
|
| : Local<String>();
|
| }
|
|
|
|
|
| -Local<String> StackFrame::GetScriptName() const {
|
| - return getStringProperty(this, "scriptName");
|
| -}
|
| -
|
| -
|
| Local<String> StackFrame::GetScriptNameOrSourceURL() const {
|
| - return getStringProperty(this, "scriptNameOrSourceURL");
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| + EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
|
| + i::Handle<i::StackFrameInfo> self = Utils::OpenHandle(this);
|
| + i::Handle<i::Object> obj(self->script_name_or_source_url(), isolate);
|
| + return obj->IsString()
|
| + ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj)))
|
| + : Local<String>();
|
| }
|
|
|
|
|
| Local<String> StackFrame::GetFunctionName() const {
|
| - return getStringProperty(this, "functionName");
|
| -}
|
| -
|
| -
|
| -static bool getBoolProperty(const StackFrame* f, const char* propertyName) {
|
| - i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate();
|
| - ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate);
|
| - i::HandleScope scope(isolate);
|
| - i::Handle<i::JSObject> self = Utils::OpenHandle(f);
|
| - i::Handle<i::Object> obj =
|
| - i::JSReceiver::GetProperty(isolate, self, propertyName).ToHandleChecked();
|
| - return obj->IsTrue(isolate);
|
| + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| + EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate));
|
| + i::Handle<i::StackFrameInfo> self = Utils::OpenHandle(this);
|
| + i::Handle<i::Object> obj(self->function_name(), isolate);
|
| + return obj->IsString()
|
| + ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj)))
|
| + : Local<String>();
|
| }
|
|
|
| -bool StackFrame::IsEval() const { return getBoolProperty(this, "isEval"); }
|
| -
|
| +bool StackFrame::IsEval() const { return Utils::OpenHandle(this)->is_eval(); }
|
|
|
| bool StackFrame::IsConstructor() const {
|
| - return getBoolProperty(this, "isConstructor");
|
| + return Utils::OpenHandle(this)->is_constructor();
|
| }
|
|
|
|
|
|
|