@@ -41,7 +41,7 @@ struct {
4141 int last ;
4242} zend_optimizer_registered_passes = {{NULL }, 0 };
4343
44- void zend_optimizer_collect_constant (zend_optimizer_ctx * ctx , zval * name , zval * value )
44+ void zend_optimizer_collect_constant (zend_optimizer_ctx * ctx , const zval * name , zval * value )
4545{
4646 if (!ctx -> constants ) {
4747 ctx -> constants = zend_arena_alloc (& ctx -> arena , sizeof (HashTable ));
@@ -103,11 +103,11 @@ zend_result zend_optimizer_eval_strlen(zval *result, const zval *op1) /* {{{ */
103103/* }}} */
104104
105105zend_result zend_optimizer_eval_special_func_call (
106- zval * result , zend_string * name , zend_string * arg ) {
106+ zval * result , const zend_string * name , zend_string * arg ) {
107107 if (zend_string_equals_literal (name , "function_exists" ) ||
108108 zend_string_equals_literal (name , "is_callable" )) {
109109 zend_string * lc_name = zend_string_tolower (arg );
110- zend_internal_function * func = zend_hash_find_ptr (EG (function_table ), lc_name );
110+ const zend_internal_function * func = zend_hash_find_ptr (EG (function_table ), lc_name );
111111 zend_string_release_ex (lc_name , 0 );
112112
113113 if (func && func -> type == ZEND_INTERNAL_FUNCTION
@@ -180,7 +180,7 @@ zend_result zend_optimizer_eval_special_func_call(
180180 return FAILURE ;
181181}
182182
183- bool zend_optimizer_get_collected_constant (HashTable * constants , zval * name , zval * value )
183+ bool zend_optimizer_get_collected_constant (const HashTable * constants , const zval * name , zval * value )
184184{
185185 zval * val ;
186186
@@ -191,7 +191,7 @@ bool zend_optimizer_get_collected_constant(HashTable *constants, zval *name, zva
191191 return false;
192192}
193193
194- void zend_optimizer_convert_to_free_op1 (zend_op_array * op_array , zend_op * opline )
194+ void zend_optimizer_convert_to_free_op1 (const zend_op_array * op_array , zend_op * opline )
195195{
196196 if (opline -> op1_type == IS_CV ) {
197197 opline -> opcode = ZEND_CHECK_VAR ;
@@ -603,7 +603,7 @@ bool zend_optimizer_replace_by_const(zend_op_array *op_array,
603603 uint32_t var ,
604604 zval * val )
605605{
606- zend_op * end = op_array -> opcodes + op_array -> last ;
606+ const zend_op * end = op_array -> opcodes + op_array -> last ;
607607
608608 while (opline < end ) {
609609 if (opline -> op1_type == type &&
@@ -622,7 +622,7 @@ bool zend_optimizer_replace_by_const(zend_op_array *op_array,
622622 case ZEND_MATCH :
623623 case ZEND_MATCH_ERROR :
624624 case ZEND_JMP_NULL : {
625- zend_op * end = op_array -> opcodes + op_array -> last ;
625+ const zend_op * end = op_array -> opcodes + op_array -> last ;
626626 while (opline < end ) {
627627 if (opline -> op1_type == type && opline -> op1 .var == var ) {
628628 /* If this opcode doesn't keep the operand alive, we're done. Check
@@ -653,7 +653,7 @@ bool zend_optimizer_replace_by_const(zend_op_array *op_array,
653653 return true;
654654 }
655655 case ZEND_VERIFY_RETURN_TYPE : {
656- zend_arg_info * ret_info = op_array -> arg_info - 1 ;
656+ const zend_arg_info * ret_info = op_array -> arg_info - 1 ;
657657 if (!ZEND_TYPE_CONTAINS_CODE (ret_info -> type , Z_TYPE_P (val ))
658658 || (op_array -> fn_flags & ZEND_ACC_RETURN_REFERENCE )) {
659659 return false;
@@ -685,7 +685,7 @@ bool zend_optimizer_replace_by_const(zend_op_array *op_array,
685685}
686686
687687/* Update jump offsets after a jump was migrated to another opline */
688- void zend_optimizer_migrate_jump (zend_op_array * op_array , zend_op * new_opline , zend_op * opline ) {
688+ void zend_optimizer_migrate_jump (const zend_op_array * op_array , zend_op * new_opline , zend_op * opline ) {
689689 switch (new_opline -> opcode ) {
690690 case ZEND_JMP :
691691 case ZEND_FAST_CALL :
@@ -718,7 +718,7 @@ void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_opline, z
718718 case ZEND_SWITCH_STRING :
719719 case ZEND_MATCH :
720720 {
721- HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
721+ const HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
722722 zval * zv ;
723723 ZEND_HASH_FOREACH_VAL (jumptable , zv ) {
724724 Z_LVAL_P (zv ) = ZEND_OPLINE_NUM_TO_OFFSET (op_array , new_opline , ZEND_OFFSET_TO_OPLINE_NUM (op_array , opline , Z_LVAL_P (zv )));
@@ -730,7 +730,7 @@ void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_opline, z
730730}
731731
732732/* Shift jump offsets based on shiftlist */
733- void zend_optimizer_shift_jump (zend_op_array * op_array , zend_op * opline , uint32_t * shiftlist ) {
733+ void zend_optimizer_shift_jump (const zend_op_array * op_array , zend_op * opline , const uint32_t * shiftlist ) {
734734 switch (opline -> opcode ) {
735735 case ZEND_JMP :
736736 case ZEND_FAST_CALL :
@@ -763,7 +763,7 @@ void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_
763763 case ZEND_SWITCH_STRING :
764764 case ZEND_MATCH :
765765 {
766- HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
766+ const HashTable * jumptable = Z_ARRVAL (ZEND_OP2_LITERAL (opline ));
767767 zval * zv ;
768768 ZEND_HASH_FOREACH_VAL (jumptable , zv ) {
769769 Z_LVAL_P (zv ) = ZEND_OPLINE_NUM_TO_OFFSET (op_array , opline , ZEND_OFFSET_TO_OPLINE_NUM (op_array , opline , Z_LVAL_P (zv )) - shiftlist [ZEND_OFFSET_TO_OPLINE_NUM (op_array , opline , Z_LVAL_P (zv ))]);
@@ -774,12 +774,12 @@ void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_
774774 }
775775}
776776
777- static bool zend_optimizer_ignore_class (zval * ce_zv , zend_string * filename )
777+ static bool zend_optimizer_ignore_class (zval * ce_zv , const zend_string * filename )
778778{
779- zend_class_entry * ce = Z_PTR_P (ce_zv );
779+ const zend_class_entry * ce = Z_PTR_P (ce_zv );
780780
781781 if (ce -> ce_flags & ZEND_ACC_PRELOADED ) {
782- Bucket * ce_bucket = (Bucket * )((uintptr_t )ce_zv - XtOffsetOf (Bucket , val ));
782+ const Bucket * ce_bucket = (const Bucket * )((uintptr_t )ce_zv - XtOffsetOf (Bucket , val ));
783783 size_t offset = ce_bucket - EG (class_table )-> arData ;
784784 if (offset < EG (persistent_classes_count )) {
785785 return false;
@@ -789,15 +789,15 @@ static bool zend_optimizer_ignore_class(zval *ce_zv, zend_string *filename)
789789 && (!ce -> info .user .filename || ce -> info .user .filename != filename );
790790}
791791
792- static bool zend_optimizer_ignore_function (zval * fbc_zv , zend_string * filename )
792+ static bool zend_optimizer_ignore_function (zval * fbc_zv , const zend_string * filename )
793793{
794- zend_function * fbc = Z_PTR_P (fbc_zv );
794+ const zend_function * fbc = Z_PTR_P (fbc_zv );
795795
796796 if (fbc -> type == ZEND_INTERNAL_FUNCTION ) {
797797 return false;
798798 } else if (fbc -> type == ZEND_USER_FUNCTION ) {
799799 if (fbc -> op_array .fn_flags & ZEND_ACC_PRELOADED ) {
800- Bucket * fbc_bucket = (Bucket * )((uintptr_t )fbc_zv - XtOffsetOf (Bucket , val ));
800+ const Bucket * fbc_bucket = (const Bucket * )((uintptr_t )fbc_zv - XtOffsetOf (Bucket , val ));
801801 size_t offset = fbc_bucket - EG (function_table )-> arData ;
802802 if (offset < EG (persistent_functions_count )) {
803803 return false;
@@ -832,7 +832,7 @@ zend_class_entry *zend_optimizer_get_class_entry(
832832zend_class_entry * zend_optimizer_get_class_entry_from_op1 (
833833 const zend_script * script , const zend_op_array * op_array , const zend_op * opline ) {
834834 if (opline -> op1_type == IS_CONST ) {
835- zval * op1 = CRT_CONSTANT (opline -> op1 );
835+ const zval * op1 = CRT_CONSTANT (opline -> op1 );
836836 if (Z_TYPE_P (op1 ) == IS_STRING ) {
837837 return zend_optimizer_get_class_entry (script , op_array , Z_STR_P (op1 + 1 ));
838838 }
@@ -855,7 +855,7 @@ const zend_class_constant *zend_fetch_class_const_info(
855855 return NULL ;
856856 }
857857 if (opline -> op1_type == IS_CONST ) {
858- zval * op1 = CRT_CONSTANT (opline -> op1 );
858+ const zval * op1 = CRT_CONSTANT (opline -> op1 );
859859 if (Z_TYPE_P (op1 ) == IS_STRING ) {
860860 if (script ) {
861861 ce = zend_optimizer_get_class_entry (script , op_array , Z_STR_P (op1 + 1 ));
@@ -899,7 +899,7 @@ const zend_class_constant *zend_fetch_class_const_info(
899899}
900900
901901zend_function * zend_optimizer_get_called_func (
902- zend_script * script , zend_op_array * op_array , zend_op * opline , bool * is_prototype )
902+ const zend_script * script , const zend_op_array * op_array , zend_op * opline , bool * is_prototype )
903903{
904904 * is_prototype = false;
905905 switch (opline -> opcode ) {
@@ -920,7 +920,7 @@ zend_function *zend_optimizer_get_called_func(
920920 case ZEND_INIT_FCALL_BY_NAME :
921921 case ZEND_INIT_NS_FCALL_BY_NAME :
922922 if (opline -> op2_type == IS_CONST && Z_TYPE_P (CRT_CONSTANT (opline -> op2 )) == IS_STRING ) {
923- zval * function_name = CRT_CONSTANT (opline -> op2 ) + 1 ;
923+ const zval * function_name = CRT_CONSTANT (opline -> op2 ) + 1 ;
924924 zend_function * func ;
925925 zval * func_zv ;
926926 if (script && (func = zend_hash_find_ptr (& script -> function_table , Z_STR_P (function_name )))) {
@@ -934,7 +934,7 @@ zend_function *zend_optimizer_get_called_func(
934934 break ;
935935 case ZEND_INIT_STATIC_METHOD_CALL :
936936 if (opline -> op2_type == IS_CONST && Z_TYPE_P (CRT_CONSTANT (opline -> op2 )) == IS_STRING ) {
937- zend_class_entry * ce = zend_optimizer_get_class_entry_from_op1 (
937+ const zend_class_entry * ce = zend_optimizer_get_class_entry_from_op1 (
938938 script , op_array , opline );
939939 if (ce ) {
940940 zend_string * func_name = Z_STR_P (CRT_CONSTANT (opline -> op2 ) + 1 );
@@ -978,13 +978,13 @@ zend_function *zend_optimizer_get_called_func(
978978 }
979979 break ;
980980 case ZEND_INIT_PARENT_PROPERTY_HOOK_CALL : {
981- zend_class_entry * scope = op_array -> scope ;
981+ const zend_class_entry * scope = op_array -> scope ;
982982 ZEND_ASSERT (scope != NULL );
983983 if ((scope -> ce_flags & ZEND_ACC_LINKED ) && scope -> parent ) {
984- zend_class_entry * parent_scope = scope -> parent ;
984+ const zend_class_entry * parent_scope = scope -> parent ;
985985 zend_string * prop_name = Z_STR_P (CRT_CONSTANT (opline -> op1 ));
986986 zend_property_hook_kind hook_kind = opline -> op2 .num ;
987- zend_property_info * prop_info = zend_get_property_info (parent_scope , prop_name , /* silent */ true);
987+ const zend_property_info * prop_info = zend_get_property_info (parent_scope , prop_name , /* silent */ true);
988988
989989 if (prop_info
990990 && prop_info != ZEND_WRONG_PROPERTY_INFO
@@ -1001,7 +1001,7 @@ zend_function *zend_optimizer_get_called_func(
10011001 }
10021002 case ZEND_NEW :
10031003 {
1004- zend_class_entry * ce = zend_optimizer_get_class_entry_from_op1 (
1004+ const zend_class_entry * ce = zend_optimizer_get_class_entry_from_op1 (
10051005 script , op_array , opline );
10061006 if (ce && ce -> type == ZEND_USER_CLASS ) {
10071007 return ce -> constructor ;
@@ -1012,7 +1012,7 @@ zend_function *zend_optimizer_get_called_func(
10121012 return NULL ;
10131013}
10141014
1015- uint32_t zend_optimizer_classify_function (zend_string * name , uint32_t num_args ) {
1015+ uint32_t zend_optimizer_classify_function (const zend_string * name , uint32_t num_args ) {
10161016 if (zend_string_equals_literal (name , "extract" )) {
10171017 return ZEND_FUNC_INDIRECT_VAR_ACCESS ;
10181018 } else if (zend_string_equals_literal (name , "compact" )) {
@@ -1164,12 +1164,12 @@ static void zend_optimize(zend_op_array *op_array,
11641164
11651165static void zend_revert_pass_two (zend_op_array * op_array )
11661166{
1167- zend_op * opline , * end ;
1167+ zend_op * opline ;
11681168
11691169 ZEND_ASSERT ((op_array -> fn_flags & ZEND_ACC_DONE_PASS_TWO ) != 0 );
11701170
11711171 opline = op_array -> opcodes ;
1172- end = opline + op_array -> last ;
1172+ const zend_op * end = opline + op_array -> last ;
11731173 while (opline < end ) {
11741174 if (opline -> op1_type == IS_CONST ) {
11751175 ZEND_PASS_TWO_UNDO_CONSTANT (op_array , opline , opline -> op1 );
@@ -1302,7 +1302,7 @@ static void zend_redo_pass_two(zend_op_array *op_array)
13021302 op_array -> fn_flags |= ZEND_ACC_DONE_PASS_TWO ;
13031303}
13041304
1305- static void zend_redo_pass_two_ex (zend_op_array * op_array , zend_ssa * ssa )
1305+ static void zend_redo_pass_two_ex (zend_op_array * op_array , const zend_ssa * ssa )
13061306{
13071307 zend_op * opline , * end ;
13081308#if ZEND_USE_ABS_JMP_ADDR && !ZEND_USE_ABS_CONST_ADDR
@@ -1331,7 +1331,7 @@ static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa)
13311331 opline = op_array -> opcodes ;
13321332 end = opline + op_array -> last ;
13331333 while (opline < end ) {
1334- zend_ssa_op * ssa_op = & ssa -> ops [opline - op_array -> opcodes ];
1334+ const zend_ssa_op * ssa_op = & ssa -> ops [opline - op_array -> opcodes ];
13351335 uint32_t op1_info = opline -> op1_type == IS_UNUSED ? 0 : (OP1_INFO () & (MAY_BE_UNDEF |MAY_BE_ANY |MAY_BE_REF |MAY_BE_ARRAY_OF_ANY |MAY_BE_ARRAY_KEY_ANY ));
13361336 uint32_t op2_info = opline -> op1_type == IS_UNUSED ? 0 : (OP2_INFO () & (MAY_BE_UNDEF |MAY_BE_ANY |MAY_BE_REF |MAY_BE_ARRAY_OF_ANY |MAY_BE_ARRAY_KEY_ANY ));
13371337 uint32_t res_info =
@@ -1461,13 +1461,13 @@ static void zend_optimize_op_array(zend_op_array *op_array,
14611461 }
14621462}
14631463
1464- static void zend_adjust_fcall_stack_size (zend_op_array * op_array , zend_optimizer_ctx * ctx )
1464+ static void zend_adjust_fcall_stack_size (const zend_op_array * op_array , const zend_optimizer_ctx * ctx )
14651465{
14661466 zend_function * func ;
1467- zend_op * opline , * end ;
1467+ zend_op * opline ;
14681468
14691469 opline = op_array -> opcodes ;
1470- end = opline + op_array -> last ;
1470+ const zend_op * end = opline + op_array -> last ;
14711471 while (opline < end ) {
14721472 if (opline -> opcode == ZEND_INIT_FCALL ) {
14731473 func = zend_hash_find_ptr (
@@ -1481,12 +1481,12 @@ static void zend_adjust_fcall_stack_size(zend_op_array *op_array, zend_optimizer
14811481 }
14821482}
14831483
1484- static void zend_adjust_fcall_stack_size_graph (zend_op_array * op_array )
1484+ static void zend_adjust_fcall_stack_size_graph (const zend_op_array * op_array )
14851485{
1486- zend_func_info * func_info = ZEND_FUNC_INFO (op_array );
1486+ const zend_func_info * func_info = ZEND_FUNC_INFO (op_array );
14871487
14881488 if (func_info ) {
1489- zend_call_info * call_info = func_info -> callee_info ;
1489+ const zend_call_info * call_info = func_info -> callee_info ;
14901490
14911491 while (call_info ) {
14921492 zend_op * opline = call_info -> caller_init_opline ;
@@ -1500,9 +1500,9 @@ static void zend_adjust_fcall_stack_size_graph(zend_op_array *op_array)
15001500 }
15011501}
15021502
1503- static bool needs_live_range (zend_op_array * op_array , zend_op * def_opline ) {
1504- zend_func_info * func_info = ZEND_FUNC_INFO (op_array );
1505- zend_ssa_op * ssa_op = & func_info -> ssa .ops [def_opline - op_array -> opcodes ];
1503+ static bool needs_live_range (const zend_op_array * op_array , const zend_op * def_opline ) {
1504+ const zend_func_info * func_info = ZEND_FUNC_INFO (op_array );
1505+ const zend_ssa_op * ssa_op = & func_info -> ssa .ops [def_opline - op_array -> opcodes ];
15061506 int ssa_var = ssa_op -> result_def ;
15071507 if (ssa_var < 0 ) {
15081508 /* Be conservative. */
@@ -1543,7 +1543,7 @@ void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void
15431543 if (Z_TYPE_P (zv ) == IS_ALIAS_PTR ) {
15441544 continue ;
15451545 }
1546- zend_class_entry * ce = Z_CE_P (zv );
1546+ const zend_class_entry * ce = Z_CE_P (zv );
15471547 ZEND_HASH_MAP_FOREACH_PTR (& ce -> function_table , op_array ) {
15481548 if (op_array -> scope == ce
15491549 && op_array -> type == ZEND_USER_FUNCTION
@@ -1558,7 +1558,7 @@ void zend_foreach_op_array(zend_script *script, zend_op_array_func_t func, void
15581558 zend_function * * hooks = property -> hooks ;
15591559 if (property -> ce == ce && property -> hooks ) {
15601560 for (uint32_t i = 0 ; i < ZEND_PROPERTY_HOOK_COUNT ; i ++ ) {
1561- zend_function * hook = hooks [i ];
1561+ const zend_function * hook = hooks [i ];
15621562 if (hook && hook -> common .scope == ce && !(hooks [i ]-> op_array .fn_flags & ZEND_ACC_TRAIT_CLONE )) {
15631563 zend_foreach_op_array_helper (& hooks [i ]-> op_array , func , context );
15641564 }
@@ -1718,10 +1718,10 @@ ZEND_API void zend_optimize_script(zend_script *script, zend_long optimization_l
17181718 if (Z_TYPE_P (zv ) == IS_ALIAS_PTR ) {
17191719 continue ;
17201720 }
1721- zend_class_entry * ce = Z_CE_P (zv );
1721+ const zend_class_entry * ce = Z_CE_P (zv );
17221722 ZEND_HASH_MAP_FOREACH_STR_KEY_PTR (& ce -> function_table , name , op_array ) {
17231723 if (op_array -> scope != ce && op_array -> type == ZEND_USER_FUNCTION ) {
1724- zend_op_array * orig_op_array =
1724+ const zend_op_array * orig_op_array =
17251725 zend_hash_find_ptr (& op_array -> scope -> function_table , name );
17261726
17271727 ZEND_ASSERT (orig_op_array != NULL );
0 commit comments