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(); |
} |