Changeset 1321 in svn for trunk/lib/Decompiler.class.php


Ignore:
Timestamp:
2013-07-15T17:37:57Z (2 years ago)
Author:
Xuefer
Message:

add back PHP_4 code for disassembler

File:
1 edited

Legend:

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

    r1319 r1321  
    146146class Decompiler_Value extends Decompiler_Object // {{{
    147147{
    148     public $value;
     148    var $value;
    149149
    150150    function Decompiler_Value($value = null)
     
    175175class Decompiler_Code extends Decompiler_Object // {{{
    176176{
    177     public $src;
     177    var $src;
    178178
    179179    function Decompiler_Code($src)
     
    193193class Decompiler_Binop extends Decompiler_Code // {{{
    194194{
    195     public $opc;
    196     public $op1;
    197     public $op2;
    198     public $parent;
     195    var $opc;
     196    var $op1;
     197    var $op2;
     198    var $parent;
    199199
    200200    function Decompiler_Binop($parent, $op1, $opc, $op2)
     
    234234class Decompiler_TriOp extends Decompiler_Code // {{{
    235235{
    236     public $condition;
    237     public $trueValue;
    238     public $falseValue;
     236    var $condition;
     237    var $trueValue;
     238    var $falseValue;
    239239
    240240    function Decompiler_TriOp($condition, $trueValue, $falseValue)
     
    262262class Decompiler_Fetch extends Decompiler_Code // {{{
    263263{
    264     public $src;
    265     public $fetchType;
     264    var $src;
     265    var $fetchType;
    266266
    267267    function Decompiler_Fetch($src, $type, $globalSrc)
     
    295295class Decompiler_Box // {{{
    296296{
    297     public $obj;
     297    var $obj;
    298298
    299299    function Decompiler_Box(&$obj)
     
    310310class Decompiler_Dim extends Decompiler_Value // {{{
    311311{
    312     public $offsets = array();
    313     public $isLast = false;
    314     public $isObject = false;
    315     public $assign = null;
     312    var $offsets = array();
     313    var $isLast = false;
     314    var $isObject = false;
     315    var $assign = null;
    316316
    317317    function toCode($indent)
     
    342342class Decompiler_List extends Decompiler_Code // {{{
    343343{
    344     public $src;
    345     public $dims = array();
    346     public $everLocked = false;
     344    var $src;
     345    var $dims = array();
     346    var $everLocked = false;
    347347
    348348    function toCode($indent)
     
    500500class Decompiler_ForeachBox extends Decompiler_Box // {{{
    501501{
    502     public $iskey;
     502    var $iskey;
    503503
    504504    function toCode($indent)
     
    511511class Decompiler
    512512{
    513     public $namespace;
    514     public $namespaceDecided;
    515     public $activeFile;
    516     public $activeClass;
    517     public $activeMethod;
    518     public $activeFunction;
     513    var $namespace;
     514    var $namespaceDecided;
     515    var $activeFile;
     516    var $activeClass;
     517    var $activeMethod;
     518    var $activeFunction;
    519519
    520520    function Decompiler()
     
    13751375        }
    13761376        unset($op);
    1377         if ($op_array['try_catch_array']) {
     1377        if (isset($op_array['try_catch_array'])) {
    13781378            foreach ($op_array['try_catch_array'] as $try_catch_element) {
    13791379                $catch_op = $try_catch_element['catch_op'];
     
    14931493                $EX['object'] = (int) $res['var'];
    14941494                $EX['called_scope'] = null;
    1495                 $EX['fbc'] = 'new ' . $this->stripNamespace($this->getOpVal($op1, $EX));
     1495                $EX['fbc'] = 'new ' . $this->stripNamespace(isset($op1['constant']) ? $op1['constant'] : $this->getOpVal($op1, $EX));
    14961496                break;
    14971497                // }}}
     
    15391539
    15401540                if ($op1['op_type'] == XC_IS_CONST) {
     1541                    if (!ZEND_ENGINE_2) {
     1542                        $resvar = $op1['constant'];
     1543                        break;
     1544                    }
    15411545                    $resvar = $this->stripNamespace($op1['constant']);
    15421546                }
     
    15551559            case XC_FETCH_UNSET:
    15561560            case XC_FETCH_IS:
    1557                 $fetchType = defined('ZEND_FETCH_TYPE_MASK') ? ($ext & ZEND_FETCH_TYPE_MASK) : $op2['EA.type'];
     1561                $fetchType = defined('ZEND_FETCH_TYPE_MASK') ? ($ext & ZEND_FETCH_TYPE_MASK) : $op2[!ZEND_ENGINE_2 ? 'fetch_type' : 'EA.type'];
    15581562                $name = isset($op1['constant']) ? $op1['constant'] : unquoteName($this->getOpVal($op1, $EX), $EX);
    15591563                if ($fetchType == ZEND_FETCH_STATIC_MEMBER) {
     
    16011605                if (is_a($src, "Decompiler_ForeachBox")) {
    16021606                    assert($opc == XC_FETCH_DIM_TMP_VAR);
    1603                     $src = clone $src;
     1607                    if (ZEND_ENGINE_2) {
     1608                        $src = clone($src);
     1609                    }
     1610                    else {
     1611                        $src = new Decompiler_ForeachBox($src->obj);
     1612                    }
    16041613                    $src->iskey = $op2['constant'];
    16051614                    $resvar = $src;
     
    16421651                }
    16431652                else if ($opc == XC_UNSET_DIM_OBJ) {
    1644                     $dim->isObject = $ext == ZEND_UNSET_OBJ;
     1653                    $dim->isObject = ZEND_ENGINE_2 ? $ext == ZEND_UNSET_OBJ : false /* cannot distingue */;
    16451654                }
    16461655                unset($dim);
     
    17921801                }
    17931802
    1794                 /* TODO: use type mask */
    1795                 switch (($ext & ZEND_ISSET_ISEMPTY_MASK)) {
     1803                switch (((!ZEND_ENGINE_2 ? $op['op2']['var'] /* constant */ : $ext) & ZEND_ISSET_ISEMPTY_MASK)) {
    17961804                case ZEND_ISSET:
    17971805                    $rvalue = "isset(" . str($rvalue) . ")";
     
    18451853            case XC_INIT_NS_FCALL_BY_NAME:
    18461854            case XC_INIT_FCALL_BY_NAME: // {{{
     1855                if (!ZEND_ENGINE_2 && ($ext & ZEND_CTOR_CALL)) {
     1856                    break;
     1857                }
    18471858                array_push($EX['arg_types_stack'], array($EX['fbc'], $EX['object'], $EX['called_scope']));
    18481859                $EX['object'] = null;
     
    25292540        // }}}
    25302541        // {{{ properties
    2531         if (!ZEND_ENGINE_2_4) {
     2542        if (ZEND_ENGINE_2 && !ZEND_ENGINE_2_4) {
    25322543            $default_static_members = $class[ZEND_ENGINE_2_1 ? 'default_static_members' : 'static_members'];
    25332544        }
    2534         $member_variables = $class['properties_info'];
     2545        $member_variables = $class[ZEND_ENGINE_2 ? 'properties_info' : 'default_properties'];
    25352546        if ($member_variables) {
    25362547            echo "\n";
    2537             foreach ($member_variables as $name => $info) {
    2538                 if (!empty($info['doc_comment'])) {
     2548            foreach ($member_variables as $name => $dummy) {
     2549                $info = isset($class['properties_info']) ? $class['properties_info'][$name] : null;
     2550                if (isset($info) && !empty($info['doc_comment'])) {
    25392551                    echo $newindent;
    25402552                    echo $info['doc_comment'];
     
    25432555
    25442556                echo $newindent;
    2545                 $static = ($info['flags'] & ZEND_ACC_STATIC);
    2546 
    2547                 if ($static) {
    2548                     echo "static ";
     2557                if (ZEND_ENGINE_2) {
     2558                    $static = ($info['flags'] & ZEND_ACC_STATIC);
     2559
     2560                    if ($static) {
     2561                        echo "static ";
     2562                    }
    25492563                }
    25502564
    25512565                $mangleSuffix = '';
    2552                 if (!isset($info)) {
     2566                if (!ZEND_ENGINE_2) {
     2567                    echo 'var ';
     2568                }
     2569                else if (!isset($info)) {
    25532570                    echo 'public ';
    25542571                }
     
    25762593                if (ZEND_ENGINE_2_4) {
    25772594                    $value = $class[$static ? 'default_static_members_table' : 'default_properties_table'][$info['offset']];
     2595                }
     2596                else if (!ZEND_ENGINE_2) {
     2597                    $value = $class['default_properties'][$name];
    25782598                }
    25792599                else {
     
    27292749define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2.");
    27302750define('ZEND_ENGINE_2_1', ZEND_ENGINE_2_2 || PHP_VERSION >= "5.1.");
     2751define('ZEND_ENGINE_2',   ZEND_ENGINE_2_1 || PHP_VERSION >= "5.0.");
    27312752
    27322753define('ZEND_ACC_STATIC',         0x01);
     
    28802901//*/
    28812902foreach (array (
     2903    'XC_ADD_INTERFACE' => -1,
     2904    'XC_ASSIGN_DIM' => -1,
     2905    'XC_ASSIGN_OBJ' => -1,
     2906    'XC_CATCH' => -1,
     2907    'XC_CLONE' => -1,
     2908    'XC_DECLARE_CLASS' => -1,
    28822909    'XC_DECLARE_CONST' => -1,
     2910    'XC_DECLARE_FUNCTION' => -1,
    28832911    'XC_DECLARE_FUNCTION_OR_CLASS' => -1,
     2912    'XC_DECLARE_INHERITED_CLASS' => -1,
    28842913    'XC_DECLARE_INHERITED_CLASS_DELAYED' => -1,
    28852914    'XC_DECLARE_LAMBDA_FUNCTION' => -1,
    28862915    'XC_DO_FCALL_BY_FUNC' => -1,
     2916    'XC_FETCH_CLASS' => -1,
    28872917    'XC_GOTO' => -1,
     2918    'XC_HANDLE_EXCEPTION' => -1,
    28882919    'XC_INIT_CTOR_CALL' => -1,
    28892920    'XC_INIT_FCALL_BY_FUNC' => -1,
     2921    'XC_INIT_METHOD_CALL' => -1,
    28902922    'XC_INIT_NS_FCALL_BY_NAME' => -1,
     2923    'XC_INIT_STATIC_METHOD_CALL' => -1,
     2924    'XC_INSTANCEOF' => -1,
    28912925    'XC_ISSET_ISEMPTY' => -1,
     2926    'XC_ISSET_ISEMPTY_DIM_OBJ' => -1,
     2927    'XC_ISSET_ISEMPTY_PROP_OBJ' => -1,
     2928    'XC_ISSET_ISEMPTY_VAR' => -1,
    28922929    'XC_JMP_NO_CTOR' => -1,
    28932930    'XC_JMP_SET' => -1,
    28942931    'XC_JMP_SET_VAR' => -1,
     2932    'XC_OP_DATA' => -1,
     2933    'XC_POST_DEC_OBJ' => -1,
     2934    'XC_POST_INC_OBJ' => -1,
     2935    'XC_PRE_DEC_OBJ' => -1,
     2936    'XC_PRE_INC_OBJ' => -1,
    28952937    'XC_QM_ASSIGN_VAR' => -1,
     2938    'XC_RAISE_ABSTRACT_ERROR' => -1,
     2939    'XC_THROW' => -1,
    28962940    'XC_UNSET_DIM' => -1,
    28972941    'XC_UNSET_DIM_OBJ' => -1,
    28982942    'XC_UNSET_OBJ' => -1,
    28992943    'XC_USER_OPCODE' => -1,
     2944    'XC_VERIFY_ABSTRACT_CLASS' => -1,
    29002945) as $k => $v) {
    29012946    if (!defined($k)) {
Note: See TracChangeset for help on using the changeset viewer.