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