Changeset 749 in svn for trunk/Decompiler.class.php


Ignore:
Timestamp:
2011-04-16T19:01:39Z (4 years ago)
Author:
Xuefer
Message:

decompiler: massive improvements for php 5 and 5.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Decompiler.class.php

    r746 r749  
    7171}
    7272// }}}
     73function unquoteProperty($str, $indent = '') // {{{
     74{
     75    $str = str($str, $indent);
     76    if (preg_match("!^'[\\w_][\\w\\d_]*'\$!", $str)) {
     77        return substr($str, 1, -1);
     78    }
     79    else {
     80        return "{" . $str . "}";
     81    }
     82}
     83// }}}
     84function unquoteName($str, $indent = '') // {{{
     85{
     86    $str = str($str, $indent);
     87    if (preg_match("!^'[\\w_][\\w\\d_]*'\$!", $str)) {
     88        return substr($str, 1, -1);
     89    }
     90    else {
     91        return $str;
     92    }
     93}
     94// }}}
    7395class Decompiler_Object // {{{
    7496{
     
    154176            return '$' . substr($this->src, 1, -1);
    155177        case ZEND_FETCH_STATIC:
     178            if (ZEND_ENGINE_2_3) {
     179                // closure local variable?
     180                return str($this->src);
     181            }
    156182            die('static fetch cant to string');
    157183        case ZEND_FETCH_GLOBAL:
     
    184210    var $offsets = array();
    185211    var $isLast = false;
     212    var $isObject = false;
    186213    var $assign = null;
    187214
     
    189216    {
    190217        if (is_a($this->value, 'Decompiler_ListBox')) {
    191             $exp = foldToCode($this->value->obj->src, $indent);
     218            $exp = str($this->value->obj->src, $indent);
    192219        }
    193220        else {
    194             $exp = foldToCode($this->value, $indent);
    195         }
    196         foreach ($this->offsets as $dim) {
    197             $exp .= '[' . foldToCode($dim, $indent) . ']';
     221            $exp = str($this->value, $indent);
     222        }
     223        $last = count($this->offsets) - 1;
     224        foreach ($this->offsets as $i => $dim) {
     225            if ($this->isObject && $i == $last) {
     226                $exp .= '->' . unquoteProperty($dim, $indent);
     227            }
     228            else {
     229                $exp .= '[' . str($dim, $indent) . ']';
     230            }
    198231        }
    199232        return $exp;
     
    220253                return foldToCode($dim, $indent);
    221254            }
    222             return foldToCode($this->dims[0]->assign, $indent) . ' = ' . foldToCode($dim, $indent);
     255            return foldToCode($this->dims[0]->assign, $indent) . ' = ' . str($dim, $indent);
    223256        }
    224257        /* flatten dims */
     
    231264            $assign = foldToCode($dim->assign, $indent);
    232265        }
    233         return $this->toList($assigns) . ' = ' . foldToCode($this->src, $indent);
     266        return $this->toList($assigns) . ' = ' . str($this->src, $indent);
    234267    }
    235268
     
    377410{
    378411    var $rName = '!^[\\w_][\\w\\d_]*$!';
    379     var $rQuotedName = "!^'[\\w_][\\w\\d_]*'\$!";
    380412
    381413    function Decompiler()
     
    439471                    $curticks = $toticks;
    440472                    if (!$curticks) {
    441                         echo $origindent, "}\n";
     473                        echo $origindent, "}\n\n";
    442474                        $indent = $origindent;
    443475                    }
    444476                    else {
    445477                        if ($oldticks) {
    446                             echo $origindent, "}\n";
     478                            echo $origindent, "}\n\n";
    447479                        }
    448480                        else if (!$oldticks) {
     
    569601            $op['line'] = $i;
    570602            switch ($op['opcode']) {
     603            case XC_GOTO:
    571604            case XC_JMP:
    572605                $target = $op['op1']['var'];
     
    587620            case XC_JMPZ_EX:
    588621            case XC_JMPNZ_EX:
     622            case XC_JMP_SET:
    589623            // case XC_FE_RESET:
    590624            case XC_FE_FETCH:
     
    772806    }
    773807    // }}}
    774     function unquoteName($str) // {{{
    775     {
    776         $str = str($str);
    777         if (preg_match($this->rQuotedName, $str)) {
    778             $str = substr($str, 1, -1);
    779         }
    780         return $str;
    781     }
    782     // }}}
    783808    function dasmBasicBlock(&$EX, $opline, $last) // {{{
    784809    {
     
    843868                    $EX['object'] = (int) $res['var'];
    844869                    $EX['called_scope'] = null;
    845                     $EX['fbc'] = 'new ' . $this->unquoteName($this->getOpVal($op1, $EX));
     870                    $EX['fbc'] = 'new ' . unquoteName($this->getOpVal($op1, $EX), $EX);
    846871                    if (!ZEND_ENGINE_2) {
    847872                        $resvar = '$new object$';
    848873                    }
     874                    break;
     875                    // }}}
     876                case XC_THROW: // {{{
     877                    $resvar = 'throw ' . str($this->getOpVal($op1, $EX));
     878                    break;
     879                    // }}}
     880                case XC_CLONE: // {{{
     881                    $resvar = 'clone ' . str($this->getOpVal($op1, $EX));
     882                    break;
     883                    // }}}
     884                case XC_CATCH: // {{{
     885                    $resvar = 'catch (' . str($this->getOpVal($op1, $EX)) . ' ' . str($this->getOpVal($op2, $EX)) . ')';
     886                    break;
     887                    // }}}
     888                case XC_INSTANCEOF: // {{{
     889                    $resvar = str($this->getOpVal($op1, $EX)) . ' instanceof ' . str($this->getOpVal($op2, $EX));
    849890                    break;
    850891                    // }}}
     
    865906                    }
    866907                    else {
    867                         $class = $op2['constant'];
    868                         if (is_object($class)) {
    869                             $class = get_class($class);
     908                        $class = $this->getOpVal($op2, $EX);
     909                        if (isset($op2['constant'])) {
     910                            $class = unquoteName($class);
    870911                        }
    871912                    }
     
    874915                    // }}}
    875916                case XC_FETCH_CONSTANT: // {{{
     917                    if ($op1['op_type'] == XC_IS_UNUSED) {
     918                        $resvar = $op2['constant'];
     919                        break;
     920                    }
     921
    876922                    if ($op1['op_type'] == XC_IS_CONST) {
    877923                        $resvar = $op1['constant'];
    878924                    }
    879                     else if ($op1['op_type'] == XC_IS_UNUSED) {
    880                         $resvar = $op2['constant'];
    881                     }
    882925                    else {
    883                         $class = $T[$op1['var']];
    884                         assert($class[0] == 'class');
    885                         $resvar = $class[1] . '::' . $op2['constant'];
    886                     }
     926                        $resvar = $this->getOpVal($op1, $EX);
     927                    }
     928
     929                    $resvar = str($resvar) . '::' . unquoteName($this->getOpVal($op2, $EX));
    887930                    break;
    888931                    // }}}
     
    905948                    case ZEND_FETCH_STATIC_MEMBER:
    906949                        $class = $this->getOpVal($op2, $EX);
    907                         $rvalue = $class . '::$' . $this->unquoteName($rvalue);
     950                        $rvalue = str($class) . '::$' . unquoteName($rvalue, $EX);
    908951                        break;
    909952                    default:
    910                         $name = $this->unquoteName($rvalue);
    911                         $globalname = xcache_is_autoglobal($name) ? "\$$name" : "\$GLOBALS[$rvalue]";
     953                        $name = unquoteName($rvalue, $EX);
     954                        $globalname = xcache_is_autoglobal($name) ? "\$$name" : "\$GLOBALS[" . str($rvalue) . "]";
    912955                        $rvalue = new Decompiler_Fetch($rvalue, $fetchtype, $globalname);
    913956                        break;
     
    931974                case XC_FETCH_DIM_IS:
    932975                case XC_ASSIGN_DIM:
     976                case XC_UNSET_DIM_OBJ: // PHP 4 only
    933977                case XC_UNSET_DIM:
    934                 case XC_UNSET_DIM_OBJ:
     978                case XC_UNSET_OBJ:
    935979                    $src = $this->getOpVal($op1, $EX, false);
    936980                    if (is_a($src, "Decompiler_ForeachBox")) {
     
    939983                        break;
    940984                    }
    941                     else if (is_a($src, "Decompiler_DimBox")) {
     985
     986                    if (is_a($src, "Decompiler_DimBox")) {
    942987                        $dimbox = $src;
    943988                    }
    944989                    else {
    945990                        if (!is_a($src, "Decompiler_ListBox")) {
    946                             $list = new Decompiler_List($this->getOpVal($op1, $EX, false));
     991                            $op1val = $this->getOpVal($op1, $EX, false);
     992                            $list = new Decompiler_List(isset($op1val) ? $op1val : '$this');
    947993
    948994                            $src = new Decompiler_ListBox($list);
     
    9681014                        $dim->isLast = true;
    9691015                    }
     1016                    if ($opc == XC_UNSET_OBJ) {
     1017                        $dim->isObject = true;
     1018                    }
    9701019                    unset($dim);
    9711020                    $rvalue = $dimbox;
     1021                    unset($dimbox);
    9721022
    9731023                    if ($opc == XC_ASSIGN_DIM) {
     
    9751025                        ++ $i;
    9761026                        $rvalue = $this->getOpVal($opcodes[$i]['op1'], $EX);
    977                         $resvar = str($lvalue, $EX) . ' = ' . $rvalue;
    978                     }
    979                     else if ($opc == XC_UNSET_DIM) {
     1027                        $resvar = str($lvalue, $EX) . ' = ' . str($rvalue);
     1028                    }
     1029                    else if ($opc == XC_UNSET_DIM || $opc == XC_UNSET_OBJ) {
    9801030                        $op['php'] = "unset(" . str($rvalue, $EX) . ")";
    9811031                        $lastphpop = &$op;
     
    10111061                    $rvalue = $this->getOpVal($op2, $EX, false);
    10121062                    if (is_a($rvalue, 'Decompiler_Fetch')) {
    1013                         $src = foldToCode($rvalue->src, $EX);
     1063                        $src = str($rvalue->src, $EX);
    10141064                        if (substr($src, 1, -1) == substr($lvalue, 1)) {
    10151065                            switch ($rvalue->fetchType) {
     
    10501100                        $obj = '$this';
    10511101                    }
    1052                     $prop = $this->getOpVal($op2, $EX);
    1053                     if (preg_match($this->rQuotedName, $prop)) {
    1054                         $prop = substr($prop, 1, -1);;
    1055                         $rvalue = "{$obj}->$prop";
    1056                     }
    1057                     else {
    1058                         $rvalue = "{$obj}->{" . "$prop}";
    1059                     }
     1102                    $rvalue = str($obj) . "->" . unquoteProperty($this->getOpVal($op2, $EX), $EX);
    10601103                    if ($res['op_type'] != XC_IS_UNUSED) {
    10611104                        $resvar = $rvalue;
     
    10651108                        $lvalue = $rvalue;
    10661109                        $rvalue = $this->getOpVal($opcodes[$i]['op1'], $EX);
    1067                         $resvar = "$lvalue = $rvalue";
     1110                        $resvar = "$lvalue = " . str($rvalue);
    10681111                    }
    10691112                    break;
     
    11251168                    // }}}
    11261169                case XC_INIT_STATIC_METHOD_CALL:
    1127                 case XC_INIT_METHOD_CALL:
    1128                 case XC_INIT_FCALL_BY_FUNC:
    1129                 case XC_INIT_FCALL_BY_NAME: // {{{
    1130                     if (($ext & ZEND_CTOR_CALL)) {
    1131                         break;
    1132                     }
     1170                case XC_INIT_METHOD_CALL: // {{{
    11331171                    array_push($EX['arg_types_stack'], array($EX['fbc'], $EX['object'], $EX['called_scope']));
    11341172                    if ($opc == XC_INIT_STATIC_METHOD_CALL || $opc == XC_INIT_METHOD_CALL || $op1['op_type'] != XC_IS_UNUSED) {
     
    11391177                        if ($opc == XC_INIT_STATIC_METHOD_CALL || /* PHP4 */ isset($op1['constant'])) {
    11401178                            $EX['object'] = null;
    1141                             $EX['called_scope'] = $this->unquoteName($obj);
     1179                            $EX['called_scope'] = unquoteName($obj, $EX);
    11421180                        }
    11431181                        else {
     
    11541192                    }
    11551193
    1156                     if ($opc == XC_INIT_FCALL_BY_FUNC) {
    1157                         $which = $op1['var'];
    1158                         $EX['fbc'] = $EX['op_array']['funcs'][$which]['name'];
    1159                     }
    1160                     else {
    1161                         $EX['fbc'] = $this->getOpVal($op2, $EX, false);
    1162                     }
     1194                    $EX['fbc'] = $this->getOpVal($op2, $EX, false);
     1195                    if (($opc == XC_INIT_STATIC_METHOD_CALL || $opc == XC_INIT_METHOD_CALL) && !isset($EX['fbc'])) {
     1196                        $EX['fbc'] = '__construct';
     1197                    }
     1198                    break;
     1199                    // }}}
     1200                case XC_INIT_FCALL_BY_NAME: // {{{
     1201                    if (!ZEND_ENGINE_2 && ($ext & ZEND_CTOR_CALL)) {
     1202                        break;
     1203                    }
     1204                    $EX['object'] = null;
     1205                    $EX['called_scope'] = null;
     1206                    $EX['fbc'] = $this->getOpVal($op2, $EX);
     1207                    break;
     1208                    // }}}
     1209                case XC_INIT_FCALL_BY_FUNC: // {{{ deprecated even in PHP 4?
     1210                    $EX['object'] = null;
     1211                    $EX['called_scope'] = null;
     1212                    $which = $op1['var'];
     1213                    $EX['fbc'] = $EX['op_array']['funcs'][$which]['name'];
    11631214                    break;
    11641215                    // }}}
     
    11701221                    break;
    11711222                case XC_DO_FCALL:
    1172                     $fname = $this->unquoteName($this->getOpVal($op1, $EX, false));
     1223                    $fname = unquoteName($this->getOpVal($op1, $EX, false), $EX);
    11731224                    $args = $this->popargs($EX, $ext);
    11741225                    $resvar = $fname . "($args)";
     
    11771228                    $object = null;
    11781229
    1179                     $fname = $this->unquoteName($EX['fbc']);
     1230                    $fname = unquoteName($EX['fbc'], $EX);
    11801231                    if (!is_int($EX['object'])) {
    11811232                        $object = $EX['object'];
     
    12111262                    }
    12121263                    $class = &$this->dc['class_table'][$key];
    1213                     $class['name'] = $this->unquoteName($this->getOpVal($op2, $EX));
     1264                    $class['name'] = unquoteName($this->getOpVal($op2, $EX), $EX);
    12141265                    if ($opc == XC_DECLARE_INHERITED_CLASS || $opc == XC_DECLARE_INHERITED_CLASS_DELAYED) {
    12151266                        $ext /= XC_SIZEOF_TEMP_VARIABLE;
     
    12211272                    }
    12221273
    1223                     while ($i + 2 < $ic
    1224                      && $opcodes[$i + 2]['opcode'] == XC_ADD_INTERFACE
    1225                      && $opcodes[$i + 2]['op1']['var'] == $res['var']
    1226                      && $opcodes[$i + 1]['opcode'] == XC_FETCH_CLASS) {
     1274                    for (;;) {
     1275                        if ($i + 1 < $ic
     1276                         && $opcodes[$i + 1]['opcode'] == XC_ADD_INTERFACE
     1277                         && $opcodes[$i + 1]['op1']['var'] == $res['var']) {
     1278                            // continue
     1279                        }
     1280                        else if ($i + 2 < $ic
     1281                         && $opcodes[$i + 2]['opcode'] == XC_ADD_INTERFACE
     1282                         && $opcodes[$i + 2]['op1']['var'] == $res['var']
     1283                         && $opcodes[$i + 1]['opcode'] == XC_FETCH_CLASS) {
     1284                            // continue
     1285                        }
     1286                        else {
     1287                            break;
     1288                        }
     1289
    12271290                        $fetchop = &$opcodes[$i + 1];
    1228                         $impl = $this->unquoteName($this->getOpVal($fetchop['op2'], $EX));
     1291                        $impl = unquoteName($this->getOpVal($fetchop['op2'], $EX), $EX);
    12291292                        $addop = &$opcodes[$i + 2];
    12301293                        $class['interfaces'][$addop['extended_value']] = $impl;
     
    12331296                    }
    12341297                    $this->dclass($class);
     1298                    echo "\n";
    12351299                    unset($class);
    12361300                    break;
     
    12471311                    switch ($opc) {
    12481312                    case XC_ADD_CHAR:
    1249                         $op2val = foldToCode(chr($op2val), $EX);
     1313                        $op2val = value(chr(str($op2val)));
    12501314                        break;
    12511315                    case XC_ADD_STRING:
    1252                         $op2val = foldToCode($op2val, $EX);
    12531316                        break;
    12541317                    case XC_ADD_VAR:
    12551318                        break;
    12561319                    }
    1257                     if ($op1val == "''") {
     1320                    if (str($op1val) == "''") {
    12581321                        $rvalue = $op2val;
    12591322                    }
    1260                     else if ($op2val == "''") {
     1323                    else if (str($op2val) == "''") {
    12611324                        $rvalue = $op1val;
    12621325                    }
     
    13281391                    $type = $op2['var']; // hack
    13291392                    $keyword = $this->includeTypes[$type];
    1330                     $resvar = "$keyword(" . str($this->getOpVal($op1, $EX)) . ")";
     1393                    $resvar = "$keyword " . str($this->getOpVal($op1, $EX));
    13311394                    break;
    13321395                    // }}}
     
    13661429                case XC_JMP_NO_CTOR:
    13671430                    break;
     1431                case XC_JMP_SET: // ?:
    13681432                case XC_JMPNZ: // while
    13691433                case XC_JMPZNZ: // for
     
    14031467                    break;
    14041468                    // }}}
     1469                case XC_GOTO:
    14051470                case XC_JMP: // {{{
    14061471                    $op['cond'] = null;
     
    14371502                    $flags = array_flip(explode('_', $opname));
    14381503                    if (isset($flags['OBJ'])) {
    1439                         $resvar = $this->getOpVal($op1, $EX);
    1440                         $prop = $this->unquoteName($this->getOpVal($op2, $EX));
    1441                         if ($prop{0} == '$') {
    1442                             $resvar = $resvar . "{" . $prop . "}";
    1443                         }
    1444                         else {
    1445                             $resvar = $resvar . "->" . $prop;
    1446                         }
     1504                        $resvar = $this->getOpVal($op1, $EX) . '->' . unquoteProperty($this->getOpVal($op2, $EX), $EX);
    14471505                    }
    14481506                    else {
     
    14511509                    $opstr = isset($flags['DEC']) ? '--' : '++';
    14521510                    if (isset($flags['POST'])) {
    1453                         $resvar .= ' ' . $opstr;
     1511                        $resvar .= $opstr;
    14541512                    }
    14551513                    else {
    1456                         $resvar = "$opstr $resvar";
     1514                        $resvar = "$opstr$resvar";
    14571515                    }
    14581516                    break;
     
    14921550                case XC_EXT_NOP:
    14931551                    break;
     1552                case XC_DECLARE_LAMBDA_FUNCTION:
     1553                    ob_start();
     1554                    $this->dfunction($this->dc['function_table'][$op1['constant']], $EX['indent']);
     1555                    $resvar = ob_get_clean();
     1556                    $istmpres = true;
     1557                    break;
    14941558                case XC_DECLARE_FUNCTION_OR_CLASS:
    14951559                    /* always removed by compiler */
     
    14981562                    $lastphpop['ticks'] = $this->getOpVal($op1, $EX);
    14991563                    // $EX['tickschanged'] = true;
     1564                    break;
     1565                case XC_RAISE_ABSTRACT_ERROR:
     1566                    // abstract function body is empty, don't need this code
     1567                    break;
     1568                case XC_USER_OPCODE:
     1569                    echo '// ZEND_USER_OPCODE, impossible to decompile';
     1570                    break;
     1571                case XC_OP_DATA:
    15001572                    break;
    15011573                default: // {{{
     
    15591631                $d[$kk] = '$' . $op[$k]['var'];
    15601632                if ($kk != 'res') {
    1561                     $d[$kk] .= ':' . $this->getOpVal($op[$k], $EX);
     1633                    $d[$kk] .= ':' . str($this->getOpVal($op[$k], $EX));
    15621634                }
    15631635                break;
     
    15661638                $d[$kk] = '#' . $op[$k]['var'];
    15671639                if ($kk != 'res') {
    1568                     $d[$kk] .= ':' . $this->getOpVal($op[$k], $EX);
     1640                    $d[$kk] .= ':' . str($this->getOpVal($op[$k], $EX));
    15691641                }
    15701642                break;
     
    16611733    {
    16621734        if ($nobody) {
    1663             $body = ";\n";
    16641735            $EX = array();
    16651736            $EX['op_array'] = &$func['op_array'];
     
    16761747        }
    16771748
    1678         echo 'function ', $func['op_array']['function_name'], '(';
     1749        $functionName = $func['op_array']['function_name'];
     1750        if ($functionName == '{closure}') {
     1751            $functionName = '';
     1752        }
     1753        echo 'function ', $functionName, '(';
    16791754        $this->dargs($EX, $indent);
    1680         echo ")\n";
    1681         echo $indent, "{\n";
    1682         echo $body;
    1683         echo "$indent}\n";
     1755        echo ")";
     1756        if ($nobody) {
     1757            echo ";\n";
     1758        }
     1759        else {
     1760            if ($functionName !== '') {
     1761                echo "\n";
     1762                echo $indent, "{\n";
     1763            }
     1764            else {
     1765                echo " {\n";
     1766            }
     1767
     1768            echo $body;
     1769            echo "$indent}";
     1770            if ($functionName !== '') {
     1771                echo "\n";
     1772            }
     1773        }
    16841774    }
    16851775    // }}}
     
    16951785        if (!empty($class['ce_flags'])) {
    16961786            if ($class['ce_flags'] & ZEND_ACC_INTERFACE) {
    1697                 echo 'interface ';
    16981787                $isinterface = true;
    16991788            }
    17001789            else {
    1701                 if ($class['ce_flags'] & ZEND_ACC_IMPLICIT_ABSTRACT) {
     1790                if ($class['ce_flags'] & ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) {
    17021791                    echo "abstract ";
    17031792                }
    1704                 if ($class['ce_flags'] & ZEND_ACC_FINAL) {
     1793                if ($class['ce_flags'] & ZEND_ACC_FINAL_CLASS) {
    17051794                    echo "final ";
    17061795                }
    17071796            }
    17081797        }
    1709         echo 'class ', $class['name'];
     1798        echo $isinterface ? 'interface ' : 'class ', $class['name'];
    17101799        if ($class['parent']) {
    17111800            echo ' extends ', $class['parent'];
     
    18221911                    }
    18231912                    echo $newindent;
     1913                    $isAbstractMethod = false;
    18241914                    if (isset($opa['fn_flags'])) {
    1825                         if ($opa['fn_flags'] & ZEND_ACC_ABSTRACT) {
     1915                        if (($opa['fn_flags'] & ZEND_ACC_ABSTRACT) && !$isinterface) {
    18261916                            echo "abstract ";
     1917                            $isAbstractMethod = true;
    18271918                        }
    18281919                        if ($opa['fn_flags'] & ZEND_ACC_FINAL) {
     
    18481939                        }
    18491940                    }
    1850                     $this->dfunction($func, $newindent, $isinterface);
     1941                    $this->dfunction($func, $newindent, $isinterface || $isAbstractMethod);
    18511942                    if ($opa['function_name'] == 'Decompiler') {
    18521943                        //exit;
     
    18791970    function output() // {{{
    18801971    {
    1881         echo "<?". "php\n";
     1972        echo "<?". "php\n\n";
    18821973        foreach ($this->dc['class_table'] as $key => $class) {
    18831974            if ($key{0} != "\0") {
     1975                $this->dclass($class);
    18841976                echo "\n";
    1885                 $this->dclass($class);
    18861977            }
    18871978        }
     
    18891980        foreach ($this->dc['function_table'] as $key => $func) {
    18901981            if ($key{0} != "\0") {
     1982                $this->dfunction($func);
    18911983                echo "\n";
    1892                 $this->dfunction($func);
    1893             }
    1894         }
    1895 
    1896         echo "\n";
     1984            }
     1985        }
     1986
    18971987        $this->dop_array($this->dc['op_array']);
    18981988        echo "\n?" . ">\n";
     
    19031993
    19041994// {{{ defines
    1905 define('ZEND_ACC_STATIC',         0x01);
    1906 define('ZEND_ACC_ABSTRACT',       0x02);
    1907 define('ZEND_ACC_FINAL',          0x04);
    1908 define('ZEND_ACC_IMPLEMENTED_ABSTRACT',       0x08);
    1909 
    1910 define('ZEND_ACC_IMPLICIT_ABSTRACT_CLASS',    0x10);
    1911 define('ZEND_ACC_EXPLICIT_ABSTRACT_CLASS',    0x20);
    1912 define('ZEND_ACC_FINAL_CLASS',                0x40);
    1913 define('ZEND_ACC_INTERFACE',                  0x80);
    1914 define('ZEND_ACC_PUBLIC',     0x100);
    1915 define('ZEND_ACC_PROTECTED',  0x200);
    1916 define('ZEND_ACC_PRIVATE',    0x400);
    1917 define('ZEND_ACC_PPP_MASK',  (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE));
    1918 
    1919 define('ZEND_ACC_CHANGED',    0x800);
    1920 define('ZEND_ACC_IMPLICIT_PUBLIC',    0x1000);
    1921 
    1922 define('ZEND_ACC_CTOR',       0x2000);
    1923 define('ZEND_ACC_DTOR',       0x4000);
    1924 define('ZEND_ACC_CLONE',      0x8000);
    1925 
    1926 define('ZEND_ACC_ALLOW_STATIC',   0x10000);
    1927 
    1928 define('ZEND_ACC_SHADOW', 0x2000);
    1929 
    19301995define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.3.99");
    19311996define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3.");
     
    19331998define('ZEND_ENGINE_2_1', ZEND_ENGINE_2_2 || PHP_VERSION >= "5.1.");
    19341999define('ZEND_ENGINE_2',   ZEND_ENGINE_2_1 || PHP_VERSION >= "5.0.");
     2000
     2001define('ZEND_ACC_STATIC',         0x01);
     2002define('ZEND_ACC_ABSTRACT',       0x02);
     2003define('ZEND_ACC_FINAL',          0x04);
     2004define('ZEND_ACC_IMPLEMENTED_ABSTRACT',       0x08);
     2005
     2006define('ZEND_ACC_IMPLICIT_ABSTRACT_CLASS',    0x10);
     2007define('ZEND_ACC_EXPLICIT_ABSTRACT_CLASS',    0x20);
     2008define('ZEND_ACC_FINAL_CLASS',                0x40);
     2009define('ZEND_ACC_INTERFACE',                  0x80);
     2010if (ZEND_ENGINE_2_4) {
     2011    define('ZEND_ACC_TRAIT',                  0x120);
     2012}
     2013define('ZEND_ACC_PUBLIC',     0x100);
     2014define('ZEND_ACC_PROTECTED',  0x200);
     2015define('ZEND_ACC_PRIVATE',    0x400);
     2016define('ZEND_ACC_PPP_MASK',  (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE));
     2017
     2018define('ZEND_ACC_CHANGED',    0x800);
     2019define('ZEND_ACC_IMPLICIT_PUBLIC',    0x1000);
     2020
     2021define('ZEND_ACC_CTOR',       0x2000);
     2022define('ZEND_ACC_DTOR',       0x4000);
     2023define('ZEND_ACC_CLONE',      0x8000);
     2024
     2025define('ZEND_ACC_ALLOW_STATIC',   0x10000);
     2026
     2027define('ZEND_ACC_SHADOW', 0x2000);
    19352028
    19362029if (ZEND_ENGINE_2_4) {
     
    20312124    'XC_ASSIGN_DIM' => -1,
    20322125    'XC_UNSET_DIM' => -1,
    2033     'XC_FETCH_OBJ_' => -1,
     2126    'XC_UNSET_OBJ' => -1,
    20342127    'XC_ASSIGN_OBJ' => -1,
    20352128    'XC_ISSET_ISEMPTY_DIM_OBJ' => -1,
     
    20522145    'XC_FETCH_DIM_' => -1,
    20532146    'XC_UNSET_DIM_OBJ' => -1,
    2054     'XC_FETCH_OBJ_' => -1,
    20552147    'XC_ISSET_ISEMPTY' => -1,
    20562148    'XC_INIT_FCALL_BY_FUNC' => -1,
    20572149    'XC_DO_FCALL_BY_FUNC' => -1,
    20582150    'XC_DECLARE_FUNCTION_OR_CLASS' => -1,
     2151    'XC_INIT_NS_FCALL_BY_NAME' => -1,
     2152    'XC_GOTO' => -1,
     2153    'XC_CATCH' => -1,
     2154    'XC_THROW' => -1,
     2155    'XC_INSTANCEOF' => -1,
     2156    'XC_DECLARE_FUNCTION' => -1,
     2157    'XC_RAISE_ABSTRACT_ERROR' => -1,
     2158    'XC_DECLARE_CONST' => -1,
     2159    'XC_USER_OPCODE' => -1,
     2160    'XC_JMP_SET' => -1,
     2161    'XC_DECLARE_LAMBDA_FUNCTION' => -1,
    20592162) as $k => $v) {
    20602163    if (!defined($k)) {
     
    20632166}
    20642167
    2065 /* XC_UNDEF XC_OP_DATA
     2168//* XC_UNDEF XC_OP_DATA
    20662169$content = file_get_contents(__FILE__);
    20672170for ($i = 0; $opname = xcache_get_opcode($i); $i ++) {
Note: See TracChangeset for help on using the changeset viewer.