54 lines
1.2 KiB
Haxe
54 lines
1.2 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 {
|
|
}
|
|
|
|
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;
|
|
}
|
|
} |