Changeset 1288 for trunk


Ignore:
Timestamp:
2013-07-10T11:32:49+02:00 (17 months ago)
Author:
moo
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.