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