Changeset 1303


Ignore:
Timestamp:
2013-07-12T18:59:43+02:00 (9 months ago)
Author:
moo
Message:

disassembler, Decompiler: fix catch, ticks

Location:
trunk
Files:
2 edited

Legend:

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

    r1302 r1303  
    677677                    'op1' => array(), 
    678678                    'op2' => array(), 
    679                     'op3' => array(), 
     679                    'result' => array(), 
    680680                ); 
    681681                foreach ($opcodes[$i] as $name => $value) { 
     
    979979                $this->dasmBasicBlock($EX, array($catchFirst, $catchOpLine)); 
    980980                $catchOp = &$opcodes[$catchOpLine]; 
    981                 echo $indent, 'catch (', str($this->getOpVal($catchOp['op1'], $EX)), ' ', str($this->getOpVal($catchOp['op2'], $EX)), ") {", PHP_EOL; 
     981                echo $indent, 'catch (' 
     982                        , isset($catchOp['op1']['constant']) ? $catchOp['op1']['constant'] : str($this->getOpVal($catchOp['op1'], $EX)) 
     983                        , ' ' 
     984                        , str($this->getOpVal($catchOp['op2'], $EX)) 
     985                        , ") {", PHP_EOL; 
    982986                unset($catchOp); 
    983987 
     
    14021406            $res = $op['result']; 
    14031407            $ext = $op['extended_value']; 
    1404             $currentSourceLine = $op['line']; 
     1408            $currentSourceLine = $op['lineno']; 
    14051409            $EX['value2constant'][$currentSourceLine] = '__LINE__'; 
    14061410 
     
    19701974                // }}} 
    19711975            case XC_INCLUDE_OR_EVAL: // {{{ 
    1972                 $type = $op2['var']; // hack 
     1976                $type = ZEND_ENGINE_2_4 ? $ext : $op2['var']; // hack 
    19731977                $keyword = $this->includeTypes[$type]; 
    19741978                $resvar = "$keyword " . str($this->getOpVal($op1, $EX)); 
     
    21292133                break; 
    21302134            case XC_TICKS: 
    2131                 $lastphpop['ticks'] = $this->getOpVal($op1, $EX); 
     2135                $lastphpop['ticks'] = ZEND_ENGINE_2_4 ? $ext : $this->getOpVal($op1, $EX); 
    21322136                // $EX['tickschanged'] = true; 
    21332137                break; 
     
    22462250 
    22472251            default: 
    2248                 if ($k == 'result') { 
    2249                     var_dump($op); 
    2250                     assert(0); 
    2251                     exit; 
    2252                 } 
    2253                 else { 
    2254                     $d[$kk] = $this->getOpVal($op[$k], $EX); 
    2255                 } 
     2252                $d[$kk] = $this->getOpVal($op[$k], $EX); 
    22562253            } 
    22572254        } 
  • trunk/xcache/xc_opcode_spec_def.h

    r1301 r1303  
    133133    OPSPEC(    UNUSED,        STD,     UNUSED,     UNUSED) /* 105 TICKS                          */ 
    134134    OPSPEC(SEND_NOREF,        VAR,        ARG,     UNUSED) /* 106 SEND_VAR_NO_REF                */ 
     135#ifdef ZEND_ENGINE_2_4 
     136    OPSPEC(    OPLINE,        STD,        STD,     UNUSED) /* 107 CATCH                          */ 
     137#else 
    135138    OPSPEC(    OPLINE,      CLASS,        STD,     UNUSED) /* 107 CATCH                          */ 
     139#endif 
    136140    OPSPEC(    UNUSED,        STD,     OPLINE,     UNUSED) /* 108 THROW                          */ 
    137141    OPSPEC(    FCLASS,        STD,        STD,      CLASS) /* 109 FETCH_CLASS                    */ 
Note: See TracChangeset for help on using the changeset viewer.