Skip to content

Commit 926d4ab

Browse files
committed
Enact follow-up phase of the "Path to Saner Increment/Decrement operators" RFC
RFC: https://wiki.php.net/rfc/deprecations_php_8_5#enact_follow-up_phase_of_the_path_to_saner_incrementdecrement_operators_rfc
1 parent d0274e7 commit 926d4ab

10 files changed

+85
-63
lines changed

Zend/tests/in-de-crement/incdec_strings.phpt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ foreach ($values as $value) {
5757
Using increment:
5858
Initial value:string(0) ""
5959

60-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
60+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6161
Result value:string(1) "1"
6262
Initial value:string(1) " "
6363

64-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
64+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6565
Result value:string(1) " "
6666
Initial value:string(1) "0"
6767
Result value:int(1)
@@ -70,20 +70,28 @@ Result value:float(16.5)
7070
Initial value:string(4) "1e10"
7171
Result value:float(10000000001)
7272
Initial value:string(4) "199A"
73+
74+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7375
Result value:string(4) "199B"
7476
Initial value:string(4) "A199"
77+
78+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7579
Result value:string(4) "A200"
7680
Initial value:string(4) "199Z"
81+
82+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7783
Result value:string(4) "200A"
7884
Initial value:string(4) "Z199"
85+
86+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7987
Result value:string(4) "Z200"
8088
Initial value:string(11) "Hello world"
8189

82-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
90+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
8391
Result value:string(11) "Hello worle"
8492
Initial value:string(4) "🐘"
8593

86-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
94+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
8795
Result value:string(4) "🐘"
8896
Using decrement:
8997
Initial value:string(0) ""

Zend/tests/in-de-crement/incdec_strings_exception.phpt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,35 @@ foreach ($values as $value) {
4141
}
4242
?>
4343
--EXPECT--
44-
Deprecated: Increment on non-alphanumeric string is deprecated
44+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
4545
string(0) ""
4646
Deprecated: Decrement on empty string is deprecated as non-numeric
4747
string(0) ""
48-
Deprecated: Increment on non-alphanumeric string is deprecated
48+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
4949
string(1) " "
5050
Deprecated: Decrement on non-numeric string has no effect and is deprecated
5151
string(1) " "
52-
string(4) "199B"
52+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
53+
string(4) "199A"
5354
Deprecated: Decrement on non-numeric string has no effect and is deprecated
54-
string(4) "199B"
55-
string(4) "A200"
55+
string(4) "199A"
56+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
57+
string(4) "A199"
5658
Deprecated: Decrement on non-numeric string has no effect and is deprecated
57-
string(4) "A200"
58-
string(4) "200A"
59+
string(4) "A199"
60+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
61+
string(4) "199Z"
5962
Deprecated: Decrement on non-numeric string has no effect and is deprecated
60-
string(4) "200A"
61-
string(4) "Z200"
63+
string(4) "199Z"
64+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
65+
string(4) "Z199"
6266
Deprecated: Decrement on non-numeric string has no effect and is deprecated
63-
string(4) "Z200"
64-
Deprecated: Increment on non-alphanumeric string is deprecated
67+
string(4) "Z199"
68+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
6569
string(11) "Hello world"
6670
Deprecated: Decrement on non-numeric string has no effect and is deprecated
6771
string(11) "Hello world"
68-
Deprecated: Increment on non-alphanumeric string is deprecated
72+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead
6973
string(4) "🐘"
7074
Deprecated: Decrement on non-numeric string has no effect and is deprecated
7175
string(4) "🐘"

Zend/tests/in-de-crement/incdec_types.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ Initial value:float(0)
6363
Result value:float(1)
6464
Initial value:string(0) ""
6565

66-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
66+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6767
Result value:string(1) "1"
6868
Initial value:string(1) " "
6969

70-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
70+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7171
Result value:string(1) " "
7272
Initial value:string(1) "0"
7373
Result value:int(1)

Zend/tests/in-de-crement/increment_diagnostic_change_type.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ var_dump($x);
3131
DONE
3232
--EXPECT--
3333
string(1) "1"
34-
string(50) "Increment on non-alphanumeric string is deprecated"
34+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
3535
string(4) "foo!"
36-
string(50) "Increment on non-alphanumeric string is deprecated"
36+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
3737
string(1) "!"
3838
DONE

Zend/tests/in-de-crement/increment_diagnostic_change_type_do_operator.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ var_dump($x);
2323
?>
2424
DONE
2525
--EXPECT--
26-
string(50) "Increment on non-alphanumeric string is deprecated"
26+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
2727
string(4) "foo!"
28-
string(50) "Increment on non-alphanumeric string is deprecated"
28+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
2929
string(1) "!"
3030
DONE

Zend/tests/in-de-crement/oss-fuzz-62294_globals_unset_after_string_warning.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ PRE DEC
3131
Decrement on non-numeric string has no effect and is deprecated
3232
string(1) " "
3333
POST INC
34-
Increment on non-alphanumeric string is deprecated
34+
Increment on non-numeric string is deprecated, use str_increment() instead
3535
string(1) " "
3636
PRE INC
37-
Increment on non-alphanumeric string is deprecated
37+
Increment on non-numeric string is deprecated, use str_increment() instead
3838
string(1) " "

Zend/tests/in-de-crement/string_increment_various.phpt

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,55 +53,72 @@ var_dump(++$s); // string(3) "5e0"
5353
var_dump(++$s); // float(6)
5454
?>
5555
--EXPECTF--
56+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
5657
string(2) "Ba"
58+
59+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
5760
string(2) "bA"
61+
62+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
5863
string(2) "B0"
64+
65+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
5966
string(2) "b0"
67+
68+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6069
string(3) "AAa"
70+
71+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6172
string(3) "aaA"
73+
74+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6275
string(3) "10a"
76+
77+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6378
string(3) "10A"
6479

65-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
80+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6681
string(1) "1"
6782

68-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
83+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
6984
string(3) "-cd"
7085

71-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
86+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7287
string(2) "Z "
7388

74-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
89+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7590
string(2) " A"
7691

77-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
92+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
7893
string(2) "é"
7994

80-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
95+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
8196
string(15) "あいうえお"
8297

83-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
98+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
8499
string(2) "α"
85100

86-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
101+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
87102
string(2) "ω"
88103

89-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
104+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
90105
string(2) "Α"
91106

92-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
107+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
93108
string(2) "Ω"
94109

95-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
110+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
96111
string(8) "foo1.txu"
97112

98-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
113+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
99114
string(4) "1f.6"
100115

101-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
116+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
102117
string(9) "foo.1.txu"
103118

104-
Deprecated: Increment on non-alphanumeric string is deprecated in %s on line %d
119+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
105120
string(5) "1.f.6"
121+
122+
Deprecated: Increment on non-numeric string is deprecated, use str_increment() instead in %s on line %d
106123
string(3) "5e0"
107124
float(6)

Zend/tests/in-de-crement/unset_globals_in_error_handler.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,23 @@ Decrement on type null has no effect, this will change in the next major version
8585
NULL
8686
Empty string
8787
POST INC
88-
Increment on non-alphanumeric string is deprecated
88+
Increment on non-numeric string is deprecated, use str_increment() instead
8989
string(0) ""
9090
POST DEC
9191
Decrement on empty string is deprecated as non-numeric
9292
string(0) ""
9393
PRE INC
94-
Increment on non-alphanumeric string is deprecated
94+
Increment on non-numeric string is deprecated, use str_increment() instead
9595
string(1) "1"
9696
PRE DEC
9797
Decrement on empty string is deprecated as non-numeric
9898
int(-1)
9999
Non fill ASCII (only ++)
100100
POST INC
101-
Increment on non-alphanumeric string is deprecated
101+
Increment on non-numeric string is deprecated, use str_increment() instead
102102
string(4) " ad "
103103
PRE INC
104-
Increment on non-alphanumeric string is deprecated
104+
Increment on non-numeric string is deprecated, use str_increment() instead
105105
string(4) " ad "
106106
Bool
107107
POST INC

Zend/tests/in-de-crement/unset_object_property_in_error_handler.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,23 @@ string(87) "Decrement on type null has no effect, this will change in the next m
9898
NULL
9999
Empty string
100100
POST INC
101-
string(50) "Increment on non-alphanumeric string is deprecated"
101+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
102102
string(0) ""
103103
POST DEC
104104
string(54) "Decrement on empty string is deprecated as non-numeric"
105105
string(0) ""
106106
PRE INC
107-
string(50) "Increment on non-alphanumeric string is deprecated"
107+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
108108
string(1) "1"
109109
PRE DEC
110110
string(54) "Decrement on empty string is deprecated as non-numeric"
111111
int(-1)
112112
Non fill ASCII (only ++)
113113
POST INC
114-
string(50) "Increment on non-alphanumeric string is deprecated"
114+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
115115
string(4) " ad "
116116
PRE INC
117-
string(50) "Increment on non-alphanumeric string is deprecated"
117+
string(74) "Increment on non-numeric string is deprecated, use str_increment() instead"
118118
string(4) " ad "
119119
Bool
120120
POST INC

Zend/zend_operators.c

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,29 +2558,22 @@ static bool ZEND_FASTCALL increment_string(zval *str) /* {{{ */
25582558
int last=0; /* Shut up the compiler warning */
25592559
int ch;
25602560

2561+
zend_string *zstr = Z_STR_P(str);
2562+
zend_string_addref(zstr);
2563+
zend_error(E_DEPRECATED, "Increment on non-numeric string is deprecated, use str_increment() instead");
2564+
if (EG(exception)) {
2565+
zend_string_release(zstr);
2566+
return false;
2567+
}
2568+
zval_ptr_dtor(str);
2569+
ZVAL_STR(str, zstr);
2570+
25612571
if (UNEXPECTED(Z_STRLEN_P(str) == 0)) {
2562-
zend_error(E_DEPRECATED, "Increment on non-alphanumeric string is deprecated");
2563-
if (EG(exception)) {
2564-
return false;
2565-
}
2566-
/* A userland error handler can change the type from string to something else */
25672572
zval_ptr_dtor(str);
25682573
ZVAL_CHAR(str, '1');
25692574
return true;
25702575
}
25712576

2572-
if (UNEXPECTED(!zend_string_only_has_ascii_alphanumeric(Z_STR_P(str)))) {
2573-
zend_string *zstr = Z_STR_P(str);
2574-
zend_string_addref(zstr);
2575-
zend_error(E_DEPRECATED, "Increment on non-alphanumeric string is deprecated");
2576-
if (EG(exception)) {
2577-
zend_string_release(zstr);
2578-
return false;
2579-
}
2580-
zval_ptr_dtor(str);
2581-
ZVAL_STR(str, zstr);
2582-
}
2583-
25842577
if (!Z_REFCOUNTED_P(str)) {
25852578
Z_STR_P(str) = zend_string_init(Z_STRVAL_P(str), Z_STRLEN_P(str), 0);
25862579
Z_TYPE_INFO_P(str) = IS_STRING_EX;

0 commit comments

Comments
 (0)