Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: src/api.cc

Issue 1909353002: [wasm] Make wasm info available on the stack trace (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@wasm-offset-table-3
Patch Set: more gcmole problems Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/v8.h ('k') | src/frames.h » ('j') | src/frames.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index 17792341eac5a9955ec497dae1023bab46a3c31d..b46c0edbb1111c6916c5f469e6f3b445b2882951 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -2568,17 +2568,56 @@ Local<StackTrace> StackTrace::CurrentStackTrace(
// --- S t a c k F r a m e ---
+#define STACKFRAME_PROPERTY_HELPER(obj, propertyName, MAKE_SCOPE) \
titzer 2016/04/22 12:16:25 As tempting as this is, let's not macro-ify this c
Clemens Hammacher 2016/04/26 14:00:10 Hm, OK.
+ i::Isolate* isolate = Utils::OpenHandle(f)->GetIsolate(); \
+ ENTER_V8(isolate); \
+ MAKE_SCOPE(scope, isolate); \
+ i::Handle<i::JSObject> self = Utils::OpenHandle(f); \
+ i::Handle<i::Object> obj = \
+ i::JSReceiver::GetProperty(isolate, self, propertyName) \
+ .ToHandleChecked();
+#define MAKE_STD_SCOPE(name, isolate) i::HandleScope name(isolate)
+#define STACKFRAME_PROPERTY(obj, propertyName) \
+ STACKFRAME_PROPERTY_HELPER(obj, propertyName, MAKE_STD_SCOPE)
+#define MAKE_ESCAPABLE_SCOPE(name, isolate) \
+ EscapableHandleScope name(reinterpret_cast<Isolate*>(isolate))
+#define STACKFRAME_ESCAPABLE_PROPERTY(obj, propertyName) \
+ STACKFRAME_PROPERTY_HELPER(obj, propertyName, MAKE_ESCAPABLE_SCOPE)
+
static int getIntProperty(const StackFrame* f, const char* propertyName,
int 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();
+ STACKFRAME_PROPERTY(obj, propertyName)
return obj->IsSmi() ? i::Smi::cast(*obj)->value() : defaultValue;
}
+static uint32_t getUintProperty(const StackFrame* f, const char* propertyName,
+ uint32_t defaultValue) {
+ STACKFRAME_PROPERTY(obj, propertyName)
+ uint32_t val = defaultValue;
+ obj->ToUint32(&val);
+ return val;
+}
+
+static Local<String> getStringProperty(const StackFrame* f,
+ const char* propertyName) {
+ STACKFRAME_ESCAPABLE_PROPERTY(obj, propertyName)
+ return obj->IsString()
+ ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj)))
+ : Local<String>();
+}
+
+static Local<Object> getObjectProperty(const StackFrame* f,
+ const char* propertyName) {
+ STACKFRAME_ESCAPABLE_PROPERTY(obj, propertyName);
+ return obj->IsObject()
+ ? scope.Escape(Local<Object>::Cast(Utils::ToLocal(obj)))
+ : Local<Object>();
+}
+
+static bool getBoolProperty(const StackFrame* f, const char* propertyName) {
+ STACKFRAME_PROPERTY(obj, propertyName);
+ return obj->IsTrue();
+}
int StackFrame::GetLineNumber() const {
return getIntProperty(this, "lineNumber", Message::kNoLineNumberInfo);
@@ -2594,21 +2633,6 @@ int StackFrame::GetScriptId() const {
return getIntProperty(this, "scriptId", Message::kNoScriptIdInfo);
}
-
-static Local<String> getStringProperty(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->IsString()
- ? scope.Escape(Local<String>::Cast(Utils::ToLocal(obj)))
- : Local<String>();
-}
-
-
Local<String> StackFrame::GetScriptName() const {
return getStringProperty(this, "scriptName");
}
@@ -2623,17 +2647,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 +2654,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");
+}
+
+uint32_t StackFrame::GetWasmByteOffset() const {
+ return getUintProperty(this, "wasmByteOffset",
+ Message::kNoWasmByteOffsetInfo);
+}
// --- N a t i v e W e a k M a p ---
« no previous file with comments | « include/v8.h ('k') | src/frames.h » ('j') | src/frames.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698