Changeset 722


Ignore:
Timestamp:
2011-04-09T13:41:07+02:00 (4 years ago)
Author:
moo
Message:

method call decompile fix

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Decompiler.class.php

    r720 r722  
    801801                        case ZEND_FETCH_CLASS_PARENT:
    802802                            $class = 'parent';
    803                         }
     803                            break;
     804                        case ZEND_FETCH_CLASS_STATIC:
     805                            $class = 'static';
     806                            break;
     807                        }
     808                        $istmpres = true;
    804809                    }
    805810                    else {
     
    10631068                    }
    10641069                    array_push($EX['arg_types_stack'], array($EX['fbc'], $EX['object'], $EX['called_scope']));
    1065                     if ($opc == XC_INIT_STATIC_METHOD_CALL) {
    1066                         $EX['object'] = null;
    1067                         $EX['called_scope'] = $op1['var'];
    1068                     }
    1069                     else if ($opc == XC_INIT_METHOD_CALL || $op1['op_type'] != XC_IS_UNUSED) {
     1070                    if ($opc == XC_INIT_STATIC_METHOD_CALL || $opc == XC_INIT_METHOD_CALL || $op1['op_type'] != XC_IS_UNUSED) {
    10701071                        $obj = $this->getOpVal($op1, $EX);
    10711072                        if (!isset($obj)) {
    10721073                            $obj = '$this';
    10731074                        }
    1074                         // looks like PHP4 only
    1075                         if (isset($op1['constant'])) {
     1075                        if ($opc == XC_INIT_STATIC_METHOD_CALL || /* PHP4 */ isset($op1['constant'])) {
    10761076                            $EX['object'] = null;
    10771077                            $EX['called_scope'] = $this->unquoteName($obj);
     
    18651865define('ZEND_FETCH_CLASS_AUTO',       5);
    18661866define('ZEND_FETCH_CLASS_INTERFACE',  6);
     1867define('ZEND_FETCH_CLASS_STATIC',     7);
    18671868
    18681869define('ZEND_EVAL',               (1<<0));
  • trunk/opcode_spec_def.h

    r718 r722  
    172172
    173173    OPSPEC(    UNUSED,        STD,        STD,        VAR) /* 112 INIT_METHOD_CALL               */
     174#   ifdef ZEND_ENGINE_2_3
     175    OPSPEC(    UNUSED,        STD,        STD,     UNUSED) /* 113 INIT_STATIC_METHOD_CALL        */
     176#   else
    174177    OPSPEC(    UNUSED,     UCLASS,        STD,     UNUSED) /* 113 INIT_STATIC_METHOD_CALL        */
     178#   endif
    175179    OPSPEC(     ISSET,        STD,      FETCH,        TMP) /* 114 ISSET_ISEMPTY_VAR              */
    176180    OPSPEC(     ISSET,        STD,        STD,        TMP) /* 115 ISSET_ISEMPTY_DIM_OBJ          */
Note: See TracChangeset for help on using the changeset viewer.