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