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