summaryrefslogtreecommitdiff
path: root/Tools/WAD/Wad/wadhandler.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/WAD/Wad/wadhandler.pl')
-rw-r--r--Tools/WAD/Wad/wadhandler.pl36
1 files changed, 36 insertions, 0 deletions
diff --git a/Tools/WAD/Wad/wadhandler.pl b/Tools/WAD/Wad/wadhandler.pl
new file mode 100644
index 0000000..e29240b
--- /dev/null
+++ b/Tools/WAD/Wad/wadhandler.pl
@@ -0,0 +1,36 @@
+package libwadpl;
+sub wad_handler_traceback {
+ package DB;
+ my $es = "";
+ ($pack,$file,$line) = caller(1);
+
+ for ($i = 2; ($p,$f,$l,$s,$h,$w,$e,$r) = caller($i); $i++) {
+ @a = ();
+ for $arg (@args) {
+ $_ = "$arg";
+ s/([\'\\])/\\$1/g;
+ s/([^\0]*)/'$1'/
+ unless /^(?: -?[\d.]+ | \*[\w:]* )$/x;
+ s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
+ s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
+ push(@a, $_);
+ }
+ $w = $w ? '@ = ' : '$ = ';
+ $a = $h ? '(' . join(', ', @a) . ')' : '';
+ $e =~ s/\n\s*\;\s*\Z// if $e;
+ $e =~ s/[\\\']/\\$1/g if $e;
+ if ($r) {
+ $s = "require '$e'";
+ } elsif (defined $r) {
+ $s = "eval '$e'";
+ } elsif ($s eq '(eval)') {
+ $s = "eval {...}";
+ }
+ $f = "file `$f'" unless $f eq '-e';
+ $mess = "$w$s$a called from $f line $l\n";
+ $es = $mess . $es;
+
+ }
+ $es = "Signal at $file line $line\n" . $es;
+ return $es;
+}