@@ -266,7 +266,7 @@ typedef struct _zend_scc_iterator {
266
266
};
267
267
} zend_scc_iterator ;
268
268
269
- static int zend_scc_next (const zend_op_array * op_array , zend_ssa * ssa , int var , zend_scc_iterator * iterator ) /* {{{ */
269
+ static int zend_scc_next (const zend_op_array * op_array , const zend_ssa * ssa , int var , zend_scc_iterator * iterator ) /* {{{ */
270
270
{
271
271
zend_ssa_phi * phi ;
272
272
int use , var2 ;
@@ -487,14 +487,14 @@ ZEND_API void zend_ssa_find_sccs(const zend_op_array *op_array, zend_ssa *ssa) /
487
487
488
488
#endif
489
489
490
- ZEND_API void zend_ssa_find_false_dependencies (const zend_op_array * op_array , zend_ssa * ssa ) /* {{{ */
490
+ ZEND_API void zend_ssa_find_false_dependencies (const zend_op_array * op_array , const zend_ssa * ssa ) /* {{{ */
491
491
{
492
492
zend_ssa_var * ssa_vars = ssa -> vars ;
493
- zend_ssa_op * ssa_ops = ssa -> ops ;
493
+ const zend_ssa_op * ssa_ops = ssa -> ops ;
494
494
int ssa_vars_count = ssa -> vars_count ;
495
495
zend_bitset worklist ;
496
496
int i , j , use ;
497
- zend_ssa_phi * p ;
497
+ const zend_ssa_phi * p ;
498
498
ALLOCA_FLAG (use_heap );
499
499
500
500
if (!op_array -> function_name || !ssa -> vars || !ssa -> ops ) {
@@ -1597,7 +1597,7 @@ ZEND_API bool zend_inference_propagate_range(const zend_op_array *op_array, cons
1597
1597
return 0 ;
1598
1598
}
1599
1599
1600
- static void zend_inference_init_range (const zend_op_array * op_array , zend_ssa * ssa , int var , bool underflow , zend_long min , zend_long max , bool overflow )
1600
+ static void zend_inference_init_range (const zend_op_array * op_array , const zend_ssa * ssa , int var , bool underflow , zend_long min , zend_long max , bool overflow )
1601
1601
{
1602
1602
if (underflow ) {
1603
1603
min = ZEND_LONG_MIN ;
@@ -1645,7 +1645,7 @@ static bool zend_inference_widening_meet(zend_ssa_var_info *var_info, zend_ssa_r
1645
1645
return 1 ;
1646
1646
}
1647
1647
1648
- static bool zend_ssa_range_widening (const zend_op_array * op_array , zend_ssa * ssa , int var , int scc )
1648
+ static bool zend_ssa_range_widening (const zend_op_array * op_array , const zend_ssa * ssa , int var , int scc )
1649
1649
{
1650
1650
zend_ssa_range tmp ;
1651
1651
@@ -1690,7 +1690,7 @@ static bool zend_inference_narrowing_meet(zend_ssa_var_info *var_info, zend_ssa_
1690
1690
return 1 ;
1691
1691
}
1692
1692
1693
- static bool zend_ssa_range_narrowing (const zend_op_array * op_array , zend_ssa * ssa , int var , int scc )
1693
+ static bool zend_ssa_range_narrowing (const zend_op_array * op_array , const zend_ssa * ssa , int var , int scc )
1694
1694
{
1695
1695
zend_ssa_range tmp ;
1696
1696
@@ -2029,18 +2029,18 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
2029
2029
} \
2030
2030
} while (0)
2031
2031
2032
- static void add_usages (const zend_op_array * op_array , zend_ssa * ssa , zend_bitset worklist , int var )
2032
+ static void add_usages (const zend_op_array * op_array , const zend_ssa * ssa , zend_bitset worklist , int var )
2033
2033
{
2034
2034
if (ssa -> vars [var ].phi_use_chain ) {
2035
- zend_ssa_phi * p = ssa -> vars [var ].phi_use_chain ;
2035
+ const zend_ssa_phi * p = ssa -> vars [var ].phi_use_chain ;
2036
2036
do {
2037
2037
zend_bitset_incl (worklist , p -> ssa_var );
2038
2038
p = zend_ssa_next_use_phi (ssa , var , p );
2039
2039
} while (p );
2040
2040
}
2041
2041
if (ssa -> vars [var ].use_chain >= 0 ) {
2042
2042
int use = ssa -> vars [var ].use_chain ;
2043
- zend_ssa_op * op ;
2043
+ const zend_ssa_op * op ;
2044
2044
2045
2045
do {
2046
2046
op = ssa -> ops + use ;
@@ -2082,7 +2082,7 @@ static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset
2082
2082
}
2083
2083
}
2084
2084
2085
- static void emit_type_narrowing_warning (const zend_op_array * op_array , zend_ssa * ssa , int var )
2085
+ static void emit_type_narrowing_warning (const zend_op_array * op_array , const zend_ssa * ssa , int var )
2086
2086
{
2087
2087
int def_op_num = ssa -> vars [var ].definition ;
2088
2088
const zend_op * def_opline = def_op_num >= 0 ? & op_array -> opcodes [def_op_num ] : NULL ;
@@ -2258,7 +2258,7 @@ static uint32_t assign_dim_result_type(
2258
2258
2259
2259
/* For binary ops that have compound assignment operators */
2260
2260
static uint32_t binary_op_result_type (
2261
- zend_ssa * ssa , uint8_t opcode , uint32_t t1 , uint32_t t2 , int result_var ,
2261
+ const zend_ssa * ssa , uint8_t opcode , uint32_t t1 , uint32_t t2 , int result_var ,
2262
2262
zend_long optimization_level ) {
2263
2263
uint32_t tmp = 0 ;
2264
2264
uint32_t t1_type = (t1 & MAY_BE_ANY ) | (t1 & MAY_BE_UNDEF ? MAY_BE_NULL : 0 );
@@ -2435,7 +2435,7 @@ static const zend_property_info *lookup_prop_info(const zend_class_entry *ce, ze
2435
2435
return NULL ;
2436
2436
}
2437
2437
2438
- static const zend_property_info * zend_fetch_prop_info (const zend_op_array * op_array , zend_ssa * ssa , const zend_op * opline , const zend_ssa_op * ssa_op )
2438
+ static const zend_property_info * zend_fetch_prop_info (const zend_op_array * op_array , const zend_ssa * ssa , const zend_op * opline , const zend_ssa_op * ssa_op )
2439
2439
{
2440
2440
const zend_property_info * prop_info = NULL ;
2441
2441
if (opline -> op2_type == IS_CONST ) {
@@ -2462,7 +2462,7 @@ static const zend_property_info *zend_fetch_static_prop_info(const zend_script *
2462
2462
{
2463
2463
const zend_property_info * prop_info = NULL ;
2464
2464
if (opline -> op1_type == IS_CONST ) {
2465
- zend_class_entry * ce = NULL ;
2465
+ const zend_class_entry * ce = NULL ;
2466
2466
if (opline -> op2_type == IS_UNUSED ) {
2467
2467
uint32_t fetch_type = opline -> op2 .num & ZEND_FETCH_CLASS_MASK ;
2468
2468
switch (fetch_type ) {
@@ -2479,12 +2479,12 @@ static const zend_property_info *zend_fetch_static_prop_info(const zend_script *
2479
2479
break ;
2480
2480
}
2481
2481
} else if (opline -> op2_type == IS_CONST ) {
2482
- zval * zv = CRT_CONSTANT (opline -> op2 );
2482
+ const zval * zv = CRT_CONSTANT (opline -> op2 );
2483
2483
ce = zend_optimizer_get_class_entry (script , op_array , Z_STR_P (zv + 1 ));
2484
2484
}
2485
2485
2486
2486
if (ce ) {
2487
- zval * zv = CRT_CONSTANT (opline -> op1 );
2487
+ const zval * zv = CRT_CONSTANT (opline -> op1 );
2488
2488
prop_info = lookup_prop_info (ce , Z_STR_P (zv ), op_array -> scope );
2489
2489
if (prop_info && !(prop_info -> flags & ZEND_ACC_STATIC )) {
2490
2490
prop_info = NULL ;
@@ -2506,13 +2506,13 @@ static uint32_t zend_fetch_prop_type(const zend_script *script, const zend_prope
2506
2506
return zend_convert_type (script , prop_info -> type , pce );
2507
2507
}
2508
2508
2509
- static bool result_may_be_separated (zend_ssa * ssa , zend_ssa_op * ssa_op )
2509
+ static bool result_may_be_separated (const zend_ssa * ssa , const zend_ssa_op * ssa_op )
2510
2510
{
2511
2511
int tmp_var = ssa_op -> result_def ;
2512
2512
2513
2513
if (ssa -> vars [tmp_var ].use_chain >= 0
2514
2514
&& !ssa -> vars [tmp_var ].phi_use_chain ) {
2515
- zend_ssa_op * use_op = & ssa -> ops [ssa -> vars [tmp_var ].use_chain ];
2515
+ const zend_ssa_op * use_op = & ssa -> ops [ssa -> vars [tmp_var ].use_chain ];
2516
2516
2517
2517
/* TODO: analyze instructions between ssa_op and use_op */
2518
2518
if (use_op == ssa_op + 1 ) {
@@ -3028,7 +3028,7 @@ static zend_always_inline zend_result _zend_update_type_info(
3028
3028
break ;
3029
3029
case ZEND_ASSIGN_OBJ :
3030
3030
if (opline -> op1_type == IS_CV ) {
3031
- zend_class_entry * ce = ssa_var_info [ssa_op -> op1_use ].ce ;
3031
+ const zend_class_entry * ce = ssa_var_info [ssa_op -> op1_use ].ce ;
3032
3032
bool add_rc = (t1 & (MAY_BE_OBJECT |MAY_BE_REF )) && (!ce
3033
3033
|| ce -> __set
3034
3034
/* Non-default write_property may be set within create_object. */
@@ -4120,7 +4120,7 @@ ZEND_API zend_result zend_update_type_info(
4120
4120
const zend_op_array * op_array ,
4121
4121
zend_ssa * ssa ,
4122
4122
const zend_script * script ,
4123
- zend_op * opline ,
4123
+ const zend_op * opline ,
4124
4124
zend_ssa_op * ssa_op ,
4125
4125
const zend_op * * ssa_opcodes ,
4126
4126
zend_long optimization_level )
@@ -4129,7 +4129,7 @@ ZEND_API zend_result zend_update_type_info(
4129
4129
false);
4130
4130
}
4131
4131
4132
- static uint32_t get_class_entry_rank (zend_class_entry * ce ) {
4132
+ static uint32_t get_class_entry_rank (const zend_class_entry * ce ) {
4133
4133
uint32_t rank = 0 ;
4134
4134
if (ce -> ce_flags & ZEND_ACC_LINKED ) {
4135
4135
while (ce -> parent ) {
@@ -4175,7 +4175,7 @@ static zend_class_entry *join_class_entries(
4175
4175
return ce1 ;
4176
4176
}
4177
4177
4178
- static bool safe_instanceof (zend_class_entry * ce1 , zend_class_entry * ce2 ) {
4178
+ static bool safe_instanceof (const zend_class_entry * ce1 , const zend_class_entry * ce2 ) {
4179
4179
if (ce1 == ce2 ) {
4180
4180
return 1 ;
4181
4181
}
@@ -4188,7 +4188,7 @@ static bool safe_instanceof(zend_class_entry *ce1, zend_class_entry *ce2) {
4188
4188
4189
4189
static zend_result zend_infer_types_ex (const zend_op_array * op_array , const zend_script * script , zend_ssa * ssa , zend_bitset worklist , zend_long optimization_level )
4190
4190
{
4191
- zend_basic_block * blocks = ssa -> cfg .blocks ;
4191
+ const zend_basic_block * blocks = ssa -> cfg .blocks ;
4192
4192
zend_ssa_var * ssa_vars = ssa -> vars ;
4193
4193
zend_ssa_var_info * ssa_var_info = ssa -> var_info ;
4194
4194
int ssa_vars_count = ssa -> vars_count ;
@@ -4208,7 +4208,7 @@ static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend
4208
4208
tmp = get_ssa_var_info (ssa , p -> sources [0 ]);
4209
4209
4210
4210
if (!p -> has_range_constraint ) {
4211
- zend_ssa_type_constraint * constraint = & p -> constraint .type ;
4211
+ const zend_ssa_type_constraint * constraint = & p -> constraint .type ;
4212
4212
tmp &= constraint -> type_mask ;
4213
4213
if (!(tmp & (MAY_BE_STRING |MAY_BE_ARRAY |MAY_BE_OBJECT |MAY_BE_RESOURCE ))) {
4214
4214
tmp &= ~(MAY_BE_RC1 |MAY_BE_RCN );
@@ -4270,18 +4270,18 @@ static zend_result zend_infer_types_ex(const zend_op_array *op_array, const zend
4270
4270
return SUCCESS ;
4271
4271
}
4272
4272
4273
- static bool is_narrowable_instr (zend_op * opline ) {
4273
+ static bool is_narrowable_instr (const zend_op * opline ) {
4274
4274
return opline -> opcode == ZEND_ADD || opline -> opcode == ZEND_SUB
4275
4275
|| opline -> opcode == ZEND_MUL || opline -> opcode == ZEND_DIV ;
4276
4276
}
4277
4277
4278
- static bool is_effective_op1_double_cast (zend_op * opline , zval * op2 ) {
4278
+ static bool is_effective_op1_double_cast (const zend_op * opline , const zval * op2 ) {
4279
4279
return (opline -> opcode == ZEND_ADD && Z_LVAL_P (op2 ) == 0 )
4280
4280
|| (opline -> opcode == ZEND_SUB && Z_LVAL_P (op2 ) == 0 )
4281
4281
|| (opline -> opcode == ZEND_MUL && Z_LVAL_P (op2 ) == 1 )
4282
4282
|| (opline -> opcode == ZEND_DIV && Z_LVAL_P (op2 ) == 1 );
4283
4283
}
4284
- static bool is_effective_op2_double_cast (zend_op * opline , zval * op1 ) {
4284
+ static bool is_effective_op2_double_cast (const zend_op * opline , const zval * op1 ) {
4285
4285
/* In PHP it holds that (double)(0-$int) is bitwise identical to 0.0-(double)$int,
4286
4286
* so allowing SUB here is fine. */
4287
4287
return (opline -> opcode == ZEND_ADD && Z_LVAL_P (op1 ) == 0 )
@@ -4493,19 +4493,18 @@ static zend_result zend_type_narrowing(const zend_op_array *op_array, const zend
4493
4493
return SUCCESS ;
4494
4494
}
4495
4495
4496
- static bool is_recursive_tail_call (const zend_op_array * op_array ,
4497
- zend_op * opline )
4496
+ static bool is_recursive_tail_call (const zend_op_array * op_array , const zend_op * opline )
4498
4497
{
4499
- zend_func_info * info = ZEND_FUNC_INFO (op_array );
4498
+ const zend_func_info * info = ZEND_FUNC_INFO (op_array );
4500
4499
4501
4500
if (info -> ssa .ops && info -> ssa .vars && info -> call_map &&
4502
4501
info -> ssa .ops [opline - op_array -> opcodes ].op1_use >= 0 &&
4503
4502
info -> ssa .vars [info -> ssa .ops [opline - op_array -> opcodes ].op1_use ].definition >= 0 ) {
4504
4503
4505
- zend_op * op = op_array -> opcodes + info -> ssa .vars [info -> ssa .ops [opline - op_array -> opcodes ].op1_use ].definition ;
4504
+ const zend_op * op = op_array -> opcodes + info -> ssa .vars [info -> ssa .ops [opline - op_array -> opcodes ].op1_use ].definition ;
4506
4505
4507
4506
if (op -> opcode == ZEND_DO_UCALL ) {
4508
- zend_call_info * call_info = info -> call_map [op - op_array -> opcodes ];
4507
+ const zend_call_info * call_info = info -> call_map [op - op_array -> opcodes ];
4509
4508
if (call_info && op_array == & call_info -> callee_func -> op_array ) {
4510
4509
return 1 ;
4511
4510
}
@@ -4521,7 +4520,7 @@ uint32_t zend_get_return_info_from_signature_only(
4521
4520
if (func -> common .fn_flags & ZEND_ACC_HAS_RETURN_TYPE &&
4522
4521
(use_tentative_return_info || !ZEND_ARG_TYPE_IS_TENTATIVE (func -> common .arg_info - 1 ))
4523
4522
) {
4524
- zend_arg_info * ret_info = func -> common .arg_info - 1 ;
4523
+ const zend_arg_info * ret_info = func -> common .arg_info - 1 ;
4525
4524
type = zend_fetch_arg_info_type (script , ret_info , ce );
4526
4525
* ce_is_instanceof = ce != NULL ;
4527
4526
} else {
@@ -4561,10 +4560,10 @@ static void zend_func_return_info(const zend_op_array *op_array,
4561
4560
bool widening ,
4562
4561
zend_ssa_var_info * ret )
4563
4562
{
4564
- zend_func_info * info = ZEND_FUNC_INFO (op_array );
4565
- zend_ssa * ssa = & info -> ssa ;
4563
+ const zend_func_info * info = ZEND_FUNC_INFO (op_array );
4564
+ const zend_ssa * ssa = & info -> ssa ;
4566
4565
int blocks_count = info -> ssa .cfg .blocks_count ;
4567
- zend_basic_block * blocks = info -> ssa .cfg .blocks ;
4566
+ const zend_basic_block * blocks = info -> ssa .cfg .blocks ;
4568
4567
int j ;
4569
4568
uint32_t t1 ;
4570
4569
uint32_t tmp = 0 ;
@@ -4595,7 +4594,7 @@ static void zend_func_return_info(const zend_op_array *op_array,
4595
4594
zend_op * opline = op_array -> opcodes + blocks [j ].start + blocks [j ].len - 1 ;
4596
4595
4597
4596
if (opline -> opcode == ZEND_RETURN || opline -> opcode == ZEND_RETURN_BY_REF ) {
4598
- zend_ssa_op * ssa_op = ssa -> ops ? & ssa -> ops [opline - op_array -> opcodes ] : NULL ;
4597
+ const zend_ssa_op * ssa_op = ssa -> ops ? & ssa -> ops [opline - op_array -> opcodes ] : NULL ;
4599
4598
if (!recursive && ssa_op && info -> ssa .var_info &&
4600
4599
ssa_op -> op1_use >= 0 &&
4601
4600
info -> ssa .var_info [ssa_op -> op1_use ].recursive ) {
@@ -4642,7 +4641,7 @@ static void zend_func_return_info(const zend_op_array *op_array,
4642
4641
}
4643
4642
4644
4643
if (opline -> op1_type == IS_CONST ) {
4645
- zval * zv = CRT_CONSTANT (opline -> op1 );
4644
+ const zval * zv = CRT_CONSTANT (opline -> op1 );
4646
4645
4647
4646
if (Z_TYPE_P (zv ) == IS_LONG ) {
4648
4647
if (tmp_has_range < 0 ) {
@@ -4745,7 +4744,7 @@ static zend_result zend_infer_types(const zend_op_array *op_array, const zend_sc
4745
4744
return SUCCESS ;
4746
4745
}
4747
4746
4748
- static void zend_mark_cv_references (const zend_op_array * op_array , const zend_script * script , zend_ssa * ssa )
4747
+ static void zend_mark_cv_references (const zend_op_array * op_array , const zend_script * script , const zend_ssa * ssa )
4749
4748
{
4750
4749
int var , def ;
4751
4750
const zend_op * opline ;
0 commit comments