Changeset 739


Ignore:
Timestamp:
2011-04-11T06:46:16+02:00 (4 years ago)
Author:
moo
Message:

merge decompiler updates from trunk

Location:
branches/1.3
Files:
5 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/1.3

  • branches/1.3/Decompiler.class.php

    r728 r739  
    99}
    1010
    11 function str($src, $indent = '') // {{{
     11function str($code, $indent = '') // {{{
     12{
     13    if (is_object($code)) {
     14        if (get_class($code) != 'Decompiler_Code') {
     15            $code = toCode($code, $indent);
     16        }
     17        return $code->__toString();
     18    }
     19
     20    return (string) $code;
     21}
     22// }}}
     23function toCode($src, $indent = '') // {{{
    1224{
    1325    if (is_array($indent)) {
     
    1527    }
    1628
    17     /*
    18     $e = xcache_get_special_value($src);
    19     if (isset($e)) {
    20         if (is_array($e)) {
    21             $src = $e;
    22         }
    23         else {
    24             return $e;
    25         }
    26     }
    27     */
    28 
    29     if (is_array($src)) {
    30         exit('array str');
    31         $src = new Decompiler_Array($src, $indent);
    32         return $src->__toString();
    33     }
    34 
    3529    if (is_object($src)) {
    36         if (!method_exists($src, '__toString')) {
     30        if (!method_exists($src, 'toCode')) {
    3731            var_dump($src);
    38             exit('no __toString');
    39         }
    40         return $src->__toString();
    41     }
    42 
    43     return $src;
     32            exit('no toCode');
     33        }
     34        return new Decompiler_Code($src->toCode($indent));
     35    }
     36
     37    return new Decompiler_Code($src);
    4438}
    4539// }}}
     
    5549    }
    5650
    57     if ($value instanceof Decompiler_Object) {
     51    if (is_a($value, 'Decompiler_Object')) {
    5852        // use as is
    5953    }
    6054    else if (is_array($value)) {
    61         $value = new Decompiler_Array($value);
     55        $value = new Decompiler_ConstArray($value);
    6256    }
    6357    else {
     
    8074    }
    8175
    82     function __toString()
     76    function toCode($indent)
    8377    {
    8478        return var_export($this->value, true);
     
    9387    {
    9488        $this->src = $src;
     89    }
     90
     91    function toCode($indent)
     92    {
     93        return $this;
    9594    }
    9695
     
    107106    var $op2;
    108107    var $parent;
     108    var $indent;
    109109
    110110    function Decompiler_Binop($parent, $op1, $opc, $op2)
     
    116116    }
    117117
    118     function __toString()
    119     {
    120         $op1 = str($this->op1);
     118    function toCode($indent)
     119    {
     120        $op1 = toCode($this->op1, $indent);
    121121        if (is_a($this->op1, 'Decompiler_Binop') && $this->op1->opc != $this->opc) {
    122122            $op1 = "($op1)";
     
    124124        $opstr = $this->parent->binops[$this->opc];
    125125        if ($op1 == '0' && $this->opc == XC_SUB) {
    126             return $opstr . str($this->op2);
    127         }
    128         return $op1 . ' ' . $opstr . ' ' . str($this->op2);
     126            return $opstr . toCode($this->op2, $indent);
     127        }
     128        return $op1 . ' ' . $opstr . ' ' . toCode($this->op2, $indent);
    129129    }
    130130}
     
    142142    }
    143143
    144     function __toString()
     144    function toCode($indent)
    145145    {
    146146        switch ($this->fetchType) {
     
    168168    }
    169169
    170     function __toString()
    171     {
    172         return $this->obj->__toString();
     170    function toCode($indent)
     171    {
     172        return $this->obj->toCode($indent);
    173173    }
    174174}
     
    180180    var $assign = null;
    181181
    182     function __toString()
     182    function toCode($indent)
    183183    {
    184184        if (is_a($this->value, 'Decompiler_ListBox')) {
    185             $exp = str($this->value->obj->src);
     185            $exp = toCode($this->value->obj->src, $indent);
    186186        }
    187187        else {
    188             $exp = str($this->value);
     188            $exp = toCode($this->value, $indent);
    189189        }
    190190        foreach ($this->offsets as $dim) {
    191             $exp .= '[' . str($dim) . ']';
     191            $exp .= '[' . toCode($dim, $indent) . ']';
    192192        }
    193193        return $exp;
     
    205205    var $everLocked = false;
    206206
    207     function __toString()
     207    function toCode($indent)
    208208    {
    209209        if (count($this->dims) == 1 && !$this->everLocked) {
     
    212212            $dim->value = $this->src;
    213213            if (!isset($dim->assign)) {
    214                 return str($dim);
    215             }
    216             return str($this->dims[0]->assign) . ' = ' . str($dim);
     214                return toCode($dim, $indent);
     215            }
     216            return toCode($this->dims[0]->assign, $indent) . ' = ' . toCode($dim, $indent);
    217217        }
    218218        /* flatten dims */
     
    223223                $assign = &$assign[$offset];
    224224            }
    225             $assign = str($dim->assign);
    226         }
    227         return $this->toList($assigns) . ' = ' . str($this->src);
     225            $assign = toCode($dim->assign, $indent);
     226        }
     227        return $this->toList($assigns) . ' = ' . toCode($this->src, $indent);
    228228    }
    229229
     
    260260class Decompiler_Array extends Decompiler_Value // {{{
    261261{
    262     var $indent = '';
    263 
    264     function Decompiler_Array($value = array(), $indent = '')
    265     {
    266         $this->value = $value;
    267         $this->indent = $indent;
    268     }
    269 
    270     function __toString()
    271     {
     262    // emenets
     263    function Decompiler_Array()
     264    {
     265        $this->value = array();
     266    }
     267
     268    function toCode($indent)
     269    {
     270        $subindent = $indent . INDENT;
     271
     272        $elementsCode = array();
     273        $index = 0;
     274        foreach ($this->value as $element) {
     275            list($key, $value) = $element;
     276            if (!isset($key)) {
     277                $key = $index++;
     278            }
     279            $elementsCode[] = array(str($key, $subindent), str($value, $subindent), $key, $value);
     280        }
     281
    272282        $exp = "array(";
    273         $indent = $this->indent . INDENT;
    274         $assoclen = 0;
     283        $indent = $indent . INDENT;
     284        $assocWidth = 0;
    275285        $multiline = 0;
    276286        $i = 0;
    277         foreach ($this->value as $k => $v) {
    278             if ($i !== $k) {
    279                 $len = strlen($k);
    280                 if ($assoclen < $len) {
    281                     $assoclen = $len;
    282                 }
    283             }
    284             if (is_array($v)) {
     287        foreach ($elementsCode as $element) {
     288            list($keyCode, $valueCode) = $element;
     289            if ((string) $i !== $keyCode) {
     290                $assocWidth = 1;
     291                break;
     292            }
     293            ++$i;
     294        }
     295        foreach ($elementsCode as $element) {
     296            list($keyCode, $valueCode, $key, $value) = $element;
     297            if ($assocWidth) {
     298                $len = strlen($keyCode);
     299                if ($assocWidth < $len) {
     300                    $assocWidth = $len;
     301                }
     302            }
     303            if (is_array($value) || is_a($value, 'Decompiler_Array')) {
    285304                $multiline ++;
    286305            }
    287             ++ $i;
    288         }
    289         if ($assoclen) {
    290             $assoclen += 2;
    291306        }
    292307
    293308        $i = 0;
    294         $subindent = $indent . INDENT;
    295         foreach ($this->value as $k => $v) {
     309        foreach ($elementsCode as $element) {
     310            list($keyCode, $value) = $element;
    296311            if ($multiline) {
    297312                if ($i) {
     
    307322            }
    308323
    309             $k = var_export($k, true);
    310             if ($multiline) {
    311                 $exp .= sprintf("%{$assoclen}s => ", $k);
    312             }
    313             else if ($assoclen) {
    314                 $exp .= $k . ' => ';
    315             }
    316 
    317             $exp .= str(value($v), $subindent);
     324            if ($assocWidth) {
     325                if ($multiline) {
     326                    $exp .= sprintf("%-{$assocWidth}s => ", $keyCode);
     327                }
     328                else {
     329                    $exp .= $keyCode . ' => ';
     330                }
     331            }
     332
     333            $exp .= $value;
    318334
    319335            $i ++;
    320336        }
    321337        if ($multiline) {
    322             $exp .= "$indent);";
     338            $exp .= "\n$indent)";
    323339        }
    324340        else {
     
    326342        }
    327343        return $exp;
     344    }
     345}
     346// }}}
     347class Decompiler_ConstArray extends Decompiler_Array // {{{
     348{
     349    function Decompiler_ConstArray($array)
     350    {
     351        $elements = array();
     352        foreach ($array as $key => $value) {
     353            $elements[] = array(value($key), value($value));
     354        }
     355        $this->value = $elements;
    328356    }
    329357}
     
    333361    var $iskey;
    334362
    335     function __toString()
     363    function toCode($indent)
    336364    {
    337365        return 'foreach (' . '';
     
    417445                    $curticks = $toticks;
    418446                }
    419                 echo $indent, str($op['php']), ";\n";
     447                echo $indent, toCode($op['php'], $indent), ";\n";
    420448            }
    421449        }
     
    429457        switch ($op['op_type']) {
    430458        case XC_IS_CONST:
    431             return str(value($op['constant']));
     459            return toCode(value($op['constant']), $EX);
    432460
    433461        case XC_IS_VAR:
     
    436464            $ret = $T[$op['var']];
    437465            if ($tostr) {
    438                 $ret = str($ret, $EX);
     466                $ret = toCode($ret, $EX);
    439467            }
    440468            if ($free) {
     
    466494    }
    467495    // }}}
    468     function &dop_array($op_array, $indent = '') // {{{
    469     {
    470         $opcodes = &$op_array['opcodes'];
    471         $last = count($opcodes) - 1;
    472         if ($opcodes[$last]['opcode'] == XC_HANDLE_EXCEPTION) {
    473             unset($opcodes[$last]);
    474         }
    475         $EX['indent'] = '';
     496    function &fixOpcode($opcodes, $removeTailing = false, $defaultReturnValue = null) // {{{
     497    {
    476498        for ($i = 0, $cnt = count($opcodes); $i < $cnt; $i ++) {
    477499            if (function_exists('xcache_get_fixed_opcode')) {
     
    505527            }
    506528        }
     529
     530        if ($removeTailing) {
     531            $last = count($opcodes) - 1;
     532            if ($opcodes[$last]['opcode'] == XC_HANDLE_EXCEPTION) {
     533                unset($opcodes[$last]);
     534                --$last;
     535            }
     536            if ($opcodes[$last]['opcode'] == XC_RETURN) {
     537                $op1 = $opcodes[$last]['op1'];
     538                if ($op1['op_type'] == XC_IS_CONST && array_key_exists('constant', $op1) && $op1['constant'] === $defaultReturnValue) {
     539                    unset($opcodes[$last]);
     540                    --$last;
     541                }
     542            }
     543        }
     544        return $opcodes;
     545    }
     546    // }}}
     547    function &dop_array($op_array, $indent = '') // {{{
     548    {
     549        $op_array['opcodes'] = $this->fixOpcode($op_array['opcodes'], true, $indent == '' ? 1 : null);
     550        $opcodes = &$op_array['opcodes'];
     551        $EX['indent'] = '';
    507552        // {{{ build jmp array
    508553        for ($i = 0, $cnt = count($opcodes); $i < $cnt; $i ++) {
     
    633678            $body = ob_get_clean();
    634679
    635             $as = str($op['fe_as']);
     680            $as = toCode($op['fe_as'], $EX);
    636681            if (isset($op['fe_key'])) {
    637                 $as = str($op['fe_key']) . ' => ' . $as;
    638             }
    639             echo "{$indent}foreach (" . str($op['fe_src']) . " as $as) {\n";
     682                $as = toCode($op['fe_key'], $EX) . ' => ' . $as;
     683            }
     684            echo "{$indent}foreach (" . toCode($op['fe_src'], $EX) . " as $as) {\n";
    640685            echo $body;
    641686            echo "{$indent}}";
     
    757802
    758803            $resvar = null;
    759             if (isset($res['EA.type']) && ($res['EA.type'] & EXT_TYPE_UNUSED) || $res['op_type'] == XC_IS_UNUSED) {
     804            if ((ZEND_ENGINE_2_4 ? ($res['op_type'] & EXT_TYPE_UNUSED) : ($res['EA.type'] & EXT_TYPE_UNUSED)) || $res['op_type'] == XC_IS_UNUSED) {
    760805                $istmpres = false;
    761806            }
     
    791836                    $EX['called_scope'] = null;
    792837                    $EX['fbc'] = 'new ' . $this->unquoteName($this->getOpVal($op1, $EX));
    793                     if (PHP_VERSION < 5) {
     838                    if (!ZEND_ENGINE_2) {
    794839                        $resvar = '$new object$';
    795840                    }
     
    798843                case XC_FETCH_CLASS: // {{{
    799844                    if ($op2['op_type'] == XC_IS_UNUSED) {
    800                         switch ($ext) {
     845                        switch (($ext & (defined('ZEND_FETCH_CLASS_MASK') ? ZEND_FETCH_CLASS_MASK : 0xFF))) {
    801846                        case ZEND_FETCH_CLASS_SELF:
    802847                            $class = 'self';
     
    843888                case XC_UNSET_VAR:
    844889                    $rvalue = $this->getOpVal($op1, $EX);
    845                     $fetchtype = $op2[PHP_VERSION < 5 ? 'fetch_type' : 'EA.type'];
     890                    if (defined('ZEND_FETCH_TYPE_MASK')) {
     891                        $fetchtype = ($ext & ZEND_FETCH_TYPE_MASK);
     892                    }
     893                    else {
     894                        $fetchtype = $op2[!ZEND_ENGINE_2 ? 'fetch_type' : 'EA.type'];
     895                    }
    846896                    switch ($fetchtype) {
    847897                    case ZEND_FETCH_STATIC_MEMBER:
     
    856906                    }
    857907                    if ($opc == XC_UNSET_VAR) {
    858                         $op['php'] = "unset(" . str($rvalue) . ")";
     908                        $op['php'] = "unset(" . toCode($rvalue, $EX) . ")";
    859909                        $lastphpop = &$op;
    860910                    }
     
    917967                        ++ $i;
    918968                        $rvalue = $this->getOpVal($opcodes[$i]['op1'], $EX);
    919                         $resvar = str($lvalue) . ' = ' . $rvalue;
     969                        $resvar = toCode($lvalue, $EX) . ' = ' . $rvalue;
    920970                    }
    921971                    else if ($opc == XC_UNSET_DIM) {
    922                         $op['php'] = "unset(" . str($rvalue) . ")";
     972                        $op['php'] = "unset(" . toCode($rvalue, $EX) . ")";
    923973                        $lastphpop = &$op;
    924974                    }
     
    941991                        $dim->assign = $lvalue;
    942992                        if ($dim->isLast) {
    943                             $resvar = str($dim->value);
     993                            $resvar = toCode($dim->value, $EX);
    944994                        }
    945995                        unset($dim);
    946996                        break;
    947997                    }
    948                     $resvar = "$lvalue = " . str($rvalue, $EX);
     998                    $resvar = "$lvalue = " . toCode($rvalue, $EX);
    949999                    break;
    9501000                    // }}}
     
    9531003                    $rvalue = $this->getOpVal($op2, $EX, false);
    9541004                    if (is_a($rvalue, 'Decompiler_Fetch')) {
    955                         $src = str($rvalue->src);
     1005                        $src = toCode($rvalue->src, $EX);
    9561006                        if (substr($src, 1, -1) == substr($lvalue, 1)) {
    9571007                            switch ($rvalue->fetchType) {
    9581008                            case ZEND_FETCH_GLOBAL:
     1009                            case ZEND_FETCH_GLOBAL_LOCK:
    9591010                                $resvar = 'global ' . $lvalue;
    9601011                                break 2;
     
    9661017                                    $var = $statics[$name];
    9671018                                    $resvar .= ' = ';
    968                                     $resvar .= str(value($var), $EX);
     1019                                    $resvar .= toCode(value($var), $EX);
    9691020                                }
    9701021                                unset($statics);
    9711022                                break 2;
     1023                            default:
    9721024                            }
    9731025                        }
    9741026                    }
    975                     $rvalue = str($rvalue);
     1027                    // TODO: PHP_6 global
     1028                    $rvalue = toCode($rvalue, $EX);
    9761029                    $resvar = "$lvalue = &$rvalue";
    9771030                    break;
     
    10181071                        }
    10191072                        else {
    1020                             $rvalue = "${" . $rvalue . "}";
     1073                            $rvalue = '${' . $rvalue . '}';
    10211074                        }
    10221075                        if ($op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) {
     
    10441097                    }
    10451098
    1046                     switch ((PHP_VERSION < 5 ? $op['op2']['var'] /* constant */ : $ext) & (ZEND_ISSET|ZEND_ISEMPTY)) {
     1099                    switch ((!ZEND_ENGINE_2 ? $op['op2']['var'] /* constant */ : $ext) & (ZEND_ISSET|ZEND_ISEMPTY)) {
    10471100                    case ZEND_ISSET:
    10481101                        $rvalue = "isset($rvalue)";
     
    11861239                    switch ($opc) {
    11871240                    case XC_ADD_CHAR:
    1188                         $op2val = str(chr($op2val), $EX);
     1241                        $op2val = toCode(chr($op2val), $EX);
    11891242                        break;
    11901243                    case XC_ADD_STRING:
    1191                         $op2val = str($op2val, $EX);
     1244                        $op2val = toCode($op2val, $EX);
    11921245                        break;
    11931246                    case XC_ADD_VAR:
     
    12261279
    12271280                    if ($opc == XC_ADD_ARRAY_ELEMENT) {
    1228                         $offset = $this->getOpVal($op2, $EX);
    1229                         if (isset($offset)) {
    1230                             $T[$res['var']]->value[$offset] = $rvalue;
     1281                        $assoc = $this->getOpVal($op2, $EX);
     1282                        if (isset($assoc)) {
     1283                            $T[$res['var']]->value[] = array($assoc, $rvalue);
    12311284                        }
    12321285                        else {
    1233                             $T[$res['var']]->value[] = $rvalue;
     1286                            $T[$res['var']]->value[] = array(null, $rvalue);
    12341287                        }
    12351288                    }
     
    12421295                        }
    12431296
    1244                         $offset = $this->getOpVal($op2, $EX);
    1245                         if (isset($offset)) {
    1246                             $resvar->value[$offset] = $rvalue;
     1297                        $assoc = $this->getOpVal($op2, $EX);
     1298                        if (isset($assoc)) {
     1299                            $resvar->value[] = array($assoc, $rvalue);
    12471300                        }
    12481301                        else {
    1249                             $resvar->value[] = $rvalue;
     1302                            $resvar->value[] = array(null, $rvalue);
    12501303                        }
    12511304                    }
     
    13291382                        $targetop = &$EX['opcodes'][$op2['opline_num']];
    13301383                        if ($opc == XC_JMPNZ_EX) {
    1331                             $targetop['cond_true'][] = str($rvalue);
     1384                            $targetop['cond_true'][] = toCode($rvalue, $EX);
    13321385                        }
    13331386                        else {
    1334                             $targetop['cond_false'][] = str($rvalue);
     1387                            $targetop['cond_false'][] = toCode($rvalue, $EX);
    13351388                        }
    13361389                        unset($targetop);
     
    13601413                        $default = null;
    13611414                    }
    1362                     $EX['recvs'][$offset] = array($lvalue, $default);
     1415                    $EX['recvs'][str($offset)] = array($lvalue, $default);
    13631416                    break;
    13641417                case XC_POST_DEC:
     
    14001453                case XC_END_SILENCE: // {{{
    14011454                    $EX['silence'] --;
    1402                     $lastresvar = '@' . str($lastresvar);
     1455                    $lastresvar = '@' . toCode($lastresvar, $EX);
    14031456                    break;
    14041457                    // }}}
     
    14701523            $a = array_pop($EX['argstack']);
    14711524            if (is_array($a)) {
    1472                 array_unshift($args, str($a, $EX));
     1525                array_unshift($args, toCode($a, $EX));
    14731526            }
    14741527            else {
     
    15111564            default:
    15121565                if ($kk == 'res') {
     1566                    var_dump($op);
     1567                    exit;
    15131568                    assert(0);
    15141569                }
     
    15251580    function dargs(&$EX, $indent) // {{{
    15261581    {
    1527         $EX['indent'] = $indent;
    15281582        $op_array = &$EX['op_array'];
    15291583
     
    15441598                echo ', ';
    15451599            }
     1600            $arg = $EX['recvs'][$i + 1];
    15461601            if (isset($op_array['arg_info'])) {
    15471602                $ai = $op_array['arg_info'][$i];
    15481603                if (!empty($ai['class_name'])) {
    15491604                    echo $ai['class_name'], ' ';
    1550                     if ($ai['allow_null']) {
     1605                    if (!ZEND_ENGINE_2_2 && $ai['allow_null']) {
    15511606                        echo 'or NULL ';
    15521607                    }
     
    15541609                else if (!empty($ai['array_type_hint'])) {
    15551610                    echo 'array ';
    1556                     if ($ai['allow_null']) {
     1611                    if (!ZEND_ENGINE_2_2 && $ai['allow_null']) {
    15571612                        echo 'or NULL ';
    15581613                    }
     
    15831638                    }
    15841639                }
    1585                 $arg = $EX['recvs'][$i + 1];
    1586                 echo str($arg[0]);
    1587                 if (isset($arg[1])) {
    1588                     echo ' = ', str($arg[1]);
    1589                 }
     1640                echo toCode($arg[0], $indent);
     1641            }
     1642            if (isset($arg[1])) {
     1643                echo ' = ', toCode($arg[1], $indent);
    15901644            }
    15911645        }
     
    16631717                    echo $newindent;
    16641718                    echo $prefix, $name, ' = ';
    1665                     echo str(value($v), $EX);
     1719                    echo toCode(value($v), $newindent);
    16661720                    echo ";\n";
    16671721                }
     
    16701724        // }}}
    16711725        // {{{ properties
    1672         if (!empty($class['default_properties']) || !empty($class['default_static_members'])) {
     1726        $member_variables = isset($class['properties_info']) ? $class['properties_info'] : ($class['default_static_members'] + $class['default_properties']);
     1727        if ($member_variables) {
    16731728            echo "\n";
    16741729            $infos = !empty($class['properties_info']) ? $class['properties_info'] : null;
    1675             foreach (!empty($class['properties_info']) ? $class['properties_info'] : ($class['default_static_members'] + $class['default_properties']) as $name => $dummy) {
     1730            foreach ($member_variables as $name => $dummy) {
    16761731                $info = (isset($infos) && isset($infos[$name])) ? $infos[$name] : null;
    16771732                if (isset($info)) {
     
    16991754
    17001755                $mangled = false;
    1701                 if (PHP_VERSION < 5) {
     1756                if (!ZEND_ENGINE_2) {
    17021757                    echo 'var ';
    17031758                }
     
    17261781                echo '$', $name;
    17271782
    1728                 $key = isset($info) ? $info['name'] . ($mangled ? "\000" : "") : $name;
    1729 
    1730                 $value = $class[$static ? 'default_static_members' : 'default_properties'][$key];
     1783                if (isset($info['offset'])) {
     1784                    $value = $class[$static ? 'default_static_members_table' : 'default_properties_table'][$info['offset']];
     1785                }
     1786                else {
     1787                    $key = isset($info) ? $info['name'] . ($mangled ? "\000" : "") : $name;
     1788
     1789                    $value = $class[$static ? 'default_static_members' : 'default_properties'][$key];
     1790                }
    17311791                if (isset($value)) {
    17321792                    echo ' = ';
    1733                     echo str(value($value));
     1793                    echo toCode(value($value), $newindent);
    17341794                }
    17351795                echo ";\n";
     
    18561916define('ZEND_ACC_SHADOW', 0x2000);
    18571917
    1858 define('ZEND_FETCH_GLOBAL',           0);
    1859 define('ZEND_FETCH_LOCAL',            1);
    1860 define('ZEND_FETCH_STATIC',           2);
    1861 define('ZEND_FETCH_STATIC_MEMBER',    3);
    1862 define('ZEND_FETCH_GLOBAL_LOCK',      4);
     1918define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.3.99");
     1919define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3.");
     1920define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2.");
     1921define('ZEND_ENGINE_2_1', ZEND_ENGINE_2_2 || PHP_VERSION >= "5.1.");
     1922define('ZEND_ENGINE_2',   ZEND_ENGINE_2_1 || PHP_VERSION >= "5.0.");
     1923
     1924if (ZEND_ENGINE_2_4) {
     1925    define('ZEND_FETCH_GLOBAL',           0x00000000);
     1926    define('ZEND_FETCH_LOCAL',            0x10000000);
     1927    define('ZEND_FETCH_STATIC',           0x20000000);
     1928    define('ZEND_FETCH_STATIC_MEMBER',    0x30000000);
     1929    define('ZEND_FETCH_GLOBAL_LOCK',      0x40000000);
     1930    define('ZEND_FETCH_LEXICAL',          0x50000000);
     1931
     1932    define('ZEND_FETCH_TYPE_MASK',        0x70000000);
     1933}
     1934else {
     1935    define('ZEND_FETCH_GLOBAL',           0);
     1936    define('ZEND_FETCH_LOCAL',            1);
     1937    define('ZEND_FETCH_STATIC',           2);
     1938    define('ZEND_FETCH_STATIC_MEMBER',    3);
     1939    define('ZEND_FETCH_GLOBAL_LOCK',      4);
     1940}
    18631941
    18641942define('ZEND_FETCH_CLASS_DEFAULT',    0);
     
    18701948define('ZEND_FETCH_CLASS_INTERFACE',  6);
    18711949define('ZEND_FETCH_CLASS_STATIC',     7);
     1950if (ZEND_ENGINE_2_4) {
     1951    define('ZEND_FETCH_CLASS_TRAIT',     14);
     1952}
     1953if (ZEND_ENGINE_2_3) {
     1954    define('ZEND_FETCH_CLASS_MASK',     0xF);
     1955}
    18721956
    18731957define('ZEND_EVAL',               (1<<0));
     
    18791963define('ZEND_ISSET',              (1<<0));
    18801964define('ZEND_ISEMPTY',            (1<<1));
    1881 define('EXT_TYPE_UNUSED',         (1<<0));
     1965if (ZEND_ENGINE_2_4) {
     1966    define('EXT_TYPE_UNUSED',     (1<<5));
     1967}
     1968else {
     1969    define('EXT_TYPE_UNUSED',     (1<<0));
     1970}
    18821971
    18831972define('ZEND_FETCH_STANDARD',     0);
  • branches/1.3/phpdop.phpr

    r604 r739  
    33
    44$srcdir = dirname(__FILE__);
     5require_once("$srcdir/Decompiler.class.php");
    56if (file_exists("$srcdir/phpdc.debug.php")) {
    67    include("$srcdir/phpdc.debug.php");
     
    1112    switch ($op['op_type']) {
    1213    case 1: // CONST
    13         return var_export($op['u.constant'], true);
     14        return var_export($op['constant'], true);
    1415
    1516    case 2: // IS_TMP_VAR
    16         return 't@' . $op['u.var'];
     17        return 't@' . $op['var'];
    1718
    1819    case 4:
    19         return 'v$' . $op['u.var'];
     20        return 'v$' . $op['var'];
    2021
    2122    case 8: // UNUSED
    22         if (isset($op['u.opline_num'])) {
    23             return 'l#' . $op['u.opline_num'];
     23        if (isset($op['opline_num'])) {
     24            return 'l#' . $op['opline_num'];
    2425        }
    2526        else {
     
    2829
    2930    default:
    30         return $op['op_type'] . $op['u.var'];
     31        return $op['op_type'] . $op['var'];
    3132    }
    3233}
    3334
    34 function dump_opcodes($op_array, $indent = '')
     35function dump_opcodes($opcodes, $indent = '')
    3536{
     37    global $decompiler;
     38
    3639    $types = array('result' => 5, 'op1' => 20, 'op2' => 20);
    37     foreach ($op_array as $line => $op) {
     40    foreach ($decompiler->fixOpcode($opcodes) as $line => $op) {
    3841        echo $indent;
    3942        echo sprintf("%3d ", $op['lineno']);
     
    9194    die("Usage: $argv[0] <file>\n");
    9295}
     96$decompiler = new Decompiler();
    9397$pk = xcache_dasm_file($argv[1]);
    9498$op_array = $funcs = $classes = null;
  • branches/1.3/processor/head.m4

    r726 r739  
    136136#define C_RELAYLINE , __LINE__
    137137')
    138 static inline void xc_calc_string_n(xc_processor_t *processor, zend_uchar type, const zstr str, long size IFASSERT(`, int relayline')) {
     138static inline void xc_calc_string_n(xc_processor_t *processor, zend_uchar type, const zstr const str, long size IFASSERT(`, int relayline')) {
    139139    pushdef(`__LINE__', `relayline')
    140140    int realsize = UNISW(size, (type == IS_UNICODE) ? UBYTES(size) : size);
     
    158158/* {{{ xc_store_string_n */
    159159REDEF(`KIND', `store')
    160 static inline zstr xc_store_string_n(xc_processor_t *processor, zend_uchar type, const zstr str, long size IFASSERT(`, int relayline')) {
     160static inline zstr xc_store_string_n(xc_processor_t *processor, zend_uchar type, const zstr const str, long size IFASSERT(`, int relayline')) {
    161161    pushdef(`__LINE__', `relayline')
    162162    int realsize = UNISW(size, (type == IS_UNICODE) ? UBYTES(size) : size);
  • branches/1.3/processor/processor.m4

    r726 r739  
    325325#ifdef ZEND_ENGINE_2_4
    326326    DISPATCH(int, default_properties_count)
    327     STRUCT_ARRAY(default_properties_count, zval, default_properties_table)
     327    STRUCT_ARRAY(default_properties_count, zval_ptr, default_properties_table)
    328328    DISPATCH(int, default_static_members_count)
    329     STRUCT_ARRAY(default_static_members_count, zval, default_static_members_table)
    330     IFCOPY(`dst->static_members_table = &dst->default_static_members_table;')
     329    STRUCT_ARRAY(default_static_members_count, zval_ptr, default_static_members_table)
     330    IFCOPY(`dst->static_members_table = dst->default_static_members_table;')
    331331    DONE(static_members_table)
    332332#else
Note: See TracChangeset for help on using the changeset viewer.