Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 47fc1ce1b2f62ba22dd739aeba225c14da1b9230..a71c02e46ca58e5876225e7e10bc65457b4863b3 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -2579,22 +2579,19 @@ static int getIntProperty(const StackFrame* f, const char* propertyName, |
return obj->IsSmi() ? i::Smi::cast(*obj)->value() : defaultValue; |
} |
- |
-int StackFrame::GetLineNumber() const { |
- return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo); |
-} |
- |
- |
-int StackFrame::GetColumn() const { |
- return getIntProperty(this, "column", Message::kNoColumnInfo); |
-} |
- |
- |
-int StackFrame::GetScriptId() const { |
- return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo); |
+static uint32_t getUintProperty(const StackFrame* f, const char* propertyName, |
+ uint32_t defaultValue) { |
+ i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
+ ENTER_V8(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(); |
+ uint32_t val = defaultValue; |
+ obj->ToUint32(&val); |
+ return val; |
} |
- |
static Local<String> getStringProperty(const StackFrame* f, |
const char* propertyName) { |
i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
@@ -2608,6 +2605,40 @@ static Local<String> getStringProperty(const StackFrame* f, |
: Local<String>(); |
} |
+static Local<Object> getObjectProperty(const StackFrame* f, |
+ const char* propertyName) { |
+ i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
+ ENTER_V8(isolate); |
+ 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(); |
+ return obj->IsObject() |
+ ? scope.Escape(Local<Object>::Cast(Utils::ToLocal(obj))) |
+ : Local<Object>(); |
+} |
+ |
+static bool getBoolProperty(const StackFrame* f, const char* propertyName) { |
+ i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); |
+ ENTER_V8(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(); |
+} |
+ |
+int StackFrame::GetLineNumber() const { |
+ return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo); |
+} |
+ |
+int StackFrame::GetColumn() const { |
+ return getIntProperty(this, "column", Message::kNoColumnInfo); |
+} |
+ |
+int StackFrame::GetScriptId() const { |
+ return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo); |
+} |
Local<String> StackFrame::GetScriptName() const { |
return getStringProperty(this, "scriptName"); |
@@ -2623,17 +2654,6 @@ 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(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(); |
-} |
- |
bool StackFrame::IsEval() const { return getBoolProperty(this, "isEval"); } |
@@ -2641,6 +2661,16 @@ bool StackFrame::IsConstructor() const { |
return getBoolProperty(this, "isConstructor"); |
} |
+bool StackFrame::IsWasm() const { return getBoolProperty(this, "isWasm"); } |
+ |
+Local<Object> StackFrame::GetWasmObject() const { |
+ return getObjectProperty(this, "wasmObject"); |
Yang
2016/04/28 13:08:43
This should also not be called if IsWasm() returns
|
+} |
+ |
+uint32_t StackFrame::GetWasmByteOffset() const { |
+ return getUintProperty(this, "wasmByteOffset", |
+ Message::kNoWasmByteOffsetInfo); |
+} |
// --- N a t i v e W e a k M a p --- |