Changeset 1338 in svn for trunk


Ignore:
Timestamp:
2013-07-22T08:06:39+02:00 (2 years ago)
Author:
Xuefer
Message:

phpdop: show jumpouts/jmpins

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/phpdop.phpr

    r1328 r1338  
    3333}
    3434
    35 function dump_opcodes($opcodes, $indent = '')
     35function dump_opcodes($op_array, $indent = '')
    3636{
    3737    global $decompiler;
    3838
    3939    $types = array('result' => 5, 'op1' => 20, 'op2' => 20);
    40     foreach ($decompiler->fixOpcode($opcodes) as $line => $op) {
     40    $opcodes = &$op_array['opcodes'];
     41    $decompiler->fixOpcode($opcodes);
     42    $decompiler->buildJmpInfo($op_array);
     43    foreach ($opcodes as $line => $op) {
    4144        echo $indent;
    4245        echo sprintf("%3d ", $op['lineno']);
     
    5356        }
    5457        printf("%5s", isset($op['extended_value']) ?  $op['extended_value'] : "");
     58        if (isset($op['jmpouts']) || isset($op['jmpins'])) {
     59            printf("%10s %10s"
     60                    , (isset($op['jmpouts']) ? '>' . implode(',', $op['jmpouts']) : '')
     61                    , (isset($op['jmpins']) ? '<' . implode(',', $op['jmpins']) : '')
     62                    );
     63        }
     64        if (isset($op['isCatchBegin'])) {
     65            echo 'CB';
     66        }
    5567
    5668        echo "\n";
     
    7082    echo $indent, 'function ', $name, "\n";
    7183    if (isset($op_array)) {
    72         dump_opcodes($op_array['opcodes'], "  " . $indent);
     84        dump_opcodes($op_array, "  " . $indent);
    7385    }
    7486}
     
    126138}
    127139if (isset($op_array)) {
    128     dump_opcodes($op_array['opcodes']);
     140    dump_opcodes($op_array);
    129141}
    130142
  • trunk/lib/Decompiler.class.php

    r1335 r1338  
    707707    }
    708708    // }}}
    709     function &fixOpcode($opcodes, $removeTailing = false, $defaultReturnValue = null) // {{{
     709    function fixOpCode(&$opcodes, $removeTailing = false, $defaultReturnValue = null) // {{{
    710710    {
    711711        $last = count($opcodes) - 1;
     
    758758            }
    759759        }
    760         return $opcodes;
    761760    }
    762761    // }}}
     
    12971296    }
    12981297    // }}}
    1299     function &dop_array($op_array, $indent = '') // {{{
    1300     {
    1301         $op_array['opcodes'] = $this->fixOpcode($op_array['opcodes'], true, $indent == '' ? 1 : null);
     1298    function buildJmpInfo(&$op_array) // {{{ build jmpins/jmpouts to op_array
     1299    {
    13021300        $opcodes = &$op_array['opcodes'];
    13031301        $last = count($opcodes) - 1;
    1304         // {{{ build jmpins/jmpouts to op_array
    13051302        for ($i = 0; $i <= $last; $i ++) {
    13061303            $op = &$opcodes[$i];
     
    13851382            }
    13861383        }
    1387         // }}}
     1384    }
     1385    // }}}
     1386    function &dop_array($op_array, $indent = '') // {{{
     1387    {
     1388        $this->fixOpCode($op_array['opcodes'], true, $indent == '' ? 1 : null);
     1389        $this->buildJmpInfo($op_array);
     1390
     1391        $opcodes = &$op_array['opcodes'];
     1392        $last = count($opcodes) - 1;
    13881393        // build semi-basic blocks
    13891394        $nextbbs = array();
Note: See TracChangeset for help on using the changeset viewer.