@@ -9250,53 +9250,38 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_
9250
9250
{
9251
9251
USE_OPLINE
9252
9252
zval *op1;
9253
- zend_long count;
9253
+ zend_long count = 1 ;
9254
9254
9255
9255
SAVE_OPLINE();
9256
9256
op1 = RT_CONSTANT(opline, opline->op1);
9257
- while (1) {
9258
- if (Z_TYPE_P(op1) == IS_ARRAY) {
9259
- count = zend_array_count(Z_ARRVAL_P(op1));
9260
- break;
9261
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9262
- zend_object *zobj = Z_OBJ_P(op1);
9263
9257
9264
- /* first, we check if the handler is defined */
9265
- if (zobj->handlers->count_elements) {
9266
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
9267
- break;
9268
- }
9269
- if (UNEXPECTED(EG(exception))) {
9270
- count = 0;
9271
- break;
9272
- }
9273
- }
9274
-
9275
- /* if not and the object implements Countable we call its count() method */
9276
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9277
- zval retval;
9258
+ if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9259
+ op1 = Z_REFVAL_P(op1);
9260
+ }
9278
9261
9279
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9280
- count = zval_get_long(&retval);
9281
- zval_ptr_dtor(&retval);
9282
- break;
9283
- }
9262
+ if (Z_TYPE_P(op1) <= IS_NULL) {
9263
+ /* Intentionally not converted to an exception */
9264
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
9265
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9266
+ ZVAL_UNDEFINED_OP1();
9267
+ }
9268
+ count = 0;
9269
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
9270
+ count = zend_array_count(Z_ARRVAL_P(op1));
9271
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9272
+ zend_object *zobj = Z_OBJ_P(op1);
9273
+ /* if the object implements Countable we call its count() method */
9274
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9275
+ zval retval;
9284
9276
9285
- /* If There's no handler and it doesn't implement Countable then add a warning */
9286
- count = 1;
9287
- } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9288
- op1 = Z_REFVAL_P(op1);
9289
- continue;
9290
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
9291
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9292
- ZVAL_UNDEFINED_OP1();
9293
- }
9294
- count = 0;
9277
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9278
+ count = zval_get_long(&retval);
9279
+ zval_ptr_dtor(&retval);
9295
9280
} else {
9296
- count = 1 ;
9281
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9297
9282
}
9298
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
9299
- break ;
9283
+ } else {
9284
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9300
9285
}
9301
9286
9302
9287
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -16266,53 +16251,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDL
16266
16251
{
16267
16252
USE_OPLINE
16268
16253
zval *op1;
16269
- zend_long count;
16254
+ zend_long count = 1 ;
16270
16255
16271
16256
SAVE_OPLINE();
16272
16257
op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16273
- while (1) {
16274
- if (Z_TYPE_P(op1) == IS_ARRAY) {
16275
- count = zend_array_count(Z_ARRVAL_P(op1));
16276
- break;
16277
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16278
- zend_object *zobj = Z_OBJ_P(op1);
16279
-
16280
- /* first, we check if the handler is defined */
16281
- if (zobj->handlers->count_elements) {
16282
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
16283
- break;
16284
- }
16285
- if (UNEXPECTED(EG(exception))) {
16286
- count = 0;
16287
- break;
16288
- }
16289
- }
16290
16258
16291
- /* if not and the object implements Countable we call its count() method */
16292
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16293
- zval retval;
16259
+ if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16260
+ op1 = Z_REFVAL_P(op1);
16261
+ }
16294
16262
16295
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16296
- count = zval_get_long(&retval);
16297
- zval_ptr_dtor(&retval);
16298
- break;
16299
- }
16263
+ if (Z_TYPE_P(op1) <= IS_NULL) {
16264
+ /* Intentionally not converted to an exception */
16265
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
16266
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16267
+ ZVAL_UNDEFINED_OP1();
16268
+ }
16269
+ count = 0;
16270
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
16271
+ count = zend_array_count(Z_ARRVAL_P(op1));
16272
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16273
+ zend_object *zobj = Z_OBJ_P(op1);
16274
+ /* if the object implements Countable we call its count() method */
16275
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16276
+ zval retval;
16300
16277
16301
- /* If There's no handler and it doesn't implement Countable then add a warning */
16302
- count = 1;
16303
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16304
- op1 = Z_REFVAL_P(op1);
16305
- continue;
16306
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
16307
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16308
- ZVAL_UNDEFINED_OP1();
16309
- }
16310
- count = 0;
16278
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16279
+ count = zval_get_long(&retval);
16280
+ zval_ptr_dtor(&retval);
16311
16281
} else {
16312
- count = 1 ;
16282
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16313
16283
}
16314
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
16315
- break ;
16284
+ } else {
16285
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16316
16286
}
16317
16287
16318
16288
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -45033,53 +45003,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(Z
45033
45003
{
45034
45004
USE_OPLINE
45035
45005
zval *op1;
45036
- zend_long count;
45006
+ zend_long count = 1 ;
45037
45007
45038
45008
SAVE_OPLINE();
45039
45009
op1 = EX_VAR(opline->op1.var);
45040
- while (1) {
45041
- if (Z_TYPE_P(op1) == IS_ARRAY) {
45042
- count = zend_array_count(Z_ARRVAL_P(op1));
45043
- break;
45044
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
45045
- zend_object *zobj = Z_OBJ_P(op1);
45046
-
45047
- /* first, we check if the handler is defined */
45048
- if (zobj->handlers->count_elements) {
45049
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
45050
- break;
45051
- }
45052
- if (UNEXPECTED(EG(exception))) {
45053
- count = 0;
45054
- break;
45055
- }
45056
- }
45057
45010
45058
- /* if not and the object implements Countable we call its count() method */
45059
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
45060
- zval retval;
45011
+ if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
45012
+ op1 = Z_REFVAL_P(op1);
45013
+ }
45061
45014
45062
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
45063
- count = zval_get_long(&retval);
45064
- zval_ptr_dtor(&retval);
45065
- break;
45066
- }
45015
+ if (Z_TYPE_P(op1) <= IS_NULL) {
45016
+ /* Intentionally not converted to an exception */
45017
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
45018
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45019
+ ZVAL_UNDEFINED_OP1();
45020
+ }
45021
+ count = 0;
45022
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
45023
+ count = zend_array_count(Z_ARRVAL_P(op1));
45024
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
45025
+ zend_object *zobj = Z_OBJ_P(op1);
45026
+ /* if the object implements Countable we call its count() method */
45027
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
45028
+ zval retval;
45067
45029
45068
- /* If There's no handler and it doesn't implement Countable then add a warning */
45069
- count = 1;
45070
- } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
45071
- op1 = Z_REFVAL_P(op1);
45072
- continue;
45073
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
45074
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45075
- ZVAL_UNDEFINED_OP1();
45076
- }
45077
- count = 0;
45030
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
45031
+ count = zval_get_long(&retval);
45032
+ zval_ptr_dtor(&retval);
45078
45033
} else {
45079
- count = 1 ;
45034
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
45080
45035
}
45081
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
45082
- break ;
45036
+ } else {
45037
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
45083
45038
}
45084
45039
45085
45040
ZVAL_LONG(EX_VAR(opline->result.var), count);
0 commit comments