46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package haxe; | ||
|  | 
 | ||
|  | import haxe.CallStack.StackItem; | ||
|  | 
 | ||
|  | private typedef NativeTrace = Array<python.Tuple.Tuple4<String, Int, String, String>>; | ||
|  | 
 | ||
|  | /** | ||
|  | 	Do not use manually. | ||
|  | **/ | ||
|  | @:dox(hide) | ||
|  | @:noCompletion | ||
|  | class NativeStackTrace { | ||
|  | 	@:ifFeature('haxe.NativeStackTrace.exceptionStack') | ||
|  | 	static public inline function saveStack(exception:Any):Void { | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public inline function callStack():NativeTrace { | ||
|  | 		var infos = python.lib.Traceback.extract_stack(); | ||
|  | 		infos.pop(); | ||
|  | 		infos.reverse(); | ||
|  | 		return infos; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function exceptionStack():NativeTrace { | ||
|  | 		var exc = python.lib.Sys.exc_info(); | ||
|  | 		if (exc._3 != null) { | ||
|  | 			var infos = python.lib.Traceback.extract_tb(exc._3); | ||
|  | 			infos.reverse(); | ||
|  | 			return infos; | ||
|  | 		} else { | ||
|  | 			return []; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function toHaxe(native:NativeTrace, skip:Int = 0):Array<StackItem> { | ||
|  | 		var stack = []; | ||
|  | 		for(i in 0...native.length) { | ||
|  | 			if(skip > i) { | ||
|  | 				continue; | ||
|  | 			} | ||
|  | 			var elem = native[i]; | ||
|  | 			stack.push(FilePos(Method(null, elem._3), elem._1, elem._2)); | ||
|  | 		} | ||
|  | 		return stack; | ||
|  | 	} | ||
|  | } |