Ignore:
Timestamp:
2011-04-09T09:07:48+02:00 (4 years ago)
Author:
moo
Message:

PHP 6: initial catch up with php 6 literals and trait

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/processor.m4

    r713 r716  
    223223    DISPATCH(zend_uint, class_name_len) 
    224224    PROC_ZSTRING_L(, class_name, class_name_len) 
     225#ifdef ZEND_ENGINE_2_4 
     226    DISPATCH(zend_uchar, type_hint) 
     227#else 
    225228    DISPATCH(zend_bool, array_type_hint) 
     229#endif 
    226230    DISPATCH(zend_bool, allow_null) 
    227231    DISPATCH(zend_bool, pass_by_reference) 
     232#ifndef ZEND_ENGINE_2_4 
    228233    DISPATCH(zend_bool, return_reference) 
    229234    DISPATCH(int, required_num_args) 
     235#endif 
    230236') 
    231237#endif 
     
    273279    PROC_ZSTRING_L(, name, name_length) 
    274280    DISPATCH(ulong, h) 
     281#ifdef ZEND_ENGINE_2_4 
     282    DISPATCH(int, offset) 
     283#endif 
    275284#ifdef ZEND_ENGINE_2_1 
    276285    DISPATCH(int, doc_comment_len) 
     
    307316    STRUCT_P(int, refcount) 
    308317#endif 
     318#ifndef ZEND_ENGINE_2_4 
    309319    DISPATCH(zend_bool, constants_updated) 
     320#endif 
    310321#ifdef ZEND_ENGINE_2 
    311322    DISPATCH(zend_uint, ce_flags) 
    312323#endif 
    313324 
    314     STRUCT(HashTable, default_properties, HashTable_zval_ptr) 
     325#ifdef ZEND_ENGINE_2_4 
     326    DISPATCH(int, default_properties_count) 
     327    STRUCT_ARRAY(default_properties_count, zval, default_properties_table) 
     328    DISPATCH(int, default_static_members_count) 
     329    STRUCT_ARRAY(default_static_members_count, zval, default_static_members_table) 
     330    IFCOPY(`dst->static_members_table = &dst->default_static_members_table;') 
     331    DONE(static_members_table) 
     332#else 
    315333    IFCOPY(`dst->builtin_functions = src->builtin_functions;') 
    316334    DONE(builtin_functions) 
    317 #ifdef ZEND_ENGINE_2 
     335    STRUCT(HashTable, default_properties, HashTable_zval_ptr) 
     336#   ifdef ZEND_ENGINE_2 
    318337    STRUCT(HashTable, properties_info, HashTable_zend_property_info) 
    319 #   ifdef ZEND_ENGINE_2_1 
     338#       ifdef ZEND_ENGINE_2_1 
    320339    STRUCT(HashTable, default_static_members, HashTable_zval_ptr) 
    321340    IFCOPY(`dst->static_members = &dst->default_static_members;') 
    322341    DONE(static_members) 
    323 #   else 
     342#       else 
    324343    STRUCT_P(HashTable, static_members, HashTable_zval_ptr) 
    325 #   endif 
     344#       endif 
     345#   endif 
     346#endif /* ZEND_ENGINE_2_4 */ 
     347 
     348#ifdef ZEND_ENGINE_2 
    326349    STRUCT(HashTable, constants_table, HashTable_zval_ptr) 
    327350 
    328351    dnl runtime binding: ADD_INTERFACE will deal with it 
     352    dnl runtime binding: ADD_TRAIT will deal with it 
    329353    IFRESTORE(` 
    330354        if (src->num_interfaces) { 
    331355            CALLOC(dst->interfaces, zend_class_entry*, src->num_interfaces) 
    332356            DONE(`interfaces') 
     357#   ifdef ZEND_ENGINE_2_4 
     358            CALLOC(dst->traits, zend_class_entry*, src->num_traits) 
     359            DONE(`traits') 
     360            DONE(`trait_aliases') 
     361            DONE(`trait_precedences') 
     362#   endif 
    333363        } 
    334364        else { 
    335             COPYNULL(interfaces) 
     365            COPYNULL(`interfaces') 
     366#   ifdef ZEND_ENGINE_2_4 
     367            COPYNULL(`traits') 
     368            COPYNULL(`trait_aliases') 
     369            COPYNULL(`trait_precedences') 
     370#   endif 
    336371        } 
    337372    ') 
     
    351386            */ 
    352387            DONE(`interfaces') 
     388#   ifdef ZEND_ENGINE_2_4 
     389            DONE(`traits') 
     390            DONE(`trait_aliases') 
     391            DONE(`trait_precedences') 
     392#   endif 
    353393        } 
    354394        else { 
    355             COPYNULL(interfaces) 
     395            COPYNULL(`interfaces') 
     396#   ifdef ZEND_ENGINE_2_4 
     397            COPYNULL(`traits') 
     398            COPYNULL(`trait_aliases') 
     399            COPYNULL(`trait_precedences') 
     400#   endif 
    356401        } 
    357402    ') 
     
    359404        IFDASM(`', ` 
    360405            DONE(`interfaces') 
     406#   ifdef ZEND_ENGINE_2_4 
     407            DONE(`traits') 
     408            DONE(`trait_aliases') 
     409            DONE(`trait_precedences') 
     410#   endif 
    361411        ') 
    362412    ') 
    363413    DISPATCH(zend_uint, num_interfaces) 
    364  
     414#   ifdef ZEND_ENGINE_2_4 
     415    DISPATCH(zend_uint, num_traits) 
     416#   endif 
     417 
     418#   ifdef ZEND_ENGINE_2_4 
     419    DISABLECHECK(` 
     420    IFRESTORE(`dst->info.user.filename = processor->entry_src->filepath;', `PROC_STRING(info.user.filename)') 
     421    DISPATCH(zend_uint, info.user.line_start) 
     422    DISPATCH(zend_uint, info.user.line_end) 
     423    DISPATCH(zend_uint, info.user.doc_comment_len) 
     424    PROC_ZSTRING_L(, info.user.doc_comment, info.user.doc_comment_len) 
     425    ') 
     426    DONE(info) 
     427#   else 
    365428    IFRESTORE(`dst->filename = processor->entry_src->filepath;DONE(filename)', `PROC_STRING(filename)') 
    366429    DISPATCH(zend_uint, line_start) 
    367430    DISPATCH(zend_uint, line_end) 
    368 #ifdef ZEND_ENGINE_2_1 
     431#       ifdef ZEND_ENGINE_2_1 
    369432    DISPATCH(zend_uint, doc_comment_len) 
    370433    PROC_ZSTRING_L(, doc_comment, doc_comment_len) 
    371 #endif 
     434#       endif 
     435#   endif 
     436 
    372437    /* # NOT DONE */ 
    373438    COPY(serialize_func) 
     
    377442    COPY(get_iterator) 
    378443    COPY(interface_gets_implemented) 
    379 #ifdef ZEND_ENGINE_2_3 
     444#   ifdef ZEND_ENGINE_2_3 
    380445    COPY(get_static_method) 
    381 #endif 
     446#   endif 
    382447    COPY(serialize) 
    383448    COPY(unserialize) 
     
    389454    COPY(__set) 
    390455/* should be >5.1 */ 
    391 #ifdef ZEND_ENGINE_2_1 
     456#   ifdef ZEND_ENGINE_2_1 
    392457    COPY(__unset) 
    393458    COPY(__isset) 
    394 # if defined(ZEND_ENGINE_2_2) || PHP_MAJOR_VERSION >= 6 
     459#    if defined(ZEND_ENGINE_2_2) || PHP_MAJOR_VERSION >= 6 
    395460    COPY(__tostring) 
    396 # endif 
    397 #endif 
     461#    endif 
     462#   endif 
    398463    COPY(__call) 
    399 #ifdef ZEND_CALLSTATIC_FUNC_NAME 
     464#   ifdef ZEND_CALLSTATIC_FUNC_NAME 
    400465    COPY(__callstatic) 
    401 #endif 
     466#   endif 
     467#   ifndef ZEND_ENGINE_2_4 
    402468    /* # NOT DONE */ 
    403469    COPY(module) 
    404 #else 
     470#   endif 
     471#else /* ZEND_ENGINE_2 */ 
    405472    COPY(handle_function_call) 
    406473    COPY(handle_property_get) 
     
    416483') 
    417484dnl }}} 
     485#ifdef ZEND_ENGINE_2_4 
     486undefine(`UNION_znode_op') 
     487define(`UNION_znode_op', `dnl {{{ 
     488    assert(src->$1_type == IS_CONST || 
     489        src->$1_type == IS_VAR || 
     490        src->$1_type == IS_CV || 
     491        src->$1_type == IS_TMP_VAR || 
     492        src->$1_type == IS_UNUSED); 
     493    dnl dirty dispatch 
     494    DISABLECHECK(` 
     495    switch (src->$1_type) { 
     496        case IS_CONST: 
     497            dnl TODO: fix me, use literals 
     498            IFDASM(`{ 
     499                zval *zv; 
     500                ALLOC_INIT_ZVAL(zv); 
     501                *zv = ((zend_literal *) src->$1.ptr)->constant; 
     502                zval_copy_ctor(zv); 
     503                add_assoc_zval_ex(dst, ZEND_STRS("$1.constant"), zv); 
     504                } 
     505            ', ` 
     506                DISPATCH(zend_uint, $1.constant) 
     507            ') 
     508            break; 
     509        IFCOPY(` 
     510            IFNOTMEMCPY(` 
     511                default: 
     512                    *dst = *src; 
     513            ') 
     514        ', ` 
     515        case IS_VAR: 
     516        case IS_TMP_VAR: 
     517        case IS_CV: 
     518            DISPATCH(zend_uint, $1.var) 
     519            break; 
     520        case IS_UNUSED: 
     521            IFDASM(`DISPATCH(zend_uint, $1.var)') 
     522            DISPATCH(zend_uint, $1.opline_num) 
     523            break; 
     524        ') 
     525    } 
     526    ') 
     527    DONE($1) 
     528') 
     529dnl }}} 
     530#else 
    418531DEF_STRUCT_P_FUNC(`znode', , `dnl {{{ 
    419532    DISPATCH(int, op_type) 
     
    460573    ') 
    461574    DONE(u) 
     575#if 0 
     576    DONE(EA) 
     577#endif 
    462578#undef XCACHE_IS_CV 
    463579') 
    464580dnl }}} 
     581#endif 
    465582DEF_STRUCT_P_FUNC(`zend_op', , `dnl {{{ 
    466583    DISPATCH(zend_uchar, opcode) 
     584#ifdef ZEND_ENGINE_2_4 
     585    UNION_znode_op(result) 
     586    UNION_znode_op(op1) 
     587    UNION_znode_op(op2) 
     588#else 
    467589    STRUCT(znode, result) 
    468590    STRUCT(znode, op1) 
    469591    STRUCT(znode, op2) 
     592#endif 
    470593    DISPATCH(ulong, extended_value) 
    471594    DISPATCH(uint, lineno) 
    472595#ifdef ZEND_ENGINE_2_1 
     596#ifdef ZEND_ENGINE_2_4 
     597    DISPATCH(zend_uchar, op1_type) 
     598    DISPATCH(zend_uchar, op2_type) 
     599    DISPATCH(zend_uchar, result_type) 
     600#endif 
    473601    IFCOPY(` 
    474602        switch (src->opcode) { 
     
    477605#endif 
    478606            case ZEND_JMP: 
    479                 dst->op1.u.jmp_addr = processor->active_opcodes_dst + (src->op1.u.jmp_addr - processor->active_opcodes_src); 
     607                Z_OP(dst->op1).jmp_addr = processor->active_opcodes_dst + (Z_OP(src->op1).jmp_addr - processor->active_opcodes_src); 
    480608                break; 
    481609 
     
    487615            case ZEND_JMP_SET: 
    488616#endif 
    489                 dst->op2.u.jmp_addr = processor->active_opcodes_dst + (src->op2.u.jmp_addr - processor->active_opcodes_src); 
     617                Z_OP(dst->op2).jmp_addr = processor->active_opcodes_dst + (Z_OP(src->op2).jmp_addr - processor->active_opcodes_src); 
    490618                break; 
    491619 
     
    498626') 
    499627dnl }}} 
     628#ifdef ZEND_ENGINE_2_4 
     629DEF_STRUCT_P_FUNC(`zend_literal', , `dnl {{{ 
     630    STRUCT(zval, constant) 
     631    DISPATCH(zend_ulong, hash_value) 
     632    DISPATCH(zend_uint,  cache_slot) 
     633') 
     634dnl }}} 
     635#endif 
    500636DEF_STRUCT_P_FUNC(`zend_op_array', , `dnl {{{ 
    501637    IFRESTORE(` 
     
    552688    DISPATCH(zend_uint, num_args) 
    553689    DISPATCH(zend_uint, required_num_args) 
     690#   ifndef ZEND_ENGINE_2_4 
    554691    DISPATCH(zend_bool, pass_rest_by_reference) 
     692#   endif 
    555693#else 
    556694    if (src->arg_types) { 
     
    583721    } 
    584722#endif 
     723#ifndef ZEND_ENGINE_2_4 
    585724    DISPATCH(unsigned char, return_reference) 
     725#endif 
    586726    /* END of common elements */ 
    587727#ifdef IS_UNICODE 
     
    600740    popdef(`AFTER_ALLOC') 
    601741    DISPATCH(zend_uint, last) 
     742#ifndef ZEND_ENGINE_2_4 
    602743    IFCOPY(`dst->size = src->last;DONE(size)', `DISPATCH(zend_uint, size)') 
     744#endif 
    603745 
    604746#ifdef IS_CV 
    605747    STRUCT_ARRAY(last_var, zend_compiled_variable, vars) 
    606748    DISPATCH(int, last_var) 
     749#   ifndef ZEND_ENGINE_2_4 
    607750    IFCOPY(`dst->size_var = src->last_var;DONE(size_var)', `DISPATCH(zend_uint, size_var)') 
     751#   endif 
    608752#else 
    609753    dnl zend_cv.m4 is illegal to be made public, don not ask me for it 
     
    617761    STRUCT_ARRAY(last_brk_cont, zend_brk_cont_element, brk_cont_array) 
    618762    DISPATCH(zend_uint, last_brk_cont) 
     763#ifndef ZEND_ENGINE_2_4 
    619764    DISPATCH(zend_uint, current_brk_cont) 
     765#endif 
    620766#ifndef ZEND_ENGINE_2 
    621767    DISPATCH(zend_bool, uses_globals) 
     
    629775    STRUCT_P(HashTable, static_variables, HashTable_zval_ptr) 
    630776 
     777#ifndef ZEND_ENGINE_2_4 
    631778    COPY(start_op) 
    632779    DISPATCH(int, backpatch_count) 
     780#endif 
    633781#ifdef ZEND_ENGINE_2_3 
    634782    DISPATCH(zend_uint, this_var) 
    635783#endif 
    636784 
     785#ifndef ZEND_ENGINE_2_4 
    637786    DISPATCH(zend_bool, done_pass_two) 
     787#endif 
    638788    /* 5.0 <= ver < 5.3 */ 
    639789#if defined(ZEND_ENGINE_2) && !defined(ZEND_ENGINE_2_3) 
     
    697847            ') 
    698848    ') 
     849#ifdef ZEND_ENGINE_2_4 
     850    DISPATCH(int, last_literal) 
     851    IFRESTORE(`COPY(literals)', `STRUCT_ARRAY(last_literal, zend_literal, literals)') 
     852 
     853    COPYNULL(run_time_cache) 
     854    COPYNULL(last_cache_slot) 
     855#endif 
     856 
    699857#endif 
    700858 
Note: See TracChangeset for help on using the changeset viewer.