Changeset 1330


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