File tree 1 file changed +34
-0
lines changed
1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change @@ -256,7 +256,41 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array,
256
256
zend_op * opline ,
257
257
zval * val )
258
258
{
259
+ zend_op * target_opline ;
260
+
259
261
switch (opline -> opcode ) {
262
+ case ZEND_JMPZ :
263
+ if (zend_is_true (val )) {
264
+ MAKE_NOP (opline );
265
+ } else {
266
+ opline -> opcode = ZEND_JMP ;
267
+ COPY_NODE (opline -> op1 , opline -> op2 );
268
+ opline -> op2_type = IS_UNUSED ;
269
+ }
270
+ zval_ptr_dtor_nogc (val );
271
+ return 1 ;
272
+ case ZEND_JMPNZ :
273
+ if (zend_is_true (val )) {
274
+ opline -> opcode = ZEND_JMP ;
275
+ COPY_NODE (opline -> op1 , opline -> op2 );
276
+ opline -> op2_type = IS_UNUSED ;
277
+ } else {
278
+ MAKE_NOP (opline );
279
+ }
280
+ zval_ptr_dtor_nogc (val );
281
+ return 1 ;
282
+ case ZEND_JMPZNZ :
283
+ if (zend_is_true (val )) {
284
+ target_opline = ZEND_OFFSET_TO_OPLINE (opline , opline -> extended_value );
285
+ } else {
286
+ target_opline = ZEND_OP2_JMP_ADDR (opline );
287
+ }
288
+ ZEND_SET_OP_JMP_ADDR (opline , opline -> op1 , target_opline );
289
+ opline -> op1_type = IS_UNUSED ;
290
+ opline -> extended_value = 0 ;
291
+ opline -> opcode = ZEND_JMP ;
292
+ zval_ptr_dtor_nogc (val );
293
+ return 1 ;
260
294
case ZEND_FREE :
261
295
MAKE_NOP (opline );
262
296
zval_ptr_dtor_nogc (val );
You can’t perform that action at this time.
0 commit comments