Changeset 1486


Ignore:
Timestamp:
2014-05-27T06:53:34+02:00 (6 months ago)
Author:
moo
Message:

WIP PHP_5_6 support

Location:
trunk
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r1482 r1486  
    1010   * (WIP) defragment 
    1111   * (WIP) cache to disk 
     12   * (WIP) PHP_5_6 support 
    1213 * misc: 
    1314   * Reflection info added for APIs 
  • trunk/NEWS

    r1478 r1486  
    114.0.0 2014-??-?? 
     2======== 
    23 * api updates 
    34 * cache defragment, cache to disk 
     5 * PHP_5_6 support 
    46 
    573.2.1 2013-??-?? 
  • trunk/devel/prepare.cfg.example

    r1321 r1486  
    66PHP5_4_DIR= 
    77PHP5_5_DIR= 
     8PHP5_6_DIR= 
    89PHP6_x_DIR= 
    910 
    10 PHP_DEVEL_DIR= 
     11PHP_DEVEL_DIR=$(PHP5_6_DIR) 
    1112 
    1213# path to eaccelerator source dir 
  • trunk/devel/prepare.mak

    r1325 r1486  
    2525    xcache/xc_const_string_opcodes_php5.4.h \ 
    2626    xcache/xc_const_string_opcodes_php5.5.h \ 
     27    xcache/xc_const_string_opcodes_php5.6.h \ 
    2728    xcache/xc_const_string_opcodes_php6.x.h 
    2829 
     
    99100endif 
    100101 
     102ifeq (${PHP5_6_DIR},) 
     103xcache/xc_const_string_opcodes_php5.6.h: dummy 
     104    @echo "Skipped $@: PHP_5_6_DIR not set" 
     105else 
     106xcache/xc_const_string_opcodes_php5.6.h: ${PHP5_6_DIR}/Zend/zend_vm_def.h 
     107    $(AWK) -f ./devel/gen_const_string_opcodes.awk < "$<" > "$@.tmp" 
     108    mv "$@.tmp" "$@" 
     109endif 
     110 
    101111ifeq (${PHP6_x_DIR},) 
    102112xcache/xc_const_string_opcodes_php6.x.h: dummy 
  • trunk/lib/Decompiler.class.php

    r1374 r1486  
    27972797 
    27982798// {{{ defines 
    2799 define('ZEND_ENGINE_2_4', PHP_VERSION >= "5.4"); 
     2799define('ZEND_ENGINE_2_6', PHP_VERSION >= "5.6"); 
     2800define('ZEND_ENGINE_2_5', ZEND_ENGINE_2_6 || PHP_VERSION >= "5.5."); 
     2801define('ZEND_ENGINE_2_4', ZEND_ENGINE_2_5 || PHP_VERSION >= "5.4."); 
    28002802define('ZEND_ENGINE_2_3', ZEND_ENGINE_2_4 || PHP_VERSION >= "5.3."); 
    28012803define('ZEND_ENGINE_2_2', ZEND_ENGINE_2_3 || PHP_VERSION >= "5.2."); 
     
    29262928define('IS_RESOURCE', 7); 
    29272929define('IS_CONSTANT', 8); 
    2928 define('IS_CONSTANT_ARRAY',   9); 
     2930if (ZEND_ENGINE_2_6) { 
     2931    define('IS_CONSTANT_ARRAY', -1); 
     2932    define('IS_CONSTANT_AST', 9); 
     2933} 
     2934else { 
     2935    define('IS_CONSTANT_ARRAY', 9); 
     2936} 
    29292937if (ZEND_ENGINE_2_4) { 
    29302938    define('IS_CALLABLE', 10); 
  • trunk/processor/main.m4

    r1475 r1486  
    3535define(`ALLOC', ` 
    3636    pushdef(`COUNT', `ifelse(`$3', `', `1', `$3')') 
    37     pushdef(`SIZE', `sizeof($2)ifelse(`$3', `', `', ` * $3')') 
     37    ifdef(`ALLOC_SIZE_HELPER', ` 
     38        pushdef(`SIZE', `ALLOC_SIZE_HELPER()') 
     39    ', ` 
     40        pushdef(`SIZE', `sizeof($2)ifelse(`$3', `', `', ` * $3')') 
     41    ') 
    3842    pushdef(`REALTYPE', `ifelse(`$5', , `$2', `$5')') 
    3943    /* allocate */ 
  • trunk/processor/processor.m4

    r1481 r1486  
    6969#ifdef ZEND_ENGINE_2 
    7070DEF_HASH_TABLE_FUNC(`HashTable_zend_property_info', `zend_property_info') 
     71#endif 
     72#ifdef IS_CONSTANT_AST 
     73define(`ZEND_AST_HELPER', ` 
     74    { 
     75    IFCALCCOPY(` 
     76        size_t zend_ast_size = $1->kind == ZEND_CONST 
     77         ? sizeof(zend_ast) + sizeof(zval) 
     78         : sizeof(zend_ast) + sizeof(zend_ast *) * ($1->children - 1); 
     79    ') 
     80 
     81    pushdef(`ALLOC_SIZE_HELPER', `zend_ast_size') 
     82    $2 
     83    popdef(`ALLOC_SIZE_HELPER') 
     84    } 
     85') 
     86DEF_STRUCT_P_FUNC(`zend_ast', , `dnl {{{ 
     87        zend_ushort i; 
     88        PROCESS(zend_ushort, kind) 
     89        PROCESS(zend_ushort, children) 
     90        DONE(u) 
     91        DISABLECHECK(` 
     92            if (SRC()->kind == ZEND_CONST) { 
     93                assert(SRC()->u.val); 
     94                IFCOPY(` 
     95                    memcpy(DST()->u.val, SRC()->u.val, sizeof(zval)); 
     96                ') 
     97                STRUCT_P_EX(zval, DST()->u.val, SRC()->u.val, `', `', ` ') 
     98                RELOCATE_EX(zval, DST()->u.val) 
     99            } 
     100            else { 
     101                for (i = 0; i < SRC()->children; ++i) { 
     102                    zend_ast *src_ast = (&SRC()->u.child)[i]; 
     103                    ALLOC(`(&DST()->u.child)[i]', zend_ast) 
     104                    ZEND_AST_HELPER(`src_ast', `STRUCT_P_EX(zend_ast, (&DST()->u.child)[i], src_ast, `[i]', `', ` ')') 
     105                    RELOCATE_EX(zend_ast, (&DST()->u.child)[i]) 
     106                } 
     107            } 
     108        ') 
     109') 
     110dnl }}} 
    71111#endif 
    72112DEF_STRUCT_P_FUNC(`zval', , `dnl {{{ 
     
    126166 
    127167            case IS_ARRAY: 
     168#ifdef IS_CONSTANT_ARRAY 
    128169            case IS_CONSTANT_ARRAY: 
     170#endif 
     171                assert(SRC()->value.ht); 
    129172                STRUCT_P(HashTable, value.ht, HashTable_zval_ptr) 
    130173                break; 
     174 
     175#ifdef IS_CONSTANT_AST 
     176            case IS_CONSTANT_AST: 
     177                assert(SRC()->value.ast); 
     178                ZEND_AST_HELPER(`SRC()->value.ast', `STRUCT_P(zend_ast, value.ast)') 
     179                break; 
     180#endif 
    131181 
    132182            case IS_OBJECT: 
     
    238288    PROCESS(zend_bool, array_type_hint) 
    239289#endif 
     290#ifdef ZEND_ENGINE_2_6 
     291    PROCESS(zend_uchar, pass_by_reference) 
     292#endif 
    240293    PROCESS(zend_bool, allow_null) 
     294 
     295#ifdef ZEND_ENGINE_2_6 
     296    PROCESS(zend_bool, is_variadic) 
     297#else 
    241298    PROCESS(zend_bool, pass_by_reference) 
     299#endif 
     300 
    242301#ifndef ZEND_ENGINE_2_4 
    243302    PROCESS(zend_bool, return_reference) 
     
    481540    PROCESS_CTEXTPOINTER(__unset) 
    482541    PROCESS_CTEXTPOINTER(__isset) 
    483 #    if defined(ZEND_ENGINE_2_2) || PHP_MAJOR_VERSION >= 6 
     542#   endif 
     543# if defined(ZEND_ENGINE_2_2) || PHP_MAJOR_VERSION >= 6 
    484544    PROCESS_CTEXTPOINTER(__tostring) 
    485 #    endif 
    486 #   endif 
     545# endif 
     546# if defined(ZEND_ENGINE_2_6) 
     547    PROCESS_CTEXTPOINTER(__debugInfo) 
     548# endif 
    487549    PROCESS_CTEXTPOINTER(__call) 
    488550#   ifdef ZEND_CALLSTATIC_FUNC_NAME 
  • trunk/xcache.c

    r1477 r1486  
    367367        break; 
    368368 
     369#ifdef IS_CONSTANT_ARRAY 
    369370    case IS_CONSTANT_ARRAY: 
    370371        *return_value = *value; 
     
    372373        return_value->type = IS_ARRAY; 
    373374        break; 
     375#endif 
     376 
     377#ifdef IS_CONSTANT_AST 
     378    case IS_CONSTANT_AST: 
     379        RETURN_NULL(); 
     380        break; 
     381#endif 
    374382 
    375383    default: 
  • trunk/xcache/xc_compatibility.h

    r1321 r1486  
    1111 */ 
    1212 
    13 #if !defined(ZEND_ENGINE_2_5) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 5 || PHP_MAJOR_VERSION > 6) 
     13#if !defined(ZEND_ENGINE_2_6) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 6 || PHP_MAJOR_VERSION > 6) 
     14#   define ZEND_ENGINE_2_6 
     15#endif 
     16#if !defined(ZEND_ENGINE_2_5) && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 5 || defined(ZEND_ENGINE_2_6)) 
    1417#   define ZEND_ENGINE_2_5 
    1518#endif 
  • trunk/xcache/xc_const_string.c

    r1326 r1486  
    7272#if PHP_MAJOR_VERSION >= 6 
    7373#   include "xc_const_string_opcodes_php6.x.h" 
     74#elif defined(ZEND_ENGINE_2_6) 
     75#   include "xc_const_string_opcodes_php5.6.h" 
    7476#elif defined(ZEND_ENGINE_2_5) 
    7577#   include "xc_const_string_opcodes_php5.5.h" 
  • trunk/xcache/xc_opcode_spec_def.h

    r1371 r1486  
    301301    OPSPEC(    UNUSED,     UNUSED,     UNUSED,     UNUSED) /* 163 FAST_RET                       */ 
    302302#endif 
     303#ifdef ZEND_ENGINE_2_6 
     304    OPSPEC(    UNUSED,        ARG,     UNUSED,        VAR) /* 164 RECV_VARIADIC                  */ 
     305    OPSPEC(      SEND,        STD,        ARG,     UNUSED) /* 165 SEND_UNPACK                    */ 
     306    OPSPEC(    UNUSED,        STD,        STD,        TMP) /* 166 POW                            */ 
     307    OPSPEC(    ASSIGN,        STD,        STD,        VAR) /* 167 ASSIGN_POW                     */ 
     308#endif 
    303309}; 
Note: See TracChangeset for help on using the changeset viewer.