forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package haxe;
 | |
| 
 | |
| import haxe.CallStack.StackItem;
 | |
| 
 | |
| private typedef NativeTrace = {
 | |
| 	final skip:Int;
 | |
| 	final stack:Dynamic;
 | |
| }
 | |
| 
 | |
| /**
 | |
| 	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 {
 | |
| 		return { skip:1, stack:untyped __dollar__callstack() };
 | |
| 	}
 | |
| 
 | |
| 	static public function exceptionStack():NativeTrace {
 | |
| 		return { skip:0, stack:untyped __dollar__excstack() };
 | |
| 	}
 | |
| 
 | |
| 	static public function toHaxe(native:NativeTrace, skip:Int = 0):Array<StackItem> {
 | |
| 		skip += native.skip;
 | |
| 		var a = new Array();
 | |
| 		var l = untyped __dollar__asize(native.stack);
 | |
| 		var i = 0;
 | |
| 		while (i < l) {
 | |
| 			var x = native.stack[l - i - 1];
 | |
| 			//skip all CFunctions until we skip required amount of hx entries
 | |
| 			if(x == null && skip > i) {
 | |
| 				skip++;
 | |
| 			}
 | |
| 			if(skip > i++) {
 | |
| 				continue;
 | |
| 			}
 | |
| 			if (x == null)
 | |
| 				a.push(CFunction);
 | |
| 			else if (untyped __dollar__typeof(x) == __dollar__tstring)
 | |
| 				a.push(Module(new String(x)));
 | |
| 			else
 | |
| 				a.push(FilePos(null, new String(untyped x[0]), untyped x[1]));
 | |
| 		}
 | |
| 		return a;
 | |
| 	}
 | |
| } |