| Index: src/messages.js
|
| diff --git a/src/messages.js b/src/messages.js
|
| index ab71936725a0daf88b106a682d3aa93202ca7d09..2a00ba84691fabb9952fc66669edb80571d72206 100644
|
| --- a/src/messages.js
|
| +++ b/src/messages.js
|
| @@ -788,15 +788,7 @@ function CallSiteGetThis() {
|
| }
|
|
|
| function CallSiteGetTypeName() {
|
| - var constructor = this.receiver.constructor;
|
| - if (!constructor) {
|
| - return %_CallFunction(this.receiver, ObjectToString);
|
| - }
|
| - var constructorName = constructor.name;
|
| - if (!constructorName) {
|
| - return %_CallFunction(this.receiver, ObjectToString);
|
| - }
|
| - return constructorName;
|
| + return GetTypeName(this, false);
|
| }
|
|
|
| function CallSiteIsToplevel() {
|
| @@ -830,8 +822,10 @@ function CallSiteGetFunctionName() {
|
| var name = this.fun.name;
|
| if (name) {
|
| return name;
|
| - } else {
|
| - return %FunctionGetInferredName(this.fun);
|
| + }
|
| + name = %FunctionGetInferredName(this.fun);
|
| + if (name) {
|
| + return name;
|
| }
|
| // Maybe this is an evaluation?
|
| var script = %FunctionGetScript(this.fun);
|
| @@ -952,20 +946,24 @@ function CallSiteToString() {
|
| fileLocation = "unknown source";
|
| }
|
| var line = "";
|
| - var functionName = this.getFunction().name;
|
| - var addPrefix = true;
|
| + var functionName = this.getFunctionName();
|
| + var addSuffix = true;
|
| var isConstructor = this.isConstructor();
|
| var isMethodCall = !(this.isToplevel() || isConstructor);
|
| if (isMethodCall) {
|
| + var typeName = GetTypeName(this, true);
|
| var methodName = this.getMethodName();
|
| - line += this.getTypeName() + ".";
|
| if (functionName) {
|
| + if (typeName && functionName.indexOf(typeName) != 0) {
|
| + line += typeName + ".";
|
| + }
|
| line += functionName;
|
| - if (methodName && (methodName != functionName)) {
|
| + if (methodName && functionName.lastIndexOf("." + methodName) !=
|
| + functionName.length - methodName.length - 1) {
|
| line += " [as " + methodName + "]";
|
| }
|
| } else {
|
| - line += methodName || "<anonymous>";
|
| + line += typeName + "." + (methodName || "<anonymous>");
|
| }
|
| } else if (isConstructor) {
|
| line += "new " + (functionName || "<anonymous>");
|
| @@ -973,9 +971,9 @@ function CallSiteToString() {
|
| line += functionName;
|
| } else {
|
| line += fileLocation;
|
| - addPrefix = false;
|
| + addSuffix = false;
|
| }
|
| - if (addPrefix) {
|
| + if (addSuffix) {
|
| line += " (" + fileLocation + ")";
|
| }
|
| return line;
|
| @@ -1085,6 +1083,19 @@ function FormatRawStackTrace(error, raw_stack) {
|
| }
|
| }
|
|
|
| +function GetTypeName(obj, requireConstructor) {
|
| + var constructor = obj.receiver.constructor;
|
| + if (!constructor) {
|
| + return requireConstructor ? null :
|
| + %_CallFunction(obj.receiver, ObjectToString);
|
| + }
|
| + var constructorName = constructor.name;
|
| + if (!constructorName) {
|
| + return requireConstructor ? null :
|
| + %_CallFunction(obj.receiver, ObjectToString);
|
| + }
|
| + return constructorName;
|
| +}
|
|
|
| function captureStackTrace(obj, cons_opt) {
|
| var stackTraceLimit = $Error.stackTraceLimit;
|
|
|