168 lines
4.0 KiB
JavaScript
168 lines
4.0 KiB
JavaScript
// Class: haxe.CallStack
|
|
|
|
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
|
|
|
|
$global.Object.defineProperty(exports, "__esModule", {value: true});
|
|
|
|
var __map_reserved = {};
|
|
|
|
// Imports
|
|
|
|
var $hxClasses = require("./../hxClasses_stub").default;
|
|
var $import = require("./../import_stub").default;
|
|
function HxOverrides() {return require("./../HxOverrides");}
|
|
function haxe_StackItem() {return require("./../haxe/StackItem");}
|
|
function js__$Boot_HaxeError() {return require("./../js/_Boot/HaxeError");}
|
|
function StringBuf() {return require("./../StringBuf");}
|
|
function Type() {return require("./../Type");}
|
|
function EReg() {return require("./../EReg");}
|
|
function Std() {return require("./../Std");}
|
|
function StringTools() {return require("./../StringTools");}
|
|
|
|
// Constructor
|
|
|
|
var CallStack = function(){}
|
|
|
|
// Meta
|
|
|
|
CallStack.__name__ = ["haxe","CallStack"];
|
|
CallStack.prototype = {
|
|
|
|
};
|
|
CallStack.prototype.__class__ = $hxClasses["haxe.CallStack"] = CallStack;
|
|
|
|
// Init
|
|
|
|
|
|
|
|
// Statics
|
|
|
|
CallStack.getStack = function(e) {
|
|
if(e == null) {
|
|
return [];
|
|
}
|
|
var oldValue = Error.prepareStackTrace;
|
|
Error.prepareStackTrace = function(error,callsites) {
|
|
var stack = [];
|
|
var _g = 0;
|
|
while(_g < callsites.length) {
|
|
var site = callsites[_g];
|
|
++_g;
|
|
if(CallStack.wrapCallSite != null) {
|
|
site = CallStack.wrapCallSite(site);
|
|
}
|
|
var method = null;
|
|
var fullName = site.getFunctionName();
|
|
if(fullName != null) {
|
|
var idx = fullName.lastIndexOf(".");
|
|
if(idx >= 0) {
|
|
var className = (HxOverrides().default).substr(fullName,0,idx);
|
|
var methodName = (HxOverrides().default).substr(fullName,idx + 1,null);
|
|
method = (haxe_StackItem().default).Method(className,methodName);
|
|
}
|
|
}
|
|
stack.push((haxe_StackItem().default).FilePos(method,site.getFileName(),site.getLineNumber()));
|
|
}
|
|
return stack;
|
|
};
|
|
var a = CallStack.makeStack(e.stack);
|
|
Error.prepareStackTrace = oldValue;
|
|
return a;
|
|
}
|
|
CallStack.callStack = function() {
|
|
try {
|
|
throw new Error();
|
|
} catch( e ) {
|
|
if (e instanceof (js__$Boot_HaxeError().default)) e = e.val;
|
|
var a = CallStack.getStack(e);
|
|
a.shift();
|
|
return a;
|
|
}
|
|
}
|
|
CallStack.exceptionStack = function() {
|
|
return CallStack.getStack(CallStack.lastException);
|
|
}
|
|
CallStack.toString = function(stack) {
|
|
var b = new (StringBuf().default)();
|
|
var _g = 0;
|
|
while(_g < stack.length) {
|
|
var s = stack[_g];
|
|
++_g;
|
|
b.add("\nCalled from ");
|
|
CallStack.itemToString(b,s);
|
|
}
|
|
return b.toString();
|
|
}
|
|
CallStack.itemToString = function(b,s) {
|
|
switch((Type().default).enumIndex(s)) {
|
|
case 0:
|
|
b.add("a C function");
|
|
break;
|
|
case 1:
|
|
var m = s[2];
|
|
b.add("module ");
|
|
b.add(m);
|
|
break;
|
|
case 2:
|
|
var line = s[4];
|
|
var file = s[3];
|
|
var s1 = s[2];
|
|
if(s1 != null) {
|
|
CallStack.itemToString(b,s1);
|
|
b.add(" (");
|
|
}
|
|
b.add(file);
|
|
b.add(" line ");
|
|
b.add(line);
|
|
if(s1 != null) {
|
|
b.add(")");
|
|
}
|
|
break;
|
|
case 3:
|
|
var meth = s[3];
|
|
var cname = s[2];
|
|
b.add(cname);
|
|
b.add(".");
|
|
b.add(meth);
|
|
break;
|
|
case 4:
|
|
var n = s[2];
|
|
b.add("local function #");
|
|
b.add(n);
|
|
break;
|
|
}
|
|
}
|
|
CallStack.makeStack = function(s) {
|
|
if(s == null) {
|
|
return [];
|
|
} else if(typeof(s) == "string") {
|
|
var stack = s.split("\n");
|
|
if(stack[0] == "Error") {
|
|
stack.shift();
|
|
}
|
|
var m = [];
|
|
var rie10 = new (EReg().default)("^ at ([A-Za-z0-9_. ]+) \\(([^)]+):([0-9]+):([0-9]+)\\)$","");
|
|
var _g = 0;
|
|
while(_g < stack.length) {
|
|
var line = stack[_g];
|
|
++_g;
|
|
if(rie10.match(line)) {
|
|
var path = rie10.matched(1).split(".");
|
|
var meth = path.pop();
|
|
var file = rie10.matched(2);
|
|
var line1 = (Std().default).parseInt(rie10.matched(3));
|
|
m.push((haxe_StackItem().default).FilePos(meth == "Anonymous function" ? (haxe_StackItem().default).LocalFunction() : meth == "Global code" ? null : (haxe_StackItem().default).Method(path.join("."),meth),file,line1));
|
|
} else {
|
|
m.push((haxe_StackItem().default).Module((StringTools().default).trim(line)));
|
|
}
|
|
}
|
|
return m;
|
|
} else {
|
|
return s;
|
|
}
|
|
}
|
|
|
|
|
|
// Export
|
|
|
|
exports.default = CallStack; |