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