@@ -9211,53 +9211,38 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_
9211
9211
{
9212
9212
USE_OPLINE
9213
9213
zval *op1;
9214
- zend_long count;
9214
+ zend_long count = 1 ;
9215
9215
9216
9216
SAVE_OPLINE();
9217
9217
op1 = RT_CONSTANT(opline, opline->op1);
9218
- while (1) {
9219
- if (Z_TYPE_P(op1) == IS_ARRAY) {
9220
- count = zend_array_count(Z_ARRVAL_P(op1));
9221
- break;
9222
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9223
- zend_object *zobj = Z_OBJ_P(op1);
9224
9218
9225
- /* first, we check if the handler is defined */
9226
- if (zobj->handlers->count_elements) {
9227
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
9228
- break;
9229
- }
9230
- if (UNEXPECTED(EG(exception))) {
9231
- count = 0;
9232
- break;
9233
- }
9234
- }
9235
-
9236
- /* if not and the object implements Countable we call its count() method */
9237
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9238
- zval retval;
9219
+ if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9220
+ op1 = Z_REFVAL_P(op1);
9221
+ }
9239
9222
9240
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9241
- count = zval_get_long(&retval);
9242
- zval_ptr_dtor(&retval);
9243
- break;
9244
- }
9223
+ if (Z_TYPE_P(op1) <= IS_NULL) {
9224
+ /* Intentionally not converted to an exception */
9225
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
9226
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9227
+ ZVAL_UNDEFINED_OP1();
9228
+ }
9229
+ count = 0;
9230
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
9231
+ count = zend_array_count(Z_ARRVAL_P(op1));
9232
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9233
+ zend_object *zobj = Z_OBJ_P(op1);
9234
+ /* if the object implements Countable we call its count() method */
9235
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9236
+ zval retval;
9245
9237
9246
- /* If There's no handler and it doesn't implement Countable then add a warning */
9247
- count = 1;
9248
- } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9249
- op1 = Z_REFVAL_P(op1);
9250
- continue;
9251
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
9252
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9253
- ZVAL_UNDEFINED_OP1();
9254
- }
9255
- count = 0;
9238
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9239
+ count = zval_get_long(&retval);
9240
+ zval_ptr_dtor(&retval);
9256
9241
} else {
9257
- count = 1 ;
9242
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9258
9243
}
9259
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
9260
- break ;
9244
+ } else {
9245
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9261
9246
}
9262
9247
9263
9248
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -16233,53 +16218,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDL
16233
16218
{
16234
16219
USE_OPLINE
16235
16220
zval *op1;
16236
- zend_long count;
16221
+ zend_long count = 1 ;
16237
16222
16238
16223
SAVE_OPLINE();
16239
16224
op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16240
- while (1) {
16241
- if (Z_TYPE_P(op1) == IS_ARRAY) {
16242
- count = zend_array_count(Z_ARRVAL_P(op1));
16243
- break;
16244
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16245
- zend_object *zobj = Z_OBJ_P(op1);
16246
-
16247
- /* first, we check if the handler is defined */
16248
- if (zobj->handlers->count_elements) {
16249
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
16250
- break;
16251
- }
16252
- if (UNEXPECTED(EG(exception))) {
16253
- count = 0;
16254
- break;
16255
- }
16256
- }
16257
16225
16258
- /* if not and the object implements Countable we call its count() method */
16259
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16260
- zval retval;
16226
+ if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16227
+ op1 = Z_REFVAL_P(op1);
16228
+ }
16261
16229
16262
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16263
- count = zval_get_long(&retval);
16264
- zval_ptr_dtor(&retval);
16265
- break;
16266
- }
16230
+ if (Z_TYPE_P(op1) <= IS_NULL) {
16231
+ /* Intentionally not converted to an exception */
16232
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
16233
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16234
+ ZVAL_UNDEFINED_OP1();
16235
+ }
16236
+ count = 0;
16237
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
16238
+ count = zend_array_count(Z_ARRVAL_P(op1));
16239
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16240
+ zend_object *zobj = Z_OBJ_P(op1);
16241
+ /* if the object implements Countable we call its count() method */
16242
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16243
+ zval retval;
16267
16244
16268
- /* If There's no handler and it doesn't implement Countable then add a warning */
16269
- count = 1;
16270
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16271
- op1 = Z_REFVAL_P(op1);
16272
- continue;
16273
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
16274
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16275
- ZVAL_UNDEFINED_OP1();
16276
- }
16277
- count = 0;
16245
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16246
+ count = zval_get_long(&retval);
16247
+ zval_ptr_dtor(&retval);
16278
16248
} else {
16279
- count = 1 ;
16249
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16280
16250
}
16281
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
16282
- break ;
16251
+ } else {
16252
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16283
16253
}
16284
16254
16285
16255
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -44797,53 +44767,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(Z
44797
44767
{
44798
44768
USE_OPLINE
44799
44769
zval *op1;
44800
- zend_long count;
44770
+ zend_long count = 1 ;
44801
44771
44802
44772
SAVE_OPLINE();
44803
44773
op1 = EX_VAR(opline->op1.var);
44804
- while (1) {
44805
- if (Z_TYPE_P(op1) == IS_ARRAY) {
44806
- count = zend_array_count(Z_ARRVAL_P(op1));
44807
- break;
44808
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
44809
- zend_object *zobj = Z_OBJ_P(op1);
44810
-
44811
- /* first, we check if the handler is defined */
44812
- if (zobj->handlers->count_elements) {
44813
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
44814
- break;
44815
- }
44816
- if (UNEXPECTED(EG(exception))) {
44817
- count = 0;
44818
- break;
44819
- }
44820
- }
44821
44774
44822
- /* if not and the object implements Countable we call its count() method */
44823
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
44824
- zval retval;
44775
+ if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
44776
+ op1 = Z_REFVAL_P(op1);
44777
+ }
44825
44778
44826
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
44827
- count = zval_get_long(&retval);
44828
- zval_ptr_dtor(&retval);
44829
- break;
44830
- }
44779
+ if (Z_TYPE_P(op1) <= IS_NULL) {
44780
+ /* Intentionally not converted to an exception */
44781
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
44782
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44783
+ ZVAL_UNDEFINED_OP1();
44784
+ }
44785
+ count = 0;
44786
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
44787
+ count = zend_array_count(Z_ARRVAL_P(op1));
44788
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
44789
+ zend_object *zobj = Z_OBJ_P(op1);
44790
+ /* if the object implements Countable we call its count() method */
44791
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
44792
+ zval retval;
44831
44793
44832
- /* If There's no handler and it doesn't implement Countable then add a warning */
44833
- count = 1;
44834
- } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
44835
- op1 = Z_REFVAL_P(op1);
44836
- continue;
44837
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
44838
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44839
- ZVAL_UNDEFINED_OP1();
44840
- }
44841
- count = 0;
44794
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
44795
+ count = zval_get_long(&retval);
44796
+ zval_ptr_dtor(&retval);
44842
44797
} else {
44843
- count = 1 ;
44798
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
44844
44799
}
44845
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
44846
- break ;
44800
+ } else {
44801
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
44847
44802
}
44848
44803
44849
44804
ZVAL_LONG(EX_VAR(opline->result.var), count);
0 commit comments