|
|
|
@ -1542,6 +1542,7 @@ class Decompiler
|
|
|
|
|
} |
|
|
|
|
$dim = &$dimbox->obj; |
|
|
|
|
$dim->offsets[] = $this->getOpVal($op2, $EX); |
|
|
|
|
/* TODO: use type mask */ |
|
|
|
|
if ($ext == ZEND_FETCH_ADD_LOCK) { |
|
|
|
|
$src->obj->everLocked = true; |
|
|
|
|
} |
|
|
|
@ -1676,7 +1677,7 @@ class Decompiler
|
|
|
|
|
if ($op1['op_type'] == XC_IS_CONST) { |
|
|
|
|
$rvalue = '$' . unquoteVariableName($this->getOpVal($op1, $EX)); |
|
|
|
|
} |
|
|
|
|
if ($op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) { |
|
|
|
|
if (!ZEND_ENGINE_2_4 && $op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) { |
|
|
|
|
$class = $this->getOpVal($op2, $EX); |
|
|
|
|
$rvalue = $class . '::' . $rvalue; |
|
|
|
|
} |
|
|
|
@ -1698,7 +1699,8 @@ class Decompiler
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch (($ext & (ZEND_ISSET|ZEND_ISEMPTY))) { |
|
|
|
|
/* TODO: use type mask */ |
|
|
|
|
switch (($ext & ZEND_ISSET_ISEMPTY_MASK)) { |
|
|
|
|
case ZEND_ISSET: |
|
|
|
|
$rvalue = "isset(" . str($rvalue) . ")"; |
|
|
|
|
break; |
|
|
|
@ -2022,7 +2024,7 @@ class Decompiler
|
|
|
|
|
break; |
|
|
|
|
case XC_RECV_INIT: |
|
|
|
|
case XC_RECV: |
|
|
|
|
$offset = $this->getOpVal($op1, $EX); |
|
|
|
|
$offset = $op1['var']; |
|
|
|
|
$lvalue = $this->getOpVal($op['result'], $EX); |
|
|
|
|
if ($opc == XC_RECV_INIT) { |
|
|
|
|
$default = value($op['op2']['constant']); |
|
|
|
@ -2030,7 +2032,7 @@ class Decompiler
|
|
|
|
|
else { |
|
|
|
|
$default = null; |
|
|
|
|
} |
|
|
|
|
$EX['recvs'][str($offset)] = array($lvalue, $default); |
|
|
|
|
$EX['recvs'][$offset] = array($lvalue, $default); |
|
|
|
|
break; |
|
|
|
|
case XC_POST_DEC: |
|
|
|
|
case XC_POST_INC: |
|
|
|
@ -2278,13 +2280,13 @@ class Decompiler
|
|
|
|
|
$arg = $EX['recvs'][$i + 1]; |
|
|
|
|
if (isset($op_array['arg_info'])) { |
|
|
|
|
$ai = $op_array['arg_info'][$i]; |
|
|
|
|
if (!empty($ai['class_name'])) { |
|
|
|
|
if (isset($ai['type_hint']) ? ($ai['type_hint'] == IS_CALLABLE || $ai['type_hint'] == IS_OBJECT) : !empty($ai['class_name'])) { |
|
|
|
|
echo $this->stripNamespace($ai['class_name']), ' '; |
|
|
|
|
if (!ZEND_ENGINE_2_2 && $ai['allow_null']) { |
|
|
|
|
echo 'or NULL '; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else if (!empty($ai['array_type_hint'])) { |
|
|
|
|
else if (isset($ai['type_hint']) ? $ai['type_hint'] == IS_ARRAY : !empty($ai['array_type_hint'])) { |
|
|
|
|
echo 'array '; |
|
|
|
|
if (!ZEND_ENGINE_2_2 && $ai['allow_null']) { |
|
|
|
|
echo 'or NULL '; |
|
|
|
@ -2629,7 +2631,7 @@ class Decompiler
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// {{{ defines |
|
|
|
|
define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.3.99"); |
|
|
|
|
define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.4"); |
|
|
|
|
define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3."); |
|
|
|
|
define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2."); |
|
|
|
|
define('ZEND_ENGINE_2_1', ZEND_ENGINE_2_2 || PHP_VERSION >= "5.1."); |
|
|
|
@ -2671,6 +2673,10 @@ if (ZEND_ENGINE_2_4) {
|
|
|
|
|
define('ZEND_FETCH_LEXICAL', 0x50000000); |
|
|
|
|
|
|
|
|
|
define('ZEND_FETCH_TYPE_MASK', 0x70000000); |
|
|
|
|
|
|
|
|
|
define('ZEND_FETCH_STANDARD', 0x00000000); |
|
|
|
|
define('ZEND_FETCH_ADD_LOCK', 0x08000000); |
|
|
|
|
define('ZEND_FETCH_MAKE_REF', 0x04000000); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
define('ZEND_FETCH_GLOBAL', 0); |
|
|
|
@ -2678,6 +2684,22 @@ else {
|
|
|
|
|
define('ZEND_FETCH_STATIC', 2); |
|
|
|
|
define('ZEND_FETCH_STATIC_MEMBER', 3); |
|
|
|
|
define('ZEND_FETCH_GLOBAL_LOCK', 4); |
|
|
|
|
|
|
|
|
|
define('ZEND_FETCH_STANDARD', 0); |
|
|
|
|
define('ZEND_FETCH_ADD_LOCK', 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ZEND_ENGINE_2_4) { |
|
|
|
|
define('ZEND_ISSET', 0x02000000); |
|
|
|
|
define('ZEND_ISEMPTY', 0x01000000); |
|
|
|
|
define('ZEND_ISSET_ISEMPTY_MASK', (ZEND_ISSET | ZEND_ISEMPTY)); |
|
|
|
|
define('ZEND_QUICK_SET', 0x00800000); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
define('ZEND_ISSET', (1<<0)); |
|
|
|
|
define('ZEND_ISEMPTY', (1<<1)); |
|
|
|
|
|
|
|
|
|
define('ZEND_ISSET_ISEMPTY_MASK', (ZEND_ISSET | ZEND_ISEMPTY)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
define('ZEND_FETCH_CLASS_DEFAULT', 0); |
|
|
|
@ -2701,8 +2723,6 @@ define('ZEND_INCLUDE_ONCE', (1<<2));
|
|
|
|
|
define('ZEND_REQUIRE', (1<<3)); |
|
|
|
|
define('ZEND_REQUIRE_ONCE', (1<<4)); |
|
|
|
|
|
|
|
|
|
define('ZEND_ISSET', (1<<0)); |
|
|
|
|
define('ZEND_ISEMPTY', (1<<1)); |
|
|
|
|
if (ZEND_ENGINE_2_4) { |
|
|
|
|
define('EXT_TYPE_UNUSED', (1<<5)); |
|
|
|
|
} |
|
|
|
@ -2710,9 +2730,6 @@ else {
|
|
|
|
|
define('EXT_TYPE_UNUSED', (1<<0)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
define('ZEND_FETCH_STANDARD', 0); |
|
|
|
|
define('ZEND_FETCH_ADD_LOCK', 1); |
|
|
|
|
|
|
|
|
|
define('ZEND_FE_FETCH_BYREF', 1); |
|
|
|
|
define('ZEND_FE_FETCH_WITH_KEY', 2); |
|
|
|
|
|
|
|
|
@ -2737,6 +2754,9 @@ define('IS_STRING', 6);
|
|
|
|
|
define('IS_RESOURCE', 7); |
|
|
|
|
define('IS_CONSTANT', 8); |
|
|
|
|
define('IS_CONSTANT_ARRAY', 9); |
|
|
|
|
if (ZEND_ENGINE_2_4) { |
|
|
|
|
define('IS_CALLABLE', 10); |
|
|
|
|
} |
|
|
|
|
/* Ugly hack to support constants as static array indices */ |
|
|
|
|
define('IS_CONSTANT_TYPE_MASK', 0x0f); |
|
|
|
|
define('IS_CONSTANT_UNQUALIFIED', 0x10); |
|
|
|
|