Changeset 1330 in svn


Ignore:
Timestamp:
2013-07-17T11:41:08+02:00 (23 months ago)
Author:
Xuefer
Message:

Decompiler: refix switch (SWITCH_FREE)

File:
1 edited

Legend:

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

    r1329 r1330  
    10461046        // }}}
    10471047        // {{{ switch/case
    1048         if ($firstOp['opcode'] == XC_SWITCH_FREE && isset($T[$firstOp['op1']['var']])) {
    1049             // TODO: merge this code to CASE code. use SWITCH_FREE to detect begin of switch by using $Ts if possible
    1050             $this->beginComplexBlock($EX);
    1051             echo $indent, 'switch (', str($this->getOpVal($firstOp['op1'], $EX)), ") {", PHP_EOL;
    1052             echo $indent, '}', PHP_EOL;
    1053             $this->endComplexBlock($EX);
    1054             return;
    1055         }
    1056 
    10571048        if (
    10581049            ($firstOp['opcode'] == XC_CASE
     
    10901081            $this->beginComplexBlock($EX);
    10911082
    1092             echo $indent, 'switch (', str($this->getOpVal($caseOp['op1'], $EX), $EX), ") {", PHP_EOL;
     1083            echo $indent, 'switch (', str($this->getOpVal($caseOp['op1'], $EX, true), $EX), ") {", PHP_EOL;
    10931084            $caseIsOut = false;
    10941085            foreach ($cases as $caseFirst => $caseLast) {
     
    12371228
    12381229            $this->endComplexBlock($EX);
    1239             if ($lastOp['opcode'] == XC_SWITCH_FREE) {
    1240                 $this->removeJmpInfo($EX, $range[1]);
    1241             }
    12421230            return;
    12431231        }
     
    13611349                break;
    13621350            */
    1363 
    1364             case XC_SWITCH_FREE:
    1365                 $op['jmpins'] = array($i - 1);
    1366                 $opcodes[$i - 1]['jmpouts'][] = $i;
    1367                 break;
    13681351
    13691352            case XC_CASE:
     
    20992082                // }}}
    21002083            case XC_SWITCH_FREE: // {{{
     2084                if (isset($T[$op1['var']])) {
     2085                    $this->beginComplexBlock($EX);
     2086                    echo $EX['indent'], 'switch (', str($this->getOpVal($op1, $EX)), ") {", PHP_EOL;
     2087                    echo $EX['indent'], '}', PHP_EOL;
     2088                    $this->endComplexBlock($EX);
     2089                }
    21012090                break;
    21022091                // }}}
Note: See TracChangeset for help on using the changeset viewer.