Ignore:
Timestamp:
2012-03-22T17:22:37+01:00 (3 years ago)
Author:
moo
Message:

initial PHP_5_4 support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/processor.m4

    r785 r822  
    486486undefine(`UNION_znode_op') 
    487487define(`UNION_znode_op', `dnl {{{ 
    488     switch ((src->$1_type & ~EXT_TYPE_UNUSED)) { 
     488#ifndef NDEBUG 
     489    switch ((src->$1_type ifelse($1, `result', & ~EXT_TYPE_UNUSED))) { 
    489490    case IS_CONST: 
    490491    case IS_VAR: 
     
    497498        assert(0); 
    498499    } 
     500#endif 
    499501 
    500502    dnl dirty dispatch 
    501503    DISABLECHECK(` 
    502     switch ((src->$1_type & ~EXT_TYPE_UNUSED)) { 
     504    switch ((src->$1_type ifelse($1, `result', & ~EXT_TYPE_UNUSED))) { 
    503505        case IS_CONST: 
    504             dnl TODO: fix me, use literals 
    505             IFDASM(`{ 
    506                 zval *zv; 
    507                 ALLOC_INIT_ZVAL(zv); 
    508                 *zv = ((zend_literal *) src->$1.ptr)->constant; 
    509                 zval_copy_ctor(zv); 
    510                 add_assoc_zval_ex(dst, ZEND_STRS("$1.constant"), zv); 
     506            ifelse($1, `result', ` 
     507                DISPATCH(zend_uint, $1.constant) 
     508            ', ` 
     509                IFDASM(`{ 
     510                    zval *zv; 
     511                    ALLOC_INIT_ZVAL(zv); 
     512                    *zv = src->$1.literal->constant; 
     513                    zval_copy_ctor(zv); 
     514                    add_assoc_zval_ex(dst, ZEND_STRS("$1.constant"), zv); 
    511515                } 
    512             ', ` 
    513                 DISPATCH(zend_uint, $1.constant) 
     516                ', ` 
     517                    IFCOPY(` 
     518                        dst->$1 = src->$1; 
     519                    ', ` 
     520                        DISPATCH(zend_uint, $1.constant) 
     521                    ') 
     522                ') 
    514523            ') 
    515524            break; 
     
    517526            IFNOTMEMCPY(` 
    518527                default: 
    519                     *dst = *src; 
     528                    $1 = $2; 
    520529            ') 
    521530        ', ` 
     
    607616#endif 
    608617    IFCOPY(` 
     618        pushdef(`UNION_znode_op_literal', ` 
     619            if (dst->$1_type == IS_CONST) { 
     620                IFSTORE(` 
     621                    dst->$1.constant = src->$1.literal - processor->active_op_array_src->literals; 
     622                    dst->$1.literal = &processor->active_op_array_dst->literals[dst->$1.constant]; 
     623                ') 
     624            } 
     625        ') 
     626        UNION_znode_op_literal(op1) 
     627        UNION_znode_op_literal(op2) 
     628        popdef(`UNION_znode_op_literal') 
    609629        switch (src->opcode) { 
    610630#ifdef ZEND_GOTO 
     
    659679    if (shallow_copy) { 
    660680        zend_bool gc_arg_info = 0; 
    661         int gc_opcodes        = 0; 
     681        zend_bool gc_opcodes  = 0; 
    662682        /* really fast shallow copy */ 
    663683        memcpy(dst, src, sizeof(src[0])); 
     
    669689        gc_arg_info = 1; 
    670690#endif 
    671         IFRESTORE(`dst->filename = processor->entry_src->filepath;') 
    672 #ifndef ZEND_ENGINE_2_4 
     691        dst->filename = processor->entry_src->filepath; 
     692#ifdef ZEND_ENGINE_2_4 
     693        if (src->literals /* || op_array_info->literalsinfo_cnt */) { 
     694            gc_opcodes = 1; 
     695        } 
     696#else 
    673697        if (op_array_info->oplineinfo_cnt) { 
     698            gc_opcodes = 1; 
     699        } 
     700#endif 
     701        if (gc_opcodes) { 
    674702            zend_op *opline, *end; 
    675             gc_opcodes = 1; 
    676703            COPY_N_EX(last, zend_op, opcodes) 
    677704 
    678705            for (opline = dst->opcodes, end = opline + src->last; opline < end; ++opline) { 
     706#ifdef ZEND_ENGINE_2_4 
     707                pushdef(`UNION_znode_op_literal', ` 
     708                    if (opline->$1_type == IS_CONST) { 
     709                        opline->$1.constant = opline->$1.literal - src->literals; 
     710                        opline->$1.literal = &dst->literals[opline->$1.constant]; 
     711                    } 
     712                ') 
     713                UNION_znode_op_literal(op1) 
     714                UNION_znode_op_literal(op2) 
     715                popdef(`UNION_znode_op_literal') 
     716#endif 
     717 
    679718                switch (opline->opcode) { 
    680719#ifdef ZEND_GOTO 
     
    700739            } 
    701740        } 
    702 #endif 
    703741        if (gc_arg_info || gc_opcodes) { 
    704742            xc_gc_op_array_t gc_op_array; 
     
    707745            gc_op_array.arg_info = gc_arg_info ? dst->arg_info : NULL; 
    708746#endif 
    709             gc_op_array.last     = gc_opcodes > 1 ? dst->last : 0; 
    710747            gc_op_array.opcodes  = gc_opcodes ? dst->opcodes : NULL; 
    711748            xc_gc_add_op_array(&gc_op_array TSRMLS_CC); 
     
    771808    IFSTORE(`dst->refcount[0] = 1;') 
    772809 
     810#ifdef ZEND_ENGINE_2_4 
     811    dnl before copying opcodes 
     812    DISPATCH(int, last_literal) 
     813    STRUCT_ARRAY(last_literal, zend_literal, literals) 
     814#endif 
     815 
    773816    pushdef(`AFTER_ALLOC', `IFCOPY(` 
    774817#ifndef NDEBUG 
     
    857900#endif 
    858901#ifdef ZEND_ENGINE_2_4 
    859     DISPATCH(int, last_literal) 
    860     IFRESTORE(`COPY(literals)', `STRUCT_ARRAY(last_literal, zend_literal, literals)') 
    861  
    862902    COPYNULL(run_time_cache) 
    863903    COPYNULL(last_cache_slot) 
Note: See TracChangeset for help on using the changeset viewer.