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