@@ -4869,7 +4869,6 @@ static void zend_compile_static_var_common(zend_string *var_name, zval *value, u
4869
4869
static void zend_compile_static_var (zend_ast * ast ) /* {{{ */
4870
4870
{
4871
4871
zend_ast * var_ast = ast -> child [0 ];
4872
- zend_ast * value_ast = ast -> child [1 ];
4873
4872
zend_string * var_name = zend_ast_get_str (var_ast );
4874
4873
4875
4874
if (zend_string_equals_literal (var_name , "this" )) {
@@ -4887,13 +4886,20 @@ static void zend_compile_static_var(zend_ast *ast) /* {{{ */
4887
4886
zend_error_noreturn (E_COMPILE_ERROR , "Duplicate declaration of static variable $%s" , ZSTR_VAL (var_name ));
4888
4887
}
4889
4888
4890
- if (!value_ast ) {
4891
- zend_compile_static_var_common (var_name , & EG (uninitialized_zval ), ZEND_BIND_REF );
4889
+ zend_eval_const_expr (& ast -> child [1 ]);
4890
+ zend_ast * value_ast = ast -> child [1 ];
4891
+
4892
+ if (!value_ast || value_ast -> kind == ZEND_AST_ZVAL ) {
4893
+ zval * value_zv = value_ast
4894
+ ? zend_ast_get_zval (value_ast )
4895
+ : & EG (uninitialized_zval );
4896
+ Z_TRY_ADDREF_P (value_zv );
4897
+ zend_compile_static_var_common (var_name , value_zv , ZEND_BIND_REF );
4892
4898
} else {
4893
4899
zend_op * opline ;
4894
4900
4895
4901
zval * placeholder_ptr = zend_hash_update (CG (active_op_array )-> static_variables , var_name , & EG (uninitialized_zval ));
4896
- Z_TYPE_EXTRA_P (placeholder_ptr ) |= IS_TYPE_UNINITIALIZED ;
4902
+ Z_TYPE_EXTRA_P (placeholder_ptr ) |= IS_STATIC_VAR_UNINITIALIZED ;
4897
4903
uint32_t placeholder_offset = (uint32_t )((char * )placeholder_ptr - (char * )CG (active_op_array )-> static_variables -> arData );
4898
4904
4899
4905
uint32_t static_def_jmp_opnum = get_next_op_number ();
0 commit comments