forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package haxe; | ||
|  | 
 | ||
|  | import haxe.CallStack.StackItem; | ||
|  | 
 | ||
|  | /** | ||
|  | 	Do not use manually. | ||
|  | **/ | ||
|  | @:dox(hide) | ||
|  | @:noCompletion | ||
|  | class NativeStackTrace { | ||
|  | 	@:ifFeature('haxe.NativeStackTrace.exceptionStack') | ||
|  | 	static public inline function saveStack(exception:Any):Void { | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function callStack():Array<String> { | ||
|  | 		return switch lua.Debug.traceback() { | ||
|  | 			case null: []; | ||
|  | 			case s: s.split('\n').slice(3); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function exceptionStack():Array<String> { | ||
|  | 		return []; //Not implemented. Maybe try xpcal instead of pcal in genlua. | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function toHaxe(native:Array<String>, skip:Int = 0):Array<StackItem> { | ||
|  | 		var stack = []; | ||
|  | 		var cnt = -1; | ||
|  | 		for (item in native) { | ||
|  | 			var parts = item.substr(1).split(":"); //`substr` to skip a tab at the beginning of a line | ||
|  | 			var file = parts[0]; | ||
|  | 			if(file == '[C]') { | ||
|  | 				continue; | ||
|  | 			} | ||
|  | 			++cnt; | ||
|  | 			if(skip > cnt) { | ||
|  | 				continue; | ||
|  | 			} | ||
|  | 			var line = parts[1]; | ||
|  | 			var method = if(parts.length <= 2) { | ||
|  | 				null; | ||
|  | 			} else { | ||
|  | 				var methodPos = parts[2].indexOf("'"); | ||
|  | 				if(methodPos < 0) { | ||
|  | 					null; | ||
|  | 				} else { | ||
|  | 					Method(null, parts[2].substring(methodPos + 1, parts[2].length - 1)); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			stack.push(FilePos(method, file, Std.parseInt(line))); | ||
|  | 		} | ||
|  | 		return stack; | ||
|  | 	} | ||
|  | } |