Changeset 1305 for trunk


Ignore:
Timestamp:
2013-07-12T20:08:46+02:00 (17 months ago)
Author:
moo
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.