Changeset 1288 in svn for trunk


Ignore:
Timestamp:
2013-07-10T11:32:49+02:00 (23 months ago)
Author:
Xuefer
Message:

Decompiler: improves support for PHP_5_4

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r1281 r1288  
    44 * drop support for PHP_4 in source code
    55 * disassembler: fixes crash with nested sandbox
     6 * disassembler, Decompiler: improves support for PHP_5_4
    67 * adds support for PHP_5_5
    78 * compatible with fcntl fork
  • trunk/lib/Decompiler.class.php

    r1285 r1288  
    15431543                $dim = &$dimbox->obj;
    15441544                $dim->offsets[] = $this->getOpVal($op2, $EX);
     1545                /* TODO: use type mask */
    15451546                if ($ext == ZEND_FETCH_ADD_LOCK) {
    15461547                    $src->obj->everLocked = true;
     
    16771678                        $rvalue = '$' . unquoteVariableName($this->getOpVal($op1, $EX));
    16781679                    }
    1679                     if ($op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) {
     1680                    if (!ZEND_ENGINE_2_4 && $op2['EA.type'] == ZEND_FETCH_STATIC_MEMBER) {
    16801681                        $class = $this->getOpVal($op2, $EX);
    16811682                        $rvalue = $class . '::' . $rvalue;
     
    16991700                }
    17001701
    1701                 switch (($ext & (ZEND_ISSET|ZEND_ISEMPTY))) {
     1702                /* TODO: use type mask */
     1703                switch (($ext & ZEND_ISSET_ISEMPTY_MASK)) {
    17021704                case ZEND_ISSET:
    17031705                    $rvalue = "isset(" . str($rvalue) . ")";
     
    20232025            case XC_RECV_INIT:
    20242026            case XC_RECV:
    2025                 $offset = $this->getOpVal($op1, $EX);
     2027                $offset = $op1['var'];
    20262028                $lvalue = $this->getOpVal($op['result'], $EX);
    20272029                if ($opc == XC_RECV_INIT) {
     
    20312033                    $default = null;
    20322034                }
    2033                 $EX['recvs'][str($offset)] = array($lvalue, $default);
     2035                $EX['recvs'][$offset] = array($lvalue, $default);
    20342036                break;
    20352037            case XC_POST_DEC:
     
    22792281            if (isset($op_array['arg_info'])) {
    22802282                $ai = $op_array['arg_info'][$i];
    2281                 if (!empty($ai['class_name'])) {
     2283                if (isset($ai['type_hint']) ? ($ai['type_hint'] == IS_CALLABLE || $ai['type_hint'] == IS_OBJECT) : !empty($ai['class_name'])) {
    22822284                    echo $this->stripNamespace($ai['class_name']), ' ';
    22832285                    if (!ZEND_ENGINE_2_2 && $ai['allow_null']) {
     
    22852287                    }
    22862288                }
    2287                 else if (!empty($ai['array_type_hint'])) {
     2289                else if (isset($ai['type_hint']) ? $ai['type_hint'] == IS_ARRAY : !empty($ai['array_type_hint'])) {
    22882290                    echo 'array ';
    22892291                    if (!ZEND_ENGINE_2_2 && $ai['allow_null']) {
     
    26302632
    26312633// {{{ defines
    2632 define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.3.99");
     2634define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.4");
    26332635define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3.");
    26342636define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2.");
     
    26722674
    26732675    define('ZEND_FETCH_TYPE_MASK',        0x70000000);
     2676
     2677    define('ZEND_FETCH_STANDARD',         0x00000000);
     2678    define('ZEND_FETCH_ADD_LOCK',         0x08000000);
     2679    define('ZEND_FETCH_MAKE_REF',         0x04000000);
    26742680}
    26752681else {
     
    26792685    define('ZEND_FETCH_STATIC_MEMBER',    3);
    26802686    define('ZEND_FETCH_GLOBAL_LOCK',      4);
     2687
     2688    define('ZEND_FETCH_STANDARD',         0);
     2689    define('ZEND_FETCH_ADD_LOCK',         1);
     2690}
     2691
     2692if (ZEND_ENGINE_2_4) {
     2693    define('ZEND_ISSET',                  0x02000000);
     2694    define('ZEND_ISEMPTY',                0x01000000);
     2695    define('ZEND_ISSET_ISEMPTY_MASK',     (ZEND_ISSET | ZEND_ISEMPTY));
     2696    define('ZEND_QUICK_SET',              0x00800000);
     2697}
     2698else {
     2699    define('ZEND_ISSET',                  (1<<0));
     2700    define('ZEND_ISEMPTY',                (1<<1));
     2701
     2702    define('ZEND_ISSET_ISEMPTY_MASK',     (ZEND_ISSET | ZEND_ISEMPTY));
    26812703}
    26822704
     
    27022724define('ZEND_REQUIRE_ONCE',       (1<<4));
    27032725
    2704 define('ZEND_ISSET',              (1<<0));
    2705 define('ZEND_ISEMPTY',            (1<<1));
    27062726if (ZEND_ENGINE_2_4) {
    27072727    define('EXT_TYPE_UNUSED',     (1<<5));
     
    27102730    define('EXT_TYPE_UNUSED',     (1<<0));
    27112731}
    2712 
    2713 define('ZEND_FETCH_STANDARD',     0);
    2714 define('ZEND_FETCH_ADD_LOCK',     1);
    27152732
    27162733define('ZEND_FE_FETCH_BYREF',     1);
     
    27382755define('IS_CONSTANT', 8);
    27392756define('IS_CONSTANT_ARRAY',   9);
     2757if (ZEND_ENGINE_2_4) {
     2758    define('IS_CALLABLE', 10);
     2759}
    27402760/* Ugly hack to support constants as static array indices */
    27412761define('IS_CONSTANT_TYPE_MASK',   0x0f);
  • trunk/mod_disassembler/sample.php

    r1010 r1288  
    228228@f1();
    229229print('1');
    230 ref(&$a);
     230// ref(&$a);
    231231$a = $array['index'];
    232232$a = $object->prop;
     
    243243$a = isset($this->prop);
    244244$a = empty($this->prop);
     245$a = isset(ClassName::$prop);
     246$a = empty(ClassName::$prop);
    245247$a = (int) $b;
    246248$a = (double) $b;
Note: See TracChangeset for help on using the changeset viewer.