Changeset 1305 in svn


Ignore:
Timestamp:
2013-07-12T20:08:46+02:00 (2 years ago)
Author:
Xuefer
Message:

Decompiler: adds simple backtrace print, fix warning for catch

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Decompiler.class.php

    r1304 r1305  
    88    return "\x1B[{$color}m$str\x1B[0m";
    99}
     10
     11function printBacktrace() // {{{
     12{
     13    $backtrace = debug_backtrace();
     14    foreach ($backtrace as $stack) {
     15        $args = array();
     16        foreach ($stack['args'] as $arg) {
     17            if (is_array($arg)) {
     18                $array = array();
     19                foreach ($arg as $key => $value) {
     20                    $array[] = var_export($key, true) . " => " . (is_scalar($value) ? var_export($value, true) : gettype($value));
     21                    if (count($array) >= 5) {
     22                        $array[] = '...';
     23                        break;
     24                    }
     25                }
     26                $args[] = 'array(' . implode(', ', $array) . ')';
     27            }
     28            else {
     29                $args[] = (string) $arg;
     30            }
     31        }
     32        printf("%d: %s::%s(%s)" . PHP_EOL
     33                , $stack['line']
     34                , isset($stack['class']) ? $stack['class'] : ''
     35                , $stack['function']
     36                , implode(', ', $args)
     37                );
     38    }
     39}
     40// }}}
    1041
    1142function str($code, $indent = '') // {{{
     
    736767    {
    737768        $opcodes = &$EX['opcodes'];
     769        if (!isset($opcodes[$line]['jmpouts'])) {
     770            printBacktrace();
     771        }
    738772        foreach ($opcodes[$line]['jmpouts'] as $jmpTo) {
    739773            $jmpins = &$opcodes[$jmpTo]['jmpins'];
     
    944978
    945979            // search for XC_CATCH
    946             $this->removeJmpInfo($EX, $catchFirst);
    947980            for ($i = $catchFirst; $i <= $range[1]; ) {
    948981                if ($opcodes[$i]['opcode'] == XC_CATCH) {
  • trunk/mod_disassembler/sample.php

    r1302 r1305  
    412412declare (ticks=1) {
    413413    echo 1;
    414     while (1) {
     414}
     415
     416while (1) {
     417    declare (ticks=1) {
    415418        echo 2;
    416419    }
Note: See TracChangeset for help on using the changeset viewer.