42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			1.1 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 { | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@:noDebug //Do not mess up the exception stack | ||
|  | 	static public function callStack():Array<String> { | ||
|  | 		return untyped __global__.__hxcpp_get_call_stack(true); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@:noDebug //Do not mess up the exception stack/ | ||
|  | 	static public function exceptionStack():Array<String> { | ||
|  | 		return untyped __global__.__hxcpp_get_exception_stack(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static public function toHaxe(native:Array<String>, skip:Int = 0):Array<StackItem> { | ||
|  | 		var stack:Array<String> = native; | ||
|  | 		var m = new Array<StackItem>(); | ||
|  | 		for (i in 0...stack.length) { | ||
|  | 			if(skip > i) { | ||
|  | 				continue; | ||
|  | 			} | ||
|  | 			var words = stack[i].split("::"); | ||
|  | 			if (words.length == 0) | ||
|  | 				m.push(CFunction) | ||
|  | 			else if (words.length == 2) | ||
|  | 				m.push(Method(words[0], words[1])); | ||
|  | 			else if (words.length == 4) | ||
|  | 				m.push(FilePos(Method(words[0], words[1]), words[2], Std.parseInt(words[3]))); | ||
|  | 		} | ||
|  | 		return m; | ||
|  | 	} | ||
|  | } |