Changeset 822 for trunk/utils.c


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

initial PHP_5_4 support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/utils.c

    r785 r822  
    1919#endif 
    2020 
    21 #define OP_ZVAL_DTOR(op) do { \ 
    22     Z_UNSET_ISREF(Z_OP_CONSTANT(op)); \ 
    23     zval_dtor(&Z_OP_CONSTANT(op)); \ 
    24 } while(0) 
     21#ifdef ZEND_ENGINE_2_4 
     22#   define OP_ZVAL_DTOR(op) do { } while(0) 
     23#else 
     24#   define OP_ZVAL_DTOR(op) do { \ 
     25        Z_UNSET_ISREF(Z_OP_CONSTANT(op)); \ 
     26        zval_dtor(&Z_OP_CONSTANT(op)); \ 
     27    } while(0) 
     28#endif 
    2529xc_compile_result_t *xc_compile_result_init(xc_compile_result_t *cr, /* {{{ */ 
    2630        zend_op_array *op_array, 
     
    130134} 
    131135/* }}} */ 
    132  
    133136int xc_undo_pass_two(zend_op_array *op_array TSRMLS_DC) /* {{{ */ 
    134137{ 
    135138    zend_op *opline, *end; 
    136139 
    137 #ifndef ZEND_ENGINE_2_4 
     140#ifdef ZEND_ENGINE_2_4 
     141    if (!(op_array->fn_flags & ZEND_ACC_DONE_PASS_TWO)) { 
     142        return 0; 
     143    } 
     144#else 
    138145    if (!op_array->done_pass_two) { 
    139146        return 0; 
     
    144151    end = opline + op_array->last; 
    145152    while (opline < end) { 
     153#ifdef ZEND_ENGINE_2_4 
     154        if (opline->op1_type == IS_CONST) { 
     155            opline->op1.constant = opline->op1.literal - op_array->literals; 
     156        } 
     157        if (opline->op2_type == IS_CONST) { 
     158            opline->op2.constant = opline->op2.literal - op_array->literals; 
     159        } 
     160#endif 
     161 
    146162#ifdef ZEND_ENGINE_2_1 
    147163        switch (opline->opcode) { 
     
    167183        opline++; 
    168184    } 
    169 #ifndef ZEND_ENGINE_2_4 
     185#ifdef ZEND_ENGINE_2_4 
     186    op_array->fn_flags &= ~ZEND_ACC_DONE_PASS_TWO; 
     187#else 
    170188    op_array->done_pass_two = 0; 
    171189#endif 
     
    177195{ 
    178196    zend_op *opline, *end; 
    179  
    180 #ifndef ZEND_ENGINE_2_4 
     197#ifdef ZEND_ENGINE_2_4 
     198    zend_literal *literal = op_array->literals; 
     199#endif 
     200 
     201#ifdef ZEND_ENGINE_2_4 
     202    if ((op_array->fn_flags & ZEND_ACC_DONE_PASS_TWO)) { 
     203        return 0; 
     204    } 
     205#else 
    181206    if (op_array->done_pass_two) { 
    182207        return 0; 
     
    188213    op_array->size = op_array->last; 
    189214    */ 
     215#ifdef ZEND_ENGINE_2_4 
     216    if (literal) { 
     217        zend_literal *end = literal + op_array->last_literal; 
     218        while (literal < end) { 
     219            Z_SET_ISREF(literal->constant); 
     220            Z_SET_REFCOUNT(literal->constant, 2); /* Make sure is_ref won't be reset */ 
     221            literal++; 
     222        } 
     223    } 
     224#endif 
    190225 
    191226    opline = op_array->opcodes; 
    192227    end = opline + op_array->last; 
    193228    while (opline < end) { 
     229#ifndef ZEND_ENGINE_2_4 
    194230        if (Z_OP_TYPE(opline->op1) == IS_CONST) { 
    195231            Z_SET_ISREF(Z_OP_CONSTANT(opline->op1)); 
    196232            Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op1), 2); /* Make sure is_ref won't be reset */ 
    197  
    198233        } 
    199234        if (Z_OP_TYPE(opline->op2) == IS_CONST) { 
     
    201236            Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op2), 2); 
    202237        } 
     238#endif 
    203239#ifdef ZEND_ENGINE_2_1 
    204240        switch (opline->opcode) { 
     
    226262    } 
    227263 
    228 #ifndef ZEND_ENGINE_2_4 
     264#ifdef ZEND_ENGINE_2_4 
     265    op_array->fn_flags |= ZEND_ACC_DONE_PASS_TWO; 
     266#else 
    229267    op_array->done_pass_two = 1; 
    230268#endif 
Note: See TracChangeset for help on using the changeset viewer.