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

Unified Diff: src/js/messages.js

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
Index: src/js/messages.js
diff --git a/src/js/messages.js b/src/js/messages.js
index 69d3fbb4f50c89cc03b0ee80c9c1abe7a53997ac..f026d6b6b69a8f298d42b2f201079ae88216094d 100644
--- a/src/js/messages.js
+++ b/src/js/messages.js
@@ -23,6 +23,10 @@ var callSitePositionSymbol =
utils.ImportNow("call_site_position_symbol");
var callSiteStrictSymbol =
utils.ImportNow("call_site_strict_symbol");
+var callSiteWasmObjectSymbol =
+ utils.ImportNow("call_site_wasm_obj_symbol");
+var callSiteWasmFunctionIndexSymbol =
+ utils.ImportNow("call_site_wasm_func_index_symbol");
var Float32x4ToString;
var formattedStackTraceSymbol =
utils.ImportNow("formatted_stack_trace_symbol");
@@ -555,7 +559,7 @@ function GetStackTraceLine(recv, fun, pos, isGlobal) {
// Error implementation
function CallSite(receiver, fun, pos, strict_mode) {
- if (!IS_FUNCTION(fun)) {
+ if (!IS_FUNCTION(fun) && !IS_NUMBER(fun)) {
throw MakeTypeError(kCallSiteExpectsFunction, typeof fun);
}
@@ -563,14 +567,19 @@ function CallSite(receiver, fun, pos, strict_mode) {
return new CallSite(receiver, fun, pos, strict_mode);
}
- SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
- SET_PRIVATE(this, callSiteFunctionSymbol, fun);
+ if (IS_FUNCTION(fun)) {
+ SET_PRIVATE(this, callSiteReceiverSymbol, receiver);
+ SET_PRIVATE(this, callSiteFunctionSymbol, fun);
+ } else {
+ SET_PRIVATE(this, callSiteWasmObjectSymbol, receiver);
+ SET_PRIVATE(this, callSiteWasmFunctionIndexSymbol, TO_UINT32(fun));
+ }
SET_PRIVATE(this, callSitePositionSymbol, TO_INT32(pos));
SET_PRIVATE(this, callSiteStrictSymbol, TO_BOOLEAN(strict_mode));
}
function CheckCallSite(obj, name) {
- if (!IS_RECEIVER(obj) || !HAS_PRIVATE(obj, callSiteFunctionSymbol)) {
+ if (!IS_RECEIVER(obj) || !HAS_PRIVATE(obj, callSitePositionSymbol)) {
throw MakeTypeError(kCallSiteMethod, name);
}
}
@@ -621,6 +630,12 @@ function CallSiteGetScriptNameOrSourceURL() {
function CallSiteGetFunctionName() {
// See if the function knows its own name
CheckCallSite(this, "getFunctionName");
+ if (HAS_PRIVATE(this, callSiteWasmObjectSymbol)) {
+ var wasm = GET_PRIVATE(this, callSiteWasmObjectSymbol);
+ var func_index = GET_PRIVATE(this, callSiteWasmFunctionIndexSymbol);
+ return IS_UNDEFINED(wasm) ? "<WASM>" :
+ IS_STRING(wasm) ? wasm : %WasmGetFunctionName(wasm, func_index);
+ }
return %CallSiteGetFunctionNameRT(this);
}
@@ -656,7 +671,26 @@ function CallSiteIsConstructor() {
return %CallSiteIsConstructorRT(this);
}
+function CallSiteIsWasm() {
+ CheckCallSite(this, "isWasm");
+ return HAS_PRIVATE(this, callSiteWasmObjectSymbol);
+}
+
+function CallSiteGetWasmObject() {
+ CheckCallSite(this, "getWasmObject");
+ return GET_PRIVATE(this, callSiteWasmObjectSymbol);
+}
+
+function CallSiteGetWasmFunctionIndex() {
+ CheckCallSite(this, "getWasmFunctionIndex");
+ return GET_PRIVATE(this, callSiteWasmFunctionIndexSymbol);
+}
+
function CallSiteToString() {
+ if (this.isWasm()) {
+ return this.getFunctionName() + " (<WASM>:" + this.getPosition() + ")";
+ }
+
var fileName;
var fileLocation = "";
if (this.isNative()) {
@@ -737,6 +771,9 @@ utils.SetUpLockedPrototype(CallSite, ["receiver", "fun", "pos"], [
"isNative", CallSiteIsNative,
"getPosition", CallSiteGetPosition,
"isConstructor", CallSiteIsConstructor,
+ "isWasm", CallSiteIsWasm,
+ "getWasmObject", CallSiteGetWasmObject,
+ "getWasmFunctionIndex", CallSiteGetWasmFunctionIndex,
"toString", CallSiteToString
]);
@@ -801,7 +838,7 @@ function GetStackFrames(raw_stack) {
var fun = raw_stack[i + 1];
var code = raw_stack[i + 2];
var pc = raw_stack[i + 3];
- var pos = %_IsSmi(code) ? code : %FunctionGetPositionForOffset(code, pc);
+ var pos = %FunctionGetPositionForOffset(code, pc);
sloppy_frames--;
frames.push(new CallSite(recv, fun, pos, (sloppy_frames < 0)));
}

Powered by Google App Engine
This is Rietveld 408576698