@@ -9194,53 +9194,38 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_
9194
9194
{
9195
9195
USE_OPLINE
9196
9196
zval *op1;
9197
- zend_long count;
9197
+ zend_long count = 1 ;
9198
9198
9199
9199
SAVE_OPLINE();
9200
9200
op1 = RT_CONSTANT(opline, opline->op1);
9201
- while (1) {
9202
- if (Z_TYPE_P(op1) == IS_ARRAY) {
9203
- count = zend_array_count(Z_ARRVAL_P(op1));
9204
- break;
9205
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9206
- zend_object *zobj = Z_OBJ_P(op1);
9207
9201
9208
- /* first, we check if the handler is defined */
9209
- if (zobj->handlers->count_elements) {
9210
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
9211
- break;
9212
- }
9213
- if (UNEXPECTED(EG(exception))) {
9214
- count = 0;
9215
- break;
9216
- }
9217
- }
9218
-
9219
- /* if not and the object implements Countable we call its count() method */
9220
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9221
- zval retval;
9202
+ if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9203
+ op1 = Z_REFVAL_P(op1);
9204
+ }
9222
9205
9223
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9224
- count = zval_get_long(&retval);
9225
- zval_ptr_dtor(&retval);
9226
- break;
9227
- }
9206
+ if (Z_TYPE_P(op1) <= IS_NULL) {
9207
+ /* Intentionally not converted to an exception */
9208
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
9209
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9210
+ ZVAL_UNDEFINED_OP1();
9211
+ }
9212
+ count = 0;
9213
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
9214
+ count = zend_array_count(Z_ARRVAL_P(op1));
9215
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
9216
+ zend_object *zobj = Z_OBJ_P(op1);
9217
+ /* if the object implements Countable we call its count() method */
9218
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
9219
+ zval retval;
9228
9220
9229
- /* If There's no handler and it doesn't implement Countable then add a warning */
9230
- count = 1;
9231
- } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9232
- op1 = Z_REFVAL_P(op1);
9233
- continue;
9234
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
9235
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9236
- ZVAL_UNDEFINED_OP1();
9237
- }
9238
- count = 0;
9221
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
9222
+ count = zval_get_long(&retval);
9223
+ zval_ptr_dtor(&retval);
9239
9224
} else {
9240
- count = 1 ;
9225
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9241
9226
}
9242
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
9243
- break ;
9227
+ } else {
9228
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
9244
9229
}
9245
9230
9246
9231
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -16216,53 +16201,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDL
16216
16201
{
16217
16202
USE_OPLINE
16218
16203
zval *op1;
16219
- zend_long count;
16204
+ zend_long count = 1 ;
16220
16205
16221
16206
SAVE_OPLINE();
16222
16207
op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16223
- while (1) {
16224
- if (Z_TYPE_P(op1) == IS_ARRAY) {
16225
- count = zend_array_count(Z_ARRVAL_P(op1));
16226
- break;
16227
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16228
- zend_object *zobj = Z_OBJ_P(op1);
16229
-
16230
- /* first, we check if the handler is defined */
16231
- if (zobj->handlers->count_elements) {
16232
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
16233
- break;
16234
- }
16235
- if (UNEXPECTED(EG(exception))) {
16236
- count = 0;
16237
- break;
16238
- }
16239
- }
16240
16208
16241
- /* if not and the object implements Countable we call its count() method */
16242
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16243
- zval retval;
16209
+ if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16210
+ op1 = Z_REFVAL_P(op1);
16211
+ }
16244
16212
16245
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16246
- count = zval_get_long(&retval);
16247
- zval_ptr_dtor(&retval);
16248
- break;
16249
- }
16213
+ if (Z_TYPE_P(op1) <= IS_NULL) {
16214
+ /* Intentionally not converted to an exception */
16215
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
16216
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16217
+ ZVAL_UNDEFINED_OP1();
16218
+ }
16219
+ count = 0;
16220
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
16221
+ count = zend_array_count(Z_ARRVAL_P(op1));
16222
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
16223
+ zend_object *zobj = Z_OBJ_P(op1);
16224
+ /* if the object implements Countable we call its count() method */
16225
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
16226
+ zval retval;
16250
16227
16251
- /* If There's no handler and it doesn't implement Countable then add a warning */
16252
- count = 1;
16253
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16254
- op1 = Z_REFVAL_P(op1);
16255
- continue;
16256
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
16257
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16258
- ZVAL_UNDEFINED_OP1();
16259
- }
16260
- count = 0;
16228
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
16229
+ count = zval_get_long(&retval);
16230
+ zval_ptr_dtor(&retval);
16261
16231
} else {
16262
- count = 1 ;
16232
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16263
16233
}
16264
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
16265
- break ;
16234
+ } else {
16235
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
16266
16236
}
16267
16237
16268
16238
ZVAL_LONG(EX_VAR(opline->result.var), count);
@@ -44736,53 +44706,38 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(Z
44736
44706
{
44737
44707
USE_OPLINE
44738
44708
zval *op1;
44739
- zend_long count;
44709
+ zend_long count = 1 ;
44740
44710
44741
44711
SAVE_OPLINE();
44742
44712
op1 = EX_VAR(opline->op1.var);
44743
- while (1) {
44744
- if (Z_TYPE_P(op1) == IS_ARRAY) {
44745
- count = zend_array_count(Z_ARRVAL_P(op1));
44746
- break;
44747
- } else if (Z_TYPE_P(op1) == IS_OBJECT) {
44748
- zend_object *zobj = Z_OBJ_P(op1);
44749
-
44750
- /* first, we check if the handler is defined */
44751
- if (zobj->handlers->count_elements) {
44752
- if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
44753
- break;
44754
- }
44755
- if (UNEXPECTED(EG(exception))) {
44756
- count = 0;
44757
- break;
44758
- }
44759
- }
44760
44713
44761
- /* if not and the object implements Countable we call its count() method */
44762
- if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
44763
- zval retval;
44714
+ if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
44715
+ op1 = Z_REFVAL_P(op1);
44716
+ }
44764
44717
44765
- zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
44766
- count = zval_get_long(&retval);
44767
- zval_ptr_dtor(&retval);
44768
- break;
44769
- }
44718
+ if (Z_TYPE_P(op1) <= IS_NULL) {
44719
+ /* Intentionally not converted to an exception */
44720
+ zend_error(E_DEPRECATED, "%s(): Passing null is deprecated", opline->extended_value ? "sizeof" : "count");
44721
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44722
+ ZVAL_UNDEFINED_OP1();
44723
+ }
44724
+ count = 0;
44725
+ } else if (Z_TYPE_P(op1) == IS_ARRAY) {
44726
+ count = zend_array_count(Z_ARRVAL_P(op1));
44727
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
44728
+ zend_object *zobj = Z_OBJ_P(op1);
44729
+ /* if the object implements Countable we call its count() method */
44730
+ if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
44731
+ zval retval;
44770
44732
44771
- /* If There's no handler and it doesn't implement Countable then add a warning */
44772
- count = 1;
44773
- } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
44774
- op1 = Z_REFVAL_P(op1);
44775
- continue;
44776
- } else if (Z_TYPE_P(op1) <= IS_NULL) {
44777
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44778
- ZVAL_UNDEFINED_OP1();
44779
- }
44780
- count = 0;
44733
+ zend_call_method_with_0_params(zobj, NULL, NULL, "count", &retval);
44734
+ count = zval_get_long(&retval);
44735
+ zval_ptr_dtor(&retval);
44781
44736
} else {
44782
- count = 1 ;
44737
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
44783
44738
}
44784
- zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
44785
- break ;
44739
+ } else {
44740
+ zend_type_error("Parameter must be an array or an object that implements Countable") ;
44786
44741
}
44787
44742
44788
44743
ZVAL_LONG(EX_VAR(opline->result.var), count);
0 commit comments