Changeset 1300 for trunk


Ignore:
Timestamp:
2013-07-12T09:58:09+02:00 (16 months ago)
Author:
moo
Message:

disassembler, Decompiler: fix ISSET_ISEMPTY_VAR

Location:
trunk
Files:
2 edited

Legend:

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

    r1299 r1300  
    14741474            case XC_UNSET_VAR: 
    14751475                $rvalue = $this->getOpVal($op1, $EX); 
    1476                 if (defined('ZEND_FETCH_TYPE_MASK')) { 
    1477                     $fetchtype = ($ext & ZEND_FETCH_TYPE_MASK); 
    1478                 } 
    1479                 else { 
    1480                     $fetchtype = $op2['EA.type']; 
    1481                 } 
    1482                 switch ($fetchtype) { 
    1483                 case ZEND_FETCH_STATIC_MEMBER: 
     1476                $fetchtype = defined('ZEND_FETCH_TYPE_MASK') ? ($ext & ZEND_FETCH_TYPE_MASK) : $op2['EA.type']; 
     1477                if ($fetchtype == ZEND_FETCH_STATIC_MEMBER) { 
    14841478                    $class = $this->getOpVal($op2, $EX); 
    1485                     $rvalue = str($class) . '::$' . unquoteName($rvalue, $EX); 
    1486                     break; 
    1487                 default: 
     1479                    $rvalue = unquoteName(str($class)) . '::$' . unquoteName($rvalue, $EX); 
     1480                } 
     1481                else if ($opc != XC_UNSET_VAR) { 
    14881482                    $name = unquoteName($rvalue, $EX); 
    14891483                    $globalname = xcache_is_autoglobal($name) ? "\$$name" : "\$GLOBALS[" . str($rvalue) . "]"; 
    14901484                    $rvalue = new Decompiler_Fetch($rvalue, $fetchtype, $globalname); 
    1491                     break; 
    1492                 } 
     1485                } 
     1486 
    14931487                if ($opc == XC_UNSET_VAR) { 
    14941488                    $op['php'] = "unset(" . str($rvalue, $EX) . ")"; 
     
    16781672                        $rvalue = '$' . unquoteVariableName($this->getOpVal($op1, $EX)); 
    16791673                    } 
    1680                     if (!ZEND_ENGINE_2_4 && $op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) { 
     1674                    $fetchtype = defined('ZEND_FETCH_TYPE_MASK') ? ($ext & ZEND_FETCH_TYPE_MASK) : $op2['EA.type']; 
     1675                    if ($fetchtype == ZEND_FETCH_STATIC_MEMBER) { 
    16811676                        $class = $this->getOpVal($op2, $EX); 
    1682                         $rvalue = $class . '::' . $rvalue; 
     1677                        $rvalue = unquoteName(str($class)) . '::' . unquoteName($rvalue, $EX); 
    16831678                    } 
    16841679                } 
     
    20262021            case XC_RECV_INIT: 
    20272022            case XC_RECV: 
    2028                 $offset = $op1['var']; 
     2023                $offset = isset($op1['var']) ? $op1['var'] : $op1['constant']; 
    20292024                $lvalue = $this->getOpVal($op['result'], $EX); 
    20302025                if ($opc == XC_RECV_INIT) { 
  • trunk/xcache/xc_opcode_spec_def.h

    r1295 r1300  
    150150    OPSPEC(    UNUSED,     UCLASS,        STD,     UNUSED) /* 113 INIT_STATIC_METHOD_CALL        */ 
    151151#endif 
     152#ifdef ZEND_ENGINE_2_4 
     153    OPSPEC(     ISSET,        STD,        STD,        TMP) /* 114 ISSET_ISEMPTY_VAR              */ 
     154#else 
    152155    OPSPEC(     ISSET,        STD,      FETCH,        TMP) /* 114 ISSET_ISEMPTY_VAR              */ 
     156#endif 
    153157    OPSPEC(     ISSET,        STD,        STD,        TMP) /* 115 ISSET_ISEMPTY_DIM_OBJ          */ 
    154158 
Note: See TracChangeset for help on using the changeset viewer.