32
32
/* Checks if a constant (like "true") may be replaced by its value */
33
33
bool zend_optimizer_get_persistent_constant (zend_string * name , zval * result , bool copy )
34
34
{
35
- zend_constant * c = zend_hash_find_ptr (EG (zend_constants ), name );
35
+ const zend_constant * c = zend_hash_find_ptr (EG (zend_constants ), name );
36
36
if (c ) {
37
37
if ((ZEND_CONSTANT_FLAGS (c ) & CONST_PERSISTENT )
38
38
&& !(ZEND_CONSTANT_FLAGS (c ) & CONST_DEPRECATED )
@@ -62,17 +62,17 @@ bool zend_optimizer_get_persistent_constant(zend_string *name, zval *result, boo
62
62
#define VAR_SOURCE (op ) Tsource[VAR_NUM(op.var)]
63
63
#define SET_VAR_SOURCE (opline ) Tsource[VAR_NUM(opline->result.var)] = opline
64
64
65
- static void strip_leading_nops (zend_op_array * op_array , zend_basic_block * b )
65
+ static void strip_leading_nops (const zend_op_array * op_array , zend_basic_block * b )
66
66
{
67
- zend_op * opcodes = op_array -> opcodes ;
67
+ const zend_op * opcodes = op_array -> opcodes ;
68
68
69
69
do {
70
70
b -> start ++ ;
71
71
b -> len -- ;
72
72
} while (b -> len > 0 && opcodes [b -> start ].opcode == ZEND_NOP );
73
73
}
74
74
75
- static void strip_nops (zend_op_array * op_array , zend_basic_block * b )
75
+ static void strip_nops (const zend_op_array * op_array , zend_basic_block * b )
76
76
{
77
77
uint32_t i , j ;
78
78
@@ -106,7 +106,7 @@ static void strip_nops(zend_op_array *op_array, zend_basic_block *b)
106
106
}
107
107
}
108
108
109
- static int get_const_switch_target (zend_cfg * cfg , zend_op_array * op_array , zend_basic_block * block , zend_op * opline , zval * val ) {
109
+ static int get_const_switch_target (const zend_cfg * cfg , const zend_op_array * op_array , const zend_basic_block * block , zend_op * opline , const zval * val ) {
110
110
HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
111
111
zval * zv ;
112
112
if ((opline -> opcode == ZEND_SWITCH_LONG && Z_TYPE_P (val ) != IS_LONG )
@@ -1009,10 +1009,10 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
1009
1009
}
1010
1010
1011
1011
/* Rebuild plain (optimized) op_array from CFG */
1012
- static void assemble_code_blocks (zend_cfg * cfg , zend_op_array * op_array , zend_optimizer_ctx * ctx )
1012
+ static void assemble_code_blocks (const zend_cfg * cfg , zend_op_array * op_array , zend_optimizer_ctx * ctx )
1013
1013
{
1014
1014
zend_basic_block * blocks = cfg -> blocks ;
1015
- zend_basic_block * end = blocks + cfg -> blocks_count ;
1015
+ const zend_basic_block * end = blocks + cfg -> blocks_count ;
1016
1016
zend_basic_block * b ;
1017
1017
zend_op * new_opcodes ;
1018
1018
zend_op * opline ;
@@ -1025,7 +1025,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
1025
1025
if (b -> flags & (ZEND_BB_REACHABLE |ZEND_BB_UNREACHABLE_FREE )) {
1026
1026
opline = op_array -> opcodes + b -> start + b -> len - 1 ;
1027
1027
if (opline -> opcode == ZEND_JMP ) {
1028
- zend_basic_block * next = b + 1 ;
1028
+ const zend_basic_block * next = b + 1 ;
1029
1029
1030
1030
while (next < end && !(next -> flags & ZEND_BB_REACHABLE )) {
1031
1031
next ++ ;
@@ -1042,8 +1042,8 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
1042
1042
len += b -> len ;
1043
1043
} else {
1044
1044
/* this block will not be used, delete all constants there */
1045
- zend_op * op = op_array -> opcodes + b -> start ;
1046
- zend_op * end = op + b -> len ;
1045
+ const zend_op * op = op_array -> opcodes + b -> start ;
1046
+ const zend_op * end = op + b -> len ;
1047
1047
for (; op < end ; op ++ ) {
1048
1048
if (op -> op1_type == IS_CONST ) {
1049
1049
literal_dtor (& ZEND_OP1_LITERAL (op ));
@@ -1109,7 +1109,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
1109
1109
case ZEND_SWITCH_STRING :
1110
1110
case ZEND_MATCH :
1111
1111
{
1112
- HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
1112
+ const HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
1113
1113
zval * zv ;
1114
1114
uint32_t s = 0 ;
1115
1115
ZEND_ASSERT (b -> successors_count == (opline -> opcode == ZEND_MATCH ? 1 : 2 ) + zend_hash_num_elements (jumptable ));
@@ -1161,7 +1161,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
1161
1161
1162
1162
if (op_array -> fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK ) {
1163
1163
zend_op * opline = new_opcodes ;
1164
- zend_op * end = opline + len ;
1164
+ const zend_op * end = opline + len ;
1165
1165
while (opline < end ) {
1166
1166
if (opline -> opcode == ZEND_FAST_RET &&
1167
1167
opline -> op2 .num != (uint32_t )-1 &&
@@ -1184,7 +1184,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op
1184
1184
}
1185
1185
}
1186
1186
1187
- static zend_always_inline zend_basic_block * get_target_block (const zend_cfg * cfg , zend_basic_block * block , int n , uint32_t * opt_count )
1187
+ static zend_always_inline zend_basic_block * get_target_block (const zend_cfg * cfg , const zend_basic_block * block , int n , uint32_t * opt_count )
1188
1188
{
1189
1189
int b ;
1190
1190
zend_basic_block * target_block = cfg -> blocks + block -> successors [n ];
@@ -1200,7 +1200,7 @@ static zend_always_inline zend_basic_block *get_target_block(const zend_cfg *cfg
1200
1200
return target_block ;
1201
1201
}
1202
1202
1203
- static zend_always_inline zend_basic_block * get_follow_block (const zend_cfg * cfg , zend_basic_block * block , int n , uint32_t * opt_count )
1203
+ static zend_always_inline zend_basic_block * get_follow_block (const zend_cfg * cfg , const zend_basic_block * block , int n , uint32_t * opt_count )
1204
1204
{
1205
1205
int b ;
1206
1206
zend_basic_block * target_block = cfg -> blocks + block -> successors [n ];
@@ -1219,7 +1219,7 @@ static zend_always_inline zend_basic_block *get_follow_block(const zend_cfg *cfg
1219
1219
static zend_always_inline zend_basic_block * get_next_block (const zend_cfg * cfg , zend_basic_block * block )
1220
1220
{
1221
1221
zend_basic_block * next_block = block + 1 ;
1222
- zend_basic_block * end = cfg -> blocks + cfg -> blocks_count ;
1222
+ const zend_basic_block * end = cfg -> blocks + cfg -> blocks_count ;
1223
1223
1224
1224
while (1 ) {
1225
1225
if (next_block == end ) {
@@ -1237,7 +1237,7 @@ static zend_always_inline zend_basic_block *get_next_block(const zend_cfg *cfg,
1237
1237
1238
1238
1239
1239
/* we use "jmp_hitlist" to avoid infinity loops during jmp optimization */
1240
- static zend_always_inline bool in_hitlist (int target , int * jmp_hitlist , int jmp_hitlist_count )
1240
+ static zend_always_inline bool in_hitlist (int target , const int * jmp_hitlist , int jmp_hitlist_count )
1241
1241
{
1242
1242
int i ;
1243
1243
@@ -1483,7 +1483,7 @@ static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_arr
1483
1483
1484
1484
/* Find a set of variables which are used outside of the block where they are
1485
1485
* defined. We won't apply some optimization patterns for such variables. */
1486
- static void zend_t_usage (zend_cfg * cfg , zend_op_array * op_array , zend_bitset used_ext , zend_optimizer_ctx * ctx )
1486
+ static void zend_t_usage (const zend_cfg * cfg , const zend_op_array * op_array , zend_bitset used_ext , zend_optimizer_ctx * ctx )
1487
1487
{
1488
1488
int n ;
1489
1489
zend_basic_block * block , * next_block ;
@@ -1687,7 +1687,7 @@ static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset use
1687
1687
zend_arena_release (& ctx -> arena , checkpoint );
1688
1688
}
1689
1689
1690
- static void zend_merge_blocks (zend_op_array * op_array , zend_cfg * cfg , uint32_t * opt_count )
1690
+ static void zend_merge_blocks (const zend_op_array * op_array , const zend_cfg * cfg , uint32_t * opt_count )
1691
1691
{
1692
1692
int i ;
1693
1693
zend_basic_block * b , * bb ;
@@ -1707,7 +1707,7 @@ static void zend_merge_blocks(zend_op_array *op_array, zend_cfg *cfg, uint32_t *
1707
1707
1708
1708
for (bb = prev + 1 ; bb != b ; bb ++ ) {
1709
1709
zend_op * op = op_array -> opcodes + bb -> start ;
1710
- zend_op * end = op + bb -> len ;
1710
+ const zend_op * end = op + bb -> len ;
1711
1711
while (op < end ) {
1712
1712
if (op -> op1_type == IS_CONST ) {
1713
1713
literal_dtor (& ZEND_OP1_LITERAL (op ));
0 commit comments