Changeset 822 for trunk/utils.c
- Timestamp:
- 03/22/2012 05:22:37 PM (14 months ago)
- Files:
-
- 1 modified
-
trunk/utils.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/utils.c
r785 r822 19 19 #endif 20 20 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 25 29 xc_compile_result_t *xc_compile_result_init(xc_compile_result_t *cr, /* {{{ */ 26 30 zend_op_array *op_array, … … 130 134 } 131 135 /* }}} */ 132 133 136 int xc_undo_pass_two(zend_op_array *op_array TSRMLS_DC) /* {{{ */ 134 137 { 135 138 zend_op *opline, *end; 136 139 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 138 145 if (!op_array->done_pass_two) { 139 146 return 0; … … 144 151 end = opline + op_array->last; 145 152 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 146 162 #ifdef ZEND_ENGINE_2_1 147 163 switch (opline->opcode) { … … 167 183 opline++; 168 184 } 169 #ifndef ZEND_ENGINE_2_4 185 #ifdef ZEND_ENGINE_2_4 186 op_array->fn_flags &= ~ZEND_ACC_DONE_PASS_TWO; 187 #else 170 188 op_array->done_pass_two = 0; 171 189 #endif … … 177 195 { 178 196 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 181 206 if (op_array->done_pass_two) { 182 207 return 0; … … 188 213 op_array->size = op_array->last; 189 214 */ 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 190 225 191 226 opline = op_array->opcodes; 192 227 end = opline + op_array->last; 193 228 while (opline < end) { 229 #ifndef ZEND_ENGINE_2_4 194 230 if (Z_OP_TYPE(opline->op1) == IS_CONST) { 195 231 Z_SET_ISREF(Z_OP_CONSTANT(opline->op1)); 196 232 Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op1), 2); /* Make sure is_ref won't be reset */ 197 198 233 } 199 234 if (Z_OP_TYPE(opline->op2) == IS_CONST) { … … 201 236 Z_SET_REFCOUNT(Z_OP_CONSTANT(opline->op2), 2); 202 237 } 238 #endif 203 239 #ifdef ZEND_ENGINE_2_1 204 240 switch (opline->opcode) { … … 226 262 } 227 263 228 #ifndef ZEND_ENGINE_2_4 264 #ifdef ZEND_ENGINE_2_4 265 op_array->fn_flags |= ZEND_ACC_DONE_PASS_TWO; 266 #else 229 267 op_array->done_pass_two = 1; 230 268 #endif

