|
159 | 159 | #endif |
160 | 160 |
|
161 | 161 | #if SIZEOF_PHONGO_LONG == 8 |
162 | | -#define ADD_INDEX_INT64(zval, index, value) add_index_long(zval, index, value) |
163 | | -#define ADD_NEXT_INDEX_INT64(zval, value) add_next_index_long(zval, value) |
164 | | -#define ADD_ASSOC_INT64(zval, key, value) add_assoc_long(zval, key, value) |
| 162 | +#define ADD_INDEX_INT64(_zv, _index, _value) add_index_long((_zv), (_index), (_value)) |
| 163 | +#define ADD_NEXT_INDEX_INT64(_zv, _value) add_next_index_long((_zv), (_value)) |
| 164 | +#define ADD_ASSOC_INT64(_zv, _key, _value) add_assoc_long((_zv), (_key), (_value)) |
165 | 165 | #elif SIZEOF_PHONGO_LONG == 4 |
166 | | -#define ADD_INDEX_INT64(zval, index, value) \ |
167 | | - if ((value) > INT32_MAX || (value) < INT32_MIN) { \ |
168 | | - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Integer overflow detected on your platform: %lld", (value)); \ |
169 | | - } else { \ |
170 | | - add_index_long(zval, index, (value)); \ |
| 166 | +#if PHP_VERSION_ID >= 70000 |
| 167 | +#define ADD_INDEX_INT64(_zv, _index, _value) \ |
| 168 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 169 | + zval zchild; \ |
| 170 | + php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \ |
| 171 | + add_index_zval((_zv), (_index), &zchild); \ |
| 172 | + } else { \ |
| 173 | + add_index_long((_zv), (_index), (_value)); \ |
171 | 174 | } |
172 | | -#define ADD_NEXT_INDEX_INT64(zval, value) \ |
173 | | - if ((value) > INT32_MAX || (value) < INT32_MIN) { \ |
174 | | - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Integer overflow detected on your platform: %lld", (value)); \ |
175 | | - } else { \ |
176 | | - add_next_index_long(zval, (value)); \ |
| 175 | +#define ADD_NEXT_INDEX_INT64(_zv, _value) \ |
| 176 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 177 | + zval zchild; \ |
| 178 | + php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \ |
| 179 | + add_next_index_zval((_zv), &zchild); \ |
| 180 | + } else { \ |
| 181 | + add_next_index_long((_zv), (_value)); \ |
177 | 182 | } |
178 | | -#define ADD_ASSOC_INT64(zval, key, value) \ |
179 | | - if ((value) > INT32_MAX || (value) < INT32_MIN) { \ |
180 | | - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Integer overflow detected on your platform: %lld", (value)); \ |
181 | | - } else { \ |
182 | | - add_assoc_long(zval, key, (value)); \ |
| 183 | +#define ADD_ASSOC_INT64(_zv, _key, _value) \ |
| 184 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 185 | + zval zchild; \ |
| 186 | + php_phongo_new_int64(&zchild, (_value) TSRMLS_CC); \ |
| 187 | + add_assoc_zval((_zv), (_key), &zchild); \ |
| 188 | + } else { \ |
| 189 | + add_assoc_long((_zv), (_key), (_value)); \ |
183 | 190 | } |
184 | | -#else |
| 191 | +#else /* PHP_VERSION_ID < 70000 */ |
| 192 | +#define ADD_INDEX_INT64(_zv, _index, _value) \ |
| 193 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 194 | + zval* zchild = NULL; \ |
| 195 | + TSRMLS_FETCH(); \ |
| 196 | + MAKE_STD_ZVAL(zchild); \ |
| 197 | + php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \ |
| 198 | + add_index_zval((_zv), (_index), zchild); \ |
| 199 | + } else { \ |
| 200 | + add_index_long((_zv), (_index), (_value)); \ |
| 201 | + } |
| 202 | +#define ADD_NEXT_INDEX_INT64(_zv, _value) \ |
| 203 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 204 | + zval* zchild = NULL; \ |
| 205 | + TSRMLS_FETCH(); \ |
| 206 | + MAKE_STD_ZVAL(zchild); \ |
| 207 | + php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \ |
| 208 | + add_next_index_zval((_zv), zchild); \ |
| 209 | + } else { \ |
| 210 | + add_next_index_long((_zv), (_value)); \ |
| 211 | + } |
| 212 | +#define ADD_ASSOC_INT64(_zv, _key, _value) \ |
| 213 | + if ((_value) > INT32_MAX || (_value) < INT32_MIN) { \ |
| 214 | + zval* zchild = NULL; \ |
| 215 | + TSRMLS_FETCH(); \ |
| 216 | + MAKE_STD_ZVAL(zchild); \ |
| 217 | + php_phongo_new_int64(zchild, (_value) TSRMLS_CC); \ |
| 218 | + add_assoc_zval((_zv), (_key), zchild); \ |
| 219 | + } else { \ |
| 220 | + add_assoc_long((_zv), (_key), (_value)); \ |
| 221 | + } |
| 222 | +#endif /* PHP_VERSION_ID */ |
| 223 | +#else /* SIZEOF_PHONGO_LONG != 8 && SIZEOF_PHONGO_LONG != 4 */ |
185 | 224 | #error Unsupported architecture (integers are neither 32-bit nor 64-bit) |
186 | | -#endif |
| 225 | +#endif /* SIZEOF_PHONGO_LONG */ |
187 | 226 |
|
188 | 227 | void phongo_add_exception_prop(const char* prop, int prop_len, zval* value TSRMLS_DC); |
189 | 228 | zend_bool php_phongo_zend_hash_apply_protection_begin(HashTable* ht); |
|
0 commit comments