LNXSDK/Kha/Tools/macos/std/lua/_std/haxe/NativeStackTrace.hx

54 lines
1.2 KiB
Haxe
Raw Normal View History

2025-01-22 16:18:30 +01:00
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 {
}
static public function callStack():Array<String> {
return switch lua.Debug.traceback() {
case null: [];
case s: s.split('\n').slice(3);
}
}
static public function exceptionStack():Array<String> {
return []; //Not implemented. Maybe try xpcal instead of pcal in genlua.
}
static public function toHaxe(native:Array<String>, skip:Int = 0):Array<StackItem> {
var stack = [];
var cnt = -1;
for (item in native) {
var parts = item.substr(1).split(":"); //`substr` to skip a tab at the beginning of a line
var file = parts[0];
if(file == '[C]') {
continue;
}
++cnt;
if(skip > cnt) {
continue;
}
var line = parts[1];
var method = if(parts.length <= 2) {
null;
} else {
var methodPos = parts[2].indexOf("'");
if(methodPos < 0) {
null;
} else {
Method(null, parts[2].substring(methodPos + 1, parts[2].length - 1));
}
}
stack.push(FilePos(method, file, Std.parseInt(line)));
}
return stack;
}
}