@@ -4422,6 +4422,7 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
44224422{
44234423 zend_ast * name_ast = ast -> child [0 ];
44244424 zend_ast * args_ast = ast -> child [1 ];
4425+ bool is_callable_convert = args_ast -> kind == ZEND_AST_CALLABLE_CONVERT ;
44254426
44264427 znode name_node ;
44274428
@@ -4434,7 +4435,8 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
44344435 {
44354436 bool runtime_resolution = zend_compile_function_name (& name_node , name_ast );
44364437 if (runtime_resolution ) {
4437- if (zend_string_equals_literal_ci (zend_ast_get_str (name_ast ), "assert" )) {
4438+ if (zend_string_equals_literal_ci (zend_ast_get_str (name_ast ), "assert" )
4439+ && !is_callable_convert ) {
44384440 zend_compile_assert (result , zend_ast_get_list (args_ast ), Z_STR (name_node .u .constant ), NULL );
44394441 } else {
44404442 zend_compile_ns_call (result , & name_node , args_ast );
@@ -4453,8 +4455,7 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
44534455 fbc = zend_hash_find_ptr (CG (function_table ), lcname );
44544456
44554457 /* Special assert() handling should apply independently of compiler flags. */
4456- if ((args_ast -> kind != ZEND_AST_CALLABLE_CONVERT ) &&
4457- fbc && zend_string_equals_literal (lcname , "assert" )) {
4458+ if (fbc && zend_string_equals_literal (lcname , "assert" ) && !is_callable_convert ) {
44584459 zend_compile_assert (result , zend_ast_get_list (args_ast ), lcname , fbc );
44594460 zend_string_release (lcname );
44604461 zval_ptr_dtor (& name_node .u .constant );
@@ -4471,7 +4472,7 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
44714472 return ;
44724473 }
44734474
4474- if (( args_ast -> kind != ZEND_AST_CALLABLE_CONVERT ) &&
4475+ if (! is_callable_convert &&
44754476 zend_try_compile_special_func (result , lcname ,
44764477 zend_ast_get_list (args_ast ), fbc , type ) == SUCCESS
44774478 ) {
0 commit comments