Changeset 1300 for trunk


Ignore:
Timestamp:
2013-07-12T09:58:09+02:00 (23 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.