Changeset 822 in svn for trunk/utils.c


Ignore:
Timestamp:
2012-03-22T17:22:37+01:00 (3 years ago)
Author:
Xuefer
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.