summaryrefslogtreecommitdiffstats
path: root/7c692b9880aa6a501b6627d923bbc8ed1da1465f.patch
blob: 5b81584e51d8c6726a54202e28db8b7bcb598bd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
From 7c692b9880aa6a501b6627d923bbc8ed1da1465f Mon Sep 17 00:00:00 2001
From: Anatol Belski <ab@php.net>
Date: Sat, 1 Jun 2019 14:12:31 +0200
Subject: [PATCH] Fix 7.4+ compatibility

---
 parle.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 79 insertions(+), 6 deletions(-)

diff --git a/parle.cpp b/parle.cpp
index 6a46e4d..087de5e 100644
--- a/parle.cpp
+++ b/parle.cpp
@@ -1771,7 +1771,12 @@ php_parle_rlexer_read_property(zval *object, zval *member, int type, void **cach
 	return php_parle_lex_read_property<ze_parle_rlexer_obj>(object, member, type, cache_slot, rv);
 }/*}}}*/
 
-template <typename lexer_obj_type> void
+template <typename lexer_obj_type>
+#if PHP_VERSION_ID >= 70400
+zval *
+#else
+void
+#endif
 php_parle_lex_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
 	lexer_obj_type *zplo;
@@ -1796,11 +1801,20 @@ php_parle_lex_write_property(zval *object, zval *member, zval *value, void **cac
 		}
 	} else if (PARLE_IS_PROP("flags")) {
 		lex.rules.flags(zval_get_long(value));
-	} else PARLE_LEX_CHECK_THROW_RO_PROP("state")
+	}
+#if PHP_VERSION_ID >= 70400
+	  else PARLE_LEX_CHECK_THROW_RET_RO_PROP("state")
+	  else PARLE_LEX_CHECK_THROW_RET_RO_PROP("cursor")
+	  else PARLE_LEX_CHECK_THROW_RET_RO_PROP("marker")
+	  else PARLE_LEX_CHECK_THROW_RET_RO_PROP("line")
+	  else PARLE_LEX_CHECK_THROW_RET_RO_PROP("column")
+#else
+	  else PARLE_LEX_CHECK_THROW_RO_PROP("state")
 	  else PARLE_LEX_CHECK_THROW_RO_PROP("cursor")
 	  else PARLE_LEX_CHECK_THROW_RO_PROP("marker")
 	  else PARLE_LEX_CHECK_THROW_RO_PROP("line")
 	  else PARLE_LEX_CHECK_THROW_RO_PROP("column")
+#endif
 	else {
 		(zend_get_std_object_handlers())->write_property(object, member, value, cache_slot);
 	}
@@ -1808,17 +1822,35 @@ php_parle_lex_write_property(zval *object, zval *member, zval *value, void **cac
 	if (member == &tmp_member) {
 		zval_dtor(member);
 	}
+
+#if PHP_VERSION_ID >= 70400
+	return value;
+#endif
 }/*}}}*/
 
+#if PHP_VERSION_ID >= 70400
+static zval *
+#else
 static void
+#endif
 php_parle_lexer_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
+#if PHP_VERSION_ID >= 70400
+	return
+#endif
 	php_parle_lex_write_property<ze_parle_lexer_obj>(object, member, value, cache_slot);
 }/*}}}*/
 
+#if PHP_VERSION_ID >= 70400
+static zval *
+#else
 static void
+#endif
 php_parle_rlexer_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
+#if PHP_VERSION_ID >= 70400
+	return
+#endif
 	php_parle_lex_write_property<ze_parle_rlexer_obj>(object, member, value, cache_slot);
 }/*}}}*/
 
@@ -2061,7 +2093,12 @@ php_parle_rparser_read_property(zval *object, zval *member, int type, void **cac
 	return php_parle_par_read_property<ze_parle_parser_obj>(object, member, type, cache_slot, rv);
 }/*}}}*/
 
-template <typename parser_obj_type> void
+template <typename parser_obj_type>
+#if PHP_VERSION_ID >= 70400
+zval *
+#else
+void
+#endif
 php_parle_par_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
 	zval tmp_member;
@@ -2073,8 +2110,13 @@ php_parle_par_write_property(zval *object, zval *member, zval *value, void **cac
 		cache_slot = NULL;
 	}
 
+#if PHP_VERSION_ID >= 70400
+	PARLE_PAR_CHECK_THROW_RET_RO_PROP("action")
+	else PARLE_PAR_CHECK_THROW_RET_RO_PROP("reduceId")
+#else
 	PARLE_PAR_CHECK_THROW_RO_PROP("action")
 	else PARLE_PAR_CHECK_THROW_RO_PROP("reduceId")
+#endif
 	else {
 		(zend_get_std_object_handlers())->write_property(object, member, value, cache_slot);
 	}
@@ -2082,18 +2124,36 @@ php_parle_par_write_property(zval *object, zval *member, zval *value, void **cac
 	if (member == &tmp_member) {
 		zval_dtor(member);
 	}
+
+#if PHP_VERSION_ID >= 70400
+	return value;
+#endif
 }/*}}}*/
 
+#if PHP_VERSION_ID >= 70400
+static zval *
+#else
 static void
+#endif
 php_parle_parser_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
-	return php_parle_par_write_property<ze_parle_parser_obj>(object, member, value, cache_slot);
+#if PHP_VERSION_ID >= 70400
+	return
+#endif
+	php_parle_par_write_property<ze_parle_parser_obj>(object, member, value, cache_slot);
 }/*}}}*/
 
+#if PHP_VERSION_ID >= 70400
+static zval *
+#else
 static void
+#endif
 php_parle_rparser_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
-	return php_parle_par_write_property<ze_parle_rparser_obj>(object, member, value, cache_slot);
+#if PHP_VERSION_ID >= 70400
+	return
+#endif
+	php_parle_par_write_property<ze_parle_rparser_obj>(object, member, value, cache_slot);
 }/*}}}*/
 
 template <typename parser_obj_type> HashTable *
@@ -2303,7 +2363,11 @@ php_parle_stack_read_property(zval *object, zval *member, int type, void **cache
 	return retval;
 }/*}}}*/
 
+#if PHP_VERSION_ID >= 70400
+static zval *
+#else
 static void
+#endif
 php_parle_stack_write_property(zval *object, zval *member, zval *value, void **cache_slot) noexcept
 {/*{{{*/
 	ze_parle_stack_obj *zpso;
@@ -2336,8 +2400,14 @@ php_parle_stack_write_property(zval *object, zval *member, zval *value, void **c
 			zval_ptr_dtor(old);
 			efree(old);
 		}
-	} else PARLE_STACK_CHECK_THROW_RO_PROP("empty")
+	}
+#if PHP_VERSION_ID >= 70400
+	  else PARLE_STACK_CHECK_THROW_RET_RO_PROP("empty")
+	  else PARLE_STACK_CHECK_THROW_RET_RO_PROP("size")
+#else
+	  else PARLE_STACK_CHECK_THROW_RO_PROP("empty")
 	  else PARLE_STACK_CHECK_THROW_RO_PROP("size")
+#endif
 	  else {
 		(zend_get_std_object_handlers())->write_property(object, member, value, cache_slot);
 	}
@@ -2345,6 +2415,9 @@ php_parle_stack_write_property(zval *object, zval *member, zval *value, void **c
 	if (member == &tmp_member) {
 		zval_dtor(member);
 	}
+#if PHP_VERSION_ID >= 70400
+	return value;
+#endif
 }/*}}}*/
 
 static HashTable *