diff options
Diffstat (limited to 'Tools/WAD/Wad/wadhandler.pl')
| -rw-r--r-- | Tools/WAD/Wad/wadhandler.pl | 36 |
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; +} |
