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