xref: /PHP-7.0/Zend/zend_vm_execute.h (revision 75b83ec2)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1998-2017 Zend Technologies Ltd. (http://www.zend.com) |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 2.00 of the Zend license,     |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.zend.com/license/2_00.txt.                                |
11    | If you did not receive a copy of the Zend license and are unable to  |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@zend.com so we can mail you a copy immediately.              |
14    +----------------------------------------------------------------------+
15    | Authors: Andi Gutmans <andi@zend.com>                                |
16    |          Zeev Suraski <zeev@zend.com>                                |
17    |          Dmitry Stogov <dmitry@zend.com>                             |
18    +----------------------------------------------------------------------+
19 */
20 
21 #ifdef ZEND_WIN32
22 # pragma warning(once : 4101)
23 # pragma warning(once : 6235)
24 # pragma warning(once : 6237)
25 # pragma warning(once : 6239)
26 # pragma warning(once : 6240)
27 # pragma warning(once : 6285)
28 # pragma warning(once : 6286)
29 # pragma warning(once : 6326)
30 #endif
31 static user_opcode_handler_t zend_user_opcode_handlers[256] = {
32 	(user_opcode_handler_t)NULL,
33 	(user_opcode_handler_t)NULL,
34 	(user_opcode_handler_t)NULL,
35 	(user_opcode_handler_t)NULL,
36 	(user_opcode_handler_t)NULL,
37 	(user_opcode_handler_t)NULL,
38 	(user_opcode_handler_t)NULL,
39 	(user_opcode_handler_t)NULL,
40 	(user_opcode_handler_t)NULL,
41 	(user_opcode_handler_t)NULL,
42 	(user_opcode_handler_t)NULL,
43 	(user_opcode_handler_t)NULL,
44 	(user_opcode_handler_t)NULL,
45 	(user_opcode_handler_t)NULL,
46 	(user_opcode_handler_t)NULL,
47 	(user_opcode_handler_t)NULL,
48 	(user_opcode_handler_t)NULL,
49 	(user_opcode_handler_t)NULL,
50 	(user_opcode_handler_t)NULL,
51 	(user_opcode_handler_t)NULL,
52 	(user_opcode_handler_t)NULL,
53 	(user_opcode_handler_t)NULL,
54 	(user_opcode_handler_t)NULL,
55 	(user_opcode_handler_t)NULL,
56 	(user_opcode_handler_t)NULL,
57 	(user_opcode_handler_t)NULL,
58 	(user_opcode_handler_t)NULL,
59 	(user_opcode_handler_t)NULL,
60 	(user_opcode_handler_t)NULL,
61 	(user_opcode_handler_t)NULL,
62 	(user_opcode_handler_t)NULL,
63 	(user_opcode_handler_t)NULL,
64 	(user_opcode_handler_t)NULL,
65 	(user_opcode_handler_t)NULL,
66 	(user_opcode_handler_t)NULL,
67 	(user_opcode_handler_t)NULL,
68 	(user_opcode_handler_t)NULL,
69 	(user_opcode_handler_t)NULL,
70 	(user_opcode_handler_t)NULL,
71 	(user_opcode_handler_t)NULL,
72 	(user_opcode_handler_t)NULL,
73 	(user_opcode_handler_t)NULL,
74 	(user_opcode_handler_t)NULL,
75 	(user_opcode_handler_t)NULL,
76 	(user_opcode_handler_t)NULL,
77 	(user_opcode_handler_t)NULL,
78 	(user_opcode_handler_t)NULL,
79 	(user_opcode_handler_t)NULL,
80 	(user_opcode_handler_t)NULL,
81 	(user_opcode_handler_t)NULL,
82 	(user_opcode_handler_t)NULL,
83 	(user_opcode_handler_t)NULL,
84 	(user_opcode_handler_t)NULL,
85 	(user_opcode_handler_t)NULL,
86 	(user_opcode_handler_t)NULL,
87 	(user_opcode_handler_t)NULL,
88 	(user_opcode_handler_t)NULL,
89 	(user_opcode_handler_t)NULL,
90 	(user_opcode_handler_t)NULL,
91 	(user_opcode_handler_t)NULL,
92 	(user_opcode_handler_t)NULL,
93 	(user_opcode_handler_t)NULL,
94 	(user_opcode_handler_t)NULL,
95 	(user_opcode_handler_t)NULL,
96 	(user_opcode_handler_t)NULL,
97 	(user_opcode_handler_t)NULL,
98 	(user_opcode_handler_t)NULL,
99 	(user_opcode_handler_t)NULL,
100 	(user_opcode_handler_t)NULL,
101 	(user_opcode_handler_t)NULL,
102 	(user_opcode_handler_t)NULL,
103 	(user_opcode_handler_t)NULL,
104 	(user_opcode_handler_t)NULL,
105 	(user_opcode_handler_t)NULL,
106 	(user_opcode_handler_t)NULL,
107 	(user_opcode_handler_t)NULL,
108 	(user_opcode_handler_t)NULL,
109 	(user_opcode_handler_t)NULL,
110 	(user_opcode_handler_t)NULL,
111 	(user_opcode_handler_t)NULL,
112 	(user_opcode_handler_t)NULL,
113 	(user_opcode_handler_t)NULL,
114 	(user_opcode_handler_t)NULL,
115 	(user_opcode_handler_t)NULL,
116 	(user_opcode_handler_t)NULL,
117 	(user_opcode_handler_t)NULL,
118 	(user_opcode_handler_t)NULL,
119 	(user_opcode_handler_t)NULL,
120 	(user_opcode_handler_t)NULL,
121 	(user_opcode_handler_t)NULL,
122 	(user_opcode_handler_t)NULL,
123 	(user_opcode_handler_t)NULL,
124 	(user_opcode_handler_t)NULL,
125 	(user_opcode_handler_t)NULL,
126 	(user_opcode_handler_t)NULL,
127 	(user_opcode_handler_t)NULL,
128 	(user_opcode_handler_t)NULL,
129 	(user_opcode_handler_t)NULL,
130 	(user_opcode_handler_t)NULL,
131 	(user_opcode_handler_t)NULL,
132 	(user_opcode_handler_t)NULL,
133 	(user_opcode_handler_t)NULL,
134 	(user_opcode_handler_t)NULL,
135 	(user_opcode_handler_t)NULL,
136 	(user_opcode_handler_t)NULL,
137 	(user_opcode_handler_t)NULL,
138 	(user_opcode_handler_t)NULL,
139 	(user_opcode_handler_t)NULL,
140 	(user_opcode_handler_t)NULL,
141 	(user_opcode_handler_t)NULL,
142 	(user_opcode_handler_t)NULL,
143 	(user_opcode_handler_t)NULL,
144 	(user_opcode_handler_t)NULL,
145 	(user_opcode_handler_t)NULL,
146 	(user_opcode_handler_t)NULL,
147 	(user_opcode_handler_t)NULL,
148 	(user_opcode_handler_t)NULL,
149 	(user_opcode_handler_t)NULL,
150 	(user_opcode_handler_t)NULL,
151 	(user_opcode_handler_t)NULL,
152 	(user_opcode_handler_t)NULL,
153 	(user_opcode_handler_t)NULL,
154 	(user_opcode_handler_t)NULL,
155 	(user_opcode_handler_t)NULL,
156 	(user_opcode_handler_t)NULL,
157 	(user_opcode_handler_t)NULL,
158 	(user_opcode_handler_t)NULL,
159 	(user_opcode_handler_t)NULL,
160 	(user_opcode_handler_t)NULL,
161 	(user_opcode_handler_t)NULL,
162 	(user_opcode_handler_t)NULL,
163 	(user_opcode_handler_t)NULL,
164 	(user_opcode_handler_t)NULL,
165 	(user_opcode_handler_t)NULL,
166 	(user_opcode_handler_t)NULL,
167 	(user_opcode_handler_t)NULL,
168 	(user_opcode_handler_t)NULL,
169 	(user_opcode_handler_t)NULL,
170 	(user_opcode_handler_t)NULL,
171 	(user_opcode_handler_t)NULL,
172 	(user_opcode_handler_t)NULL,
173 	(user_opcode_handler_t)NULL,
174 	(user_opcode_handler_t)NULL,
175 	(user_opcode_handler_t)NULL,
176 	(user_opcode_handler_t)NULL,
177 	(user_opcode_handler_t)NULL,
178 	(user_opcode_handler_t)NULL,
179 	(user_opcode_handler_t)NULL,
180 	(user_opcode_handler_t)NULL,
181 	(user_opcode_handler_t)NULL,
182 	(user_opcode_handler_t)NULL,
183 	(user_opcode_handler_t)NULL,
184 	(user_opcode_handler_t)NULL,
185 	(user_opcode_handler_t)NULL,
186 	(user_opcode_handler_t)NULL,
187 	(user_opcode_handler_t)NULL,
188 	(user_opcode_handler_t)NULL,
189 	(user_opcode_handler_t)NULL,
190 	(user_opcode_handler_t)NULL,
191 	(user_opcode_handler_t)NULL,
192 	(user_opcode_handler_t)NULL,
193 	(user_opcode_handler_t)NULL,
194 	(user_opcode_handler_t)NULL,
195 	(user_opcode_handler_t)NULL,
196 	(user_opcode_handler_t)NULL,
197 	(user_opcode_handler_t)NULL,
198 	(user_opcode_handler_t)NULL,
199 	(user_opcode_handler_t)NULL,
200 	(user_opcode_handler_t)NULL,
201 	(user_opcode_handler_t)NULL,
202 	(user_opcode_handler_t)NULL,
203 	(user_opcode_handler_t)NULL,
204 	(user_opcode_handler_t)NULL,
205 	(user_opcode_handler_t)NULL,
206 	(user_opcode_handler_t)NULL,
207 	(user_opcode_handler_t)NULL,
208 	(user_opcode_handler_t)NULL,
209 	(user_opcode_handler_t)NULL,
210 	(user_opcode_handler_t)NULL,
211 	(user_opcode_handler_t)NULL,
212 	(user_opcode_handler_t)NULL,
213 	(user_opcode_handler_t)NULL,
214 	(user_opcode_handler_t)NULL,
215 	(user_opcode_handler_t)NULL,
216 	(user_opcode_handler_t)NULL,
217 	(user_opcode_handler_t)NULL,
218 	(user_opcode_handler_t)NULL,
219 	(user_opcode_handler_t)NULL,
220 	(user_opcode_handler_t)NULL,
221 	(user_opcode_handler_t)NULL,
222 	(user_opcode_handler_t)NULL,
223 	(user_opcode_handler_t)NULL,
224 	(user_opcode_handler_t)NULL,
225 	(user_opcode_handler_t)NULL,
226 	(user_opcode_handler_t)NULL,
227 	(user_opcode_handler_t)NULL,
228 	(user_opcode_handler_t)NULL,
229 	(user_opcode_handler_t)NULL,
230 	(user_opcode_handler_t)NULL,
231 	(user_opcode_handler_t)NULL,
232 	(user_opcode_handler_t)NULL,
233 	(user_opcode_handler_t)NULL,
234 	(user_opcode_handler_t)NULL,
235 	(user_opcode_handler_t)NULL,
236 	(user_opcode_handler_t)NULL,
237 	(user_opcode_handler_t)NULL,
238 	(user_opcode_handler_t)NULL,
239 	(user_opcode_handler_t)NULL,
240 	(user_opcode_handler_t)NULL,
241 	(user_opcode_handler_t)NULL,
242 	(user_opcode_handler_t)NULL,
243 	(user_opcode_handler_t)NULL,
244 	(user_opcode_handler_t)NULL,
245 	(user_opcode_handler_t)NULL,
246 	(user_opcode_handler_t)NULL,
247 	(user_opcode_handler_t)NULL,
248 	(user_opcode_handler_t)NULL,
249 	(user_opcode_handler_t)NULL,
250 	(user_opcode_handler_t)NULL,
251 	(user_opcode_handler_t)NULL,
252 	(user_opcode_handler_t)NULL,
253 	(user_opcode_handler_t)NULL,
254 	(user_opcode_handler_t)NULL,
255 	(user_opcode_handler_t)NULL,
256 	(user_opcode_handler_t)NULL,
257 	(user_opcode_handler_t)NULL,
258 	(user_opcode_handler_t)NULL,
259 	(user_opcode_handler_t)NULL,
260 	(user_opcode_handler_t)NULL,
261 	(user_opcode_handler_t)NULL,
262 	(user_opcode_handler_t)NULL,
263 	(user_opcode_handler_t)NULL,
264 	(user_opcode_handler_t)NULL,
265 	(user_opcode_handler_t)NULL,
266 	(user_opcode_handler_t)NULL,
267 	(user_opcode_handler_t)NULL,
268 	(user_opcode_handler_t)NULL,
269 	(user_opcode_handler_t)NULL,
270 	(user_opcode_handler_t)NULL,
271 	(user_opcode_handler_t)NULL,
272 	(user_opcode_handler_t)NULL,
273 	(user_opcode_handler_t)NULL,
274 	(user_opcode_handler_t)NULL,
275 	(user_opcode_handler_t)NULL,
276 	(user_opcode_handler_t)NULL,
277 	(user_opcode_handler_t)NULL,
278 	(user_opcode_handler_t)NULL,
279 	(user_opcode_handler_t)NULL,
280 	(user_opcode_handler_t)NULL,
281 	(user_opcode_handler_t)NULL,
282 	(user_opcode_handler_t)NULL,
283 	(user_opcode_handler_t)NULL,
284 	(user_opcode_handler_t)NULL,
285 	(user_opcode_handler_t)NULL,
286 	(user_opcode_handler_t)NULL,
287 	(user_opcode_handler_t)NULL
288 };
289 
290 static zend_uchar zend_user_opcodes[256] = {0,
291 	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
292 	17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
293 	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
294 	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
295 	65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
296 	81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
297 	97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
298 	113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
299 	129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
300 	145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
301 	161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
302 	177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
303 	193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
304 	209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
305 	225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
306 	241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
307 };
308 
309 static const void **zend_opcode_handlers;
310 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);
311 
312 
313 #ifdef ZEND_VM_FP_GLOBAL_REG
314 #pragma GCC diagnostic ignored "-Wvolatile-register-var"
315 register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
316 #pragma GCC diagnostic warning "-Wvolatile-register-var"
317 #endif
318 
319 #ifdef ZEND_VM_IP_GLOBAL_REG
320 #pragma GCC diagnostic ignored "-Wvolatile-register-var"
321 register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
322 #pragma GCC diagnostic warning "-Wvolatile-register-var"
323 #endif
324 
325 #ifdef ZEND_VM_FP_GLOBAL_REG
326 # define ZEND_OPCODE_HANDLER_ARGS void
327 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
328 # define ZEND_OPCODE_HANDLER_ARGS_DC
329 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
330 #else
331 # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
332 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
333 # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
334 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
335 #endif
336 
337 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
338 # define ZEND_OPCODE_HANDLER_RET void
339 # define ZEND_VM_TAIL_CALL(call) call; return
340 # ifdef ZEND_VM_TAIL_CALL_DISPATCH
341 #  define ZEND_VM_CONTINUE()     ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
342 # else
343 #  define ZEND_VM_CONTINUE()     return
344 # endif
345 # define ZEND_VM_RETURN()        opline = NULL; return
346 #else
347 # define ZEND_OPCODE_HANDLER_RET int
348 # define ZEND_VM_TAIL_CALL(call) return call
349 # define ZEND_VM_CONTINUE()      return  0
350 # define ZEND_VM_RETURN()        return -1
351 #endif
352 
353 typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
354 
355 #undef OPLINE
356 #undef DCL_OPLINE
357 #undef USE_OPLINE
358 #undef LOAD_OPLINE
359 #undef LOAD_OPLINE_EX
360 #undef SAVE_OPLINE
361 #define DCL_OPLINE
362 #ifdef ZEND_VM_IP_GLOBAL_REG
363 # define OPLINE opline
364 # define USE_OPLINE
365 # define LOAD_OPLINE() opline = EX(opline)
366 # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
367 # define SAVE_OPLINE() EX(opline) = opline
368 #else
369 # define OPLINE EX(opline)
370 # define USE_OPLINE const zend_op *opline = EX(opline);
371 # define LOAD_OPLINE()
372 # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
373 # define SAVE_OPLINE()
374 #endif
375 #undef HANDLE_EXCEPTION
376 #undef HANDLE_EXCEPTION_LEAVE
377 #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
378 #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
379 #if defined(ZEND_VM_FP_GLOBAL_REG)
380 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_CONTINUE()
381 # define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
382 #elif defined(ZEND_VM_IP_GLOBAL_REG)
383 # define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; return 1
384 # define ZEND_VM_LEAVE()           return  2
385 #else
386 # define ZEND_VM_ENTER()           return  1
387 # define ZEND_VM_LEAVE()           return  2
388 #endif
389 #define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
390 
391 
execute_ex(zend_execute_data * ex)392 ZEND_API void execute_ex(zend_execute_data *ex)
393 {
394 	DCL_OPLINE
395 
396 #ifdef ZEND_VM_IP_GLOBAL_REG
397 	const zend_op *orig_opline = opline;
398 #endif
399 #ifdef ZEND_VM_FP_GLOBAL_REG
400 	zend_execute_data *orig_execute_data = execute_data;
401 	execute_data = ex;
402 #else
403 	zend_execute_data *execute_data = ex;
404 #endif
405 
406 
407 	LOAD_OPLINE();
408 
409 	while (1) {
410 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
411     	int ret;
412 #endif
413 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
414 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
415 		if (UNEXPECTED(!OPLINE)) {
416 #else
417 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
418 #endif
419 #ifdef ZEND_VM_FP_GLOBAL_REG
420 			execute_data = orig_execute_data;
421 # ifdef ZEND_VM_IP_GLOBAL_REG
422 			opline = orig_opline;
423 # endif
424 			return;
425 #else
426 			if (EXPECTED(ret > 0)) {
427 				execute_data = EG(current_execute_data);
428 			} else {
429 # ifdef ZEND_VM_IP_GLOBAL_REG
430 				opline = orig_opline;
431 # endif
432 				return;
433 			}
434 #endif
435 		}
436 
437 	}
438 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
439 }
440 
441 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
442 {
443 	zend_execute_data *execute_data;
444 
445 	if (EG(exception) != NULL) {
446 		return;
447 	}
448 
449 	execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE,
450 		(zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data)));
451 	if (EG(current_execute_data)) {
452 		execute_data->symbol_table = zend_rebuild_symbol_table();
453 	} else {
454 		execute_data->symbol_table = &EG(symbol_table);
455 	}
456 	EX(prev_execute_data) = EG(current_execute_data);
457 	i_init_execute_data(execute_data, op_array, return_value);
458 	zend_execute_ex(execute_data);
459 	zend_vm_stack_free_call_frame(execute_data);
460 }
461 
462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
463 {
464 	zend_execute_data *old_execute_data;
465 	uint32_t call_info = EX_CALL_INFO();
466 
467 	if (EXPECTED(ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_NESTED_FUNCTION)) {
468 		zend_object *object;
469 
470 		i_free_compiled_variables(execute_data);
471 		if (UNEXPECTED(EX(symbol_table) != NULL)) {
472 			zend_clean_and_cache_symbol_table(EX(symbol_table));
473 		}
474 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
475 		old_execute_data = execute_data;
476 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
477 		if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
478 			OBJ_RELEASE((zend_object*)old_execute_data->func->op_array.prototype);
479 		}
480 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
481 			object = Z_OBJ(old_execute_data->This);
482 #if 0
483 			if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
484 				if (!(EX(opline)->op1.num & ZEND_CALL_CTOR_RESULT_UNUSED)) {
485 #else
486 			if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
487 				if (!(call_info & ZEND_CALL_CTOR_RESULT_UNUSED)) {
488 #endif
489 					GC_REFCOUNT(object)--;
490 				}
491 				if (GC_REFCOUNT(object) == 1) {
492 					zend_object_store_ctor_failed(object);
493 				}
494 			}
495 			OBJ_RELEASE(object);
496 		}
497 		EG(scope) = EX(func)->op_array.scope;
498 
499 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
500 
501 		if (UNEXPECTED(EG(exception) != NULL)) {
502 			const zend_op *old_opline = EX(opline);
503 			zend_throw_exception_internal(NULL);
504 			if (old_opline->opcode != ZEND_HANDLE_EXCEPTION && RETURN_VALUE_USED(old_opline)) {
505 				zval_ptr_dtor(EX_VAR(old_opline->result.var));
506 			}
507 			HANDLE_EXCEPTION_LEAVE();
508 		}
509 
510 		LOAD_NEXT_OPLINE();
511 		ZEND_VM_LEAVE();
512 	}
513 	if (EXPECTED((ZEND_CALL_KIND_EX(call_info) & ZEND_CALL_TOP) == 0)) {
514 		zend_detach_symbol_table(execute_data);
515 		destroy_op_array(&EX(func)->op_array);
516 		efree_size(EX(func), sizeof(zend_op_array));
517 		old_execute_data = execute_data;
518 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
519 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
520 
521 		zend_attach_symbol_table(execute_data);
522 		if (UNEXPECTED(EG(exception) != NULL)) {
523 			zend_throw_exception_internal(NULL);
524 			HANDLE_EXCEPTION_LEAVE();
525 		}
526 
527 		LOAD_NEXT_OPLINE();
528 		ZEND_VM_LEAVE();
529 	} else {
530 		if (ZEND_CALL_KIND_EX(call_info) == ZEND_CALL_TOP_FUNCTION) {
531 			i_free_compiled_variables(execute_data);
532 			if (UNEXPECTED(EX(symbol_table) != NULL)) {
533 				zend_clean_and_cache_symbol_table(EX(symbol_table));
534 			}
535 			zend_vm_stack_free_extra_args_ex(call_info, execute_data);
536 			EG(current_execute_data) = EX(prev_execute_data);
537 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
538 				OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype);
539 			}
540 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
541 			zend_array *symbol_table = EX(symbol_table);
542 
543 			zend_detach_symbol_table(execute_data);
544 			old_execute_data = EX(prev_execute_data);
545 			while (old_execute_data) {
546 				if (old_execute_data->func && ZEND_USER_CODE(old_execute_data->func->op_array.type)) {
547 					if (old_execute_data->symbol_table == symbol_table) {
548 						zend_attach_symbol_table(old_execute_data);
549 					}
550 					break;
551 				}
552 				old_execute_data = old_execute_data->prev_execute_data;
553 			}
554 			EG(current_execute_data) = EX(prev_execute_data);
555 		}
556 
557 		ZEND_VM_RETURN();
558 	}
559 }
560 
561 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
562 {
563 	USE_OPLINE
564 
565 	ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
566 	ZEND_VM_CONTINUE();
567 }
568 
569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
570 {
571 	USE_OPLINE
572 	zend_execute_data *call = EX(call);
573 	zend_function *fbc = call->func;
574 	zval *ret;
575 
576 	SAVE_OPLINE();
577 	EX(call) = call->prev_execute_data;
578 
579 	call->prev_execute_data = execute_data;
580 	EG(current_execute_data) = call;
581 
582 	ret = EX_VAR(opline->result.var);
583 	ZVAL_NULL(ret);
584 	Z_VAR_FLAGS_P(ret) = 0;
585 
586 	fbc->internal_function.handler(call, ret);
587 
588 #if ZEND_DEBUG
589 	ZEND_ASSERT(
590 		EG(exception) || !call->func ||
591 		!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
592 		zend_verify_internal_return_type(call->func, EX_VAR(opline->result.var)));
593 #endif
594 
595 	EG(current_execute_data) = call->prev_execute_data;
596 	zend_vm_stack_free_args(call);
597 	zend_vm_stack_free_call_frame(call);
598 
599 	if (!RETURN_VALUE_USED(opline)) {
600 		zval_ptr_dtor(EX_VAR(opline->result.var));
601 	}
602 
603 	if (UNEXPECTED(EG(exception) != NULL)) {
604 		zend_throw_exception_internal(NULL);
605 		if (RETURN_VALUE_USED(opline)) {
606 			zval_ptr_dtor(EX_VAR(opline->result.var));
607 		}
608 		HANDLE_EXCEPTION();
609 	}
610 
611 	ZEND_VM_INTERRUPT_CHECK();
612 	ZEND_VM_NEXT_OPCODE();
613 }
614 
615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
616 {
617 	USE_OPLINE
618 	zend_execute_data *call = EX(call);
619 	zend_function *fbc = call->func;
620 	zval *ret;
621 
622 	SAVE_OPLINE();
623 	EX(call) = call->prev_execute_data;
624 
625 	EG(scope) = NULL;
626 	ret = NULL;
627 	call->symbol_table = NULL;
628 	if (RETURN_VALUE_USED(opline)) {
629 		ret = EX_VAR(opline->result.var);
630 		ZVAL_NULL(ret);
631 		Z_VAR_FLAGS_P(ret) = 0;
632 	}
633 
634 	call->prev_execute_data = execute_data;
635 	i_init_func_execute_data(call, &fbc->op_array, ret, 0);
636 
637 	ZEND_VM_ENTER();
638 }
639 
640 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
641 {
642 	USE_OPLINE
643 	zend_execute_data *call = EX(call);
644 	zend_function *fbc = call->func;
645 	zval *ret;
646 
647 	SAVE_OPLINE();
648 	EX(call) = call->prev_execute_data;
649 
650 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
651 		EG(scope) = NULL;
652 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
653 			if (EXPECTED(RETURN_VALUE_USED(opline))) {
654 				ret = EX_VAR(opline->result.var);
655 				zend_generator_create_zval(call, &fbc->op_array, ret);
656 				Z_VAR_FLAGS_P(ret) = 0;
657 			} else {
658 				zend_vm_stack_free_args(call);
659 			}
660 
661 			zend_vm_stack_free_call_frame(call);
662 		} else {
663 			ret = NULL;
664 			call->symbol_table = NULL;
665 			if (RETURN_VALUE_USED(opline)) {
666 				ret = EX_VAR(opline->result.var);
667 				ZVAL_NULL(ret);
668 				Z_VAR_FLAGS_P(ret) = 0;
669 			}
670 
671 			call->prev_execute_data = execute_data;
672 			i_init_func_execute_data(call, &fbc->op_array, ret, 0);
673 
674 			ZEND_VM_ENTER();
675 		}
676 		EG(scope) = EX(func)->op_array.scope;
677 	} else {
678 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
679 
680 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
681 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
682 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
683 				fbc->common.scope ? "::" : "",
684 				ZSTR_VAL(fbc->common.function_name));
685 			if (UNEXPECTED(EG(exception) != NULL)) {
686 				HANDLE_EXCEPTION();
687 			}
688 		}
689 
690 		call->prev_execute_data = execute_data;
691 		EG(current_execute_data) = call;
692 
693 		if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {
694 			uint32_t i;
695 			uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
696 			zval *p = ZEND_CALL_ARG(call, 1);
697 
698 			for (i = 0; i < num_args; ++i) {
699 				if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) {
700 					EG(current_execute_data) = call->prev_execute_data;
701 					zend_vm_stack_free_args(call);
702 					zend_vm_stack_free_call_frame(call);
703 					zend_throw_exception_internal(NULL);
704 					HANDLE_EXCEPTION();
705 				}
706 				p++;
707 			}
708 		}
709 
710 		ret = EX_VAR(opline->result.var);
711 		ZVAL_NULL(ret);
712 		Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0;
713 
714 		fbc->internal_function.handler(call, ret);
715 
716 #if ZEND_DEBUG
717 		ZEND_ASSERT(
718 			EG(exception) || !call->func ||
719 			!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
720 			zend_verify_internal_return_type(call->func, EX_VAR(opline->result.var)));
721 #endif
722 
723 		EG(current_execute_data) = call->prev_execute_data;
724 		zend_vm_stack_free_args(call);
725 		zend_vm_stack_free_call_frame(call);
726 
727 		if (!RETURN_VALUE_USED(opline)) {
728 			zval_ptr_dtor(EX_VAR(opline->result.var));
729 		}
730 	}
731 
732 	if (UNEXPECTED(EG(exception) != NULL)) {
733 		zend_throw_exception_internal(NULL);
734 		if (RETURN_VALUE_USED(opline)) {
735 			zval_ptr_dtor(EX_VAR(opline->result.var));
736 		}
737 		HANDLE_EXCEPTION();
738 	}
739 	ZEND_VM_INTERRUPT_CHECK();
740 	ZEND_VM_NEXT_OPCODE();
741 }
742 
743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
744 {
745 	USE_OPLINE
746 	zend_execute_data *call = EX(call);
747 	zend_function *fbc = call->func;
748 	zend_object *object;
749 	zval *ret;
750 
751 	SAVE_OPLINE();
752 	EX(call) = call->prev_execute_data;
753 	if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
754 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
755 			zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
756 			HANDLE_EXCEPTION();
757 		}
758 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
759 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
760 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
761 				fbc->common.scope ? "::" : "",
762 				ZSTR_VAL(fbc->common.function_name));
763 			if (UNEXPECTED(EG(exception) != NULL)) {
764 				HANDLE_EXCEPTION();
765 			}
766 		}
767 	}
768 
769 	LOAD_OPLINE();
770 
771 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
772 		EG(scope) = fbc->common.scope;
773 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
774 			if (EXPECTED(RETURN_VALUE_USED(opline))) {
775 				ret = EX_VAR(opline->result.var);
776 				zend_generator_create_zval(call, &fbc->op_array, ret);
777 				Z_VAR_FLAGS_P(ret) = 0;
778 			} else {
779 				if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
780 					OBJ_RELEASE((zend_object*)fbc->op_array.prototype);
781 				}
782 				zend_vm_stack_free_args(call);
783 			}
784 		} else {
785 			ret = NULL;
786 			call->symbol_table = NULL;
787 			if (RETURN_VALUE_USED(opline)) {
788 				ret = EX_VAR(opline->result.var);
789 				ZVAL_NULL(ret);
790 				Z_VAR_FLAGS_P(ret) = 0;
791 			}
792 
793 			call->prev_execute_data = execute_data;
794 			i_init_func_execute_data(call, &fbc->op_array, ret, 1);
795 
796 			if (EXPECTED(zend_execute_ex == execute_ex)) {
797 				ZEND_VM_ENTER();
798 			} else {
799 				ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
800 				zend_execute_ex(call);
801 			}
802 		}
803 	} else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
804 		int should_change_scope = 0;
805 
806 		if (fbc->common.scope) {
807 			should_change_scope = 1;
808 			EG(scope) = fbc->common.scope;
809 		}
810 
811 		call->prev_execute_data = execute_data;
812 		EG(current_execute_data) = call;
813 
814 		if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {
815 			uint32_t i;
816 			uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
817 			zval *p = ZEND_CALL_ARG(call, 1);
818 
819 			for (i = 0; i < num_args; ++i) {
820 				if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) {
821 					EG(current_execute_data) = call->prev_execute_data;
822 					zend_vm_stack_free_args(call);
823 					if (RETURN_VALUE_USED(opline)) {
824 						ZVAL_UNDEF(EX_VAR(opline->result.var));
825 					}
826 					if (UNEXPECTED(should_change_scope)) {
827 						goto fcall_end_change_scope;
828 					} else {
829 						goto fcall_end;
830 					}
831 				}
832 				p++;
833 			}
834 		}
835 
836 		ret = EX_VAR(opline->result.var);
837 		ZVAL_NULL(ret);
838 		Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0;
839 
840 		if (!zend_execute_internal) {
841 			/* saves one function call if zend_execute_internal is not used */
842 			fbc->internal_function.handler(call, ret);
843 		} else {
844 			zend_execute_internal(call, ret);
845 		}
846 
847 #if ZEND_DEBUG
848 		ZEND_ASSERT(
849 			EG(exception) || !call->func ||
850 			!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
851 			zend_verify_internal_return_type(call->func, EX_VAR(opline->result.var)));
852 #endif
853 
854 		EG(current_execute_data) = call->prev_execute_data;
855 		zend_vm_stack_free_args(call);
856 
857 		if (!RETURN_VALUE_USED(opline)) {
858 			zval_ptr_dtor(EX_VAR(opline->result.var));
859 		}
860 
861 		if (UNEXPECTED(should_change_scope)) {
862 			goto fcall_end_change_scope;
863 		} else {
864 			goto fcall_end;
865 		}
866 	} else { /* ZEND_OVERLOADED_FUNCTION */
867 		/* Not sure what should be done here if it's a static method */
868 		object = Z_OBJ(call->This);
869 		if (UNEXPECTED(object == NULL)) {
870 			zend_vm_stack_free_args(call);
871 			if (fbc->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
872 				zend_string_release(fbc->common.function_name);
873 			}
874 			efree(fbc);
875 			zend_vm_stack_free_call_frame(call);
876 
877 			zend_throw_error(NULL, "Cannot call overloaded function for non-object");
878 			HANDLE_EXCEPTION();
879 		}
880 
881 		EG(scope) = fbc->common.scope;
882 
883 		ZVAL_NULL(EX_VAR(opline->result.var));
884 
885 		call->prev_execute_data = execute_data;
886 		EG(current_execute_data) = call;
887 		object->handlers->call_method(fbc->common.function_name, object, call, EX_VAR(opline->result.var));
888 		EG(current_execute_data) = call->prev_execute_data;
889 
890 		zend_vm_stack_free_args(call);
891 
892 		if (fbc->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
893 			zend_string_release(fbc->common.function_name);
894 		}
895 		efree(fbc);
896 
897 		if (!RETURN_VALUE_USED(opline)) {
898 			zval_ptr_dtor(EX_VAR(opline->result.var));
899 		} else {
900 			Z_VAR_FLAGS_P(EX_VAR(opline->result.var)) = 0;
901 		}
902 	}
903 
904 fcall_end_change_scope:
905 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
906 		object = Z_OBJ(call->This);
907 #if 0
908 		if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) {
909 			if (!(opline->op1.num & ZEND_CALL_CTOR_RESULT_UNUSED)) {
910 #else
911 		if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) {
912 			if (!(ZEND_CALL_INFO(call) & ZEND_CALL_CTOR_RESULT_UNUSED)) {
913 #endif
914 				GC_REFCOUNT(object)--;
915 			}
916 			if (GC_REFCOUNT(object) == 1) {
917 				zend_object_store_ctor_failed(object);
918 			}
919 		}
920 		OBJ_RELEASE(object);
921 	}
922 	EG(scope) = EX(func)->op_array.scope;
923 
924 fcall_end:
925 	zend_vm_stack_free_call_frame(call);
926 	if (UNEXPECTED(EG(exception) != NULL)) {
927 		zend_throw_exception_internal(NULL);
928 		if (RETURN_VALUE_USED(opline)) {
929 			zval_ptr_dtor(EX_VAR(opline->result.var));
930 		}
931 		HANDLE_EXCEPTION();
932 	}
933 
934 	ZEND_VM_INTERRUPT_CHECK();
935 	ZEND_VM_NEXT_OPCODE();
936 }
937 
938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
939 {
940 	USE_OPLINE
941 	zend_free_op free_op1;
942 	zval *args;
943 	int arg_num;
944 
945 	SAVE_OPLINE();
946 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
947 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
948 
949 send_again:
950 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
951 		HashTable *ht = Z_ARRVAL_P(args);
952 		zval *arg, *top;
953 		zend_string *name;
954 
955 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
956 
957 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
958 			uint32_t i;
959 			int separate = 0;
960 
961 			/* check if any of arguments are going to be passed by reference */
962 			for (i = 0; i < zend_hash_num_elements(ht); i++) {
963 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) {
964 					separate = 1;
965 					break;
966 				}
967 			}
968 			if (separate) {
969 				SEPARATE_ARRAY(args);
970 				ht = Z_ARRVAL_P(args);
971 			}
972 		}
973 
974 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
975 			if (name) {
976 				zend_throw_error(NULL, "Cannot unpack array with string keys");
977 				FREE_OP(free_op1);
978 				HANDLE_EXCEPTION();
979 			}
980 
981 			top = ZEND_CALL_ARG(EX(call), arg_num);
982 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
983 				if (Z_REFCOUNT_P(args) == 1) {
984 					ZVAL_MAKE_REF(arg);
985 					Z_ADDREF_P(arg);
986 					ZVAL_REF(top, Z_REF_P(arg));
987 				} else {
988 					ZVAL_DUP(top, arg);
989 				}
990 			} else if (Z_ISREF_P(arg)) {
991 				ZVAL_COPY(top, Z_REFVAL_P(arg));
992 			} else {
993 				ZVAL_COPY(top, arg);
994 			}
995 
996 			ZEND_CALL_NUM_ARGS(EX(call))++;
997 			arg_num++;
998 		} ZEND_HASH_FOREACH_END();
999 
1000 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
1001 		zend_class_entry *ce = Z_OBJCE_P(args);
1002 		zend_object_iterator *iter;
1003 
1004 		if (!ce || !ce->get_iterator) {
1005 			zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
1006 		} else {
1007 
1008 			iter = ce->get_iterator(ce, args, 0);
1009 			if (UNEXPECTED(!iter)) {
1010 				FREE_OP(free_op1);
1011 				if (!EG(exception)) {
1012 					zend_throw_exception_ex(
1013 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
1014 					);
1015 				}
1016 				HANDLE_EXCEPTION();
1017 			}
1018 
1019 			if (iter->funcs->rewind) {
1020 				iter->funcs->rewind(iter);
1021 				if (UNEXPECTED(EG(exception) != NULL)) {
1022 					goto unpack_iter_dtor;
1023 				}
1024 			}
1025 
1026 			for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) {
1027 				zval *arg, *top;
1028 
1029 				if (UNEXPECTED(EG(exception) != NULL)) {
1030 					goto unpack_iter_dtor;
1031 				}
1032 
1033 				arg = iter->funcs->get_current_data(iter);
1034 				if (UNEXPECTED(EG(exception) != NULL)) {
1035 					goto unpack_iter_dtor;
1036 				}
1037 
1038 				if (iter->funcs->get_current_key) {
1039 					zval key;
1040 					iter->funcs->get_current_key(iter, &key);
1041 					if (UNEXPECTED(EG(exception) != NULL)) {
1042 						goto unpack_iter_dtor;
1043 					}
1044 
1045 					if (Z_TYPE(key) == IS_STRING) {
1046 						zend_throw_error(NULL,
1047 							"Cannot unpack Traversable with string keys");
1048 						zend_string_release(Z_STR(key));
1049 						goto unpack_iter_dtor;
1050 					}
1051 
1052 					zval_dtor(&key);
1053 				}
1054 
1055 				if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1056 					zend_error(
1057 						E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
1058 						" by unpacking a Traversable, passing by-value instead", arg_num,
1059 						EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
1060 						EX(call)->func->common.scope ? "::" : "",
1061 						ZSTR_VAL(EX(call)->func->common.function_name)
1062 					);
1063 				}
1064 
1065 				if (Z_ISREF_P(arg)) {
1066 					ZVAL_DUP(arg, Z_REFVAL_P(arg));
1067 				} else {
1068 					if (Z_REFCOUNTED_P(arg)) Z_ADDREF_P(arg);
1069 				}
1070 
1071 				zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
1072 				top = ZEND_CALL_ARG(EX(call), arg_num);
1073 				ZVAL_COPY_VALUE(top, arg);
1074 				ZEND_CALL_NUM_ARGS(EX(call))++;
1075 
1076 				iter->funcs->move_forward(iter);
1077 				if (UNEXPECTED(EG(exception) != NULL)) {
1078 					goto unpack_iter_dtor;
1079 				}
1080 			}
1081 
1082 unpack_iter_dtor:
1083 			zend_iterator_dtor(iter);
1084 		}
1085 	} else if (EXPECTED(Z_ISREF_P(args))) {
1086 		args = Z_REFVAL_P(args);
1087 		goto send_again;
1088 	} else {
1089 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
1090 			GET_OP1_UNDEF_CV(args, BP_VAR_R);
1091 		}
1092 		zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
1093 	}
1094 
1095 	FREE_OP(free_op1);
1096 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1097 }
1098 
1099 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1100 {
1101 	USE_OPLINE
1102 	zend_free_op free_op1;
1103 	zval *args;
1104 	SAVE_OPLINE();
1105 
1106 	SAVE_OPLINE();
1107 	args = get_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
1108 
1109 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
1110 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
1111 			args = Z_REFVAL_P(args);
1112 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
1113 				goto send_array;
1114 			}
1115 		}
1116 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "call_user_func_array() expects parameter 2 to be array, %s given", zend_get_type_by_const(Z_TYPE_P(args)));
1117 		if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
1118 			OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
1119 		}
1120 		if (Z_OBJ(EX(call)->This)) {
1121 			OBJ_RELEASE(Z_OBJ(EX(call)->This));
1122 		}
1123 		EX(call)->func = (zend_function*)&zend_pass_function;
1124 		EX(call)->called_scope = NULL;
1125 		Z_OBJ(EX(call)->This) = NULL;
1126 		ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
1127 	} else {
1128 		uint32_t arg_num;
1129 		HashTable *ht;
1130 		zval *arg, *param;
1131 
1132 send_array:
1133 		ht = Z_ARRVAL_P(args);
1134 		zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
1135 
1136 		arg_num = 1;
1137 		param = ZEND_CALL_ARG(EX(call), 1);
1138 		ZEND_HASH_FOREACH_VAL(ht, arg) {
1139 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1140 				if (UNEXPECTED(!Z_ISREF_P(arg))) {
1141 					if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1142 
1143 						zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
1144 							arg_num,
1145 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
1146 							EX(call)->func->common.scope ? "::" : "",
1147 							ZSTR_VAL(EX(call)->func->common.function_name));
1148 
1149 						if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
1150 							OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
1151 						}
1152 						if (Z_OBJ(EX(call)->This)) {
1153 							OBJ_RELEASE(Z_OBJ(EX(call)->This));
1154 						}
1155 						EX(call)->func = (zend_function*)&zend_pass_function;
1156 						EX(call)->called_scope = NULL;
1157 						Z_OBJ(EX(call)->This) = NULL;
1158 						ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
1159 						break;
1160 					}
1161 				}
1162 			} else {
1163 				if (Z_ISREF_P(arg) &&
1164 				    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
1165 					/* don't separate references for __call */
1166 					arg = Z_REFVAL_P(arg);
1167 				}
1168 			}
1169 			ZVAL_COPY(param, arg);
1170 			ZEND_CALL_NUM_ARGS(EX(call))++;
1171 			arg_num++;
1172 			param++;
1173 		} ZEND_HASH_FOREACH_END();
1174 	}
1175 	FREE_OP(free_op1);
1176 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1177 }
1178 
1179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1180 {
1181 	USE_OPLINE
1182 	uint32_t arg_num = opline->op1.num;
1183 
1184 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
1185 		SAVE_OPLINE();
1186 		zend_verify_missing_arg(execute_data, arg_num, CACHE_ADDR(opline->op2.num));
1187 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1188 	} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
1189 		zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
1190 
1191 		SAVE_OPLINE();
1192 		if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
1193 			HANDLE_EXCEPTION();
1194 		}
1195 	}
1196 
1197 	ZEND_VM_NEXT_OPCODE();
1198 }
1199 
1200 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1201 {
1202 	USE_OPLINE
1203 	uint32_t arg_num = opline->op1.num;
1204 	uint32_t arg_count = EX_NUM_ARGS();
1205 	zval *params;
1206 
1207 	SAVE_OPLINE();
1208 
1209 	params = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
1210 
1211 	if (arg_num <= arg_count) {
1212 		zval *param;
1213 
1214 		array_init_size(params, arg_count - arg_num + 1);
1215 		zend_hash_real_init(Z_ARRVAL_P(params), 1);
1216 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
1217 			param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
1218 			if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
1219 				do {
1220 					zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
1221 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
1222 					ZEND_HASH_FILL_ADD(param);
1223 					param++;
1224 				} while (++arg_num <= arg_count);
1225 			} else {
1226 				do {
1227 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
1228 					ZEND_HASH_FILL_ADD(param);
1229 					param++;
1230 				} while (++arg_num <= arg_count);
1231 			}
1232 		} ZEND_HASH_FILL_END();
1233 	} else {
1234 		array_init(params);
1235 	}
1236 
1237 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1238 }
1239 
1240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1241 {
1242 	USE_OPLINE
1243 
1244 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
1245 
1246 	if (EG(error_reporting)) {
1247 		do {
1248 			EG(error_reporting) = 0;
1249 			if (!EG(error_reporting_ini_entry)) {
1250 				zend_ini_entry *p = zend_hash_str_find_ptr(EG(ini_directives), "error_reporting", sizeof("error_reporting")-1);
1251 				if (p) {
1252 					EG(error_reporting_ini_entry) = p;
1253 				} else {
1254 					break;
1255 				}
1256 			}
1257 			if (!EG(error_reporting_ini_entry)->modified) {
1258 				if (!EG(modified_ini_directives)) {
1259 					ALLOC_HASHTABLE(EG(modified_ini_directives));
1260 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
1261 				}
1262 				if (EXPECTED(zend_hash_str_add_ptr(EG(modified_ini_directives), "error_reporting", sizeof("error_reporting")-1, EG(error_reporting_ini_entry)) != NULL)) {
1263 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
1264 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
1265 					EG(error_reporting_ini_entry)->modified = 1;
1266 				}
1267 			}
1268 		} while (0);
1269 	}
1270 	ZEND_VM_NEXT_OPCODE();
1271 }
1272 
1273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1274 {
1275 	USE_OPLINE
1276 
1277 	if (!EG(no_extensions)) {
1278 		SAVE_OPLINE();
1279 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(func));
1280 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1281 	}
1282 	ZEND_VM_NEXT_OPCODE();
1283 }
1284 
1285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1286 {
1287 	USE_OPLINE
1288 
1289 	if (!EG(no_extensions)) {
1290 		SAVE_OPLINE();
1291 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(func));
1292 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1293 	}
1294 	ZEND_VM_NEXT_OPCODE();
1295 }
1296 
1297 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1298 {
1299 	USE_OPLINE
1300 
1301 	if (!EG(no_extensions)) {
1302 		SAVE_OPLINE();
1303 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(func));
1304 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1305 	}
1306 	ZEND_VM_NEXT_OPCODE();
1307 }
1308 
1309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1310 {
1311 	USE_OPLINE
1312 
1313 	SAVE_OPLINE();
1314 	Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0);
1315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1316 }
1317 
1318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1319 {
1320 	USE_OPLINE
1321 
1322 	SAVE_OPLINE();
1323 	Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
1324 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1325 }
1326 
1327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1328 {
1329 	USE_OPLINE
1330 	zval *zce, *orig_zce;
1331 
1332 	SAVE_OPLINE();
1333 	if ((zce = zend_hash_find(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op2)))) == NULL ||
1334 	    ((orig_zce = zend_hash_find(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op1)))) != NULL &&
1335 	     Z_CE_P(zce) != Z_CE_P(orig_zce))) {
1336 		do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->extended_value)), 0);
1337 	}
1338 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1339 }
1340 
1341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1342 {
1343 	zend_class_entry *ce;
1344 	USE_OPLINE
1345 
1346 	SAVE_OPLINE();
1347 	ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op2)));
1348 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
1349 	ZEND_ASSERT(ce != NULL);
1350 
1351 	if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
1352 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op1));
1353 	}
1354 
1355 	if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) {
1356 		zend_verify_abstract_class(ce);
1357 	}
1358 	ce->ce_flags |= ZEND_ACC_ANON_BOUND;
1359 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1360 }
1361 
1362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1363 {
1364 	zend_class_entry *ce;
1365 	USE_OPLINE
1366 
1367 	SAVE_OPLINE();
1368 	ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op2)));
1369 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
1370 	ZEND_ASSERT(ce != NULL);
1371 
1372 	if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
1373 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op1));
1374 	}
1375 
1376 	zend_do_inheritance(ce, Z_CE_P(EX_VAR(opline->extended_value)));
1377 	ce->ce_flags |= ZEND_ACC_ANON_BOUND;
1378 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1379 }
1380 
1381 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1382 {
1383 	USE_OPLINE
1384 
1385 	SAVE_OPLINE();
1386 	do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0);
1387 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1388 }
1389 
1390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1391 {
1392 	USE_OPLINE
1393 
1394 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
1395 		EG(ticks_count) = 0;
1396 		if (zend_ticks_function) {
1397 			SAVE_OPLINE();
1398 			zend_ticks_function(opline->extended_value);
1399 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1400 		}
1401 	}
1402 	ZEND_VM_NEXT_OPCODE();
1403 }
1404 
1405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1406 {
1407 	USE_OPLINE
1408 
1409 	ZEND_VM_NEXT_OPCODE();
1410 }
1411 
1412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1413 {
1414 	USE_OPLINE
1415 
1416 	ZEND_VM_NEXT_OPCODE();
1417 }
1418 
1419 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1420 {
1421 	USE_OPLINE
1422 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
1423 	zend_class_entry *trait;
1424 
1425 	SAVE_OPLINE();
1426 	trait = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
1427 	if (UNEXPECTED(trait == NULL)) {
1428 		trait = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)),
1429 		                                 EX_CONSTANT(opline->op2) + 1,
1430 		                                 ZEND_FETCH_CLASS_TRAIT);
1431 		if (UNEXPECTED(trait == NULL)) {
1432 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1433 		}
1434 		if (!(trait->ce_flags & ZEND_ACC_TRAIT)) {
1435 			zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name));
1436 		}
1437 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), trait);
1438 	}
1439 
1440 	zend_do_implement_trait(ce, trait);
1441 
1442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1443 }
1444 
1445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1446 {
1447 	USE_OPLINE
1448 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
1449 
1450 	SAVE_OPLINE();
1451 	zend_do_bind_traits(ce);
1452 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1453 }
1454 
1455 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1456 {
1457 	uint32_t op_num = EG(opline_before_exception) - EX(func)->op_array.opcodes;
1458 	int i;
1459 	uint32_t catch_op_num = 0, finally_op_num = 0, finally_op_end = 0;
1460 	int in_finally = 0;
1461 
1462 	ZEND_VM_INTERRUPT_CHECK();
1463 
1464 	{
1465 		const zend_op *exc_opline = EG(opline_before_exception);
1466 		if ((exc_opline->opcode == ZEND_FREE || exc_opline->opcode == ZEND_FE_FREE)
1467 			&& exc_opline->extended_value & ZEND_FREE_ON_RETURN) {
1468 			/* exceptions thrown because of loop var destruction on return/break/...
1469 			 * are logically thrown at the end of the foreach loop, so adjust the
1470 			 * op_num.
1471 			 */
1472 			op_num = EX(func)->op_array.brk_cont_array[exc_opline->op2.num].brk;
1473 		}
1474 	}
1475 
1476 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
1477 		if (EX(func)->op_array.try_catch_array[i].try_op > op_num) {
1478 			/* further blocks will not be relevant... */
1479 			break;
1480 		}
1481 		in_finally = 0;
1482 		if (op_num < EX(func)->op_array.try_catch_array[i].catch_op) {
1483 			catch_op_num = EX(func)->op_array.try_catch_array[i].catch_op;
1484 		}
1485 		if (op_num < EX(func)->op_array.try_catch_array[i].finally_op) {
1486 			finally_op_num = EX(func)->op_array.try_catch_array[i].finally_op;
1487 			finally_op_end = EX(func)->op_array.try_catch_array[i].finally_end;
1488 		}
1489 		if (op_num >= EX(func)->op_array.try_catch_array[i].finally_op &&
1490 				op_num < EX(func)->op_array.try_catch_array[i].finally_end) {
1491 			finally_op_end = EX(func)->op_array.try_catch_array[i].finally_end;
1492 			in_finally = 1;
1493 		}
1494 	}
1495 
1496 	cleanup_unfinished_calls(execute_data, op_num);
1497 
1498 	if (finally_op_num && (!catch_op_num || catch_op_num >= finally_op_num)) {
1499 		zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[finally_op_end].op1.var);
1500 
1501 		cleanup_live_vars(execute_data, op_num, finally_op_num);
1502 		if (in_finally && Z_OBJ_P(fast_call)) {
1503 			zend_exception_set_previous(EG(exception), Z_OBJ_P(fast_call));
1504 		}
1505 		Z_OBJ_P(fast_call) = EG(exception);
1506 		EG(exception) = NULL;
1507 		fast_call->u2.lineno = (uint32_t)-1;
1508 		ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[finally_op_num]);
1509 		ZEND_VM_CONTINUE();
1510 	} else {
1511 		cleanup_live_vars(execute_data, op_num, catch_op_num);
1512 		if (in_finally) {
1513 			/* we are going out of current finally scope */
1514 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[finally_op_end].op1.var);
1515 
1516 			if (Z_OBJ_P(fast_call)) {
1517 				zend_exception_set_previous(EG(exception), Z_OBJ_P(fast_call));
1518 				Z_OBJ_P(fast_call) = NULL;
1519 			}
1520 		}
1521 		if (catch_op_num) {
1522 			ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[catch_op_num]);
1523 			ZEND_VM_CONTINUE();
1524 		} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
1525 			zend_generator *generator = zend_get_running_generator(execute_data);
1526 			zend_generator_close(generator, 1);
1527 			ZEND_VM_RETURN();
1528 		} else {
1529 			ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1530 		}
1531 	}
1532 }
1533 
1534 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1535 {
1536 	USE_OPLINE
1537 
1538 	SAVE_OPLINE();
1539 	zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var)));
1540 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1541 }
1542 
1543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1544 {
1545 	USE_OPLINE
1546 	int ret;
1547 
1548 	SAVE_OPLINE();
1549 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
1550 	opline = EX(opline);
1551 
1552 	switch (ret) {
1553 		case ZEND_USER_OPCODE_CONTINUE:
1554 			ZEND_VM_CONTINUE();
1555 		case ZEND_USER_OPCODE_RETURN:
1556 			if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
1557 				zend_generator *generator = zend_get_running_generator(execute_data);
1558 				zend_generator_close(generator, 1);
1559 				ZEND_VM_RETURN();
1560 			} else {
1561 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1562 			}
1563 		case ZEND_USER_OPCODE_ENTER:
1564 			ZEND_VM_ENTER();
1565 		case ZEND_USER_OPCODE_LEAVE:
1566 			ZEND_VM_LEAVE();
1567 		case ZEND_USER_OPCODE_DISPATCH:
1568 			ZEND_VM_DISPATCH(opline->opcode, opline);
1569 		default:
1570 			ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
1571 	}
1572 }
1573 
1574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1575 {
1576 	USE_OPLINE
1577 	zval *fast_call = EX_VAR(opline->op1.var);
1578 
1579 	/* check for delayed exception */
1580 	if (Z_OBJ_P(fast_call) != NULL) {
1581 		SAVE_OPLINE();
1582 		/* discard the previously thrown exception */
1583 		OBJ_RELEASE(Z_OBJ_P(fast_call));
1584 		Z_OBJ_P(fast_call) = NULL;
1585 	}
1586 
1587 	ZEND_VM_NEXT_OPCODE();
1588 }
1589 
1590 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1591 {
1592 	USE_OPLINE
1593 	zval *fast_call = EX_VAR(opline->result.var);
1594 
1595 	if (opline->extended_value == ZEND_FAST_CALL_FROM_FINALLY && UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
1596 		fast_call->u2.lineno = (uint32_t)-1;
1597 	} else {
1598 		Z_OBJ_P(fast_call) = NULL;
1599 		/* set return address */
1600 		fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
1601 	}
1602 	ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
1603 	ZEND_VM_CONTINUE();
1604 }
1605 
1606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1607 {
1608 	USE_OPLINE
1609 	zval *fast_call = EX_VAR(opline->op1.var);
1610 
1611 	if (fast_call->u2.lineno != (uint32_t)-1) {
1612 		const zend_op *fast_ret = EX(func)->op_array.opcodes + fast_call->u2.lineno;
1613 		ZEND_VM_SET_OPCODE(fast_ret + 1);
1614 		if (fast_ret->extended_value & ZEND_FAST_CALL_FROM_FINALLY) {
1615 			fast_call->u2.lineno = fast_ret->op2.opline_num;
1616 		}
1617 		ZEND_VM_CONTINUE();
1618 	} else {
1619 		/* special case for unhandled exceptions */
1620 		USE_OPLINE
1621 
1622 		if (opline->extended_value == ZEND_FAST_RET_TO_FINALLY) {
1623 			cleanup_live_vars(execute_data, opline - EX(func)->op_array.opcodes, opline->op2.opline_num);
1624 			ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
1625 			ZEND_VM_CONTINUE();
1626 		} else {
1627 			EG(exception) = Z_OBJ_P(fast_call);
1628 			Z_OBJ_P(fast_call) = NULL;
1629 			if (opline->extended_value == ZEND_FAST_RET_TO_CATCH) {
1630 				cleanup_live_vars(execute_data, opline - EX(func)->op_array.opcodes, opline->op2.opline_num);
1631 				ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
1632 				ZEND_VM_CONTINUE();
1633 			} else {
1634 				cleanup_live_vars(execute_data, opline - EX(func)->op_array.opcodes, 0);
1635 				if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
1636 					zend_generator *generator = zend_get_running_generator(execute_data);
1637 					zend_generator_close(generator, 1);
1638 					ZEND_VM_RETURN();
1639 				} else {
1640 					ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1641 				}
1642 			}
1643 		}
1644 	}
1645 }
1646 
1647 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1648 {
1649 	USE_OPLINE
1650 
1651 	if (EG(assertions) <= 0) {
1652 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
1653 		zend_op *result = target - 1;
1654 		SKIP_EXT_OPLINE(result);
1655 		if (RETURN_VALUE_USED(result)) {
1656 			ZVAL_TRUE(EX_VAR(result->result.var));
1657 		}
1658 		ZEND_VM_SET_OPCODE(target);
1659 		ZEND_VM_CONTINUE();
1660 	} else {
1661 		ZEND_VM_NEXT_OPCODE();
1662 	}
1663 }
1664 
1665 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1666 {
1667 	uint32_t fetch_type;
1668 	USE_OPLINE
1669 
1670 	SAVE_OPLINE();
1671 	fetch_type = opline->extended_value;
1672 
1673 	if (UNEXPECTED(EG(scope) == NULL)) {
1674 		zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
1675 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
1676 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
1677 		HANDLE_EXCEPTION();
1678 	}
1679 
1680 	switch (fetch_type) {
1681 		case ZEND_FETCH_CLASS_SELF:
1682 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EG(scope)->name);
1683 			break;
1684 		case ZEND_FETCH_CLASS_PARENT:
1685 			if (UNEXPECTED(EG(scope)->parent == NULL)) {
1686 				zend_throw_error(NULL,
1687 					"Cannot use \"parent\" when current class scope has no parent");
1688 				HANDLE_EXCEPTION();
1689 			}
1690 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EG(scope)->parent->name);
1691 			break;
1692 		case ZEND_FETCH_CLASS_STATIC:
1693 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(called_scope)->name);
1694 			break;
1695 		EMPTY_SWITCH_DEFAULT_CASE()
1696 	}
1697 	ZEND_VM_NEXT_OPCODE();
1698 }
1699 
1700 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1701 {
1702 	zend_array *args;
1703 	zend_function *fbc = EX(func);
1704 	zval *ret = EX(return_value);
1705 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS);
1706 	uint32_t num_args = EX_NUM_ARGS();
1707 	zend_execute_data *call;
1708 	USE_OPLINE
1709 
1710 	args = emalloc(sizeof(zend_array));
1711 	zend_hash_init(args, num_args, NULL, ZVAL_PTR_DTOR, 0);
1712 	if (num_args) {
1713 		zval *p = ZEND_CALL_ARG(execute_data, 1);
1714 		zval *end = p + num_args;
1715 
1716 		zend_hash_real_init(args, 1);
1717 		ZEND_HASH_FILL_PACKED(args) {
1718 			do {
1719 				ZEND_HASH_FILL_ADD(p);
1720 				p++;
1721 			} while (p != end);
1722 		} ZEND_HASH_FILL_END();
1723 	}
1724 
1725 	SAVE_OPLINE();
1726 	call = execute_data;
1727 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
1728 
1729 	ZEND_ASSERT(zend_vm_calc_used_stack(2, fbc->common.prototype) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
1730 
1731 	call->func = fbc->common.prototype;
1732 	ZEND_CALL_NUM_ARGS(call) = 2;
1733 
1734 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
1735 	ZVAL_ARR(ZEND_CALL_ARG(call, 2), args);
1736 	zend_free_trampoline(fbc);
1737 	fbc = call->func;
1738 
1739 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1740 
1741 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
1742 			if (ret) {
1743 				zend_generator_create_zval(call, &fbc->op_array, ret);
1744 				Z_VAR_FLAGS_P(ret) = 0;
1745 			} else {
1746 				if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_CLOSURE)) {
1747 					OBJ_RELEASE((zend_object*)fbc->op_array.prototype);
1748 				}
1749 				zend_vm_stack_free_args(call);
1750 			}
1751 		} else {
1752 			call->symbol_table = NULL;
1753 			i_init_func_execute_data(call, &fbc->op_array,
1754 					ret, (fbc->common.fn_flags & ZEND_ACC_STATIC) == 0);
1755 
1756 			if (EXPECTED(zend_execute_ex == execute_ex)) {
1757 				ZEND_VM_ENTER();
1758 			} else {
1759 				ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1760 				zend_execute_ex(call);
1761 			}
1762 		}
1763 	} else {
1764 		zval retval;
1765 
1766 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1767 
1768 		EG(current_execute_data) = call;
1769 
1770 		if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) {
1771 			uint32_t i;
1772 			uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
1773 			zval *p = ZEND_CALL_ARG(call, 1);
1774 
1775 			EG(current_execute_data) = call;
1776 
1777 			for (i = 0; i < num_args; ++i) {
1778 				if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) {
1779 					EG(current_execute_data) = call->prev_execute_data;
1780 					zend_vm_stack_free_args(call);
1781 					zend_vm_stack_free_call_frame(call);
1782 					if (ret) {
1783 						ZVAL_UNDEF(ret);
1784 					}
1785 					goto call_trampoline_end;
1786 				}
1787 				p++;
1788 			}
1789 		}
1790 
1791 		if (ret == NULL) {
1792 			ZVAL_NULL(&retval);
1793 			ret = &retval;
1794 		}
1795 		Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0;
1796 
1797 		if (!zend_execute_internal) {
1798 			/* saves one function call if zend_execute_internal is not used */
1799 			fbc->internal_function.handler(call, ret);
1800 		} else {
1801 			zend_execute_internal(call, ret);
1802 		}
1803 
1804 #if ZEND_DEBUG
1805 		ZEND_ASSERT(
1806 			EG(exception) || !call->func ||
1807 			!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1808 			zend_verify_internal_return_type(call->func, EX_VAR(opline->result.var)));
1809 #endif
1810 
1811 		EG(current_execute_data) = call->prev_execute_data;
1812 
1813 		zend_vm_stack_free_args(call);
1814 
1815 		if (ret == &retval) {
1816 			zval_ptr_dtor(ret);
1817 		}
1818 	}
1819 
1820 call_trampoline_end:
1821 	execute_data = EG(current_execute_data);
1822 
1823 	if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
1824 		ZEND_VM_RETURN();
1825 	}
1826 
1827 	opline = EX(opline);
1828 
1829 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1830 		zend_object *object = Z_OBJ(call->This);
1831 		OBJ_RELEASE(object);
1832 	}
1833 	EG(scope) = EX(func)->op_array.scope;
1834 	zend_vm_stack_free_call_frame(call);
1835 
1836 	if (UNEXPECTED(EG(exception) != NULL)) {
1837 		zend_throw_exception_internal(NULL);
1838 		if (RETURN_VALUE_USED(opline)) {
1839 			zval_ptr_dtor(EX_VAR(opline->result.var));
1840 		}
1841 		HANDLE_EXCEPTION_LEAVE();
1842 	}
1843 
1844 	ZEND_VM_INC_OPCODE();
1845 	ZEND_VM_LEAVE();
1846 }
1847 
1848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1849 {
1850 	USE_OPLINE
1851 
1852 	SAVE_OPLINE();
1853 	if (IS_CONST == IS_UNUSED) {
1854 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
1855 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1856 	} else {
1857 
1858 		zval *class_name = EX_CONSTANT(opline->op2);
1859 
1860 try_class_name:
1861 		if (IS_CONST == IS_CONST) {
1862 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
1863 
1864 			if (UNEXPECTED(ce == NULL)) {
1865 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
1866 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
1867 			}
1868 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
1869 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
1870 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
1871 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
1872 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
1873 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
1874 			class_name = Z_REFVAL_P(class_name);
1875 			goto try_class_name;
1876 		} else {
1877 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
1878 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
1879 				if (UNEXPECTED(EG(exception) != NULL)) {
1880 					HANDLE_EXCEPTION();
1881 				}
1882 			}
1883 			zend_throw_error(NULL, "Class name must be a valid object or a string");
1884 		}
1885 
1886 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1887 	}
1888 }
1889 
1890 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1891 {
1892 	USE_OPLINE
1893 	zend_function *fbc;
1894 	zval *function_name, *func;
1895 	zend_execute_data *call;
1896 
1897 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
1898 	if (UNEXPECTED(fbc == NULL)) {
1899 		function_name = (zval*)(EX_CONSTANT(opline->op2)+1);
1900 		func = zend_hash_find(EG(function_table), Z_STR_P(function_name));
1901 		if (UNEXPECTED(func == NULL)) {
1902 			SAVE_OPLINE();
1903 			zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
1904 			HANDLE_EXCEPTION();
1905 		}
1906 		fbc = Z_FUNC_P(func);
1907 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), fbc);
1908 	}
1909 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
1910 		fbc, opline->extended_value, NULL, NULL);
1911 	call->prev_execute_data = EX(call);
1912 	EX(call) = call;
1913 
1914 	ZEND_VM_NEXT_OPCODE();
1915 }
1916 
1917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1918 {
1919 	USE_OPLINE
1920 	zend_function *fbc;
1921 	zval *function_name, *func;
1922 	zend_string *lcname;
1923 
1924 	zend_class_entry *called_scope;
1925 	zend_object *object;
1926 	zend_execute_data *call;
1927 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
1928 
1929 	SAVE_OPLINE();
1930 	function_name = EX_CONSTANT(opline->op2);
1931 
1932 try_function_name:
1933 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
1934 		const char *colon;
1935 
1936 		if ((colon = zend_memrchr(Z_STRVAL_P(function_name), ':', Z_STRLEN_P(function_name))) != NULL &&
1937 			colon > Z_STRVAL_P(function_name) &&
1938 			*(colon-1) == ':'
1939 		) {
1940 			zend_string *mname;
1941 			size_t cname_length = colon - Z_STRVAL_P(function_name) - 1;
1942 			size_t mname_length = Z_STRLEN_P(function_name) - cname_length - (sizeof("::") - 1);
1943 
1944 			lcname = zend_string_init(Z_STRVAL_P(function_name), cname_length, 0);
1945 
1946 			object = NULL;
1947 			called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
1948 			if (UNEXPECTED(called_scope == NULL)) {
1949 				zend_string_release(lcname);
1950 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1951 			}
1952 
1953 			mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
1954 
1955 			if (called_scope->get_static_method) {
1956 				fbc = called_scope->get_static_method(called_scope, mname);
1957 			} else {
1958 				fbc = zend_std_get_static_method(called_scope, mname, NULL);
1959 			}
1960 			if (UNEXPECTED(fbc == NULL)) {
1961 				if (EXPECTED(!EG(exception))) {
1962 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), ZSTR_VAL(mname));
1963 				}
1964 				zend_string_release(lcname);
1965 				zend_string_release(mname);
1966 
1967 				HANDLE_EXCEPTION();
1968 			}
1969 
1970 			zend_string_release(lcname);
1971 			zend_string_release(mname);
1972 
1973 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
1974 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
1975 					zend_error(E_DEPRECATED,
1976 						"Non-static method %s::%s() should not be called statically",
1977 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
1978 					if (UNEXPECTED(EG(exception) != NULL)) {
1979 						HANDLE_EXCEPTION();
1980 					}
1981 				} else {
1982 					zend_throw_error(
1983 						zend_ce_error,
1984 						"Non-static method %s::%s() cannot be called statically",
1985 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
1986 
1987 					HANDLE_EXCEPTION();
1988 				}
1989 			}
1990 		} else {
1991 			if (Z_STRVAL_P(function_name)[0] == '\\') {
1992 				lcname = zend_string_alloc(Z_STRLEN_P(function_name) - 1, 0);
1993 				zend_str_tolower_copy(ZSTR_VAL(lcname), Z_STRVAL_P(function_name) + 1, Z_STRLEN_P(function_name) - 1);
1994 			} else {
1995 				lcname = zend_string_tolower(Z_STR_P(function_name));
1996 			}
1997 			if (UNEXPECTED((func = zend_hash_find(EG(function_table), lcname)) == NULL)) {
1998 				zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
1999 				zend_string_release(lcname);
2000 
2001 				HANDLE_EXCEPTION();
2002 			}
2003 			zend_string_release(lcname);
2004 
2005 			fbc = Z_FUNC_P(func);
2006 			called_scope = NULL;
2007 			object = NULL;
2008 		}
2009 	} else if (IS_CONST != IS_CONST &&
2010 	    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
2011 		Z_OBJ_HANDLER_P(function_name, get_closure) &&
2012 		Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &called_scope, &fbc, &object) == SUCCESS) {
2013 		if (fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
2014 			/* Delay closure destruction until its invocation */
2015 			ZEND_ASSERT(GC_TYPE((zend_object*)fbc->common.prototype) == IS_OBJECT);
2016 			GC_REFCOUNT((zend_object*)fbc->common.prototype)++;
2017 			call_info |= ZEND_CALL_CLOSURE;
2018 		} else if (object) {
2019 			call_info |= ZEND_CALL_RELEASE_THIS;
2020 			GC_REFCOUNT(object)++; /* For $this pointer */
2021 		}
2022 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
2023 			zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
2024 		zval *obj;
2025 		zval *method;
2026 		obj = zend_hash_index_find(Z_ARRVAL_P(function_name), 0);
2027 		method = zend_hash_index_find(Z_ARRVAL_P(function_name), 1);
2028 
2029 		if (!obj || !method) {
2030 			zend_throw_error(NULL, "Array callback has to contain indices 0 and 1");
2031 
2032 			HANDLE_EXCEPTION();
2033 		}
2034 
2035 		ZVAL_DEREF(obj);
2036 		if (Z_TYPE_P(obj) != IS_STRING && Z_TYPE_P(obj) != IS_OBJECT) {
2037 			zend_throw_error(NULL, "First array member is not a valid class name or object");
2038 
2039 			HANDLE_EXCEPTION();
2040 		}
2041 
2042 		ZVAL_DEREF(method);
2043 		if (Z_TYPE_P(method) != IS_STRING) {
2044 			zend_throw_error(NULL, "Second array member is not a valid method");
2045 
2046 			HANDLE_EXCEPTION();
2047 		}
2048 
2049 		if (Z_TYPE_P(obj) == IS_STRING) {
2050 			object = NULL;
2051 			called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2052 			if (UNEXPECTED(called_scope == NULL)) {
2053 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2054 			}
2055 
2056 			if (called_scope->get_static_method) {
2057 				fbc = called_scope->get_static_method(called_scope, Z_STR_P(method));
2058 			} else {
2059 				fbc = zend_std_get_static_method(called_scope, Z_STR_P(method), NULL);
2060 			}
2061 			if (UNEXPECTED(fbc == NULL)) {
2062 				if (EXPECTED(!EG(exception))) {
2063 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), Z_STRVAL_P(method));
2064 				}
2065 
2066 				HANDLE_EXCEPTION();
2067 			}
2068 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
2069 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
2070 					zend_error(E_DEPRECATED,
2071 						"Non-static method %s::%s() should not be called statically",
2072 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2073 					if (UNEXPECTED(EG(exception) != NULL)) {
2074 						HANDLE_EXCEPTION();
2075 					}
2076 				} else {
2077 					zend_throw_error(
2078 						zend_ce_error,
2079 						"Non-static method %s::%s() cannot be called statically",
2080 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2081 
2082 					HANDLE_EXCEPTION();
2083 				}
2084 			}
2085 		} else {
2086 			called_scope = Z_OBJCE_P(obj);
2087 			object = Z_OBJ_P(obj);
2088 
2089 			fbc = Z_OBJ_HT_P(obj)->get_method(&object, Z_STR_P(method), NULL);
2090 			if (UNEXPECTED(fbc == NULL)) {
2091 				if (EXPECTED(!EG(exception))) {
2092 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(object->ce->name), Z_STRVAL_P(method));
2093 				}
2094 
2095 				HANDLE_EXCEPTION();
2096 			}
2097 
2098 			if ((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) {
2099 				object = NULL;
2100 			} else {
2101 				call_info |= ZEND_CALL_RELEASE_THIS;
2102 				GC_REFCOUNT(object)++; /* For $this pointer */
2103 			}
2104 		}
2105 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(function_name) == IS_REFERENCE) {
2106 		function_name = Z_REFVAL_P(function_name);
2107 		goto try_function_name;
2108 	} else {
2109 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2110 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2111 			if (UNEXPECTED(EG(exception) != NULL)) {
2112 				HANDLE_EXCEPTION();
2113 			}
2114 		}
2115 		zend_throw_error(NULL, "Function name must be a string");
2116 
2117 		HANDLE_EXCEPTION();
2118 	}
2119 
2120 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
2121 		if (call_info & ZEND_CALL_RELEASE_THIS) {
2122 			zend_object_release(object);
2123 		}
2124 		if (fbc->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2125 			zend_string_release(fbc->common.function_name);
2126 			zend_free_trampoline(fbc);
2127 		}
2128 		HANDLE_EXCEPTION();
2129 	}
2130 	call = zend_vm_stack_push_call_frame(call_info,
2131 		fbc, opline->extended_value, called_scope, object);
2132 	call->prev_execute_data = EX(call);
2133 	EX(call) = call;
2134 
2135 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2136 }
2137 
2138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2139 {
2140 	USE_OPLINE
2141 	zval *func_name;
2142 	zval *func;
2143 	zend_function *fbc;
2144 	zend_execute_data *call;
2145 
2146 	func_name = EX_CONSTANT(opline->op2) + 1;
2147 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
2148 	if (UNEXPECTED(fbc == NULL)) {
2149 		func = zend_hash_find(EG(function_table), Z_STR_P(func_name));
2150 		if (func == NULL) {
2151 			func_name++;
2152 			func = zend_hash_find(EG(function_table), Z_STR_P(func_name));
2153 			if (UNEXPECTED(func == NULL)) {
2154 				SAVE_OPLINE();
2155 				zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
2156 				HANDLE_EXCEPTION();
2157 			}
2158 		}
2159 		fbc = Z_FUNC_P(func);
2160 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), fbc);
2161 	}
2162 
2163 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
2164 		fbc, opline->extended_value, NULL, NULL);
2165 	call->prev_execute_data = EX(call);
2166 	EX(call) = call;
2167 
2168 	ZEND_VM_NEXT_OPCODE();
2169 }
2170 
2171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2172 {
2173 	USE_OPLINE
2174 
2175 	zval *fname = EX_CONSTANT(opline->op2);
2176 	zval *func;
2177 	zend_function *fbc;
2178 	zend_execute_data *call;
2179 
2180 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(fname));
2181 	if (UNEXPECTED(fbc == NULL)) {
2182 		func = zend_hash_find(EG(function_table), Z_STR_P(fname));
2183 		if (UNEXPECTED(func == NULL)) {
2184 		    SAVE_OPLINE();
2185 			zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(fname));
2186 			HANDLE_EXCEPTION();
2187 		}
2188 		fbc = Z_FUNC_P(func);
2189 		CACHE_PTR(Z_CACHE_SLOT_P(fname), fbc);
2190 	}
2191 
2192 	call = zend_vm_stack_push_call_frame_ex(
2193 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
2194 		fbc, opline->extended_value, NULL, NULL);
2195 	call->prev_execute_data = EX(call);
2196 	EX(call) = call;
2197 
2198 	ZEND_VM_NEXT_OPCODE();
2199 }
2200 
2201 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2202 {
2203 	USE_OPLINE
2204 	uint32_t arg_num;
2205 	zval *param;
2206 
2207 	ZEND_VM_REPEATABLE_OPCODE
2208 
2209 	arg_num = opline->op1.num;
2210 	param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
2211 	if (arg_num > EX_NUM_ARGS()) {
2212 		ZVAL_COPY_VALUE(param, EX_CONSTANT(opline->op2));
2213 		if (Z_OPT_CONSTANT_P(param)) {
2214 			SAVE_OPLINE();
2215 			if (UNEXPECTED(zval_update_constant_ex(param, 0, NULL) != SUCCESS)) {
2216 				ZVAL_UNDEF(param);
2217 				HANDLE_EXCEPTION();
2218 			}
2219 		} else {
2220 			/* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
2221 			if (UNEXPECTED(Z_OPT_COPYABLE_P(param))) {
2222 				zval_copy_ctor_func(param);
2223 			}
2224 		}
2225 	}
2226 
2227 	if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
2228 		zval *default_value = EX_CONSTANT(opline->op2);
2229 
2230 		SAVE_OPLINE();
2231 		if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(Z_CACHE_SLOT_P(default_value))) || EG(exception))) {
2232 			HANDLE_EXCEPTION();
2233 		}
2234 	}
2235 
2236 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
2237 	ZEND_VM_NEXT_OPCODE();
2238 }
2239 
2240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2241 {
2242 	USE_OPLINE
2243 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
2244 	zend_class_entry *iface;
2245 
2246 	SAVE_OPLINE();
2247 	iface = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
2248 	if (UNEXPECTED(iface == NULL)) {
2249 		iface = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE);
2250 		if (UNEXPECTED(iface == NULL)) {
2251 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2252 		}
2253 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), iface);
2254 	}
2255 
2256 	if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) {
2257 		zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ZSTR_VAL(ce->name), ZSTR_VAL(iface->name));
2258 	}
2259 	zend_do_implement_interface(ce, iface);
2260 
2261 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2262 }
2263 
2264 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2265 {
2266 	USE_OPLINE
2267 
2268 	SAVE_OPLINE();
2269 	if (IS_UNUSED == IS_UNUSED) {
2270 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2271 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2272 	} else {
2273 
2274 		zval *class_name = NULL;
2275 
2276 try_class_name:
2277 		if (IS_UNUSED == IS_CONST) {
2278 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2279 
2280 			if (UNEXPECTED(ce == NULL)) {
2281 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2282 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2283 			}
2284 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2285 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2286 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2287 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2288 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2289 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2290 			class_name = Z_REFVAL_P(class_name);
2291 			goto try_class_name;
2292 		} else {
2293 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2294 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2295 				if (UNEXPECTED(EG(exception) != NULL)) {
2296 					HANDLE_EXCEPTION();
2297 				}
2298 			}
2299 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2300 		}
2301 
2302 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2303 	}
2304 }
2305 
2306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2307 {
2308 	USE_OPLINE
2309 
2310 	SAVE_OPLINE();
2311 	if (IS_CV == IS_UNUSED) {
2312 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2313 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2314 	} else {
2315 
2316 		zval *class_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
2317 
2318 try_class_name:
2319 		if (IS_CV == IS_CONST) {
2320 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2321 
2322 			if (UNEXPECTED(ce == NULL)) {
2323 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2324 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2325 			}
2326 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2327 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2328 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2329 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2330 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2331 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2332 			class_name = Z_REFVAL_P(class_name);
2333 			goto try_class_name;
2334 		} else {
2335 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2336 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2337 				if (UNEXPECTED(EG(exception) != NULL)) {
2338 					HANDLE_EXCEPTION();
2339 				}
2340 			}
2341 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2342 		}
2343 
2344 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2345 	}
2346 }
2347 
2348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2349 {
2350 	USE_OPLINE
2351 	zend_function *fbc;
2352 	zval *function_name, *func;
2353 	zend_string *lcname;
2354 
2355 	zend_class_entry *called_scope;
2356 	zend_object *object;
2357 	zend_execute_data *call;
2358 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
2359 
2360 	SAVE_OPLINE();
2361 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
2362 
2363 try_function_name:
2364 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2365 		const char *colon;
2366 
2367 		if ((colon = zend_memrchr(Z_STRVAL_P(function_name), ':', Z_STRLEN_P(function_name))) != NULL &&
2368 			colon > Z_STRVAL_P(function_name) &&
2369 			*(colon-1) == ':'
2370 		) {
2371 			zend_string *mname;
2372 			size_t cname_length = colon - Z_STRVAL_P(function_name) - 1;
2373 			size_t mname_length = Z_STRLEN_P(function_name) - cname_length - (sizeof("::") - 1);
2374 
2375 			lcname = zend_string_init(Z_STRVAL_P(function_name), cname_length, 0);
2376 
2377 			object = NULL;
2378 			called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2379 			if (UNEXPECTED(called_scope == NULL)) {
2380 				zend_string_release(lcname);
2381 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2382 			}
2383 
2384 			mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
2385 
2386 			if (called_scope->get_static_method) {
2387 				fbc = called_scope->get_static_method(called_scope, mname);
2388 			} else {
2389 				fbc = zend_std_get_static_method(called_scope, mname, NULL);
2390 			}
2391 			if (UNEXPECTED(fbc == NULL)) {
2392 				if (EXPECTED(!EG(exception))) {
2393 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), ZSTR_VAL(mname));
2394 				}
2395 				zend_string_release(lcname);
2396 				zend_string_release(mname);
2397 
2398 				HANDLE_EXCEPTION();
2399 			}
2400 
2401 			zend_string_release(lcname);
2402 			zend_string_release(mname);
2403 
2404 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
2405 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
2406 					zend_error(E_DEPRECATED,
2407 						"Non-static method %s::%s() should not be called statically",
2408 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2409 					if (UNEXPECTED(EG(exception) != NULL)) {
2410 						HANDLE_EXCEPTION();
2411 					}
2412 				} else {
2413 					zend_throw_error(
2414 						zend_ce_error,
2415 						"Non-static method %s::%s() cannot be called statically",
2416 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2417 
2418 					HANDLE_EXCEPTION();
2419 				}
2420 			}
2421 		} else {
2422 			if (Z_STRVAL_P(function_name)[0] == '\\') {
2423 				lcname = zend_string_alloc(Z_STRLEN_P(function_name) - 1, 0);
2424 				zend_str_tolower_copy(ZSTR_VAL(lcname), Z_STRVAL_P(function_name) + 1, Z_STRLEN_P(function_name) - 1);
2425 			} else {
2426 				lcname = zend_string_tolower(Z_STR_P(function_name));
2427 			}
2428 			if (UNEXPECTED((func = zend_hash_find(EG(function_table), lcname)) == NULL)) {
2429 				zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
2430 				zend_string_release(lcname);
2431 
2432 				HANDLE_EXCEPTION();
2433 			}
2434 			zend_string_release(lcname);
2435 
2436 			fbc = Z_FUNC_P(func);
2437 			called_scope = NULL;
2438 			object = NULL;
2439 		}
2440 	} else if (IS_CV != IS_CONST &&
2441 	    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
2442 		Z_OBJ_HANDLER_P(function_name, get_closure) &&
2443 		Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &called_scope, &fbc, &object) == SUCCESS) {
2444 		if (fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
2445 			/* Delay closure destruction until its invocation */
2446 			ZEND_ASSERT(GC_TYPE((zend_object*)fbc->common.prototype) == IS_OBJECT);
2447 			GC_REFCOUNT((zend_object*)fbc->common.prototype)++;
2448 			call_info |= ZEND_CALL_CLOSURE;
2449 		} else if (object) {
2450 			call_info |= ZEND_CALL_RELEASE_THIS;
2451 			GC_REFCOUNT(object)++; /* For $this pointer */
2452 		}
2453 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
2454 			zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
2455 		zval *obj;
2456 		zval *method;
2457 		obj = zend_hash_index_find(Z_ARRVAL_P(function_name), 0);
2458 		method = zend_hash_index_find(Z_ARRVAL_P(function_name), 1);
2459 
2460 		if (!obj || !method) {
2461 			zend_throw_error(NULL, "Array callback has to contain indices 0 and 1");
2462 
2463 			HANDLE_EXCEPTION();
2464 		}
2465 
2466 		ZVAL_DEREF(obj);
2467 		if (Z_TYPE_P(obj) != IS_STRING && Z_TYPE_P(obj) != IS_OBJECT) {
2468 			zend_throw_error(NULL, "First array member is not a valid class name or object");
2469 
2470 			HANDLE_EXCEPTION();
2471 		}
2472 
2473 		ZVAL_DEREF(method);
2474 		if (Z_TYPE_P(method) != IS_STRING) {
2475 			zend_throw_error(NULL, "Second array member is not a valid method");
2476 
2477 			HANDLE_EXCEPTION();
2478 		}
2479 
2480 		if (Z_TYPE_P(obj) == IS_STRING) {
2481 			object = NULL;
2482 			called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2483 			if (UNEXPECTED(called_scope == NULL)) {
2484 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2485 			}
2486 
2487 			if (called_scope->get_static_method) {
2488 				fbc = called_scope->get_static_method(called_scope, Z_STR_P(method));
2489 			} else {
2490 				fbc = zend_std_get_static_method(called_scope, Z_STR_P(method), NULL);
2491 			}
2492 			if (UNEXPECTED(fbc == NULL)) {
2493 				if (EXPECTED(!EG(exception))) {
2494 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), Z_STRVAL_P(method));
2495 				}
2496 
2497 				HANDLE_EXCEPTION();
2498 			}
2499 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
2500 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
2501 					zend_error(E_DEPRECATED,
2502 						"Non-static method %s::%s() should not be called statically",
2503 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2504 					if (UNEXPECTED(EG(exception) != NULL)) {
2505 						HANDLE_EXCEPTION();
2506 					}
2507 				} else {
2508 					zend_throw_error(
2509 						zend_ce_error,
2510 						"Non-static method %s::%s() cannot be called statically",
2511 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2512 
2513 					HANDLE_EXCEPTION();
2514 				}
2515 			}
2516 		} else {
2517 			called_scope = Z_OBJCE_P(obj);
2518 			object = Z_OBJ_P(obj);
2519 
2520 			fbc = Z_OBJ_HT_P(obj)->get_method(&object, Z_STR_P(method), NULL);
2521 			if (UNEXPECTED(fbc == NULL)) {
2522 				if (EXPECTED(!EG(exception))) {
2523 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(object->ce->name), Z_STRVAL_P(method));
2524 				}
2525 
2526 				HANDLE_EXCEPTION();
2527 			}
2528 
2529 			if ((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) {
2530 				object = NULL;
2531 			} else {
2532 				call_info |= ZEND_CALL_RELEASE_THIS;
2533 				GC_REFCOUNT(object)++; /* For $this pointer */
2534 			}
2535 		}
2536 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(function_name) == IS_REFERENCE) {
2537 		function_name = Z_REFVAL_P(function_name);
2538 		goto try_function_name;
2539 	} else {
2540 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2541 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2542 			if (UNEXPECTED(EG(exception) != NULL)) {
2543 				HANDLE_EXCEPTION();
2544 			}
2545 		}
2546 		zend_throw_error(NULL, "Function name must be a string");
2547 
2548 		HANDLE_EXCEPTION();
2549 	}
2550 
2551 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
2552 		if (call_info & ZEND_CALL_RELEASE_THIS) {
2553 			zend_object_release(object);
2554 		}
2555 		if (fbc->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2556 			zend_string_release(fbc->common.function_name);
2557 			zend_free_trampoline(fbc);
2558 		}
2559 		HANDLE_EXCEPTION();
2560 	}
2561 	call = zend_vm_stack_push_call_frame(call_info,
2562 		fbc, opline->extended_value, called_scope, object);
2563 	call->prev_execute_data = EX(call);
2564 	EX(call) = call;
2565 
2566 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2567 }
2568 
2569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2570 {
2571 	USE_OPLINE
2572 
2573 	SAVE_OPLINE();
2574 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
2575 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2576 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2577 	} else {
2578 		zend_free_op free_op2;
2579 		zval *class_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
2580 
2581 try_class_name:
2582 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
2583 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2584 
2585 			if (UNEXPECTED(ce == NULL)) {
2586 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2587 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2588 			}
2589 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2590 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2591 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2592 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2593 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2594 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2595 			class_name = Z_REFVAL_P(class_name);
2596 			goto try_class_name;
2597 		} else {
2598 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2599 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2600 				if (UNEXPECTED(EG(exception) != NULL)) {
2601 					HANDLE_EXCEPTION();
2602 				}
2603 			}
2604 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2605 		}
2606 
2607 		zval_ptr_dtor_nogc(free_op2);
2608 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2609 	}
2610 }
2611 
2612 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2613 {
2614 	USE_OPLINE
2615 	zend_function *fbc;
2616 	zval *function_name, *func;
2617 	zend_string *lcname;
2618 	zend_free_op free_op2;
2619 	zend_class_entry *called_scope;
2620 	zend_object *object;
2621 	zend_execute_data *call;
2622 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
2623 
2624 	SAVE_OPLINE();
2625 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
2626 
2627 try_function_name:
2628 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2629 		const char *colon;
2630 
2631 		if ((colon = zend_memrchr(Z_STRVAL_P(function_name), ':', Z_STRLEN_P(function_name))) != NULL &&
2632 			colon > Z_STRVAL_P(function_name) &&
2633 			*(colon-1) == ':'
2634 		) {
2635 			zend_string *mname;
2636 			size_t cname_length = colon - Z_STRVAL_P(function_name) - 1;
2637 			size_t mname_length = Z_STRLEN_P(function_name) - cname_length - (sizeof("::") - 1);
2638 
2639 			lcname = zend_string_init(Z_STRVAL_P(function_name), cname_length, 0);
2640 
2641 			object = NULL;
2642 			called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2643 			if (UNEXPECTED(called_scope == NULL)) {
2644 				zend_string_release(lcname);
2645 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2646 			}
2647 
2648 			mname = zend_string_init(Z_STRVAL_P(function_name) + (cname_length + sizeof("::") - 1), mname_length, 0);
2649 
2650 			if (called_scope->get_static_method) {
2651 				fbc = called_scope->get_static_method(called_scope, mname);
2652 			} else {
2653 				fbc = zend_std_get_static_method(called_scope, mname, NULL);
2654 			}
2655 			if (UNEXPECTED(fbc == NULL)) {
2656 				if (EXPECTED(!EG(exception))) {
2657 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), ZSTR_VAL(mname));
2658 				}
2659 				zend_string_release(lcname);
2660 				zend_string_release(mname);
2661 				zval_ptr_dtor_nogc(free_op2);
2662 				HANDLE_EXCEPTION();
2663 			}
2664 
2665 			zend_string_release(lcname);
2666 			zend_string_release(mname);
2667 
2668 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
2669 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
2670 					zend_error(E_DEPRECATED,
2671 						"Non-static method %s::%s() should not be called statically",
2672 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2673 					if (UNEXPECTED(EG(exception) != NULL)) {
2674 						HANDLE_EXCEPTION();
2675 					}
2676 				} else {
2677 					zend_throw_error(
2678 						zend_ce_error,
2679 						"Non-static method %s::%s() cannot be called statically",
2680 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2681 					zval_ptr_dtor_nogc(free_op2);
2682 					HANDLE_EXCEPTION();
2683 				}
2684 			}
2685 		} else {
2686 			if (Z_STRVAL_P(function_name)[0] == '\\') {
2687 				lcname = zend_string_alloc(Z_STRLEN_P(function_name) - 1, 0);
2688 				zend_str_tolower_copy(ZSTR_VAL(lcname), Z_STRVAL_P(function_name) + 1, Z_STRLEN_P(function_name) - 1);
2689 			} else {
2690 				lcname = zend_string_tolower(Z_STR_P(function_name));
2691 			}
2692 			if (UNEXPECTED((func = zend_hash_find(EG(function_table), lcname)) == NULL)) {
2693 				zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
2694 				zend_string_release(lcname);
2695 				zval_ptr_dtor_nogc(free_op2);
2696 				HANDLE_EXCEPTION();
2697 			}
2698 			zend_string_release(lcname);
2699 
2700 			fbc = Z_FUNC_P(func);
2701 			called_scope = NULL;
2702 			object = NULL;
2703 		}
2704 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
2705 	    EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT) &&
2706 		Z_OBJ_HANDLER_P(function_name, get_closure) &&
2707 		Z_OBJ_HANDLER_P(function_name, get_closure)(function_name, &called_scope, &fbc, &object) == SUCCESS) {
2708 		if (fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
2709 			/* Delay closure destruction until its invocation */
2710 			ZEND_ASSERT(GC_TYPE((zend_object*)fbc->common.prototype) == IS_OBJECT);
2711 			GC_REFCOUNT((zend_object*)fbc->common.prototype)++;
2712 			call_info |= ZEND_CALL_CLOSURE;
2713 		} else if (object) {
2714 			call_info |= ZEND_CALL_RELEASE_THIS;
2715 			GC_REFCOUNT(object)++; /* For $this pointer */
2716 		}
2717 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY) &&
2718 			zend_hash_num_elements(Z_ARRVAL_P(function_name)) == 2) {
2719 		zval *obj;
2720 		zval *method;
2721 		obj = zend_hash_index_find(Z_ARRVAL_P(function_name), 0);
2722 		method = zend_hash_index_find(Z_ARRVAL_P(function_name), 1);
2723 
2724 		if (!obj || !method) {
2725 			zend_throw_error(NULL, "Array callback has to contain indices 0 and 1");
2726 			zval_ptr_dtor_nogc(free_op2);
2727 			HANDLE_EXCEPTION();
2728 		}
2729 
2730 		ZVAL_DEREF(obj);
2731 		if (Z_TYPE_P(obj) != IS_STRING && Z_TYPE_P(obj) != IS_OBJECT) {
2732 			zend_throw_error(NULL, "First array member is not a valid class name or object");
2733 			zval_ptr_dtor_nogc(free_op2);
2734 			HANDLE_EXCEPTION();
2735 		}
2736 
2737 		ZVAL_DEREF(method);
2738 		if (Z_TYPE_P(method) != IS_STRING) {
2739 			zend_throw_error(NULL, "Second array member is not a valid method");
2740 			zval_ptr_dtor_nogc(free_op2);
2741 			HANDLE_EXCEPTION();
2742 		}
2743 
2744 		if (Z_TYPE_P(obj) == IS_STRING) {
2745 			object = NULL;
2746 			called_scope = zend_fetch_class_by_name(Z_STR_P(obj), NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2747 			if (UNEXPECTED(called_scope == NULL)) {
2748 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2749 			}
2750 
2751 			if (called_scope->get_static_method) {
2752 				fbc = called_scope->get_static_method(called_scope, Z_STR_P(method));
2753 			} else {
2754 				fbc = zend_std_get_static_method(called_scope, Z_STR_P(method), NULL);
2755 			}
2756 			if (UNEXPECTED(fbc == NULL)) {
2757 				if (EXPECTED(!EG(exception))) {
2758 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(called_scope->name), Z_STRVAL_P(method));
2759 				}
2760 				zval_ptr_dtor_nogc(free_op2);
2761 				HANDLE_EXCEPTION();
2762 			}
2763 			if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
2764 				if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
2765 					zend_error(E_DEPRECATED,
2766 						"Non-static method %s::%s() should not be called statically",
2767 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2768 					if (UNEXPECTED(EG(exception) != NULL)) {
2769 						HANDLE_EXCEPTION();
2770 					}
2771 				} else {
2772 					zend_throw_error(
2773 						zend_ce_error,
2774 						"Non-static method %s::%s() cannot be called statically",
2775 						ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
2776 					zval_ptr_dtor_nogc(free_op2);
2777 					HANDLE_EXCEPTION();
2778 				}
2779 			}
2780 		} else {
2781 			called_scope = Z_OBJCE_P(obj);
2782 			object = Z_OBJ_P(obj);
2783 
2784 			fbc = Z_OBJ_HT_P(obj)->get_method(&object, Z_STR_P(method), NULL);
2785 			if (UNEXPECTED(fbc == NULL)) {
2786 				if (EXPECTED(!EG(exception))) {
2787 					zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(object->ce->name), Z_STRVAL_P(method));
2788 				}
2789 				zval_ptr_dtor_nogc(free_op2);
2790 				HANDLE_EXCEPTION();
2791 			}
2792 
2793 			if ((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) {
2794 				object = NULL;
2795 			} else {
2796 				call_info |= ZEND_CALL_RELEASE_THIS;
2797 				GC_REFCOUNT(object)++; /* For $this pointer */
2798 			}
2799 		}
2800 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(function_name) == IS_REFERENCE) {
2801 		function_name = Z_REFVAL_P(function_name);
2802 		goto try_function_name;
2803 	} else {
2804 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2805 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2806 			if (UNEXPECTED(EG(exception) != NULL)) {
2807 				HANDLE_EXCEPTION();
2808 			}
2809 		}
2810 		zend_throw_error(NULL, "Function name must be a string");
2811 		zval_ptr_dtor_nogc(free_op2);
2812 		HANDLE_EXCEPTION();
2813 	}
2814 
2815 	zval_ptr_dtor_nogc(free_op2);
2816 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
2817 		if (call_info & ZEND_CALL_RELEASE_THIS) {
2818 			zend_object_release(object);
2819 		}
2820 		if (fbc->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2821 			zend_string_release(fbc->common.function_name);
2822 			zend_free_trampoline(fbc);
2823 		}
2824 		HANDLE_EXCEPTION();
2825 	}
2826 	call = zend_vm_stack_push_call_frame(call_info,
2827 		fbc, opline->extended_value, called_scope, object);
2828 	call->prev_execute_data = EX(call);
2829 	EX(call) = call;
2830 
2831 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2832 }
2833 
2834 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2835 {
2836 	USE_OPLINE
2837 
2838 
2839 	SAVE_OPLINE();
2840 	bitwise_not_function(EX_VAR(opline->result.var),
2841 		EX_CONSTANT(opline->op1));
2842 
2843 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2844 }
2845 
2846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2847 {
2848 	USE_OPLINE
2849 	zval *val;
2850 
2851 
2852 	val = EX_CONSTANT(opline->op1);
2853 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2854 		ZVAL_FALSE(EX_VAR(opline->result.var));
2855 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2856 		ZVAL_TRUE(EX_VAR(opline->result.var));
2857 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2858 			SAVE_OPLINE();
2859 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2860 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2861 		}
2862 	} else {
2863 		SAVE_OPLINE();
2864 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
2865 
2866 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2867 	}
2868 	ZEND_VM_NEXT_OPCODE();
2869 }
2870 
2871 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2872 {
2873 	USE_OPLINE
2874 
2875 	zval *z;
2876 
2877 	SAVE_OPLINE();
2878 	z = EX_CONSTANT(opline->op1);
2879 
2880 	if (Z_TYPE_P(z) == IS_STRING) {
2881 		zend_string *str = Z_STR_P(z);
2882 
2883 		if (ZSTR_LEN(str) != 0) {
2884 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
2885 		}
2886 	} else {
2887 		zend_string *str = _zval_get_string_func(z);
2888 
2889 		if (ZSTR_LEN(str) != 0) {
2890 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
2891 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
2892 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
2893 		}
2894 		zend_string_release(str);
2895 	}
2896 
2897 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2898 }
2899 
2900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2901 {
2902 	USE_OPLINE
2903 
2904 	zval *val;
2905 
2906 	val = EX_CONSTANT(opline->op1);
2907 
2908 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2909 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
2910 		ZEND_VM_CONTINUE();
2911 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2912 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2913 			SAVE_OPLINE();
2914 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2915 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2916 		} else {
2917 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2918 			ZEND_VM_CONTINUE();
2919 		}
2920 	}
2921 
2922 	SAVE_OPLINE();
2923 	if (i_zend_is_true(val)) {
2924 		opline++;
2925 	} else {
2926 		opline = OP_JMP_ADDR(opline, opline->op2);
2927 	}
2928 
2929 	if (UNEXPECTED(EG(exception) != NULL)) {
2930 		HANDLE_EXCEPTION();
2931 	}
2932 	ZEND_VM_JMP(opline);
2933 }
2934 
2935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2936 {
2937 	USE_OPLINE
2938 
2939 	zval *val;
2940 
2941 	val = EX_CONSTANT(opline->op1);
2942 
2943 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2944 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2945 		ZEND_VM_CONTINUE();
2946 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2947 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2948 			SAVE_OPLINE();
2949 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2950 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2951 		} else {
2952 			ZEND_VM_NEXT_OPCODE();
2953 		}
2954 	}
2955 
2956 	SAVE_OPLINE();
2957 	if (i_zend_is_true(val)) {
2958 		opline = OP_JMP_ADDR(opline, opline->op2);
2959 	} else {
2960 		opline++;
2961 	}
2962 
2963 	if (UNEXPECTED(EG(exception) != NULL)) {
2964 		HANDLE_EXCEPTION();
2965 	}
2966 	ZEND_VM_JMP(opline);
2967 }
2968 
2969 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2970 {
2971 	USE_OPLINE
2972 
2973 	zval *val;
2974 
2975 	val = EX_CONSTANT(opline->op1);
2976 
2977 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
2978 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2979 		ZEND_VM_CONTINUE();
2980 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2981 		if (IS_CONST == IS_CV) {
2982 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2983 				SAVE_OPLINE();
2984 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
2985 			}
2986 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2987 		} else {
2988 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2989 			ZEND_VM_CONTINUE();
2990 		}
2991 	}
2992 
2993 	SAVE_OPLINE();
2994 	if (i_zend_is_true(val)) {
2995 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
2996 	} else {
2997 		opline = OP_JMP_ADDR(opline, opline->op2);
2998 	}
2999 
3000 	if (UNEXPECTED(EG(exception) != NULL)) {
3001 		HANDLE_EXCEPTION();
3002 	}
3003 	ZEND_VM_JMP(opline);
3004 }
3005 
3006 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3007 {
3008 	USE_OPLINE
3009 
3010 	zval *val;
3011 	int ret;
3012 
3013 	val = EX_CONSTANT(opline->op1);
3014 
3015 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3016 		ZVAL_TRUE(EX_VAR(opline->result.var));
3017 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
3018 		ZEND_VM_CONTINUE();
3019 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3020 		ZVAL_FALSE(EX_VAR(opline->result.var));
3021 		if (IS_CONST == IS_CV) {
3022 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3023 				SAVE_OPLINE();
3024 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
3025 			}
3026 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3027 		} else {
3028 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
3029 			ZEND_VM_CONTINUE();
3030 		}
3031 	}
3032 
3033 	SAVE_OPLINE();
3034 	ret = i_zend_is_true(val);
3035 
3036 	if (ret) {
3037 		ZVAL_TRUE(EX_VAR(opline->result.var));
3038 		opline++;
3039 	} else {
3040 		ZVAL_FALSE(EX_VAR(opline->result.var));
3041 		opline = OP_JMP_ADDR(opline, opline->op2);
3042 	}
3043 	if (UNEXPECTED(EG(exception) != NULL)) {
3044 		HANDLE_EXCEPTION();
3045 	}
3046 	ZEND_VM_JMP(opline);
3047 }
3048 
3049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3050 {
3051 	USE_OPLINE
3052 
3053 	zval *val;
3054 	int ret;
3055 
3056 	val = EX_CONSTANT(opline->op1);
3057 
3058 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3059 		ZVAL_TRUE(EX_VAR(opline->result.var));
3060 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
3061 		ZEND_VM_CONTINUE();
3062 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3063 		ZVAL_FALSE(EX_VAR(opline->result.var));
3064 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3065 			SAVE_OPLINE();
3066 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
3067 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3068 		} else {
3069 			ZEND_VM_NEXT_OPCODE();
3070 		}
3071 	}
3072 
3073 	SAVE_OPLINE();
3074 	ret = i_zend_is_true(val);
3075 
3076 	if (ret) {
3077 		ZVAL_TRUE(EX_VAR(opline->result.var));
3078 		opline = OP_JMP_ADDR(opline, opline->op2);
3079 	} else {
3080 		ZVAL_FALSE(EX_VAR(opline->result.var));
3081 		opline++;
3082 	}
3083 	if (UNEXPECTED(EG(exception) != NULL)) {
3084 		HANDLE_EXCEPTION();
3085 	}
3086 	ZEND_VM_JMP(opline);
3087 }
3088 
3089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3090 {
3091 	USE_OPLINE
3092 	zval *retval_ptr;
3093 	zend_free_op free_op1;
3094 
3095 	retval_ptr = EX_CONSTANT(opline->op1);
3096 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
3097 		SAVE_OPLINE();
3098 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
3099 		if (EX(return_value)) {
3100 			ZVAL_NULL(EX(return_value));
3101 		}
3102 	} else if (!EX(return_value)) {
3103 		if (IS_CONST == IS_VAR || IS_CONST == IS_TMP_VAR ) {
3104 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
3105 				SAVE_OPLINE();
3106 				zval_dtor_func_for_ptr(Z_COUNTED_P(free_op1));
3107 			}
3108 		}
3109 	} else {
3110 		if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
3111 			ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
3112 			if (IS_CONST == IS_CONST) {
3113 				if (UNEXPECTED(Z_OPT_COPYABLE_P(EX(return_value)))) {
3114 					zval_copy_ctor_func(EX(return_value));
3115 				}
3116 			}
3117 		} else if (IS_CONST == IS_CV) {
3118 			ZVAL_DEREF(retval_ptr);
3119 			ZVAL_COPY(EX(return_value), retval_ptr);
3120 		} else /* if (IS_CONST == IS_VAR) */ {
3121 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
3122 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
3123 
3124 				retval_ptr = Z_REFVAL_P(retval_ptr);
3125 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
3126 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
3127 					efree_size(ref, sizeof(zend_reference));
3128 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
3129 					Z_ADDREF_P(retval_ptr);
3130 				}
3131 			} else {
3132 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
3133 			}
3134 		}
3135 	}
3136 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3137 }
3138 
3139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3140 {
3141 	USE_OPLINE
3142 	zval *retval_ptr;
3143 
3144 
3145 	SAVE_OPLINE();
3146 
3147 	do {
3148 		if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR ||
3149 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
3150 			/* Not supposed to happen, but we'll allow it */
3151 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
3152 
3153 			retval_ptr = EX_CONSTANT(opline->op1);
3154 			if (!EX(return_value)) {
3155 				if (IS_CONST == IS_TMP_VAR) {
3156 
3157 				}
3158 			} else {
3159 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
3160 				Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
3161 				if (IS_CONST != IS_TMP_VAR) {
3162 					zval_opt_copy_ctor_no_imm(EX(return_value));
3163 				}
3164 			}
3165 			break;
3166 		}
3167 
3168 		retval_ptr = NULL;
3169 
3170 		if (IS_CONST == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
3171 			zend_throw_error(NULL, "Cannot return string offsets by reference");
3172 			HANDLE_EXCEPTION();
3173 		}
3174 
3175 		if (IS_CONST == IS_VAR) {
3176 			if (retval_ptr == &EG(uninitialized_zval) ||
3177 			    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
3178 			     !(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF))) {
3179 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
3180 				if (EX(return_value)) {
3181 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
3182 					Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
3183 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
3184 				}
3185 				break;
3186 			}
3187 		}
3188 
3189 		if (EX(return_value)) {
3190 			ZVAL_MAKE_REF(retval_ptr);
3191 			Z_ADDREF_P(retval_ptr);
3192 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
3193 			Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
3194 		}
3195 	} while (0);
3196 
3197 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3198 }
3199 
3200 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3201 {
3202 	USE_OPLINE
3203 	zval *retval;
3204 
3205 
3206 	zend_generator *generator = zend_get_running_generator(execute_data);
3207 
3208 	SAVE_OPLINE();
3209 	retval = EX_CONSTANT(opline->op1);
3210 
3211 	/* Copy return value into generator->retval */
3212 	if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
3213 		ZVAL_COPY_VALUE(&generator->retval, retval);
3214 		if (IS_CONST == IS_CONST) {
3215 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->retval))) {
3216 				zval_copy_ctor_func(&generator->retval);
3217 			}
3218 		}
3219 	} else if (IS_CONST == IS_CV) {
3220 		ZVAL_DEREF(retval);
3221 		ZVAL_COPY(&generator->retval, retval);
3222 	} else /* if (IS_CONST == IS_VAR) */ {
3223 		if (UNEXPECTED(Z_ISREF_P(retval))) {
3224 			zend_refcounted *ref = Z_COUNTED_P(retval);
3225 
3226 			retval = Z_REFVAL_P(retval);
3227 			ZVAL_COPY_VALUE(&generator->retval, retval);
3228 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
3229 				efree_size(ref, sizeof(zend_reference));
3230 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
3231 				Z_ADDREF_P(retval);
3232 			}
3233 		} else {
3234 			ZVAL_COPY_VALUE(&generator->retval, retval);
3235 		}
3236 	}
3237 
3238 	/* Close the generator to free up resources */
3239 	zend_generator_close(generator, 1);
3240 
3241 	/* Pass execution back to handling code */
3242 	ZEND_VM_RETURN();
3243 }
3244 
3245 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3246 {
3247 	USE_OPLINE
3248 	zval *value;
3249 
3250 
3251 	SAVE_OPLINE();
3252 	value = EX_CONSTANT(opline->op1);
3253 
3254 	do {
3255 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
3256 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
3257 				value = Z_REFVAL_P(value);
3258 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
3259 					break;
3260 				}
3261 			}
3262 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
3263 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
3264 				if (UNEXPECTED(EG(exception) != NULL)) {
3265 					HANDLE_EXCEPTION();
3266 				}
3267 			}
3268 			zend_throw_error(NULL, "Can only throw objects");
3269 
3270 			HANDLE_EXCEPTION();
3271 		}
3272 	} while (0);
3273 
3274 	zend_exception_save();
3275 	if (IS_CONST != IS_TMP_VAR) {
3276 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
3277 	}
3278 
3279 	zend_throw_exception_object(value);
3280 	zend_exception_restore();
3281 
3282 	HANDLE_EXCEPTION();
3283 }
3284 
3285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3286 {
3287 	USE_OPLINE
3288 	zval *value, *arg;
3289 
3290 
3291 	value = EX_CONSTANT(opline->op1);
3292 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3293 	ZVAL_COPY_VALUE(arg, value);
3294 	if (IS_CONST == IS_CONST) {
3295 		if (UNEXPECTED(Z_OPT_COPYABLE_P(arg))) {
3296 			zval_copy_ctor_func(arg);
3297 		}
3298 	}
3299 	ZEND_VM_NEXT_OPCODE();
3300 }
3301 
3302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3303 {
3304 	USE_OPLINE
3305 	zval *value, *arg;
3306 
3307 	uint32_t arg_num = opline->op2.num;
3308 
3309 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
3310 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3311 			goto send_val_by_ref;
3312 		}
3313 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3314 send_val_by_ref:
3315 		SAVE_OPLINE();
3316 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
3317 
3318 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3319 		ZVAL_UNDEF(arg);
3320 		HANDLE_EXCEPTION();
3321 	}
3322 	value = EX_CONSTANT(opline->op1);
3323 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3324 	ZVAL_COPY_VALUE(arg, value);
3325 	if (IS_CONST == IS_CONST) {
3326 		if (UNEXPECTED(Z_OPT_COPYABLE_P(arg))) {
3327 			zval_copy_ctor_func(arg);
3328 		}
3329 	}
3330 	ZEND_VM_NEXT_OPCODE();
3331 }
3332 
3333 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3334 {
3335 	USE_OPLINE
3336 	zval *val;
3337 
3338 
3339 	val = EX_CONSTANT(opline->op1);
3340 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3341 		ZVAL_TRUE(EX_VAR(opline->result.var));
3342 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3343 		ZVAL_FALSE(EX_VAR(opline->result.var));
3344 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3345 			SAVE_OPLINE();
3346 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
3347 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3348 		}
3349 	} else {
3350 		SAVE_OPLINE();
3351 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
3352 
3353 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3354 	}
3355 	ZEND_VM_NEXT_OPCODE();
3356 }
3357 
3358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3359 {
3360 	USE_OPLINE
3361 	zval object_zval;
3362 	zend_function *constructor;
3363 	zend_class_entry *ce;
3364 
3365 	SAVE_OPLINE();
3366 	if (IS_CONST == IS_CONST) {
3367 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
3368 		if (UNEXPECTED(ce == NULL)) {
3369 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
3370 			if (UNEXPECTED(ce == NULL)) {
3371 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3372 			}
3373 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
3374 		}
3375 	} else {
3376 		ce = Z_CE_P(EX_VAR(opline->op1.var));
3377 	}
3378 	if (UNEXPECTED(object_init_ex(&object_zval, ce) != SUCCESS)) {
3379 		HANDLE_EXCEPTION();
3380 	}
3381 	constructor = Z_OBJ_HT(object_zval)->get_constructor(Z_OBJ(object_zval));
3382 
3383 	if (constructor == NULL) {
3384 		if (EXPECTED(RETURN_VALUE_USED(opline))) {
3385 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &object_zval);
3386 		} else {
3387 			OBJ_RELEASE(Z_OBJ(object_zval));
3388 		}
3389 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3390 	} else {
3391 		/* We are not handling overloaded classes right now */
3392 		zend_execute_data *call = zend_vm_stack_push_call_frame(
3393 				ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR |
3394 				(EXPECTED(RETURN_VALUE_USED(opline)) ? 0 : ZEND_CALL_CTOR_RESULT_UNUSED),
3395 			constructor,
3396 			opline->extended_value,
3397 			ce,
3398 			Z_OBJ(object_zval));
3399 		call->prev_execute_data = EX(call);
3400 		EX(call) = call;
3401 
3402 		if (EXPECTED(RETURN_VALUE_USED(opline))) {
3403 			ZVAL_COPY(EX_VAR(opline->result.var), &object_zval);
3404 		}
3405 
3406 		ZEND_VM_NEXT_OPCODE();
3407 	}
3408 }
3409 
3410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3411 {
3412 	USE_OPLINE
3413 
3414 	zval *obj;
3415 	zend_class_entry *ce;
3416 	zend_function *clone;
3417 	zend_object_clone_obj_t clone_call;
3418 
3419 	SAVE_OPLINE();
3420 	obj = EX_CONSTANT(opline->op1);
3421 
3422 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
3423 		zend_throw_error(NULL, "Using $this when not in object context");
3424 		HANDLE_EXCEPTION();
3425 	}
3426 
3427 	do {
3428 		if (IS_CONST == IS_CONST ||
3429 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
3430 		    if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
3431 		    	obj = Z_REFVAL_P(obj);
3432 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
3433 		    		break;
3434 				}
3435 			}
3436 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
3437 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
3438 				if (UNEXPECTED(EG(exception) != NULL)) {
3439 					HANDLE_EXCEPTION();
3440 				}
3441 			}
3442 			zend_throw_error(NULL, "__clone method called on non-object");
3443 
3444 			HANDLE_EXCEPTION();
3445 		}
3446 	} while (0);
3447 
3448 	ce = Z_OBJCE_P(obj);
3449 	clone = ce ? ce->clone : NULL;
3450 	clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
3451 	if (UNEXPECTED(clone_call == NULL)) {
3452 		if (ce) {
3453 			zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
3454 		} else {
3455 			zend_throw_error(NULL, "Trying to clone an uncloneable object");
3456 		}
3457 
3458 		HANDLE_EXCEPTION();
3459 	}
3460 
3461 	if (ce && clone) {
3462 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
3463 			/* Ensure that if we're calling a private function, we're allowed to do so.
3464 			 */
3465 			if (UNEXPECTED(ce != EG(scope))) {
3466 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
3467 
3468 				HANDLE_EXCEPTION();
3469 			}
3470 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
3471 			/* Ensure that if we're calling a protected function, we're allowed to do so.
3472 			 */
3473 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
3474 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
3475 
3476 				HANDLE_EXCEPTION();
3477 			}
3478 		}
3479 	}
3480 
3481 	if (EXPECTED(EG(exception) == NULL)) {
3482 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
3483 		if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
3484 			OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
3485 		}
3486 	}
3487 
3488 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3489 }
3490 
3491 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3492 {
3493 	USE_OPLINE
3494 
3495 	zval *expr;
3496 	zval *result = EX_VAR(opline->result.var);
3497 
3498 	SAVE_OPLINE();
3499 	expr = EX_CONSTANT(opline->op1);
3500 
3501 	switch (opline->extended_value) {
3502 		case IS_NULL:
3503 			/* This code is taken from convert_to_null. However, it does not seems very useful,
3504 			 * because a conversion to null always results in the same value. This could only
3505 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
3506 #if 0
3507 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3508 				ZVAL_DEREF(expr);
3509 			}
3510 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
3511 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
3512 					break;
3513 				}
3514 			}
3515 #endif
3516 
3517 			ZVAL_NULL(result);
3518 			break;
3519 		case _IS_BOOL:
3520 			ZVAL_BOOL(result, zend_is_true(expr));
3521 			break;
3522 		case IS_LONG:
3523 			ZVAL_LONG(result, zval_get_long(expr));
3524 			break;
3525 		case IS_DOUBLE:
3526 			ZVAL_DOUBLE(result, zval_get_double(expr));
3527 			break;
3528 		case IS_STRING:
3529 			ZVAL_STR(result, zval_get_string(expr));
3530 			break;
3531 		default:
3532 			if (IS_CONST & (IS_VAR|IS_CV)) {
3533 				ZVAL_DEREF(expr);
3534 			}
3535 			/* If value is already of correct type, return it directly */
3536 			if (Z_TYPE_P(expr) == opline->extended_value) {
3537 				ZVAL_COPY_VALUE(result, expr);
3538 				if (IS_CONST == IS_CONST) {
3539 					if (UNEXPECTED(Z_OPT_COPYABLE_P(result))) {
3540 						zval_copy_ctor_func(result);
3541 					}
3542 				} else if (IS_CONST != IS_TMP_VAR) {
3543 					if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
3544 				}
3545 
3546 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3547 			}
3548 
3549 			if (opline->extended_value == IS_ARRAY) {
3550 				if (Z_TYPE_P(expr) != IS_OBJECT) {
3551 					ZVAL_NEW_ARR(result);
3552 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
3553 					if (Z_TYPE_P(expr) != IS_NULL) {
3554 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
3555 						if (IS_CONST == IS_CONST) {
3556 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
3557 								zval_copy_ctor_func(expr);
3558 							}
3559 						} else {
3560 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
3561 						}
3562 					}
3563 				} else {
3564 					ZVAL_COPY_VALUE(result, expr);
3565 					Z_ADDREF_P(result);
3566 					convert_to_array(result);
3567 				}
3568 			} else {
3569 				if (Z_TYPE_P(expr) != IS_ARRAY) {
3570 					object_init(result);
3571 					if (Z_TYPE_P(expr) != IS_NULL) {
3572 						expr = zend_hash_str_add_new(Z_OBJPROP_P(result), "scalar", sizeof("scalar")-1, expr);
3573 						if (IS_CONST == IS_CONST) {
3574 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
3575 								zval_copy_ctor_func(expr);
3576 							}
3577 						} else {
3578 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
3579 						}
3580 					}
3581 				} else {
3582 					ZVAL_COPY(result, expr);
3583 					convert_to_object(result);
3584 				}
3585 			}
3586 	}
3587 
3588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3589 }
3590 
3591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3592 {
3593 	USE_OPLINE
3594 	zend_op_array *new_op_array=NULL;
3595 
3596 	zval *inc_filename;
3597 	zval tmp_inc_filename;
3598 	zend_bool failure_retval=0;
3599 
3600 	SAVE_OPLINE();
3601 	inc_filename = EX_CONSTANT(opline->op1);
3602 
3603 	ZVAL_UNDEF(&tmp_inc_filename);
3604 	if (Z_TYPE_P(inc_filename) != IS_STRING) {
3605 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
3606 			inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
3607 		}
3608 		ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
3609 		inc_filename = &tmp_inc_filename;
3610 	}
3611 
3612 	if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
3613 		if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
3614 			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
3615 		} else {
3616 			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
3617 		}
3618 	} else {
3619 		switch (opline->extended_value) {
3620 			case ZEND_INCLUDE_ONCE:
3621 			case ZEND_REQUIRE_ONCE: {
3622 					zend_file_handle file_handle;
3623 					zend_string *resolved_path;
3624 
3625 					resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), (int)Z_STRLEN_P(inc_filename));
3626 					if (resolved_path) {
3627 						failure_retval = zend_hash_exists(&EG(included_files), resolved_path);
3628 					} else {
3629 						resolved_path = zend_string_copy(Z_STR_P(inc_filename));
3630 					}
3631 
3632 					if (failure_retval) {
3633 						/* do nothing, file already included */
3634 					} else if (SUCCESS == zend_stream_open(ZSTR_VAL(resolved_path), &file_handle)) {
3635 
3636 						if (!file_handle.opened_path) {
3637 							file_handle.opened_path = zend_string_copy(resolved_path);
3638 						}
3639 
3640 						if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path)) {
3641 							new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE));
3642 							zend_destroy_file_handle(&file_handle);
3643 						} else {
3644 							zend_file_handle_dtor(&file_handle);
3645 							failure_retval=1;
3646 						}
3647 					} else {
3648 						if (opline->extended_value == ZEND_INCLUDE_ONCE) {
3649 							zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
3650 						} else {
3651 							zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
3652 						}
3653 					}
3654 					zend_string_release(resolved_path);
3655 				}
3656 				break;
3657 			case ZEND_INCLUDE:
3658 			case ZEND_REQUIRE:
3659 				new_op_array = compile_filename(opline->extended_value, inc_filename);
3660 				break;
3661 			case ZEND_EVAL: {
3662 					char *eval_desc = zend_make_compiled_string_description("eval()'d code");
3663 
3664 					new_op_array = zend_compile_string(inc_filename, eval_desc);
3665 					efree(eval_desc);
3666 				}
3667 				break;
3668 			EMPTY_SWITCH_DEFAULT_CASE()
3669 		}
3670 	}
3671 	if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
3672 		zend_string_release(Z_STR(tmp_inc_filename));
3673 	}
3674 
3675 	if (UNEXPECTED(EG(exception) != NULL)) {
3676 		if (new_op_array != NULL) {
3677 			destroy_op_array(new_op_array);
3678 			efree_size(new_op_array, sizeof(zend_op_array));
3679 		}
3680 		HANDLE_EXCEPTION();
3681 	} else if (EXPECTED(new_op_array != NULL)) {
3682 		zval *return_value = NULL;
3683 		zend_execute_data *call;
3684 
3685 		if (RETURN_VALUE_USED(opline)) {
3686 			return_value = EX_VAR(opline->result.var);
3687 		}
3688 
3689 		new_op_array->scope = EG(scope);
3690 
3691 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE,
3692 			(zend_function*)new_op_array, 0, EX(called_scope), Z_OBJ(EX(This)));
3693 
3694 		if (EX(symbol_table)) {
3695 			call->symbol_table = EX(symbol_table);
3696 		} else {
3697 			call->symbol_table = zend_rebuild_symbol_table();
3698 		}
3699 
3700 		call->prev_execute_data = execute_data;
3701 	    i_init_code_execute_data(call, new_op_array, return_value);
3702 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3703 			ZEND_VM_ENTER();
3704 		} else {
3705 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3706 			zend_execute_ex(call);
3707 			zend_vm_stack_free_call_frame(call);
3708 		}
3709 
3710 		destroy_op_array(new_op_array);
3711 		efree_size(new_op_array, sizeof(zend_op_array));
3712 		if (UNEXPECTED(EG(exception) != NULL)) {
3713 			zend_throw_exception_internal(NULL);
3714 			HANDLE_EXCEPTION();
3715 		}
3716 
3717 	} else if (RETURN_VALUE_USED(opline)) {
3718 		ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
3719 	}
3720 	ZEND_VM_INTERRUPT_CHECK();
3721 	ZEND_VM_NEXT_OPCODE();
3722 }
3723 
3724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3725 {
3726 	USE_OPLINE
3727 
3728 	zval *array_ptr, *result;
3729 	HashTable *fe_ht;
3730 
3731 	SAVE_OPLINE();
3732 
3733 	array_ptr = EX_CONSTANT(opline->op1);
3734 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
3735 		result = EX_VAR(opline->result.var);
3736 		ZVAL_COPY_VALUE(result, array_ptr);
3737 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
3738 			Z_ADDREF_P(array_ptr);
3739 		}
3740 		Z_FE_POS_P(result) = 0;
3741 
3742 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3743 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
3744 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
3745 			HashPosition pos = 0;
3746 			Bucket *p;
3747 
3748 			result = EX_VAR(opline->result.var);
3749 			ZVAL_COPY_VALUE(result, array_ptr);
3750 			if (IS_CONST != IS_TMP_VAR) {
3751 				Z_ADDREF_P(array_ptr);
3752 			}
3753 			fe_ht = Z_OBJPROP_P(array_ptr);
3754 			pos = 0;
3755 			p = fe_ht->arData;
3756 			while (1) {
3757 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3758 
3759 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3760 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3761 				}
3762 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3763 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3764 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
3765 				    (UNEXPECTED(!p->key) ||
3766 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
3767 					break;
3768 				}
3769 				pos++;
3770 				p++;
3771 			}
3772 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3773 
3774 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3775 		} else {
3776 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
3777 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
3778 			zend_bool is_empty;
3779 
3780 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3781 
3782 				if (!EG(exception)) {
3783 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
3784 				}
3785 				zend_throw_exception_internal(NULL);
3786 				HANDLE_EXCEPTION();
3787 			}
3788 
3789 			iter->index = 0;
3790 			if (iter->funcs->rewind) {
3791 				iter->funcs->rewind(iter);
3792 				if (UNEXPECTED(EG(exception) != NULL)) {
3793 					OBJ_RELEASE(&iter->std);
3794 
3795 					HANDLE_EXCEPTION();
3796 				}
3797 			}
3798 
3799 			is_empty = iter->funcs->valid(iter) != SUCCESS;
3800 
3801 			if (UNEXPECTED(EG(exception) != NULL)) {
3802 				OBJ_RELEASE(&iter->std);
3803 
3804 				HANDLE_EXCEPTION();
3805 			}
3806 			iter->index = -1; /* will be set to 0 before using next handler */
3807 
3808 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
3809 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3810 
3811 			if (is_empty) {
3812 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3813 			} else {
3814 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3815 			}
3816 		}
3817 	} else {
3818 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
3819 		ZVAL_UNDEF(EX_VAR(opline->result.var));
3820 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3821 
3822 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3823 	}
3824 }
3825 
3826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3827 {
3828 	USE_OPLINE
3829 
3830 	zval *array_ptr, *array_ref;
3831 	HashTable *fe_ht;
3832 	HashPosition pos = 0;
3833 	Bucket *p;
3834 
3835 	SAVE_OPLINE();
3836 
3837 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3838 		array_ref = array_ptr = NULL;
3839 		if (IS_CONST == IS_VAR && UNEXPECTED(array_ref == NULL)) {
3840 			zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
3841 			ZVAL_UNDEF(EX_VAR(opline->result.var));
3842 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3843 			HANDLE_EXCEPTION();
3844 		}
3845 		if (Z_ISREF_P(array_ref)) {
3846 			array_ptr = Z_REFVAL_P(array_ref);
3847 		}
3848 	} else {
3849 		array_ref = array_ptr = EX_CONSTANT(opline->op1);
3850 	}
3851 
3852 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
3853 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3854 			if (array_ptr == array_ref) {
3855 				ZVAL_NEW_REF(array_ref, array_ref);
3856 				array_ptr = Z_REFVAL_P(array_ref);
3857 			}
3858 			Z_ADDREF_P(array_ref);
3859 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
3860 		} else {
3861 			array_ref = EX_VAR(opline->result.var);
3862 			ZVAL_NEW_REF(array_ref, array_ptr);
3863 			array_ptr = Z_REFVAL_P(array_ref);
3864 		}
3865 		if (IS_CONST == IS_CONST) {
3866 			zval_copy_ctor_func(array_ptr);
3867 		} else {
3868 			SEPARATE_ARRAY(array_ptr);
3869 		}
3870 		fe_ht = Z_ARRVAL_P(array_ptr);
3871 		p = fe_ht->arData;
3872 		while (1) {
3873 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3874 
3875 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3876 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3877 			}
3878 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3879 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3880 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
3881 				break;
3882 			}
3883 			pos++;
3884 			p++;
3885 		}
3886 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3887 
3888 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3889 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
3890 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
3891 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3892 				if (array_ptr == array_ref) {
3893 					ZVAL_NEW_REF(array_ref, array_ref);
3894 					array_ptr = Z_REFVAL_P(array_ref);
3895 				}
3896 				Z_ADDREF_P(array_ref);
3897 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
3898 			} else {
3899 				array_ptr = EX_VAR(opline->result.var);
3900 				ZVAL_COPY_VALUE(array_ptr, array_ref);
3901 			}
3902 			fe_ht = Z_OBJPROP_P(array_ptr);
3903 			p = fe_ht->arData;
3904 			while (1) {
3905 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3906 
3907 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3908 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3909 				}
3910 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3911 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3912 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
3913 				    (UNEXPECTED(!p->key) ||
3914 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
3915 					break;
3916 				}
3917 				pos++;
3918 				p++;
3919 			}
3920 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3921 
3922 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3923 		} else {
3924 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
3925 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
3926 			zend_bool is_empty;
3927 
3928 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3929 				if (IS_CONST == IS_VAR) {
3930 
3931 				} else {
3932 
3933 				}
3934 				if (!EG(exception)) {
3935 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
3936 				}
3937 				zend_throw_exception_internal(NULL);
3938 				HANDLE_EXCEPTION();
3939 			}
3940 
3941 			iter->index = 0;
3942 			if (iter->funcs->rewind) {
3943 				iter->funcs->rewind(iter);
3944 				if (UNEXPECTED(EG(exception) != NULL)) {
3945 					OBJ_RELEASE(&iter->std);
3946 					if (IS_CONST == IS_VAR) {
3947 
3948 					} else {
3949 
3950 					}
3951 					HANDLE_EXCEPTION();
3952 				}
3953 			}
3954 
3955 			is_empty = iter->funcs->valid(iter) != SUCCESS;
3956 
3957 			if (UNEXPECTED(EG(exception) != NULL)) {
3958 				OBJ_RELEASE(&iter->std);
3959 				if (IS_CONST == IS_VAR) {
3960 
3961 				} else {
3962 
3963 				}
3964 				HANDLE_EXCEPTION();
3965 			}
3966 			iter->index = -1; /* will be set to 0 before using next handler */
3967 
3968 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
3969 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3970 
3971 			if (IS_CONST == IS_VAR) {
3972 
3973 			} else {
3974 
3975 			}
3976 			if (is_empty) {
3977 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3978 			} else {
3979 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3980 			}
3981 		}
3982 	} else {
3983 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
3984 		ZVAL_UNDEF(EX_VAR(opline->result.var));
3985 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3986 		if (IS_CONST == IS_VAR) {
3987 
3988 		} else {
3989 
3990 		}
3991 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3992 	}
3993 }
3994 
3995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3996 {
3997 	USE_OPLINE
3998 
3999 	SAVE_OPLINE();
4000 	if (IS_CONST != IS_UNUSED) {
4001 
4002 		zval *ptr = EX_CONSTANT(opline->op1);
4003 
4004 		do {
4005 			if (Z_TYPE_P(ptr) == IS_LONG) {
4006 				EG(exit_status) = Z_LVAL_P(ptr);
4007 			} else {
4008 				if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
4009 					ptr = Z_REFVAL_P(ptr);
4010 					if (Z_TYPE_P(ptr) == IS_LONG) {
4011 						EG(exit_status) = Z_LVAL_P(ptr);
4012 						break;
4013 					}
4014 				}
4015 				zend_print_variable(ptr);
4016 			}
4017 		} while (0);
4018 
4019 	}
4020 	zend_bailout();
4021 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
4022 }
4023 
4024 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4025 {
4026 	USE_OPLINE
4027 
4028 	zval *value;
4029 	zval *ref = NULL;
4030 
4031 	SAVE_OPLINE();
4032 	value = EX_CONSTANT(opline->op1);
4033 
4034 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
4035 		if (IS_CONST == IS_VAR) {
4036 			ref = value;
4037 		}
4038 		value = Z_REFVAL_P(value);
4039 	}
4040 	if (i_zend_is_true(value)) {
4041 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
4042 		if (IS_CONST == IS_CONST) {
4043 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
4044 				zval_copy_ctor_func(EX_VAR(opline->result.var));
4045 			}
4046 		} else if (IS_CONST == IS_CV) {
4047 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
4048 		} else if (IS_CONST == IS_VAR && ref) {
4049 			zend_reference *r = Z_REF_P(ref);
4050 
4051 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
4052 				efree_size(r, sizeof(zend_reference));
4053 			} else if (Z_OPT_REFCOUNTED_P(value)) {
4054 				Z_ADDREF_P(value);
4055 			}
4056 		}
4057 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4058 	}
4059 
4060 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4061 }
4062 
4063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4064 {
4065 	USE_OPLINE
4066 
4067 	zval *value;
4068 	zval *ref = NULL;
4069 
4070 	SAVE_OPLINE();
4071 	value = EX_CONSTANT(opline->op1);
4072 
4073 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
4074 		if (IS_CONST == IS_VAR) {
4075 			ref = value;
4076 		}
4077 		value = Z_REFVAL_P(value);
4078 	}
4079 
4080 	if (Z_TYPE_P(value) > IS_NULL) {
4081 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
4082 		if (IS_CONST == IS_CONST) {
4083 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
4084 				zval_copy_ctor_func(EX_VAR(opline->result.var));
4085 			}
4086 		} else if (IS_CONST == IS_CV) {
4087 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
4088 		} else if (IS_CONST == IS_VAR && ref) {
4089 			zend_reference *r = Z_REF_P(ref);
4090 
4091 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
4092 				efree_size(r, sizeof(zend_reference));
4093 			} else if (Z_OPT_REFCOUNTED_P(value)) {
4094 				Z_ADDREF_P(value);
4095 			}
4096 		}
4097 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4098 	}
4099 
4100 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4101 }
4102 
4103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4104 {
4105 	USE_OPLINE
4106 
4107 	zval *value;
4108 	zval *result = EX_VAR(opline->result.var);
4109 
4110 	value = EX_CONSTANT(opline->op1);
4111 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4112 		SAVE_OPLINE();
4113 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
4114 		ZVAL_NULL(result);
4115 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4116 	}
4117 
4118 	if (IS_CONST == IS_CV) {
4119 		ZVAL_DEREF(value);
4120 		ZVAL_COPY(result, value);
4121 	} else if (IS_CONST == IS_VAR) {
4122 		if (UNEXPECTED(Z_ISREF_P(value))) {
4123 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
4124 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
4125 				efree_size(Z_REF_P(value), sizeof(zend_reference));
4126 			} else if (Z_OPT_REFCOUNTED_P(result)) {
4127 				Z_ADDREF_P(result);
4128 			}
4129 		} else {
4130 			ZVAL_COPY_VALUE(result, value);
4131 		}
4132 	} else {
4133 		ZVAL_COPY_VALUE(result, value);
4134 		if (IS_CONST == IS_CONST) {
4135 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
4136 				zval_copy_ctor_func(result);
4137 			}
4138 		}
4139 	}
4140 	ZEND_VM_NEXT_OPCODE();
4141 }
4142 
4143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4144 {
4145 	USE_OPLINE
4146 
4147 	zend_generator *generator = zend_get_running_generator(execute_data);
4148 
4149 	zval *val;
4150 
4151 
4152 	SAVE_OPLINE();
4153 	val = EX_CONSTANT(opline->op1);
4154 
4155 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
4156 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
4157 
4158 		HANDLE_EXCEPTION();
4159 	}
4160 
4161 	if (Z_TYPE_P(val) == IS_ARRAY) {
4162 		ZVAL_COPY_VALUE(&generator->values, val);
4163 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
4164 			Z_ADDREF_P(val);
4165 		}
4166 		Z_FE_POS(generator->values) = 0;
4167 
4168 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
4169 		zend_class_entry *ce = Z_OBJCE_P(val);
4170 		if (ce == zend_ce_generator) {
4171 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
4172 
4173 			if (IS_CONST != IS_TMP_VAR) {
4174 				Z_ADDREF_P(val);
4175 			}
4176 
4177 			if (Z_ISUNDEF(new_gen->retval)) {
4178 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
4179 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
4180 					zval_ptr_dtor(val);
4181 					HANDLE_EXCEPTION();
4182 				} else {
4183 					zend_generator_yield_from(generator, new_gen);
4184 				}
4185 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
4186 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
4187 				zval_ptr_dtor(val);
4188 				HANDLE_EXCEPTION();
4189 			} else {
4190 				if (RETURN_VALUE_USED(opline)) {
4191 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
4192 				}
4193 				ZEND_VM_NEXT_OPCODE();
4194 			}
4195 		} else {
4196 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
4197 
4198 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
4199 				if (!EG(exception)) {
4200 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
4201 				}
4202 				HANDLE_EXCEPTION();
4203 			}
4204 
4205 			iter->index = 0;
4206 			if (iter->funcs->rewind) {
4207 				iter->funcs->rewind(iter);
4208 				if (UNEXPECTED(EG(exception) != NULL)) {
4209 					OBJ_RELEASE(&iter->std);
4210 					HANDLE_EXCEPTION();
4211 				}
4212 			}
4213 
4214 			ZVAL_OBJ(&generator->values, &iter->std);
4215 		}
4216 	} else {
4217 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
4218 		HANDLE_EXCEPTION();
4219 	}
4220 
4221 	/* This is the default return value
4222 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
4223 	if (RETURN_VALUE_USED(opline)) {
4224 		ZVAL_NULL(EX_VAR(opline->result.var));
4225 	}
4226 
4227 	/* This generator has no send target (though the generator we delegate to might have one) */
4228 	generator->send_target = NULL;
4229 
4230 	/* We increment to the next op, so we are at the correct position when the
4231 	 * generator is resumed. */
4232 	ZEND_VM_INC_OPCODE();
4233 
4234 	/* The GOTO VM uses a local opline variable. We need to set the opline
4235 	 * variable in execute_data so we don't resume at an old position. */
4236 	SAVE_OPLINE();
4237 
4238 	ZEND_VM_RETURN();
4239 }
4240 
4241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4242 {
4243 	USE_OPLINE
4244 	zval *value;
4245 
4246 
4247 	SAVE_OPLINE();
4248 	value = EX_CONSTANT(opline->op1);
4249 try_strlen:
4250 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
4251 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
4252 	} else {
4253 		zend_bool strict;
4254 
4255 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4256 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
4257 		}
4258 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
4259 			value = Z_REFVAL_P(value);
4260 			goto try_strlen;
4261 		}
4262 		strict = EX_USES_STRICT_TYPES();
4263 		do {
4264 			if (EXPECTED(!strict)) {
4265 				zend_string *str;
4266 				zval tmp;
4267 
4268 				ZVAL_COPY(&tmp, value);
4269 				if (zend_parse_arg_str_weak(&tmp, &str)) {
4270 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
4271 					zval_ptr_dtor(&tmp);
4272 					break;
4273 				}
4274 				zval_ptr_dtor(&tmp);
4275 			}
4276 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
4277 			ZVAL_NULL(EX_VAR(opline->result.var));
4278 		} while (0);
4279 	}
4280 
4281 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4282 }
4283 
4284 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4285 {
4286 	USE_OPLINE
4287 	zval *value;
4288 	int result = 0;
4289 
4290 
4291 	SAVE_OPLINE();
4292 	value = EX_CONSTANT(opline->op1);
4293 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
4294 		if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4295 			zend_class_entry *ce = Z_OBJCE_P(value);
4296 
4297 			if (UNEXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
4298 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
4299 				result = 1;
4300 			}
4301 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
4302 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
4303 
4304 			if (EXPECTED(type_name != NULL)) {
4305 				result = 1;
4306 			}
4307 		} else {
4308 			result = 1;
4309 		}
4310 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
4311 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
4312 		result = 1;
4313 	}
4314 
4315 	ZEND_VM_SMART_BRANCH(result, 1);
4316 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4317 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4318 }
4319 
4320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4321 {
4322 	USE_OPLINE
4323 	zend_constant *c;
4324 	int result;
4325 
4326 	if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
4327 		result = 1;
4328 	} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op1), 0)) == NULL) {
4329 		result = 0;
4330 		ZVAL_FALSE(EX_VAR(opline->result.var));
4331 	} else {
4332 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), c);
4333 		result = 1;
4334 	}
4335 	ZEND_VM_SMART_BRANCH(result, 0);
4336 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4337 	ZEND_VM_NEXT_OPCODE();
4338 }
4339 
4340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4341 {
4342 	USE_OPLINE
4343 
4344 	zval *op1, *op2, *result;
4345 
4346 	op1 = EX_CONSTANT(opline->op1);
4347 	op2 = EX_CONSTANT(opline->op2);
4348 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4349 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4350 			result = EX_VAR(opline->result.var);
4351 			fast_long_add_function(result, op1, op2);
4352 			ZEND_VM_NEXT_OPCODE();
4353 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4354 			result = EX_VAR(opline->result.var);
4355 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
4356 			ZEND_VM_NEXT_OPCODE();
4357 		}
4358 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4359 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4360 			result = EX_VAR(opline->result.var);
4361 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
4362 			ZEND_VM_NEXT_OPCODE();
4363 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4364 			result = EX_VAR(opline->result.var);
4365 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
4366 			ZEND_VM_NEXT_OPCODE();
4367 		}
4368 	}
4369 
4370 	SAVE_OPLINE();
4371 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4372 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4373 	}
4374 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4375 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4376 	}
4377 	add_function(EX_VAR(opline->result.var), op1, op2);
4378 
4379 
4380 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4381 }
4382 
4383 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4384 {
4385 	USE_OPLINE
4386 
4387 	zval *op1, *op2, *result;
4388 
4389 	op1 = EX_CONSTANT(opline->op1);
4390 	op2 = EX_CONSTANT(opline->op2);
4391 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4392 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4393 			result = EX_VAR(opline->result.var);
4394 			fast_long_sub_function(result, op1, op2);
4395 			ZEND_VM_NEXT_OPCODE();
4396 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4397 			result = EX_VAR(opline->result.var);
4398 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
4399 			ZEND_VM_NEXT_OPCODE();
4400 		}
4401 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4402 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4403 			result = EX_VAR(opline->result.var);
4404 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
4405 			ZEND_VM_NEXT_OPCODE();
4406 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4407 			result = EX_VAR(opline->result.var);
4408 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
4409 			ZEND_VM_NEXT_OPCODE();
4410 		}
4411 	}
4412 
4413 	SAVE_OPLINE();
4414 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4415 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4416 	}
4417 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4418 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4419 	}
4420 	sub_function(EX_VAR(opline->result.var), op1, op2);
4421 
4422 
4423 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4424 }
4425 
4426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4427 {
4428 	USE_OPLINE
4429 
4430 	zval *op1, *op2, *result;
4431 
4432 	op1 = EX_CONSTANT(opline->op1);
4433 	op2 = EX_CONSTANT(opline->op2);
4434 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4435 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4436 			zend_long overflow;
4437 
4438 			result = EX_VAR(opline->result.var);
4439 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
4440 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
4441 			ZEND_VM_NEXT_OPCODE();
4442 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4443 			result = EX_VAR(opline->result.var);
4444 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
4445 			ZEND_VM_NEXT_OPCODE();
4446 		}
4447 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4448 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4449 			result = EX_VAR(opline->result.var);
4450 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
4451 			ZEND_VM_NEXT_OPCODE();
4452 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4453 			result = EX_VAR(opline->result.var);
4454 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
4455 			ZEND_VM_NEXT_OPCODE();
4456 		}
4457 	}
4458 
4459 	SAVE_OPLINE();
4460 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4461 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4462 	}
4463 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4464 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4465 	}
4466 	mul_function(EX_VAR(opline->result.var), op1, op2);
4467 
4468 
4469 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4470 }
4471 
4472 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4473 {
4474 	USE_OPLINE
4475 
4476 	zval *op1, *op2;
4477 
4478 	SAVE_OPLINE();
4479 	op1 = EX_CONSTANT(opline->op1);
4480 	op2 = EX_CONSTANT(opline->op2);
4481 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
4482 
4483 
4484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4485 }
4486 
4487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4488 {
4489 	USE_OPLINE
4490 
4491 	zval *op1, *op2, *result;
4492 
4493 	op1 = EX_CONSTANT(opline->op1);
4494 	op2 = EX_CONSTANT(opline->op2);
4495 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4496 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4497 			result = EX_VAR(opline->result.var);
4498 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
4499 				SAVE_OPLINE();
4500 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
4501 				HANDLE_EXCEPTION();
4502 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
4503 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
4504 				ZVAL_LONG(result, 0);
4505 			} else {
4506 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
4507 			}
4508 			ZEND_VM_NEXT_OPCODE();
4509 		}
4510 	}
4511 
4512 	SAVE_OPLINE();
4513 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4514 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4515 	}
4516 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4517 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4518 	}
4519 	mod_function(EX_VAR(opline->result.var), op1, op2);
4520 
4521 
4522 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4523 }
4524 
4525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4526 {
4527 	USE_OPLINE
4528 
4529 	zval *op1, *op2;
4530 
4531 	SAVE_OPLINE();
4532 	op1 = EX_CONSTANT(opline->op1);
4533 	op2 = EX_CONSTANT(opline->op2);
4534 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
4535 
4536 
4537 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4538 }
4539 
4540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4541 {
4542 	USE_OPLINE
4543 
4544 	zval *op1, *op2;
4545 
4546 	SAVE_OPLINE();
4547 	op1 = EX_CONSTANT(opline->op1);
4548 	op2 = EX_CONSTANT(opline->op2);
4549 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
4550 
4551 
4552 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4553 }
4554 
4555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4556 {
4557 	USE_OPLINE
4558 
4559 	zval *op1, *op2;
4560 
4561 	SAVE_OPLINE();
4562 	op1 = EX_CONSTANT(opline->op1);
4563 	op2 = EX_CONSTANT(opline->op2);
4564 	pow_function(EX_VAR(opline->result.var), op1, op2);
4565 
4566 
4567 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4568 }
4569 
4570 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4571 {
4572 	USE_OPLINE
4573 
4574 	zval *op1, *op2;
4575 
4576 	SAVE_OPLINE();
4577 	op1 = EX_CONSTANT(opline->op1);
4578 	op2 = EX_CONSTANT(opline->op2);
4579 
4580 	do {
4581 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
4582 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
4583 			zend_string *op1_str = Z_STR_P(op1);
4584 			zend_string *op2_str = Z_STR_P(op2);
4585 			zend_string *str;
4586 
4587 			if (IS_CONST != IS_CONST) {
4588 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
4589 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
4590 
4591 					break;
4592 				}
4593 			}
4594 			if (IS_CONST != IS_CONST) {
4595 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
4596 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
4597 
4598 					break;
4599 				}
4600 			}
4601 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
4602 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
4603 			    size_t len = ZSTR_LEN(op1_str);
4604 
4605 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
4606 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
4607 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
4608 				break;
4609 			} else {
4610 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
4611 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
4612 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
4613 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
4614 			}
4615 		} else {
4616 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4617 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4618 			}
4619 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4620 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4621 			}
4622 			concat_function(EX_VAR(opline->result.var), op1, op2);
4623 		}
4624 
4625 	} while (0);
4626 
4627 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4628 }
4629 
4630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4631 {
4632 	USE_OPLINE
4633 
4634 	zval *op1, *op2;
4635 	int result;
4636 
4637 	SAVE_OPLINE();
4638 	op1 = EX_CONSTANT(opline->op1);
4639 	op2 = EX_CONSTANT(opline->op2);
4640 	result = fast_is_identical_function(op1, op2);
4641 
4642 
4643 	ZEND_VM_SMART_BRANCH(result, 1);
4644 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4645 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4646 }
4647 
4648 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4649 {
4650 	USE_OPLINE
4651 
4652 	zval *op1, *op2;
4653 	int result;
4654 
4655 	SAVE_OPLINE();
4656 	op1 = EX_CONSTANT(opline->op1);
4657 	op2 = EX_CONSTANT(opline->op2);
4658 	result = fast_is_not_identical_function(op1, op2);
4659 
4660 
4661 	ZEND_VM_SMART_BRANCH(result, 1);
4662 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4664 }
4665 
4666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4667 {
4668 	USE_OPLINE
4669 
4670 	zval *op1, *op2, *result;
4671 
4672 	op1 = EX_CONSTANT(opline->op1);
4673 	op2 = EX_CONSTANT(opline->op2);
4674 	do {
4675 		int result;
4676 
4677 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
4678 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4679 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
4680 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4681 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
4682 			} else {
4683 				break;
4684 			}
4685 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
4686 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4687 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
4688 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4689 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
4690 			} else {
4691 				break;
4692 			}
4693 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
4694 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
4695 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
4696 					result = 1;
4697 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
4698 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
4699 						result = 0;
4700 					} else {
4701 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
4702 					}
4703 				} else {
4704 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
4705 				}
4706 
4707 
4708 			} else {
4709 				break;
4710 			}
4711 		} else {
4712 			break;
4713 		}
4714 		ZEND_VM_SMART_BRANCH(result, 0);
4715 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4716 		ZEND_VM_NEXT_OPCODE();
4717 	} while (0);
4718 
4719 	SAVE_OPLINE();
4720 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4721 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4722 	}
4723 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4724 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4725 	}
4726 	result = EX_VAR(opline->result.var);
4727 	compare_function(result, op1, op2);
4728 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
4729 
4730 
4731 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4732 }
4733 
4734 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4735 {
4736 	USE_OPLINE
4737 
4738 	zval *op1, *op2, *result;
4739 
4740 	op1 = EX_CONSTANT(opline->op1);
4741 	op2 = EX_CONSTANT(opline->op2);
4742 	do {
4743 		int result;
4744 
4745 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
4746 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4747 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
4748 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4749 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
4750 			} else {
4751 				break;
4752 			}
4753 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
4754 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4755 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
4756 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4757 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
4758 			} else {
4759 				break;
4760 			}
4761 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
4762 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
4763 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
4764 					result = 0;
4765 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
4766 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
4767 						result = 1;
4768 					} else {
4769 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
4770 					}
4771 				} else {
4772 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
4773 				}
4774 
4775 
4776 			} else {
4777 				break;
4778 			}
4779 		} else {
4780 			break;
4781 		}
4782 		ZEND_VM_SMART_BRANCH(result, 0);
4783 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4784 		ZEND_VM_NEXT_OPCODE();
4785 	} while (0);
4786 
4787 	SAVE_OPLINE();
4788 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4789 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4790 	}
4791 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4792 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4793 	}
4794 	result = EX_VAR(opline->result.var);
4795 	compare_function(result, op1, op2);
4796 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
4797 
4798 
4799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4800 }
4801 
4802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4803 {
4804 	USE_OPLINE
4805 
4806 	zval *op1, *op2, *result;
4807 
4808 	op1 = EX_CONSTANT(opline->op1);
4809 	op2 = EX_CONSTANT(opline->op2);
4810 	do {
4811 		int result;
4812 
4813 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4814 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4815 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
4816 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4817 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
4818 			} else {
4819 				break;
4820 			}
4821 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4822 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4823 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
4824 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4825 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
4826 			} else {
4827 				break;
4828 			}
4829 		} else {
4830 			break;
4831 		}
4832 		ZEND_VM_SMART_BRANCH(result, 0);
4833 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4834 		ZEND_VM_NEXT_OPCODE();
4835 	} while (0);
4836 
4837 	SAVE_OPLINE();
4838 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4839 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4840 	}
4841 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4842 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4843 	}
4844 	result = EX_VAR(opline->result.var);
4845 	compare_function(result, op1, op2);
4846 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
4847 
4848 
4849 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4850 }
4851 
4852 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4853 {
4854 	USE_OPLINE
4855 
4856 	zval *op1, *op2, *result;
4857 
4858 	op1 = EX_CONSTANT(opline->op1);
4859 	op2 = EX_CONSTANT(opline->op2);
4860 	do {
4861 		int result;
4862 
4863 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4864 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4865 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
4866 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4867 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
4868 			} else {
4869 				break;
4870 			}
4871 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4872 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4873 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
4874 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4875 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
4876 			} else {
4877 				break;
4878 			}
4879 		} else {
4880 			break;
4881 		}
4882 		ZEND_VM_SMART_BRANCH(result, 0);
4883 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4884 		ZEND_VM_NEXT_OPCODE();
4885 	} while (0);
4886 
4887 	SAVE_OPLINE();
4888 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4889 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4890 	}
4891 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4892 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4893 	}
4894 	result = EX_VAR(opline->result.var);
4895 	compare_function(result, op1, op2);
4896 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
4897 
4898 
4899 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4900 }
4901 
4902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4903 {
4904 	USE_OPLINE
4905 
4906 	zval *op1, *op2;
4907 
4908 	SAVE_OPLINE();
4909 	op1 = EX_CONSTANT(opline->op1);
4910 	op2 = EX_CONSTANT(opline->op2);
4911 	compare_function(EX_VAR(opline->result.var), op1, op2);
4912 
4913 
4914 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4915 }
4916 
4917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4918 {
4919 	USE_OPLINE
4920 
4921 	zval *op1, *op2;
4922 
4923 	SAVE_OPLINE();
4924 	op1 = EX_CONSTANT(opline->op1);
4925 	op2 = EX_CONSTANT(opline->op2);
4926 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
4927 
4928 
4929 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4930 }
4931 
4932 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4933 {
4934 	USE_OPLINE
4935 
4936 	zval *op1, *op2;
4937 
4938 	SAVE_OPLINE();
4939 	op1 = EX_CONSTANT(opline->op1);
4940 	op2 = EX_CONSTANT(opline->op2);
4941 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
4942 
4943 
4944 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4945 }
4946 
4947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4948 {
4949 	USE_OPLINE
4950 
4951 	zval *op1, *op2;
4952 
4953 	SAVE_OPLINE();
4954 	op1 = EX_CONSTANT(opline->op1);
4955 	op2 = EX_CONSTANT(opline->op2);
4956 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
4957 
4958 
4959 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4960 }
4961 
4962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4963 {
4964 	USE_OPLINE
4965 
4966 	zval *op1, *op2;
4967 
4968 	SAVE_OPLINE();
4969 	op1 = EX_CONSTANT(opline->op1);
4970 	op2 = EX_CONSTANT(opline->op2);
4971 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
4972 
4973 
4974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4975 }
4976 
4977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
4978 {
4979 	USE_OPLINE
4980 
4981 	zval *varname;
4982 	zval *retval;
4983 	zend_string *name;
4984 	HashTable *target_symbol_table;
4985 
4986 	SAVE_OPLINE();
4987 	varname = EX_CONSTANT(opline->op1);
4988 
4989  	if (IS_CONST == IS_CONST) {
4990 		name = Z_STR_P(varname);
4991 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
4992 		name = Z_STR_P(varname);
4993 		zend_string_addref(name);
4994 	} else {
4995 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
4996 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
4997 		}
4998 		name = zval_get_string(varname);
4999 	}
5000 
5001 	if (IS_CONST != IS_UNUSED) {
5002 		zend_class_entry *ce;
5003 
5004 		if (IS_CONST == IS_CONST) {
5005 			if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
5006 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
5007 
5008 				/* check if static properties were destoyed */
5009 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
5010 					if (type == BP_VAR_IS) {
5011 						retval = &EG(uninitialized_zval);
5012 					} else {
5013 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
5014 
5015 						HANDLE_EXCEPTION();
5016 					}
5017 				}
5018 
5019 				goto fetch_var_return;
5020 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
5021 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
5022 				if (UNEXPECTED(ce == NULL)) {
5023 					if (IS_CONST != IS_CONST) {
5024 						zend_string_release(name);
5025 					}
5026 
5027 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5028 				}
5029 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
5030 			}
5031 		} else {
5032 			ce = Z_CE_P(EX_VAR(opline->op2.var));
5033 			if (IS_CONST == IS_CONST &&
5034 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
5035 
5036 				/* check if static properties were destoyed */
5037 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
5038 					if (type == BP_VAR_IS) {
5039 						retval = &EG(uninitialized_zval);
5040 					} else {
5041 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
5042 
5043 						HANDLE_EXCEPTION();
5044 					}
5045 				}
5046 
5047 				goto fetch_var_return;
5048 			}
5049 		}
5050 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
5051 		if (UNEXPECTED(EG(exception))) {
5052 			if (IS_CONST != IS_CONST) {
5053 				zend_string_release(name);
5054 			}
5055 
5056 			HANDLE_EXCEPTION();
5057 		}
5058 		if (EXPECTED(retval)) {
5059 			if (IS_CONST == IS_CONST) {
5060 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
5061 			}
5062 		} else {
5063 			retval = &EG(uninitialized_zval);
5064 		}
5065 
5066 	} else {
5067 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
5068 		retval = zend_hash_find(target_symbol_table, name);
5069 		if (retval == NULL) {
5070 			switch (type) {
5071 				case BP_VAR_R:
5072 				case BP_VAR_UNSET:
5073 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
5074 					/* break missing intentionally */
5075 				case BP_VAR_IS:
5076 					retval = &EG(uninitialized_zval);
5077 					break;
5078 				case BP_VAR_RW:
5079 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
5080 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
5081 					break;
5082 				case BP_VAR_W:
5083 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
5084 					break;
5085 				EMPTY_SWITCH_DEFAULT_CASE()
5086 			}
5087 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
5088 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
5089 			retval = Z_INDIRECT_P(retval);
5090 			if (Z_TYPE_P(retval) == IS_UNDEF) {
5091 				switch (type) {
5092 					case BP_VAR_R:
5093 					case BP_VAR_UNSET:
5094 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
5095 						/* break missing intentionally */
5096 					case BP_VAR_IS:
5097 						retval = &EG(uninitialized_zval);
5098 						break;
5099 					case BP_VAR_RW:
5100 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
5101 						/* break missing intentionally */
5102 					case BP_VAR_W:
5103 						ZVAL_NULL(retval);
5104 						break;
5105 					EMPTY_SWITCH_DEFAULT_CASE()
5106 				}
5107 			}
5108 		}
5109 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
5110 			if (Z_CONSTANT_P(retval)) {
5111 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
5112 
5113 					HANDLE_EXCEPTION();
5114 				}
5115 			}
5116 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
5117 
5118 		}
5119 	}
5120 
5121 	if (IS_CONST != IS_CONST) {
5122 		zend_string_release(name);
5123 	}
5124 
5125 fetch_var_return:
5126 	ZEND_ASSERT(retval != NULL);
5127 	if (type == BP_VAR_R || type == BP_VAR_IS) {
5128 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
5129 			ZVAL_UNREF(retval);
5130 		}
5131 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
5132 	} else {
5133 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
5134 	}
5135 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5136 }
5137 
5138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5139 {
5140 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5141 }
5142 
5143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5144 {
5145 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5146 }
5147 
5148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5149 {
5150 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5151 }
5152 
5153 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5154 {
5155 	USE_OPLINE
5156 
5157 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
5158 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5159 	} else {
5160 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5161 	}
5162 }
5163 
5164 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5165 {
5166 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5167 }
5168 
5169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5170 {
5171 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5172 }
5173 
5174 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5175 {
5176 	USE_OPLINE
5177 
5178 	zval *container;
5179 
5180 	SAVE_OPLINE();
5181 	container = EX_CONSTANT(opline->op1);
5182 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5183 
5184 
5185 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5186 }
5187 
5188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5189 {
5190 	USE_OPLINE
5191 
5192 	zval *container;
5193 
5194 	SAVE_OPLINE();
5195 	container = EX_CONSTANT(opline->op1);
5196 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5197 
5198 
5199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5200 }
5201 
5202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5203 {
5204 	USE_OPLINE
5205 	zval *container;
5206 	zend_free_op free_op1;
5207 
5208 	SAVE_OPLINE();
5209 
5210 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
5211         if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
5212             zend_throw_error(NULL, "Cannot use temporary expression in write context");
5213 
5214 
5215 			HANDLE_EXCEPTION();
5216         }
5217 		container = NULL;
5218 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
5219 			zend_throw_error(NULL, "Cannot use string offset as an array");
5220 
5221 			HANDLE_EXCEPTION();
5222 		}
5223 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5224 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
5225 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
5226 		}
5227 
5228 
5229 	} else {
5230 		if (IS_CONST == IS_UNUSED) {
5231 			zend_throw_error(NULL, "Cannot use [] for reading");
5232 
5233 
5234 			HANDLE_EXCEPTION();
5235 		}
5236 		container = EX_CONSTANT(opline->op1);
5237 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5238 
5239 
5240 	}
5241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5242 }
5243 
5244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5245 {
5246 	USE_OPLINE
5247 
5248 	zval *container;
5249 
5250 	zval *offset;
5251 
5252 	SAVE_OPLINE();
5253 	container = EX_CONSTANT(opline->op1);
5254 
5255 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
5256 		zend_throw_error(NULL, "Using $this when not in object context");
5257 
5258 		HANDLE_EXCEPTION();
5259 	}
5260 
5261 	offset = EX_CONSTANT(opline->op2);
5262 
5263 	if (IS_CONST == IS_CONST ||
5264 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5265 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5266 			container = Z_REFVAL_P(container);
5267 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
5268 				goto fetch_obj_r_no_object;
5269 			}
5270 		} else {
5271 			goto fetch_obj_r_no_object;
5272 		}
5273 	}
5274 
5275 	/* here we are sure we are dealing with an object */
5276 	do {
5277 		zend_object *zobj = Z_OBJ_P(container);
5278 		zval *retval;
5279 
5280 		if (IS_CONST == IS_CONST &&
5281 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
5282 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
5283 
5284 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
5285 				retval = OBJ_PROP(zobj, prop_offset);
5286 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
5287 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5288 					break;
5289 				}
5290 			} else if (EXPECTED(zobj->properties != NULL)) {
5291 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
5292 				if (EXPECTED(retval)) {
5293 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5294 					break;
5295 				}
5296 			}
5297 		}
5298 
5299 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
5300 fetch_obj_r_no_object:
5301 			zend_error(E_NOTICE, "Trying to get property of non-object");
5302 			ZVAL_NULL(EX_VAR(opline->result.var));
5303 		} else {
5304 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
5305 
5306 			if (retval != EX_VAR(opline->result.var)) {
5307 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
5308 			}
5309 		}
5310 	} while (0);
5311 
5312 
5313 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5314 }
5315 
5316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5317 {
5318 	USE_OPLINE
5319 
5320 	zval *container;
5321 
5322 	zval *offset;
5323 
5324 	SAVE_OPLINE();
5325 	container = EX_CONSTANT(opline->op1);
5326 
5327 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
5328 		zend_throw_error(NULL, "Using $this when not in object context");
5329 
5330 		HANDLE_EXCEPTION();
5331 	}
5332 
5333 	offset  = EX_CONSTANT(opline->op2);
5334 
5335 	if (IS_CONST == IS_CONST ||
5336 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5337 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5338 			container = Z_REFVAL_P(container);
5339 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
5340 				goto fetch_obj_is_no_object;
5341 			}
5342 		} else {
5343 			goto fetch_obj_is_no_object;
5344 		}
5345 	}
5346 
5347 	/* here we are sure we are dealing with an object */
5348 	do {
5349 		zend_object *zobj = Z_OBJ_P(container);
5350 		zval *retval;
5351 
5352 		if (IS_CONST == IS_CONST &&
5353 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
5354 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
5355 
5356 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
5357 				retval = OBJ_PROP(zobj, prop_offset);
5358 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
5359 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5360 					break;
5361 				}
5362 			} else if (EXPECTED(zobj->properties != NULL)) {
5363 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
5364 				if (EXPECTED(retval)) {
5365 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5366 					break;
5367 				}
5368 			}
5369 		}
5370 
5371 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
5372 fetch_obj_is_no_object:
5373 			ZVAL_NULL(EX_VAR(opline->result.var));
5374 		} else {
5375 
5376 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
5377 
5378 			if (retval != EX_VAR(opline->result.var)) {
5379 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
5380 			}
5381 		}
5382 	} while (0);
5383 
5384 
5385 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5386 }
5387 
5388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5389 {
5390 	USE_OPLINE
5391 	zval *container;
5392 
5393 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
5394 		/* Behave like FETCH_OBJ_W */
5395 		zend_free_op free_op1;
5396 		zval *property;
5397 
5398 		SAVE_OPLINE();
5399 		property = EX_CONSTANT(opline->op2);
5400 		container = NULL;
5401 
5402 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
5403 			zend_throw_error(NULL, "Using $this when not in object context");
5404 
5405 			HANDLE_EXCEPTION();
5406 		}
5407 		if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
5408 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
5409 
5410 
5411 			HANDLE_EXCEPTION();
5412 		}
5413 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
5414 			zend_throw_error(NULL, "Cannot use string offset as an object");
5415 
5416 			HANDLE_EXCEPTION();
5417 		}
5418 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
5419 
5420 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
5421 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
5422 		}
5423 
5424 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5425 	} else {
5426 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5427 	}
5428 }
5429 
5430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5431 {
5432 	USE_OPLINE
5433 
5434 	zval *container;
5435 
5436 	SAVE_OPLINE();
5437 	container = EX_CONSTANT(opline->op1);
5438 
5439 try_fetch_list:
5440 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
5441 		zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
5442 
5443 		if (UNEXPECTED(value == NULL)) {
5444 			zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
5445 			ZVAL_NULL(EX_VAR(opline->result.var));
5446 		} else {
5447 			ZVAL_COPY(EX_VAR(opline->result.var), value);
5448 		}
5449 	} else if (IS_CONST != IS_CONST &&
5450 	           UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
5451 	           EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
5452 		zval *result = EX_VAR(opline->result.var);
5453 		zval *retval = Z_OBJ_HT_P(container)->read_dimension(container, EX_CONSTANT(opline->op2), BP_VAR_R, result);
5454 
5455 		if (retval) {
5456 			if (result != retval) {
5457 				ZVAL_COPY(result, retval);
5458 			}
5459 		} else {
5460 			ZVAL_NULL(result);
5461 		}
5462 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(container) == IS_REFERENCE) {
5463 		container = Z_REFVAL_P(container);
5464 		goto try_fetch_list;
5465 	} else {
5466 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5467 			GET_OP1_UNDEF_CV(container, BP_VAR_R);
5468 		}
5469 		ZVAL_NULL(EX_VAR(opline->result.var));
5470 	}
5471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5472 }
5473 
5474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5475 {
5476 	USE_OPLINE
5477 
5478 	zval *op1, *op2;
5479 	zend_string *op1_str, *op2_str, *str;
5480 
5481 	SAVE_OPLINE();
5482 	op1 = EX_CONSTANT(opline->op1);
5483 	if (IS_CONST == IS_CONST) {
5484 		op1_str = Z_STR_P(op1);
5485 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5486 		op1_str = zend_string_copy(Z_STR_P(op1));
5487 	} else {
5488 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
5489 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
5490 		}
5491 		op1_str = _zval_get_string_func(op1);
5492 	}
5493 	op2 = EX_CONSTANT(opline->op2);
5494 	if (IS_CONST == IS_CONST) {
5495 		op2_str = Z_STR_P(op2);
5496 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5497 		op2_str = zend_string_copy(Z_STR_P(op2));
5498 	} else {
5499 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
5500 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
5501 		}
5502 		op2_str = _zval_get_string_func(op2);
5503 	}
5504 	do {
5505 		if (IS_CONST != IS_CONST) {
5506 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
5507 				if (IS_CONST == IS_CONST) {
5508 					zend_string_addref(op2_str);
5509 				}
5510 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
5511 				zend_string_release(op1_str);
5512 				break;
5513 			}
5514 		}
5515 		if (IS_CONST != IS_CONST) {
5516 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
5517 				if (IS_CONST == IS_CONST) {
5518 					zend_string_addref(op1_str);
5519 				}
5520 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
5521 				zend_string_release(op2_str);
5522 				break;
5523 			}
5524 		}
5525 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
5526 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
5527 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
5528 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
5529 		if (IS_CONST != IS_CONST) {
5530 			zend_string_release(op1_str);
5531 		}
5532 		if (IS_CONST != IS_CONST) {
5533 			zend_string_release(op2_str);
5534 		}
5535 	} while (0);
5536 
5537 
5538 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5539 }
5540 
5541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5542 {
5543 	USE_OPLINE
5544 	zval *function_name;
5545 
5546 	zval *object;
5547 	zend_function *fbc;
5548 	zend_class_entry *called_scope;
5549 	zend_object *obj;
5550 	zend_execute_data *call;
5551 	uint32_t call_info;
5552 
5553 	SAVE_OPLINE();
5554 
5555 	function_name = EX_CONSTANT(opline->op2);
5556 
5557 	if (IS_CONST != IS_CONST &&
5558 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5559 		do {
5560 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
5561 				function_name = Z_REFVAL_P(function_name);
5562 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5563 					break;
5564 				}
5565 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5566 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
5567 				if (UNEXPECTED(EG(exception) != NULL)) {
5568 					HANDLE_EXCEPTION();
5569 				}
5570 			}
5571 			zend_throw_error(NULL, "Method name must be a string");
5572 
5573 
5574 			HANDLE_EXCEPTION();
5575 		} while (0);
5576 	}
5577 
5578 	object = EX_CONSTANT(opline->op1);
5579 
5580 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
5581 		zend_throw_error(NULL, "Using $this when not in object context");
5582 
5583 		HANDLE_EXCEPTION();
5584 	}
5585 
5586 	if (IS_CONST != IS_UNUSED) {
5587 		do {
5588 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
5589 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
5590 					object = Z_REFVAL_P(object);
5591 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
5592 						break;
5593 					}
5594 				}
5595 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
5596 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
5597 					if (UNEXPECTED(EG(exception) != NULL)) {
5598 
5599 						HANDLE_EXCEPTION();
5600 					}
5601 				}
5602 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
5603 
5604 
5605 				HANDLE_EXCEPTION();
5606 			}
5607 		} while (0);
5608 	}
5609 
5610 	obj = Z_OBJ_P(object);
5611 	called_scope = obj->ce;
5612 
5613 	if (IS_CONST != IS_CONST ||
5614 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
5615 	    zend_object *orig_obj = obj;
5616 
5617 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
5618 			zend_throw_error(NULL, "Object does not support method calls");
5619 
5620 
5621 			HANDLE_EXCEPTION();
5622 		}
5623 
5624 		/* First, locate the function. */
5625 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
5626 		if (UNEXPECTED(fbc == NULL)) {
5627 			if (EXPECTED(!EG(exception))) {
5628 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
5629 			}
5630 
5631 
5632 			HANDLE_EXCEPTION();
5633 		}
5634 		if (IS_CONST == IS_CONST &&
5635 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5636 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
5637 		    EXPECTED(obj == orig_obj)) {
5638 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
5639 		}
5640 	}
5641 
5642 	call_info = ZEND_CALL_NESTED_FUNCTION;
5643 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
5644 		obj = NULL;
5645 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
5646 		/* CV may be changed indirectly (e.g. when it's a reference) */
5647 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
5648 		GC_REFCOUNT(obj)++; /* For $this pointer */
5649 	}
5650 
5651 
5652 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
5653 		HANDLE_EXCEPTION();
5654 	}
5655 
5656 	call = zend_vm_stack_push_call_frame(call_info,
5657 		fbc, opline->extended_value, called_scope, obj);
5658 	call->prev_execute_data = EX(call);
5659 	EX(call) = call;
5660 
5661 	ZEND_VM_NEXT_OPCODE();
5662 }
5663 
5664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5665 {
5666 	USE_OPLINE
5667 	zval *function_name;
5668 	zend_class_entry *ce;
5669 	zend_object *object;
5670 	zend_function *fbc;
5671 	zend_execute_data *call;
5672 
5673 	SAVE_OPLINE();
5674 
5675 	if (IS_CONST == IS_CONST) {
5676 		/* no function found. try a static method in class */
5677 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5678 		if (UNEXPECTED(ce == NULL)) {
5679 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
5680 			if (UNEXPECTED(ce == NULL)) {
5681 				if (UNEXPECTED(EG(exception) != NULL)) {
5682 					HANDLE_EXCEPTION();
5683 				}
5684 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
5685 				HANDLE_EXCEPTION();
5686 			}
5687 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
5688 		}
5689 	} else {
5690 		ce = Z_CE_P(EX_VAR(opline->op1.var));
5691 	}
5692 
5693 	if (IS_CONST == IS_CONST &&
5694 	    IS_CONST == IS_CONST &&
5695 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
5696 		/* nothing to do */
5697 	} else if (IS_CONST != IS_CONST &&
5698 	           IS_CONST == IS_CONST &&
5699 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
5700 		/* do nothing */
5701 	} else if (IS_CONST != IS_UNUSED) {
5702 
5703 
5704 		function_name = EX_CONSTANT(opline->op2);
5705 		if (IS_CONST != IS_CONST) {
5706 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5707 				do {
5708 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
5709 						function_name = Z_REFVAL_P(function_name);
5710 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5711 							break;
5712 						}
5713 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5714 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
5715 						if (UNEXPECTED(EG(exception) != NULL)) {
5716 							HANDLE_EXCEPTION();
5717 						}
5718 					}
5719 					zend_throw_error(NULL, "Function name must be a string");
5720 
5721 					HANDLE_EXCEPTION();
5722 				} while (0);
5723  			}
5724 		}
5725 
5726 		if (ce->get_static_method) {
5727 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
5728 		} else {
5729 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
5730 		}
5731 		if (UNEXPECTED(fbc == NULL)) {
5732 			if (EXPECTED(!EG(exception))) {
5733 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
5734 			}
5735 
5736 			HANDLE_EXCEPTION();
5737 		}
5738 		if (IS_CONST == IS_CONST &&
5739 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5740 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
5741 			if (IS_CONST == IS_CONST) {
5742 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
5743 			} else {
5744 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
5745 			}
5746 		}
5747 		if (IS_CONST != IS_CONST) {
5748 
5749 		}
5750 	} else {
5751 		if (UNEXPECTED(ce->constructor == NULL)) {
5752 			zend_throw_error(NULL, "Cannot call constructor");
5753 			HANDLE_EXCEPTION();
5754 		}
5755 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
5756 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
5757 			HANDLE_EXCEPTION();
5758 		}
5759 		fbc = ce->constructor;
5760 	}
5761 
5762 	object = NULL;
5763 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
5764 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
5765 			object = Z_OBJ(EX(This));
5766 			ce = object->ce;
5767 		} else {
5768 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
5769 				/* Allowed for PHP 4 compatibility. */
5770 				zend_error(
5771 					E_DEPRECATED,
5772 					"Non-static method %s::%s() should not be called statically",
5773 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
5774 				if (UNEXPECTED(EG(exception) != NULL)) {
5775 					HANDLE_EXCEPTION();
5776 				}
5777 			} else {
5778 				/* An internal function assumes $this is present and won't check that.
5779 				 * So PHP would crash by allowing the call. */
5780 				zend_throw_error(
5781 					zend_ce_error,
5782 					"Non-static method %s::%s() cannot be called statically",
5783 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
5784 				HANDLE_EXCEPTION();
5785 			}
5786 		}
5787 	}
5788 
5789 	if (IS_CONST != IS_CONST) {
5790 		/* previous opcode is ZEND_FETCH_CLASS */
5791 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
5792 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
5793 			ce = EX(called_scope);
5794 		}
5795 	}
5796 
5797 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
5798 		fbc, opline->extended_value, ce, object);
5799 	call->prev_execute_data = EX(call);
5800 	EX(call) = call;
5801 
5802 	ZEND_VM_NEXT_OPCODE();
5803 }
5804 
5805 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5806 {
5807 	USE_OPLINE
5808 
5809 	zval *function_name;
5810 	zend_fcall_info_cache fcc;
5811 	char *error = NULL;
5812 	zend_function *func;
5813 	zend_class_entry *called_scope;
5814 	zend_object *object;
5815 	zend_execute_data *call;
5816 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
5817 
5818 	SAVE_OPLINE();
5819 	function_name = EX_CONSTANT(opline->op2);
5820 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
5821 		func = fcc.function_handler;
5822 		called_scope = fcc.called_scope;
5823 		object = fcc.object;
5824 		if (error) {
5825 			efree(error);
5826 			/* This is the only soft error is_callable() can generate */
5827 			zend_error(E_DEPRECATED,
5828 				"Non-static method %s::%s() should not be called statically",
5829 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
5830 			if (UNEXPECTED(EG(exception) != NULL)) {
5831 
5832 				HANDLE_EXCEPTION();
5833 			}
5834 		}
5835 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
5836 			/* Delay closure destruction until its invocation */
5837 			if (IS_CONST & (IS_VAR|IS_CV)) {
5838 				ZVAL_DEREF(function_name);
5839 			}
5840 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
5841 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
5842 			call_info |= ZEND_CALL_CLOSURE;
5843 		}
5844 		if (object) {
5845 			call_info |= ZEND_CALL_RELEASE_THIS;
5846 			GC_REFCOUNT(object)++; /* For $this pointer */
5847 		}
5848 
5849 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
5850 			if (call_info & ZEND_CALL_CLOSURE) {
5851 				zend_object_release((zend_object*)func->common.prototype);
5852 			}
5853 			if (call_info & ZEND_CALL_RELEASE_THIS) {
5854 				zend_object_release(object);
5855 			}
5856 			HANDLE_EXCEPTION();
5857 		}
5858 	} else {
5859 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error);
5860 		efree(error);
5861 
5862 		if (UNEXPECTED(EG(exception))) {
5863 			HANDLE_EXCEPTION();
5864 		}
5865 		func = (zend_function*)&zend_pass_function;
5866 		called_scope = NULL;
5867 		object = NULL;
5868 	}
5869 
5870 	call = zend_vm_stack_push_call_frame(call_info,
5871 		func, opline->extended_value, called_scope, object);
5872 	call->prev_execute_data = EX(call);
5873 	EX(call) = call;
5874 
5875 	ZEND_VM_NEXT_OPCODE();
5876 }
5877 
5878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5879 {
5880 	USE_OPLINE
5881 
5882 	zval *op1, *op2, *result;
5883 
5884 	op1 = EX_CONSTANT(opline->op1);
5885 	op2 = EX_CONSTANT(opline->op2);
5886 	do {
5887 		int result;
5888 
5889 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5890 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5891 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
5892 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5893 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
5894 			} else {
5895 				break;
5896 			}
5897 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5898 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5899 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
5900 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5901 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
5902 			} else {
5903 				break;
5904 			}
5905 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5906 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5907 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
5908 					result = 1;
5909 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
5910 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
5911 						result = 0;
5912 					} else {
5913 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
5914 					}
5915 				} else {
5916 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
5917 				}
5918 
5919 			} else {
5920 				break;
5921 			}
5922 		} else {
5923 			break;
5924 		}
5925 		ZEND_VM_SMART_BRANCH(result, 0);
5926 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
5927 		ZEND_VM_NEXT_OPCODE();
5928 	} while (0);
5929 
5930 	SAVE_OPLINE();
5931 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
5932 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
5933 	} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
5934 		/* Don't keep lock on reference, lock the value instead */
5935 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
5936 			ZVAL_UNREF(op1);
5937 		} else {
5938 			Z_DELREF_P(op1);
5939 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
5940 		}
5941 	}
5942 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
5943 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
5944 	}
5945 	result = EX_VAR(opline->result.var);
5946 	compare_function(result, op1, op2);
5947 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
5948 
5949 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5950 }
5951 
5952 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5953 {
5954 	USE_OPLINE
5955 
5956 	SAVE_OPLINE();
5957 	if (IS_CONST == IS_UNUSED) {
5958 		zend_constant *c;
5959 
5960 		if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
5961 			c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
5962 		} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
5963 			if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
5964 				char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
5965 				if (!actual) {
5966 					ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(EX_CONSTANT(opline->op2)));
5967 				} else {
5968 					actual++;
5969 					ZVAL_STRINGL(EX_VAR(opline->result.var),
5970 							actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
5971 				}
5972 				/* non-qualified constant - allow text substitution */
5973 				zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
5974 						Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
5975 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5976 			} else {
5977 				zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
5978 				HANDLE_EXCEPTION();
5979 			}
5980 		} else {
5981 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), c);
5982 		}
5983 #ifdef ZTS
5984 		if (c->flags & CONST_PERSISTENT) {
5985 			ZVAL_DUP(EX_VAR(opline->result.var), &c->value);
5986 		} else {
5987 			ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
5988 		}
5989 #else
5990 		ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
5991 #endif
5992 	} else {
5993 		/* class constant */
5994 		zend_class_entry *ce;
5995 		zval *value;
5996 
5997 		do {
5998 			if (IS_CONST == IS_CONST) {
5999 				if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
6000 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
6001 					ZVAL_DEREF(value);
6002 #ifdef ZTS
6003 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
6004 #endif
6005 					break;
6006 				} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
6007 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
6008 				} else {
6009 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
6010 					if (UNEXPECTED(ce == NULL)) {
6011 						if (EXPECTED(!EG(exception))) {
6012 							zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
6013 						}
6014 						HANDLE_EXCEPTION();
6015 					}
6016 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
6017 				}
6018 			} else {
6019 				ce = Z_CE_P(EX_VAR(opline->op1.var));
6020 				if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
6021 					ZVAL_DEREF(value);
6022 					break;
6023 				}
6024 			}
6025 
6026 			if (EXPECTED((value = zend_hash_find(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
6027 				ZVAL_DEREF(value);
6028 				if (Z_CONSTANT_P(value)) {
6029 					EG(scope) = ce;
6030 					zval_update_constant_ex(value, 1, NULL);
6031 					EG(scope) = EX(func)->op_array.scope;
6032 					if (UNEXPECTED(EG(exception) != NULL)) {
6033 						HANDLE_EXCEPTION();
6034 					}
6035 				}
6036 				if (IS_CONST == IS_CONST) {
6037 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
6038 				} else {
6039 					CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
6040 				}
6041 			} else {
6042 				zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
6043 				HANDLE_EXCEPTION();
6044 			}
6045 		} while (0);
6046 #ifdef ZTS
6047 		if (ce->type == ZEND_INTERNAL_CLASS) {
6048 			ZVAL_DUP(EX_VAR(opline->result.var), value);
6049 		} else {
6050 			ZVAL_COPY(EX_VAR(opline->result.var), value);
6051 		}
6052 #else
6053 		ZVAL_COPY(EX_VAR(opline->result.var), value);
6054 #endif
6055 	}
6056 	ZEND_VM_NEXT_OPCODE();
6057 }
6058 
6059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6060 {
6061 	USE_OPLINE
6062 
6063 	zval *expr_ptr, new_expr;
6064 
6065 	SAVE_OPLINE();
6066 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
6067 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
6068 		expr_ptr = NULL;
6069 		if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
6070 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
6071 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
6072 			HANDLE_EXCEPTION();
6073 		}
6074 		ZVAL_MAKE_REF(expr_ptr);
6075 		Z_ADDREF_P(expr_ptr);
6076 
6077 	} else {
6078 		expr_ptr = EX_CONSTANT(opline->op1);
6079 		if (IS_CONST == IS_TMP_VAR) {
6080 			/* pass */
6081 		} else if (IS_CONST == IS_CONST) {
6082 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
6083 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
6084 				zval_copy_ctor_func(&new_expr);
6085 				expr_ptr = &new_expr;
6086 			}
6087 		} else if (IS_CONST == IS_CV) {
6088 			ZVAL_DEREF(expr_ptr);
6089 			if (Z_REFCOUNTED_P(expr_ptr)) {
6090 				Z_ADDREF_P(expr_ptr);
6091 			}
6092 		} else /* if (IS_CONST == IS_VAR) */ {
6093 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
6094 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
6095 
6096 				expr_ptr = Z_REFVAL_P(expr_ptr);
6097 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
6098 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
6099 					expr_ptr = &new_expr;
6100 					efree_size(ref, sizeof(zend_reference));
6101 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
6102 					Z_ADDREF_P(expr_ptr);
6103 				}
6104 			}
6105 		}
6106 	}
6107 
6108 	if (IS_CONST != IS_UNUSED) {
6109 
6110 		zval *offset = EX_CONSTANT(opline->op2);
6111 		zend_string *str;
6112 		zend_ulong hval;
6113 
6114 add_again:
6115 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6116 			str = Z_STR_P(offset);
6117 			if (IS_CONST != IS_CONST) {
6118 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6119 					goto num_index;
6120 				}
6121 			}
6122 str_index:
6123 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
6124 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6125 			hval = Z_LVAL_P(offset);
6126 num_index:
6127 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
6128 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
6129 			offset = Z_REFVAL_P(offset);
6130 			goto add_again;
6131 		} else if (Z_TYPE_P(offset) == IS_NULL) {
6132 			str = ZSTR_EMPTY_ALLOC();
6133 			goto str_index;
6134 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
6135 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
6136 			goto num_index;
6137 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
6138 			hval = 0;
6139 			goto num_index;
6140 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
6141 			hval = 1;
6142 			goto num_index;
6143 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
6144 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
6145 			str = ZSTR_EMPTY_ALLOC();
6146 			goto str_index;
6147 		} else {
6148 			zend_error(E_WARNING, "Illegal offset type");
6149 			zval_ptr_dtor(expr_ptr);
6150 		}
6151 
6152 	} else {
6153 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
6154 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
6155 			zval_ptr_dtor(expr_ptr);
6156 		}
6157 	}
6158 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6159 }
6160 
6161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6162 {
6163 	zval *array;
6164 	uint32_t size;
6165 	USE_OPLINE
6166 
6167 	array = EX_VAR(opline->result.var);
6168 	if (IS_CONST != IS_UNUSED) {
6169 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
6170 	} else {
6171 		size = 0;
6172 	}
6173 	ZVAL_NEW_ARR(array);
6174 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
6175 
6176 	if (IS_CONST != IS_UNUSED) {
6177 		/* Explicitly initialize array as not-packed if flag is set */
6178 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
6179 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
6180 		}
6181 	}
6182 
6183 	if (IS_CONST == IS_UNUSED) {
6184 		ZEND_VM_NEXT_OPCODE();
6185 #if 0 || (IS_CONST != IS_UNUSED)
6186 	} else {
6187 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6188 #endif
6189 	}
6190 }
6191 
6192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6193 {
6194 	USE_OPLINE
6195 	zval tmp, *varname;
6196 	HashTable *target_symbol_table;
6197 
6198 
6199 	SAVE_OPLINE();
6200 	if (IS_CONST == IS_CV &&
6201 	    IS_CONST == IS_UNUSED &&
6202 	    (opline->extended_value & ZEND_QUICK_SET)) {
6203 		zval *var = EX_VAR(opline->op1.var);
6204 
6205 		if (Z_REFCOUNTED_P(var)) {
6206 			zend_refcounted *garbage = Z_COUNTED_P(var);
6207 
6208 			if (!--GC_REFCOUNT(garbage)) {
6209 				ZVAL_UNDEF(var);
6210 				zval_dtor_func_for_ptr(garbage);
6211 			} else {
6212 				zval *z = var;
6213 				ZVAL_DEREF(z);
6214 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
6215 					ZVAL_UNDEF(var);
6216 					gc_possible_root(Z_COUNTED_P(z));
6217 				} else {
6218 					ZVAL_UNDEF(var);
6219 				}
6220 			}
6221 		} else {
6222 			ZVAL_UNDEF(var);
6223 		}
6224 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6225 	}
6226 
6227 	varname = EX_CONSTANT(opline->op1);
6228 
6229 	ZVAL_UNDEF(&tmp);
6230 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
6231 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
6232 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
6233 		}
6234 		ZVAL_STR(&tmp, zval_get_string(varname));
6235 		varname = &tmp;
6236 	}
6237 
6238 	if (IS_CONST != IS_UNUSED) {
6239 		zend_class_entry *ce;
6240 
6241 		if (IS_CONST == IS_CONST) {
6242 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
6243 			if (UNEXPECTED(ce == NULL)) {
6244 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
6245 				if (UNEXPECTED(ce == NULL)) {
6246 					if (EXPECTED(!EG(exception))) {
6247 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
6248 					}
6249 					if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6250 						zend_string_release(Z_STR(tmp));
6251 					}
6252 
6253 					HANDLE_EXCEPTION();
6254 				}
6255 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6256 			}
6257 		} else {
6258 			ce = Z_CE_P(EX_VAR(opline->op2.var));
6259 		}
6260 		zend_std_unset_static_property(ce, Z_STR_P(varname));
6261 	} else {
6262 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
6263 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
6264 	}
6265 
6266 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6267 		zend_string_release(Z_STR(tmp));
6268 	}
6269 
6270 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6271 }
6272 
6273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6274 {
6275 	USE_OPLINE
6276 	zval *value;
6277 	int result;
6278 
6279 	if (IS_CONST == IS_CV &&
6280 	    IS_CONST == IS_UNUSED &&
6281 	    (opline->extended_value & ZEND_QUICK_SET)) {
6282 		value = EX_VAR(opline->op1.var);
6283 		if (opline->extended_value & ZEND_ISSET) {
6284 			result =
6285 				Z_TYPE_P(value) > IS_NULL &&
6286 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6287 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6288 			SAVE_OPLINE();
6289 			result = !i_zend_is_true(value);
6290 			if (UNEXPECTED(EG(exception))) {
6291 				HANDLE_EXCEPTION();
6292 			}
6293 		}
6294 		ZEND_VM_SMART_BRANCH(result, 0);
6295 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
6296 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
6297 		ZEND_VM_CONTINUE();
6298 	} else {
6299 
6300 		zval tmp, *varname;
6301 
6302 		SAVE_OPLINE();
6303 		varname = EX_CONSTANT(opline->op1);
6304 		ZVAL_UNDEF(&tmp);
6305 		if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
6306 			ZVAL_STR(&tmp, zval_get_string(varname));
6307 			varname = &tmp;
6308 		}
6309 
6310 		if (IS_CONST != IS_UNUSED) {
6311 			zend_class_entry *ce;
6312 
6313 			if (IS_CONST == IS_CONST) {
6314 				if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
6315 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
6316 
6317 					/* check if static properties were destoyed */
6318 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6319 						value = NULL;
6320 					}
6321 
6322 					goto is_var_return;
6323 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
6324 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
6325 					if (UNEXPECTED(ce == NULL)) {
6326 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6327 					}
6328 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6329 				}
6330 			} else {
6331 				ce = Z_CE_P(EX_VAR(opline->op2.var));
6332 				if (IS_CONST == IS_CONST &&
6333 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
6334 
6335 					/* check if static properties were destoyed */
6336 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6337 						value = NULL;
6338 					}
6339 
6340 					goto is_var_return;
6341 				}
6342 			}
6343 
6344 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
6345 
6346 			if (IS_CONST == IS_CONST && value) {
6347 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
6348 			}
6349 		} else {
6350 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
6351 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
6352 		}
6353 
6354 		if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6355 			zend_string_release(Z_STR(tmp));
6356 		}
6357 
6358 is_var_return:
6359 		if (opline->extended_value & ZEND_ISSET) {
6360 			result = value && Z_TYPE_P(value) > IS_NULL &&
6361 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6362 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6363 			result = !value || !i_zend_is_true(value);
6364 		}
6365 
6366 		ZEND_VM_SMART_BRANCH(result, 1);
6367 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
6368 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6369 	}
6370 }
6371 
6372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6373 {
6374 	USE_OPLINE
6375 
6376 	zval *container;
6377 	int result;
6378 	zend_ulong hval;
6379 	zval *offset;
6380 
6381 	SAVE_OPLINE();
6382 	container = EX_CONSTANT(opline->op1);
6383 
6384 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
6385 		zend_throw_error(NULL, "Using $this when not in object context");
6386 
6387 		HANDLE_EXCEPTION();
6388 	}
6389 
6390 	offset = EX_CONSTANT(opline->op2);
6391 
6392 	if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6393 		HashTable *ht;
6394 		zval *value;
6395 		zend_string *str;
6396 
6397 isset_dim_obj_array:
6398 		ht = Z_ARRVAL_P(container);
6399 isset_again:
6400 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6401 			str = Z_STR_P(offset);
6402 			if (IS_CONST != IS_CONST) {
6403 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6404 					goto num_index_prop;
6405 				}
6406 			}
6407 str_index_prop:
6408 			value = zend_hash_find_ind(ht, str);
6409 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6410 			hval = Z_LVAL_P(offset);
6411 num_index_prop:
6412 			value = zend_hash_index_find(ht, hval);
6413 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
6414 			offset = Z_REFVAL_P(offset);
6415 			goto isset_again;
6416 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
6417 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
6418 			goto num_index_prop;
6419 		} else if (Z_TYPE_P(offset) == IS_NULL) {
6420 			str = ZSTR_EMPTY_ALLOC();
6421 			goto str_index_prop;
6422 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
6423 			hval = 0;
6424 			goto num_index_prop;
6425 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
6426 			hval = 1;
6427 			goto num_index_prop;
6428 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
6429 			hval = Z_RES_HANDLE_P(offset);
6430 			goto num_index_prop;
6431 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
6432 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
6433 			str = ZSTR_EMPTY_ALLOC();
6434 			goto str_index_prop;
6435 		} else {
6436 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
6437 			goto isset_not_found;
6438 		}
6439 
6440 		if (opline->extended_value & ZEND_ISSET) {
6441 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
6442 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
6443 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6444 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6445 			result = (value == NULL || !i_zend_is_true(value));
6446 		}
6447 		goto isset_dim_obj_exit;
6448 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6449 		container = Z_REFVAL_P(container);
6450 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6451 			goto isset_dim_obj_array;
6452 		}
6453 	}
6454 
6455 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
6456 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
6457 	}
6458 
6459 	if (IS_CONST == IS_UNUSED ||
6460 	    (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
6461 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
6462 			result =
6463 				((opline->extended_value & ZEND_ISSET) == 0) ^
6464 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
6465 		} else {
6466 			zend_error(E_NOTICE, "Trying to check element of non-array");
6467 			goto isset_not_found;
6468 		}
6469 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
6470 		zend_long lval;
6471 
6472 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6473 			lval = Z_LVAL_P(offset);
6474 isset_str_offset:
6475 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
6476 				if (opline->extended_value & ZEND_ISSET) {
6477 					result = 1;
6478 				} else {
6479 					result = (Z_STRVAL_P(container)[lval] == '0');
6480 				}
6481 			} else {
6482 				goto isset_not_found;
6483 			}
6484 		} else {
6485 			if (IS_CONST & (IS_CV|IS_VAR)) {
6486 				ZVAL_DEREF(offset);
6487 			}
6488 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
6489 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
6490 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
6491 				lval = zval_get_long(offset);
6492 				goto isset_str_offset;
6493 			}
6494 			goto isset_not_found;
6495 		}
6496 	} else {
6497 isset_not_found:
6498 		result = ((opline->extended_value & ZEND_ISSET) == 0);
6499 	}
6500 
6501 isset_dim_obj_exit:
6502 
6503 
6504 	ZEND_VM_SMART_BRANCH(result, 1);
6505 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6506 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6507 }
6508 
6509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6510 {
6511 	USE_OPLINE
6512 
6513 	zval *container;
6514 	int result;
6515 	zval *offset;
6516 
6517 	SAVE_OPLINE();
6518 	container = EX_CONSTANT(opline->op1);
6519 
6520 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
6521 		zend_throw_error(NULL, "Using $this when not in object context");
6522 
6523 		HANDLE_EXCEPTION();
6524 	}
6525 
6526 	offset = EX_CONSTANT(opline->op2);
6527 
6528 	if (IS_CONST == IS_CONST ||
6529 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6530 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6531 			container = Z_REFVAL_P(container);
6532 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
6533 				goto isset_no_object;
6534 			}
6535 		} else {
6536 			goto isset_no_object;
6537 		}
6538 	}
6539 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
6540 		zend_error(E_NOTICE, "Trying to check property of non-object");
6541 isset_no_object:
6542 		result = ((opline->extended_value & ZEND_ISSET) == 0);
6543 	} else {
6544 		result =
6545 			((opline->extended_value & ZEND_ISSET) == 0) ^
6546 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
6547 	}
6548 
6549 
6550 	ZEND_VM_SMART_BRANCH(result, 1);
6551 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6552 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6553 }
6554 
6555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6556 {
6557 	USE_OPLINE
6558 
6559 	zval *name;
6560 	zval *val;
6561 	zend_constant c;
6562 
6563 	SAVE_OPLINE();
6564 	name  = EX_CONSTANT(opline->op1);
6565 	val   = EX_CONSTANT(opline->op2);
6566 
6567 	ZVAL_COPY_VALUE(&c.value, val);
6568 	if (Z_OPT_CONSTANT(c.value)) {
6569 		if (UNEXPECTED(zval_update_constant_ex(&c.value, 0, NULL) != SUCCESS)) {
6570 
6571 
6572 			HANDLE_EXCEPTION();
6573 		}
6574 	} else {
6575 		/* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
6576 		if (UNEXPECTED(Z_OPT_COPYABLE(c.value))) {
6577 			zval_copy_ctor_func(&c.value);
6578 		}
6579 	}
6580 	c.flags = CONST_CS; /* non persistent, case sensetive */
6581 	c.name = zend_string_dup(Z_STR_P(name), 0);
6582 	c.module_number = PHP_USER_CONSTANT;
6583 
6584 	if (zend_register_constant(&c) == FAILURE) {
6585 	}
6586 
6587 
6588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6589 }
6590 
6591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6592 {
6593 	USE_OPLINE
6594 
6595 	zend_generator *generator = zend_get_running_generator(execute_data);
6596 
6597 	SAVE_OPLINE();
6598 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6599 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
6600 
6601 
6602 		HANDLE_EXCEPTION();
6603 	}
6604 
6605 	/* Destroy the previously yielded value */
6606 	zval_ptr_dtor(&generator->value);
6607 
6608 	/* Destroy the previously yielded key */
6609 	zval_ptr_dtor(&generator->key);
6610 
6611 	/* Set the new yielded value */
6612 	if (IS_CONST != IS_UNUSED) {
6613 
6614 
6615 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
6616 			/* Constants and temporary variables aren't yieldable by reference,
6617 			 * but we still allow them with a notice. */
6618 			if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
6619 				zval *value;
6620 
6621 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6622 
6623 				value = EX_CONSTANT(opline->op1);
6624 				ZVAL_COPY_VALUE(&generator->value, value);
6625 				if (IS_CONST == IS_CONST) {
6626 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
6627 						zval_copy_ctor_func(&generator->value);
6628 					}
6629 				}
6630 			} else {
6631 				zval *value_ptr = NULL;
6632 
6633 				if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
6634 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
6635 
6636 					HANDLE_EXCEPTION();
6637 				}
6638 
6639 				/* If a function call result is yielded and the function did
6640 				 * not return by reference we throw a notice. */
6641 				if (IS_CONST == IS_VAR &&
6642 				    (value_ptr == &EG(uninitialized_zval) ||
6643 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
6644 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
6645 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6646 				} else {
6647 					ZVAL_MAKE_REF(value_ptr);
6648 				}
6649 				ZVAL_COPY(&generator->value, value_ptr);
6650 
6651 			}
6652 		} else {
6653 			zval *value = EX_CONSTANT(opline->op1);
6654 
6655 			/* Consts, temporary variables and references need copying */
6656 			if (IS_CONST == IS_CONST) {
6657 				ZVAL_COPY_VALUE(&generator->value, value);
6658 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
6659 					zval_copy_ctor_func(&generator->value);
6660 				}
6661 			} else if (IS_CONST == IS_TMP_VAR) {
6662 				ZVAL_COPY_VALUE(&generator->value, value);
6663             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
6664 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
6665 
6666 			} else {
6667 				ZVAL_COPY_VALUE(&generator->value, value);
6668 				if (IS_CONST == IS_CV) {
6669 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
6670 				}
6671 			}
6672 		}
6673 	} else {
6674 		/* If no value was specified yield null */
6675 		ZVAL_NULL(&generator->value);
6676 	}
6677 
6678 	/* Set the new yielded key */
6679 	if (IS_CONST != IS_UNUSED) {
6680 
6681 		zval *key = EX_CONSTANT(opline->op2);
6682 
6683 		/* Consts, temporary variables and references need copying */
6684 		if (IS_CONST == IS_CONST) {
6685 			ZVAL_COPY_VALUE(&generator->key, key);
6686 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
6687 				zval_copy_ctor_func(&generator->key);
6688 			}
6689 		} else if (IS_CONST == IS_TMP_VAR) {
6690 			ZVAL_COPY_VALUE(&generator->key, key);
6691 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
6692 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
6693 
6694 		} else {
6695 			ZVAL_COPY_VALUE(&generator->key, key);
6696 			if (IS_CONST == IS_CV) {
6697 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
6698 			}
6699 		}
6700 
6701 		if (Z_TYPE(generator->key) == IS_LONG
6702 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
6703 		) {
6704 			generator->largest_used_integer_key = Z_LVAL(generator->key);
6705 		}
6706 	} else {
6707 		/* If no key was specified we use auto-increment keys */
6708 		generator->largest_used_integer_key++;
6709 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
6710 	}
6711 
6712 	if (RETURN_VALUE_USED(opline)) {
6713 		/* If the return value of yield is used set the send
6714 		 * target and initialize it to NULL */
6715 		generator->send_target = EX_VAR(opline->result.var);
6716 		ZVAL_NULL(generator->send_target);
6717 	} else {
6718 		generator->send_target = NULL;
6719 	}
6720 
6721 	/* We increment to the next op, so we are at the correct position when the
6722 	 * generator is resumed. */
6723 	ZEND_VM_INC_OPCODE();
6724 
6725 	/* The GOTO VM uses a local opline variable. We need to set the opline
6726 	 * variable in execute_data so we don't resume at an old position. */
6727 	SAVE_OPLINE();
6728 
6729 	ZEND_VM_RETURN();
6730 }
6731 
6732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6733 {
6734 	USE_OPLINE
6735 	zend_free_op free_op2;
6736 	zval *op1, *op2;
6737 	int result;
6738 
6739 	SAVE_OPLINE();
6740 	op1 = EX_CONSTANT(opline->op1);
6741 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6742 	result = fast_is_identical_function(op1, op2);
6743 
6744 	zval_ptr_dtor_nogc(free_op2);
6745 	ZEND_VM_SMART_BRANCH(result, 1);
6746 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6747 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6748 }
6749 
6750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6751 {
6752 	USE_OPLINE
6753 	zend_free_op free_op2;
6754 	zval *op1, *op2;
6755 	int result;
6756 
6757 	SAVE_OPLINE();
6758 	op1 = EX_CONSTANT(opline->op1);
6759 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6760 	result = fast_is_not_identical_function(op1, op2);
6761 
6762 	zval_ptr_dtor_nogc(free_op2);
6763 	ZEND_VM_SMART_BRANCH(result, 1);
6764 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6765 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6766 }
6767 
6768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6769 {
6770 	USE_OPLINE
6771 
6772 	zend_generator *generator = zend_get_running_generator(execute_data);
6773 
6774 	SAVE_OPLINE();
6775 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6776 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
6777 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
6778 
6779 		HANDLE_EXCEPTION();
6780 	}
6781 
6782 	/* Destroy the previously yielded value */
6783 	zval_ptr_dtor(&generator->value);
6784 
6785 	/* Destroy the previously yielded key */
6786 	zval_ptr_dtor(&generator->key);
6787 
6788 	/* Set the new yielded value */
6789 	if (IS_CONST != IS_UNUSED) {
6790 
6791 
6792 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
6793 			/* Constants and temporary variables aren't yieldable by reference,
6794 			 * but we still allow them with a notice. */
6795 			if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
6796 				zval *value;
6797 
6798 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6799 
6800 				value = EX_CONSTANT(opline->op1);
6801 				ZVAL_COPY_VALUE(&generator->value, value);
6802 				if (IS_CONST == IS_CONST) {
6803 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
6804 						zval_copy_ctor_func(&generator->value);
6805 					}
6806 				}
6807 			} else {
6808 				zval *value_ptr = NULL;
6809 
6810 				if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
6811 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
6812 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
6813 					HANDLE_EXCEPTION();
6814 				}
6815 
6816 				/* If a function call result is yielded and the function did
6817 				 * not return by reference we throw a notice. */
6818 				if (IS_CONST == IS_VAR &&
6819 				    (value_ptr == &EG(uninitialized_zval) ||
6820 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
6821 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
6822 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6823 				} else {
6824 					ZVAL_MAKE_REF(value_ptr);
6825 				}
6826 				ZVAL_COPY(&generator->value, value_ptr);
6827 
6828 			}
6829 		} else {
6830 			zval *value = EX_CONSTANT(opline->op1);
6831 
6832 			/* Consts, temporary variables and references need copying */
6833 			if (IS_CONST == IS_CONST) {
6834 				ZVAL_COPY_VALUE(&generator->value, value);
6835 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
6836 					zval_copy_ctor_func(&generator->value);
6837 				}
6838 			} else if (IS_CONST == IS_TMP_VAR) {
6839 				ZVAL_COPY_VALUE(&generator->value, value);
6840             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
6841 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
6842 
6843 			} else {
6844 				ZVAL_COPY_VALUE(&generator->value, value);
6845 				if (IS_CONST == IS_CV) {
6846 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
6847 				}
6848 			}
6849 		}
6850 	} else {
6851 		/* If no value was specified yield null */
6852 		ZVAL_NULL(&generator->value);
6853 	}
6854 
6855 	/* Set the new yielded key */
6856 	if (IS_TMP_VAR != IS_UNUSED) {
6857 		zend_free_op free_op2;
6858 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6859 
6860 		/* Consts, temporary variables and references need copying */
6861 		if (IS_TMP_VAR == IS_CONST) {
6862 			ZVAL_COPY_VALUE(&generator->key, key);
6863 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
6864 				zval_copy_ctor_func(&generator->key);
6865 			}
6866 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
6867 			ZVAL_COPY_VALUE(&generator->key, key);
6868 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
6869 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
6870 
6871 		} else {
6872 			ZVAL_COPY_VALUE(&generator->key, key);
6873 			if (IS_TMP_VAR == IS_CV) {
6874 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
6875 			}
6876 		}
6877 
6878 		if (Z_TYPE(generator->key) == IS_LONG
6879 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
6880 		) {
6881 			generator->largest_used_integer_key = Z_LVAL(generator->key);
6882 		}
6883 	} else {
6884 		/* If no key was specified we use auto-increment keys */
6885 		generator->largest_used_integer_key++;
6886 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
6887 	}
6888 
6889 	if (RETURN_VALUE_USED(opline)) {
6890 		/* If the return value of yield is used set the send
6891 		 * target and initialize it to NULL */
6892 		generator->send_target = EX_VAR(opline->result.var);
6893 		ZVAL_NULL(generator->send_target);
6894 	} else {
6895 		generator->send_target = NULL;
6896 	}
6897 
6898 	/* We increment to the next op, so we are at the correct position when the
6899 	 * generator is resumed. */
6900 	ZEND_VM_INC_OPCODE();
6901 
6902 	/* The GOTO VM uses a local opline variable. We need to set the opline
6903 	 * variable in execute_data so we don't resume at an old position. */
6904 	SAVE_OPLINE();
6905 
6906 	ZEND_VM_RETURN();
6907 }
6908 
6909 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6910 {
6911 	USE_OPLINE
6912 	zend_free_op free_op2;
6913 	zval *op1, *op2;
6914 	int result;
6915 
6916 	SAVE_OPLINE();
6917 	op1 = EX_CONSTANT(opline->op1);
6918 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
6919 	result = fast_is_identical_function(op1, op2);
6920 
6921 	zval_ptr_dtor_nogc(free_op2);
6922 	ZEND_VM_SMART_BRANCH(result, 1);
6923 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6924 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6925 }
6926 
6927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6928 {
6929 	USE_OPLINE
6930 	zend_free_op free_op2;
6931 	zval *op1, *op2;
6932 	int result;
6933 
6934 	SAVE_OPLINE();
6935 	op1 = EX_CONSTANT(opline->op1);
6936 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
6937 	result = fast_is_not_identical_function(op1, op2);
6938 
6939 	zval_ptr_dtor_nogc(free_op2);
6940 	ZEND_VM_SMART_BRANCH(result, 1);
6941 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6942 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6943 }
6944 
6945 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
6946 {
6947 	USE_OPLINE
6948 
6949 	zval *varname;
6950 	zval *retval;
6951 	zend_string *name;
6952 	HashTable *target_symbol_table;
6953 
6954 	SAVE_OPLINE();
6955 	varname = EX_CONSTANT(opline->op1);
6956 
6957  	if (IS_CONST == IS_CONST) {
6958 		name = Z_STR_P(varname);
6959 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
6960 		name = Z_STR_P(varname);
6961 		zend_string_addref(name);
6962 	} else {
6963 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
6964 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
6965 		}
6966 		name = zval_get_string(varname);
6967 	}
6968 
6969 	if (IS_VAR != IS_UNUSED) {
6970 		zend_class_entry *ce;
6971 
6972 		if (IS_VAR == IS_CONST) {
6973 			if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
6974 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
6975 
6976 				/* check if static properties were destoyed */
6977 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6978 					if (type == BP_VAR_IS) {
6979 						retval = &EG(uninitialized_zval);
6980 					} else {
6981 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
6982 
6983 						HANDLE_EXCEPTION();
6984 					}
6985 				}
6986 
6987 				goto fetch_var_return;
6988 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
6989 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
6990 				if (UNEXPECTED(ce == NULL)) {
6991 					if (IS_CONST != IS_CONST) {
6992 						zend_string_release(name);
6993 					}
6994 
6995 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6996 				}
6997 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6998 			}
6999 		} else {
7000 			ce = Z_CE_P(EX_VAR(opline->op2.var));
7001 			if (IS_CONST == IS_CONST &&
7002 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
7003 
7004 				/* check if static properties were destoyed */
7005 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7006 					if (type == BP_VAR_IS) {
7007 						retval = &EG(uninitialized_zval);
7008 					} else {
7009 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
7010 
7011 						HANDLE_EXCEPTION();
7012 					}
7013 				}
7014 
7015 				goto fetch_var_return;
7016 			}
7017 		}
7018 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
7019 		if (UNEXPECTED(EG(exception))) {
7020 			if (IS_CONST != IS_CONST) {
7021 				zend_string_release(name);
7022 			}
7023 
7024 			HANDLE_EXCEPTION();
7025 		}
7026 		if (EXPECTED(retval)) {
7027 			if (IS_CONST == IS_CONST) {
7028 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
7029 			}
7030 		} else {
7031 			retval = &EG(uninitialized_zval);
7032 		}
7033 
7034 	} else {
7035 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7036 		retval = zend_hash_find(target_symbol_table, name);
7037 		if (retval == NULL) {
7038 			switch (type) {
7039 				case BP_VAR_R:
7040 				case BP_VAR_UNSET:
7041 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7042 					/* break missing intentionally */
7043 				case BP_VAR_IS:
7044 					retval = &EG(uninitialized_zval);
7045 					break;
7046 				case BP_VAR_RW:
7047 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7048 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
7049 					break;
7050 				case BP_VAR_W:
7051 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
7052 					break;
7053 				EMPTY_SWITCH_DEFAULT_CASE()
7054 			}
7055 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
7056 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
7057 			retval = Z_INDIRECT_P(retval);
7058 			if (Z_TYPE_P(retval) == IS_UNDEF) {
7059 				switch (type) {
7060 					case BP_VAR_R:
7061 					case BP_VAR_UNSET:
7062 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7063 						/* break missing intentionally */
7064 					case BP_VAR_IS:
7065 						retval = &EG(uninitialized_zval);
7066 						break;
7067 					case BP_VAR_RW:
7068 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7069 						/* break missing intentionally */
7070 					case BP_VAR_W:
7071 						ZVAL_NULL(retval);
7072 						break;
7073 					EMPTY_SWITCH_DEFAULT_CASE()
7074 				}
7075 			}
7076 		}
7077 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
7078 			if (Z_CONSTANT_P(retval)) {
7079 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
7080 
7081 					HANDLE_EXCEPTION();
7082 				}
7083 			}
7084 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
7085 
7086 		}
7087 	}
7088 
7089 	if (IS_CONST != IS_CONST) {
7090 		zend_string_release(name);
7091 	}
7092 
7093 fetch_var_return:
7094 	ZEND_ASSERT(retval != NULL);
7095 	if (type == BP_VAR_R || type == BP_VAR_IS) {
7096 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
7097 			ZVAL_UNREF(retval);
7098 		}
7099 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
7100 	} else {
7101 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
7102 	}
7103 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7104 }
7105 
7106 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7107 {
7108 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7109 }
7110 
7111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7112 {
7113 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7114 }
7115 
7116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7117 {
7118 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7119 }
7120 
7121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7122 {
7123 	USE_OPLINE
7124 
7125 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7126 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7127 	} else {
7128 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7129 	}
7130 }
7131 
7132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7133 {
7134 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7135 }
7136 
7137 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7138 {
7139 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7140 }
7141 
7142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7143 {
7144 	USE_OPLINE
7145 	zval tmp, *varname;
7146 	HashTable *target_symbol_table;
7147 
7148 
7149 	SAVE_OPLINE();
7150 	if (IS_CONST == IS_CV &&
7151 	    IS_VAR == IS_UNUSED &&
7152 	    (opline->extended_value & ZEND_QUICK_SET)) {
7153 		zval *var = EX_VAR(opline->op1.var);
7154 
7155 		if (Z_REFCOUNTED_P(var)) {
7156 			zend_refcounted *garbage = Z_COUNTED_P(var);
7157 
7158 			if (!--GC_REFCOUNT(garbage)) {
7159 				ZVAL_UNDEF(var);
7160 				zval_dtor_func_for_ptr(garbage);
7161 			} else {
7162 				zval *z = var;
7163 				ZVAL_DEREF(z);
7164 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
7165 					ZVAL_UNDEF(var);
7166 					gc_possible_root(Z_COUNTED_P(z));
7167 				} else {
7168 					ZVAL_UNDEF(var);
7169 				}
7170 			}
7171 		} else {
7172 			ZVAL_UNDEF(var);
7173 		}
7174 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7175 	}
7176 
7177 	varname = EX_CONSTANT(opline->op1);
7178 
7179 	ZVAL_UNDEF(&tmp);
7180 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7181 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7182 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7183 		}
7184 		ZVAL_STR(&tmp, zval_get_string(varname));
7185 		varname = &tmp;
7186 	}
7187 
7188 	if (IS_VAR != IS_UNUSED) {
7189 		zend_class_entry *ce;
7190 
7191 		if (IS_VAR == IS_CONST) {
7192 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
7193 			if (UNEXPECTED(ce == NULL)) {
7194 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
7195 				if (UNEXPECTED(ce == NULL)) {
7196 					if (EXPECTED(!EG(exception))) {
7197 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
7198 					}
7199 					if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7200 						zend_string_release(Z_STR(tmp));
7201 					}
7202 
7203 					HANDLE_EXCEPTION();
7204 				}
7205 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
7206 			}
7207 		} else {
7208 			ce = Z_CE_P(EX_VAR(opline->op2.var));
7209 		}
7210 		zend_std_unset_static_property(ce, Z_STR_P(varname));
7211 	} else {
7212 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7213 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
7214 	}
7215 
7216 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7217 		zend_string_release(Z_STR(tmp));
7218 	}
7219 
7220 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7221 }
7222 
7223 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7224 {
7225 	USE_OPLINE
7226 	zval *value;
7227 	int result;
7228 
7229 	if (IS_CONST == IS_CV &&
7230 	    IS_VAR == IS_UNUSED &&
7231 	    (opline->extended_value & ZEND_QUICK_SET)) {
7232 		value = EX_VAR(opline->op1.var);
7233 		if (opline->extended_value & ZEND_ISSET) {
7234 			result =
7235 				Z_TYPE_P(value) > IS_NULL &&
7236 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7237 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
7238 			SAVE_OPLINE();
7239 			result = !i_zend_is_true(value);
7240 			if (UNEXPECTED(EG(exception))) {
7241 				HANDLE_EXCEPTION();
7242 			}
7243 		}
7244 		ZEND_VM_SMART_BRANCH(result, 0);
7245 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
7246 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
7247 		ZEND_VM_CONTINUE();
7248 	} else {
7249 
7250 		zval tmp, *varname;
7251 
7252 		SAVE_OPLINE();
7253 		varname = EX_CONSTANT(opline->op1);
7254 		ZVAL_UNDEF(&tmp);
7255 		if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7256 			ZVAL_STR(&tmp, zval_get_string(varname));
7257 			varname = &tmp;
7258 		}
7259 
7260 		if (IS_VAR != IS_UNUSED) {
7261 			zend_class_entry *ce;
7262 
7263 			if (IS_VAR == IS_CONST) {
7264 				if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
7265 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
7266 
7267 					/* check if static properties were destoyed */
7268 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7269 						value = NULL;
7270 					}
7271 
7272 					goto is_var_return;
7273 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
7274 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
7275 					if (UNEXPECTED(ce == NULL)) {
7276 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7277 					}
7278 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
7279 				}
7280 			} else {
7281 				ce = Z_CE_P(EX_VAR(opline->op2.var));
7282 				if (IS_CONST == IS_CONST &&
7283 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
7284 
7285 					/* check if static properties were destoyed */
7286 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7287 						value = NULL;
7288 					}
7289 
7290 					goto is_var_return;
7291 				}
7292 			}
7293 
7294 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
7295 
7296 			if (IS_CONST == IS_CONST && value) {
7297 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
7298 			}
7299 		} else {
7300 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7301 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
7302 		}
7303 
7304 		if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7305 			zend_string_release(Z_STR(tmp));
7306 		}
7307 
7308 is_var_return:
7309 		if (opline->extended_value & ZEND_ISSET) {
7310 			result = value && Z_TYPE_P(value) > IS_NULL &&
7311 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7312 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
7313 			result = !value || !i_zend_is_true(value);
7314 		}
7315 
7316 		ZEND_VM_SMART_BRANCH(result, 1);
7317 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
7318 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7319 	}
7320 }
7321 
7322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7323 {
7324 	USE_OPLINE
7325 
7326 	zend_generator *generator = zend_get_running_generator(execute_data);
7327 
7328 	SAVE_OPLINE();
7329 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
7330 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
7331 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
7332 
7333 		HANDLE_EXCEPTION();
7334 	}
7335 
7336 	/* Destroy the previously yielded value */
7337 	zval_ptr_dtor(&generator->value);
7338 
7339 	/* Destroy the previously yielded key */
7340 	zval_ptr_dtor(&generator->key);
7341 
7342 	/* Set the new yielded value */
7343 	if (IS_CONST != IS_UNUSED) {
7344 
7345 
7346 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7347 			/* Constants and temporary variables aren't yieldable by reference,
7348 			 * but we still allow them with a notice. */
7349 			if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
7350 				zval *value;
7351 
7352 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7353 
7354 				value = EX_CONSTANT(opline->op1);
7355 				ZVAL_COPY_VALUE(&generator->value, value);
7356 				if (IS_CONST == IS_CONST) {
7357 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
7358 						zval_copy_ctor_func(&generator->value);
7359 					}
7360 				}
7361 			} else {
7362 				zval *value_ptr = NULL;
7363 
7364 				if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
7365 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
7366 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
7367 					HANDLE_EXCEPTION();
7368 				}
7369 
7370 				/* If a function call result is yielded and the function did
7371 				 * not return by reference we throw a notice. */
7372 				if (IS_CONST == IS_VAR &&
7373 				    (value_ptr == &EG(uninitialized_zval) ||
7374 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
7375 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
7376 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7377 				} else {
7378 					ZVAL_MAKE_REF(value_ptr);
7379 				}
7380 				ZVAL_COPY(&generator->value, value_ptr);
7381 
7382 			}
7383 		} else {
7384 			zval *value = EX_CONSTANT(opline->op1);
7385 
7386 			/* Consts, temporary variables and references need copying */
7387 			if (IS_CONST == IS_CONST) {
7388 				ZVAL_COPY_VALUE(&generator->value, value);
7389 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
7390 					zval_copy_ctor_func(&generator->value);
7391 				}
7392 			} else if (IS_CONST == IS_TMP_VAR) {
7393 				ZVAL_COPY_VALUE(&generator->value, value);
7394             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7395 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7396 
7397 			} else {
7398 				ZVAL_COPY_VALUE(&generator->value, value);
7399 				if (IS_CONST == IS_CV) {
7400 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7401 				}
7402 			}
7403 		}
7404 	} else {
7405 		/* If no value was specified yield null */
7406 		ZVAL_NULL(&generator->value);
7407 	}
7408 
7409 	/* Set the new yielded key */
7410 	if (IS_VAR != IS_UNUSED) {
7411 		zend_free_op free_op2;
7412 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
7413 
7414 		/* Consts, temporary variables and references need copying */
7415 		if (IS_VAR == IS_CONST) {
7416 			ZVAL_COPY_VALUE(&generator->key, key);
7417 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
7418 				zval_copy_ctor_func(&generator->key);
7419 			}
7420 		} else if (IS_VAR == IS_TMP_VAR) {
7421 			ZVAL_COPY_VALUE(&generator->key, key);
7422 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
7423 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
7424 			zval_ptr_dtor_nogc(free_op2);
7425 		} else {
7426 			ZVAL_COPY_VALUE(&generator->key, key);
7427 			if (IS_VAR == IS_CV) {
7428 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
7429 			}
7430 		}
7431 
7432 		if (Z_TYPE(generator->key) == IS_LONG
7433 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7434 		) {
7435 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7436 		}
7437 	} else {
7438 		/* If no key was specified we use auto-increment keys */
7439 		generator->largest_used_integer_key++;
7440 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
7441 	}
7442 
7443 	if (RETURN_VALUE_USED(opline)) {
7444 		/* If the return value of yield is used set the send
7445 		 * target and initialize it to NULL */
7446 		generator->send_target = EX_VAR(opline->result.var);
7447 		ZVAL_NULL(generator->send_target);
7448 	} else {
7449 		generator->send_target = NULL;
7450 	}
7451 
7452 	/* We increment to the next op, so we are at the correct position when the
7453 	 * generator is resumed. */
7454 	ZEND_VM_INC_OPCODE();
7455 
7456 	/* The GOTO VM uses a local opline variable. We need to set the opline
7457 	 * variable in execute_data so we don't resume at an old position. */
7458 	SAVE_OPLINE();
7459 
7460 	ZEND_VM_RETURN();
7461 }
7462 
7463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
7464 {
7465 	USE_OPLINE
7466 
7467 	zval *varname;
7468 	zval *retval;
7469 	zend_string *name;
7470 	HashTable *target_symbol_table;
7471 
7472 	SAVE_OPLINE();
7473 	varname = EX_CONSTANT(opline->op1);
7474 
7475  	if (IS_CONST == IS_CONST) {
7476 		name = Z_STR_P(varname);
7477 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
7478 		name = Z_STR_P(varname);
7479 		zend_string_addref(name);
7480 	} else {
7481 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7482 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7483 		}
7484 		name = zval_get_string(varname);
7485 	}
7486 
7487 	if (IS_UNUSED != IS_UNUSED) {
7488 		zend_class_entry *ce;
7489 
7490 		if (IS_UNUSED == IS_CONST) {
7491 			if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
7492 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
7493 
7494 				/* check if static properties were destoyed */
7495 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7496 					if (type == BP_VAR_IS) {
7497 						retval = &EG(uninitialized_zval);
7498 					} else {
7499 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
7500 
7501 						HANDLE_EXCEPTION();
7502 					}
7503 				}
7504 
7505 				goto fetch_var_return;
7506 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
7507 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
7508 				if (UNEXPECTED(ce == NULL)) {
7509 					if (IS_CONST != IS_CONST) {
7510 						zend_string_release(name);
7511 					}
7512 
7513 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7514 				}
7515 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
7516 			}
7517 		} else {
7518 			ce = Z_CE_P(EX_VAR(opline->op2.var));
7519 			if (IS_CONST == IS_CONST &&
7520 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
7521 
7522 				/* check if static properties were destoyed */
7523 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7524 					if (type == BP_VAR_IS) {
7525 						retval = &EG(uninitialized_zval);
7526 					} else {
7527 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
7528 
7529 						HANDLE_EXCEPTION();
7530 					}
7531 				}
7532 
7533 				goto fetch_var_return;
7534 			}
7535 		}
7536 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
7537 		if (UNEXPECTED(EG(exception))) {
7538 			if (IS_CONST != IS_CONST) {
7539 				zend_string_release(name);
7540 			}
7541 
7542 			HANDLE_EXCEPTION();
7543 		}
7544 		if (EXPECTED(retval)) {
7545 			if (IS_CONST == IS_CONST) {
7546 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
7547 			}
7548 		} else {
7549 			retval = &EG(uninitialized_zval);
7550 		}
7551 
7552 	} else {
7553 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7554 		retval = zend_hash_find(target_symbol_table, name);
7555 		if (retval == NULL) {
7556 			switch (type) {
7557 				case BP_VAR_R:
7558 				case BP_VAR_UNSET:
7559 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7560 					/* break missing intentionally */
7561 				case BP_VAR_IS:
7562 					retval = &EG(uninitialized_zval);
7563 					break;
7564 				case BP_VAR_RW:
7565 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7566 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
7567 					break;
7568 				case BP_VAR_W:
7569 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
7570 					break;
7571 				EMPTY_SWITCH_DEFAULT_CASE()
7572 			}
7573 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
7574 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
7575 			retval = Z_INDIRECT_P(retval);
7576 			if (Z_TYPE_P(retval) == IS_UNDEF) {
7577 				switch (type) {
7578 					case BP_VAR_R:
7579 					case BP_VAR_UNSET:
7580 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7581 						/* break missing intentionally */
7582 					case BP_VAR_IS:
7583 						retval = &EG(uninitialized_zval);
7584 						break;
7585 					case BP_VAR_RW:
7586 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7587 						/* break missing intentionally */
7588 					case BP_VAR_W:
7589 						ZVAL_NULL(retval);
7590 						break;
7591 					EMPTY_SWITCH_DEFAULT_CASE()
7592 				}
7593 			}
7594 		}
7595 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
7596 			if (Z_CONSTANT_P(retval)) {
7597 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
7598 
7599 					HANDLE_EXCEPTION();
7600 				}
7601 			}
7602 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
7603 
7604 		}
7605 	}
7606 
7607 	if (IS_CONST != IS_CONST) {
7608 		zend_string_release(name);
7609 	}
7610 
7611 fetch_var_return:
7612 	ZEND_ASSERT(retval != NULL);
7613 	if (type == BP_VAR_R || type == BP_VAR_IS) {
7614 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
7615 			ZVAL_UNREF(retval);
7616 		}
7617 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
7618 	} else {
7619 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
7620 	}
7621 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7622 }
7623 
7624 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7625 {
7626 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7627 }
7628 
7629 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7630 {
7631 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7632 }
7633 
7634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7635 {
7636 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7637 }
7638 
7639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7640 {
7641 	USE_OPLINE
7642 
7643 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7644 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7645 	} else {
7646 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7647 	}
7648 }
7649 
7650 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7651 {
7652 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7653 }
7654 
7655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7656 {
7657 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7658 }
7659 
7660 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7661 {
7662 	USE_OPLINE
7663 	zval *container;
7664 	zend_free_op free_op1;
7665 
7666 	SAVE_OPLINE();
7667 
7668 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7669         if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
7670             zend_throw_error(NULL, "Cannot use temporary expression in write context");
7671 
7672 
7673 			HANDLE_EXCEPTION();
7674         }
7675 		container = NULL;
7676 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
7677 			zend_throw_error(NULL, "Cannot use string offset as an array");
7678 
7679 			HANDLE_EXCEPTION();
7680 		}
7681 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
7682 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
7683 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
7684 		}
7685 
7686 
7687 	} else {
7688 		if (IS_UNUSED == IS_UNUSED) {
7689 			zend_throw_error(NULL, "Cannot use [] for reading");
7690 
7691 
7692 			HANDLE_EXCEPTION();
7693 		}
7694 		container = EX_CONSTANT(opline->op1);
7695 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
7696 
7697 
7698 	}
7699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7700 }
7701 
7702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7703 {
7704 	USE_OPLINE
7705 	zval *function_name;
7706 	zend_class_entry *ce;
7707 	zend_object *object;
7708 	zend_function *fbc;
7709 	zend_execute_data *call;
7710 
7711 	SAVE_OPLINE();
7712 
7713 	if (IS_CONST == IS_CONST) {
7714 		/* no function found. try a static method in class */
7715 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
7716 		if (UNEXPECTED(ce == NULL)) {
7717 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
7718 			if (UNEXPECTED(ce == NULL)) {
7719 				if (UNEXPECTED(EG(exception) != NULL)) {
7720 					HANDLE_EXCEPTION();
7721 				}
7722 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
7723 				HANDLE_EXCEPTION();
7724 			}
7725 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
7726 		}
7727 	} else {
7728 		ce = Z_CE_P(EX_VAR(opline->op1.var));
7729 	}
7730 
7731 	if (IS_CONST == IS_CONST &&
7732 	    IS_UNUSED == IS_CONST &&
7733 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
7734 		/* nothing to do */
7735 	} else if (IS_CONST != IS_CONST &&
7736 	           IS_UNUSED == IS_CONST &&
7737 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
7738 		/* do nothing */
7739 	} else if (IS_UNUSED != IS_UNUSED) {
7740 
7741 
7742 		function_name = NULL;
7743 		if (IS_UNUSED != IS_CONST) {
7744 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
7745 				do {
7746 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
7747 						function_name = Z_REFVAL_P(function_name);
7748 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
7749 							break;
7750 						}
7751 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
7752 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
7753 						if (UNEXPECTED(EG(exception) != NULL)) {
7754 							HANDLE_EXCEPTION();
7755 						}
7756 					}
7757 					zend_throw_error(NULL, "Function name must be a string");
7758 
7759 					HANDLE_EXCEPTION();
7760 				} while (0);
7761  			}
7762 		}
7763 
7764 		if (ce->get_static_method) {
7765 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
7766 		} else {
7767 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
7768 		}
7769 		if (UNEXPECTED(fbc == NULL)) {
7770 			if (EXPECTED(!EG(exception))) {
7771 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
7772 			}
7773 
7774 			HANDLE_EXCEPTION();
7775 		}
7776 		if (IS_UNUSED == IS_CONST &&
7777 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
7778 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
7779 			if (IS_CONST == IS_CONST) {
7780 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
7781 			} else {
7782 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
7783 			}
7784 		}
7785 		if (IS_UNUSED != IS_CONST) {
7786 
7787 		}
7788 	} else {
7789 		if (UNEXPECTED(ce->constructor == NULL)) {
7790 			zend_throw_error(NULL, "Cannot call constructor");
7791 			HANDLE_EXCEPTION();
7792 		}
7793 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
7794 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
7795 			HANDLE_EXCEPTION();
7796 		}
7797 		fbc = ce->constructor;
7798 	}
7799 
7800 	object = NULL;
7801 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
7802 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
7803 			object = Z_OBJ(EX(This));
7804 			ce = object->ce;
7805 		} else {
7806 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
7807 				/* Allowed for PHP 4 compatibility. */
7808 				zend_error(
7809 					E_DEPRECATED,
7810 					"Non-static method %s::%s() should not be called statically",
7811 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
7812 				if (UNEXPECTED(EG(exception) != NULL)) {
7813 					HANDLE_EXCEPTION();
7814 				}
7815 			} else {
7816 				/* An internal function assumes $this is present and won't check that.
7817 				 * So PHP would crash by allowing the call. */
7818 				zend_throw_error(
7819 					zend_ce_error,
7820 					"Non-static method %s::%s() cannot be called statically",
7821 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
7822 				HANDLE_EXCEPTION();
7823 			}
7824 		}
7825 	}
7826 
7827 	if (IS_CONST != IS_CONST) {
7828 		/* previous opcode is ZEND_FETCH_CLASS */
7829 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
7830 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
7831 			ce = EX(called_scope);
7832 		}
7833 	}
7834 
7835 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
7836 		fbc, opline->extended_value, ce, object);
7837 	call->prev_execute_data = EX(call);
7838 	EX(call) = call;
7839 
7840 	ZEND_VM_NEXT_OPCODE();
7841 }
7842 
7843 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7844 {
7845 	USE_OPLINE
7846 
7847 	SAVE_OPLINE();
7848 	if (IS_CONST == IS_UNUSED) {
7849 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
7850 	} else {
7851 /* prevents "undefined variable opline" errors */
7852 #if 0 || (IS_CONST != IS_UNUSED)
7853 		zval *retval_ref, *retval_ptr;
7854 
7855 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
7856 
7857 		retval_ref = retval_ptr = EX_CONSTANT(opline->op1);
7858 
7859 		if (IS_CONST == IS_CONST) {
7860 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
7861 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
7862 		} else if (IS_CONST == IS_VAR) {
7863 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
7864 				retval_ptr = Z_INDIRECT_P(retval_ptr);
7865 			}
7866 			ZVAL_DEREF(retval_ptr);
7867 		} else if (IS_CONST == IS_CV) {
7868 			ZVAL_DEREF(retval_ptr);
7869 		}
7870 
7871 		if (UNEXPECTED(!ret_info->class_name
7872 			&& ret_info->type_hint != IS_CALLABLE
7873 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
7874 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
7875 			&& retval_ref != retval_ptr)
7876 		) {
7877 			/* A cast might happen - unwrap the reference if this is a by-value return */
7878 			if (Z_REFCOUNT_P(retval_ref) == 1) {
7879 				ZVAL_UNREF(retval_ref);
7880 			} else {
7881 				Z_DELREF_P(retval_ref);
7882 				ZVAL_COPY(retval_ref, retval_ptr);
7883 			}
7884 			retval_ptr = retval_ref;
7885 		}
7886 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
7887 
7888 		if (UNEXPECTED(EG(exception) != NULL)) {
7889 			if (IS_CONST == IS_CONST) {
7890 				zval_ptr_dtor_nogc(retval_ptr);
7891 			} else {
7892 
7893 			}
7894 		}
7895 #endif
7896 	}
7897 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7898 }
7899 
7900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7901 {
7902 	USE_OPLINE
7903 
7904 	zval *expr_ptr, new_expr;
7905 
7906 	SAVE_OPLINE();
7907 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
7908 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
7909 		expr_ptr = NULL;
7910 		if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
7911 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
7912 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
7913 			HANDLE_EXCEPTION();
7914 		}
7915 		ZVAL_MAKE_REF(expr_ptr);
7916 		Z_ADDREF_P(expr_ptr);
7917 
7918 	} else {
7919 		expr_ptr = EX_CONSTANT(opline->op1);
7920 		if (IS_CONST == IS_TMP_VAR) {
7921 			/* pass */
7922 		} else if (IS_CONST == IS_CONST) {
7923 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
7924 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7925 				zval_copy_ctor_func(&new_expr);
7926 				expr_ptr = &new_expr;
7927 			}
7928 		} else if (IS_CONST == IS_CV) {
7929 			ZVAL_DEREF(expr_ptr);
7930 			if (Z_REFCOUNTED_P(expr_ptr)) {
7931 				Z_ADDREF_P(expr_ptr);
7932 			}
7933 		} else /* if (IS_CONST == IS_VAR) */ {
7934 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
7935 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
7936 
7937 				expr_ptr = Z_REFVAL_P(expr_ptr);
7938 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
7939 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7940 					expr_ptr = &new_expr;
7941 					efree_size(ref, sizeof(zend_reference));
7942 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
7943 					Z_ADDREF_P(expr_ptr);
7944 				}
7945 			}
7946 		}
7947 	}
7948 
7949 	if (IS_UNUSED != IS_UNUSED) {
7950 
7951 		zval *offset = NULL;
7952 		zend_string *str;
7953 		zend_ulong hval;
7954 
7955 add_again:
7956 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7957 			str = Z_STR_P(offset);
7958 			if (IS_UNUSED != IS_CONST) {
7959 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7960 					goto num_index;
7961 				}
7962 			}
7963 str_index:
7964 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
7965 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7966 			hval = Z_LVAL_P(offset);
7967 num_index:
7968 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
7969 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
7970 			offset = Z_REFVAL_P(offset);
7971 			goto add_again;
7972 		} else if (Z_TYPE_P(offset) == IS_NULL) {
7973 			str = ZSTR_EMPTY_ALLOC();
7974 			goto str_index;
7975 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
7976 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
7977 			goto num_index;
7978 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
7979 			hval = 0;
7980 			goto num_index;
7981 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
7982 			hval = 1;
7983 			goto num_index;
7984 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
7985 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
7986 			str = ZSTR_EMPTY_ALLOC();
7987 			goto str_index;
7988 		} else {
7989 			zend_error(E_WARNING, "Illegal offset type");
7990 			zval_ptr_dtor(expr_ptr);
7991 		}
7992 
7993 	} else {
7994 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7995 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
7996 			zval_ptr_dtor(expr_ptr);
7997 		}
7998 	}
7999 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8000 }
8001 
8002 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8003 {
8004 	zval *array;
8005 	uint32_t size;
8006 	USE_OPLINE
8007 
8008 	array = EX_VAR(opline->result.var);
8009 	if (IS_CONST != IS_UNUSED) {
8010 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
8011 	} else {
8012 		size = 0;
8013 	}
8014 	ZVAL_NEW_ARR(array);
8015 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
8016 
8017 	if (IS_CONST != IS_UNUSED) {
8018 		/* Explicitly initialize array as not-packed if flag is set */
8019 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
8020 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
8021 		}
8022 	}
8023 
8024 	if (IS_CONST == IS_UNUSED) {
8025 		ZEND_VM_NEXT_OPCODE();
8026 #if 0 || (IS_CONST != IS_UNUSED)
8027 	} else {
8028 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8029 #endif
8030 	}
8031 }
8032 
8033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8034 {
8035 	USE_OPLINE
8036 	zval tmp, *varname;
8037 	HashTable *target_symbol_table;
8038 
8039 
8040 	SAVE_OPLINE();
8041 	if (IS_CONST == IS_CV &&
8042 	    IS_UNUSED == IS_UNUSED &&
8043 	    (opline->extended_value & ZEND_QUICK_SET)) {
8044 		zval *var = EX_VAR(opline->op1.var);
8045 
8046 		if (Z_REFCOUNTED_P(var)) {
8047 			zend_refcounted *garbage = Z_COUNTED_P(var);
8048 
8049 			if (!--GC_REFCOUNT(garbage)) {
8050 				ZVAL_UNDEF(var);
8051 				zval_dtor_func_for_ptr(garbage);
8052 			} else {
8053 				zval *z = var;
8054 				ZVAL_DEREF(z);
8055 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
8056 					ZVAL_UNDEF(var);
8057 					gc_possible_root(Z_COUNTED_P(z));
8058 				} else {
8059 					ZVAL_UNDEF(var);
8060 				}
8061 			}
8062 		} else {
8063 			ZVAL_UNDEF(var);
8064 		}
8065 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8066 	}
8067 
8068 	varname = EX_CONSTANT(opline->op1);
8069 
8070 	ZVAL_UNDEF(&tmp);
8071 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
8072 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
8073 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
8074 		}
8075 		ZVAL_STR(&tmp, zval_get_string(varname));
8076 		varname = &tmp;
8077 	}
8078 
8079 	if (IS_UNUSED != IS_UNUSED) {
8080 		zend_class_entry *ce;
8081 
8082 		if (IS_UNUSED == IS_CONST) {
8083 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
8084 			if (UNEXPECTED(ce == NULL)) {
8085 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
8086 				if (UNEXPECTED(ce == NULL)) {
8087 					if (EXPECTED(!EG(exception))) {
8088 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
8089 					}
8090 					if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
8091 						zend_string_release(Z_STR(tmp));
8092 					}
8093 
8094 					HANDLE_EXCEPTION();
8095 				}
8096 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
8097 			}
8098 		} else {
8099 			ce = Z_CE_P(EX_VAR(opline->op2.var));
8100 		}
8101 		zend_std_unset_static_property(ce, Z_STR_P(varname));
8102 	} else {
8103 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
8104 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
8105 	}
8106 
8107 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
8108 		zend_string_release(Z_STR(tmp));
8109 	}
8110 
8111 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8112 }
8113 
8114 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8115 {
8116 	USE_OPLINE
8117 	zval *value;
8118 	int result;
8119 
8120 	if (IS_CONST == IS_CV &&
8121 	    IS_UNUSED == IS_UNUSED &&
8122 	    (opline->extended_value & ZEND_QUICK_SET)) {
8123 		value = EX_VAR(opline->op1.var);
8124 		if (opline->extended_value & ZEND_ISSET) {
8125 			result =
8126 				Z_TYPE_P(value) > IS_NULL &&
8127 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
8128 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
8129 			SAVE_OPLINE();
8130 			result = !i_zend_is_true(value);
8131 			if (UNEXPECTED(EG(exception))) {
8132 				HANDLE_EXCEPTION();
8133 			}
8134 		}
8135 		ZEND_VM_SMART_BRANCH(result, 0);
8136 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8137 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
8138 		ZEND_VM_CONTINUE();
8139 	} else {
8140 
8141 		zval tmp, *varname;
8142 
8143 		SAVE_OPLINE();
8144 		varname = EX_CONSTANT(opline->op1);
8145 		ZVAL_UNDEF(&tmp);
8146 		if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
8147 			ZVAL_STR(&tmp, zval_get_string(varname));
8148 			varname = &tmp;
8149 		}
8150 
8151 		if (IS_UNUSED != IS_UNUSED) {
8152 			zend_class_entry *ce;
8153 
8154 			if (IS_UNUSED == IS_CONST) {
8155 				if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
8156 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
8157 
8158 					/* check if static properties were destoyed */
8159 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
8160 						value = NULL;
8161 					}
8162 
8163 					goto is_var_return;
8164 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
8165 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
8166 					if (UNEXPECTED(ce == NULL)) {
8167 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8168 					}
8169 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
8170 				}
8171 			} else {
8172 				ce = Z_CE_P(EX_VAR(opline->op2.var));
8173 				if (IS_CONST == IS_CONST &&
8174 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
8175 
8176 					/* check if static properties were destoyed */
8177 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
8178 						value = NULL;
8179 					}
8180 
8181 					goto is_var_return;
8182 				}
8183 			}
8184 
8185 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
8186 
8187 			if (IS_CONST == IS_CONST && value) {
8188 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
8189 			}
8190 		} else {
8191 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
8192 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
8193 		}
8194 
8195 		if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
8196 			zend_string_release(Z_STR(tmp));
8197 		}
8198 
8199 is_var_return:
8200 		if (opline->extended_value & ZEND_ISSET) {
8201 			result = value && Z_TYPE_P(value) > IS_NULL &&
8202 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
8203 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
8204 			result = !value || !i_zend_is_true(value);
8205 		}
8206 
8207 		ZEND_VM_SMART_BRANCH(result, 1);
8208 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8209 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8210 	}
8211 }
8212 
8213 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8214 {
8215 	USE_OPLINE
8216 	zval *zfunc;
8217 
8218 	SAVE_OPLINE();
8219 
8220 	zfunc = zend_hash_find(EG(function_table), Z_STR_P(EX_CONSTANT(opline->op1)));
8221 	ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION);
8222 
8223 	if (UNEXPECTED((Z_FUNC_P(zfunc)->common.fn_flags & ZEND_ACC_STATIC) ||
8224 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
8225 		zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
8226 			EG(scope), EX(called_scope), NULL);
8227 	} else {
8228 		zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
8229 			EG(scope), EX(called_scope), Z_OBJ(EX(This)) ? &EX(This) : NULL);
8230 	}
8231 
8232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8233 }
8234 
8235 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8236 {
8237 	USE_OPLINE
8238 
8239 	zend_generator *generator = zend_get_running_generator(execute_data);
8240 
8241 	SAVE_OPLINE();
8242 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
8243 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
8244 
8245 
8246 		HANDLE_EXCEPTION();
8247 	}
8248 
8249 	/* Destroy the previously yielded value */
8250 	zval_ptr_dtor(&generator->value);
8251 
8252 	/* Destroy the previously yielded key */
8253 	zval_ptr_dtor(&generator->key);
8254 
8255 	/* Set the new yielded value */
8256 	if (IS_CONST != IS_UNUSED) {
8257 
8258 
8259 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
8260 			/* Constants and temporary variables aren't yieldable by reference,
8261 			 * but we still allow them with a notice. */
8262 			if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
8263 				zval *value;
8264 
8265 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8266 
8267 				value = EX_CONSTANT(opline->op1);
8268 				ZVAL_COPY_VALUE(&generator->value, value);
8269 				if (IS_CONST == IS_CONST) {
8270 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
8271 						zval_copy_ctor_func(&generator->value);
8272 					}
8273 				}
8274 			} else {
8275 				zval *value_ptr = NULL;
8276 
8277 				if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
8278 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
8279 
8280 					HANDLE_EXCEPTION();
8281 				}
8282 
8283 				/* If a function call result is yielded and the function did
8284 				 * not return by reference we throw a notice. */
8285 				if (IS_CONST == IS_VAR &&
8286 				    (value_ptr == &EG(uninitialized_zval) ||
8287 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
8288 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
8289 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8290 				} else {
8291 					ZVAL_MAKE_REF(value_ptr);
8292 				}
8293 				ZVAL_COPY(&generator->value, value_ptr);
8294 
8295 			}
8296 		} else {
8297 			zval *value = EX_CONSTANT(opline->op1);
8298 
8299 			/* Consts, temporary variables and references need copying */
8300 			if (IS_CONST == IS_CONST) {
8301 				ZVAL_COPY_VALUE(&generator->value, value);
8302 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
8303 					zval_copy_ctor_func(&generator->value);
8304 				}
8305 			} else if (IS_CONST == IS_TMP_VAR) {
8306 				ZVAL_COPY_VALUE(&generator->value, value);
8307             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
8308 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
8309 
8310 			} else {
8311 				ZVAL_COPY_VALUE(&generator->value, value);
8312 				if (IS_CONST == IS_CV) {
8313 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
8314 				}
8315 			}
8316 		}
8317 	} else {
8318 		/* If no value was specified yield null */
8319 		ZVAL_NULL(&generator->value);
8320 	}
8321 
8322 	/* Set the new yielded key */
8323 	if (IS_UNUSED != IS_UNUSED) {
8324 
8325 		zval *key = NULL;
8326 
8327 		/* Consts, temporary variables and references need copying */
8328 		if (IS_UNUSED == IS_CONST) {
8329 			ZVAL_COPY_VALUE(&generator->key, key);
8330 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
8331 				zval_copy_ctor_func(&generator->key);
8332 			}
8333 		} else if (IS_UNUSED == IS_TMP_VAR) {
8334 			ZVAL_COPY_VALUE(&generator->key, key);
8335 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
8336 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
8337 
8338 		} else {
8339 			ZVAL_COPY_VALUE(&generator->key, key);
8340 			if (IS_UNUSED == IS_CV) {
8341 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
8342 			}
8343 		}
8344 
8345 		if (Z_TYPE(generator->key) == IS_LONG
8346 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
8347 		) {
8348 			generator->largest_used_integer_key = Z_LVAL(generator->key);
8349 		}
8350 	} else {
8351 		/* If no key was specified we use auto-increment keys */
8352 		generator->largest_used_integer_key++;
8353 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
8354 	}
8355 
8356 	if (RETURN_VALUE_USED(opline)) {
8357 		/* If the return value of yield is used set the send
8358 		 * target and initialize it to NULL */
8359 		generator->send_target = EX_VAR(opline->result.var);
8360 		ZVAL_NULL(generator->send_target);
8361 	} else {
8362 		generator->send_target = NULL;
8363 	}
8364 
8365 	/* We increment to the next op, so we are at the correct position when the
8366 	 * generator is resumed. */
8367 	ZEND_VM_INC_OPCODE();
8368 
8369 	/* The GOTO VM uses a local opline variable. We need to set the opline
8370 	 * variable in execute_data so we don't resume at an old position. */
8371 	SAVE_OPLINE();
8372 
8373 	ZEND_VM_RETURN();
8374 }
8375 
8376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8377 {
8378 	USE_OPLINE
8379 
8380 	zval *op1, *op2, *result;
8381 
8382 	op1 = EX_CONSTANT(opline->op1);
8383 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8384 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8385 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8386 			result = EX_VAR(opline->result.var);
8387 			fast_long_add_function(result, op1, op2);
8388 			ZEND_VM_NEXT_OPCODE();
8389 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8390 			result = EX_VAR(opline->result.var);
8391 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
8392 			ZEND_VM_NEXT_OPCODE();
8393 		}
8394 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8395 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8396 			result = EX_VAR(opline->result.var);
8397 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
8398 			ZEND_VM_NEXT_OPCODE();
8399 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8400 			result = EX_VAR(opline->result.var);
8401 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
8402 			ZEND_VM_NEXT_OPCODE();
8403 		}
8404 	}
8405 
8406 	SAVE_OPLINE();
8407 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8408 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8409 	}
8410 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8411 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8412 	}
8413 	add_function(EX_VAR(opline->result.var), op1, op2);
8414 
8415 
8416 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8417 }
8418 
8419 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8420 {
8421 	USE_OPLINE
8422 
8423 	zval *op1, *op2, *result;
8424 
8425 	op1 = EX_CONSTANT(opline->op1);
8426 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8427 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8428 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8429 			result = EX_VAR(opline->result.var);
8430 			fast_long_sub_function(result, op1, op2);
8431 			ZEND_VM_NEXT_OPCODE();
8432 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8433 			result = EX_VAR(opline->result.var);
8434 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
8435 			ZEND_VM_NEXT_OPCODE();
8436 		}
8437 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8438 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8439 			result = EX_VAR(opline->result.var);
8440 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
8441 			ZEND_VM_NEXT_OPCODE();
8442 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8443 			result = EX_VAR(opline->result.var);
8444 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
8445 			ZEND_VM_NEXT_OPCODE();
8446 		}
8447 	}
8448 
8449 	SAVE_OPLINE();
8450 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8451 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8452 	}
8453 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8454 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8455 	}
8456 	sub_function(EX_VAR(opline->result.var), op1, op2);
8457 
8458 
8459 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8460 }
8461 
8462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8463 {
8464 	USE_OPLINE
8465 
8466 	zval *op1, *op2, *result;
8467 
8468 	op1 = EX_CONSTANT(opline->op1);
8469 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8470 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8471 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8472 			zend_long overflow;
8473 
8474 			result = EX_VAR(opline->result.var);
8475 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
8476 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
8477 			ZEND_VM_NEXT_OPCODE();
8478 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8479 			result = EX_VAR(opline->result.var);
8480 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
8481 			ZEND_VM_NEXT_OPCODE();
8482 		}
8483 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8484 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8485 			result = EX_VAR(opline->result.var);
8486 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
8487 			ZEND_VM_NEXT_OPCODE();
8488 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8489 			result = EX_VAR(opline->result.var);
8490 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
8491 			ZEND_VM_NEXT_OPCODE();
8492 		}
8493 	}
8494 
8495 	SAVE_OPLINE();
8496 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8497 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8498 	}
8499 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8500 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8501 	}
8502 	mul_function(EX_VAR(opline->result.var), op1, op2);
8503 
8504 
8505 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8506 }
8507 
8508 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8509 {
8510 	USE_OPLINE
8511 
8512 	zval *op1, *op2;
8513 
8514 	SAVE_OPLINE();
8515 	op1 = EX_CONSTANT(opline->op1);
8516 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8517 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
8518 
8519 
8520 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8521 }
8522 
8523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8524 {
8525 	USE_OPLINE
8526 
8527 	zval *op1, *op2, *result;
8528 
8529 	op1 = EX_CONSTANT(opline->op1);
8530 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8531 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8532 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8533 			result = EX_VAR(opline->result.var);
8534 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
8535 				SAVE_OPLINE();
8536 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
8537 				HANDLE_EXCEPTION();
8538 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
8539 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
8540 				ZVAL_LONG(result, 0);
8541 			} else {
8542 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
8543 			}
8544 			ZEND_VM_NEXT_OPCODE();
8545 		}
8546 	}
8547 
8548 	SAVE_OPLINE();
8549 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8550 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8551 	}
8552 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8553 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8554 	}
8555 	mod_function(EX_VAR(opline->result.var), op1, op2);
8556 
8557 
8558 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8559 }
8560 
8561 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8562 {
8563 	USE_OPLINE
8564 
8565 	zval *op1, *op2;
8566 
8567 	SAVE_OPLINE();
8568 	op1 = EX_CONSTANT(opline->op1);
8569 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8570 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
8571 
8572 
8573 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8574 }
8575 
8576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8577 {
8578 	USE_OPLINE
8579 
8580 	zval *op1, *op2;
8581 
8582 	SAVE_OPLINE();
8583 	op1 = EX_CONSTANT(opline->op1);
8584 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8585 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
8586 
8587 
8588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8589 }
8590 
8591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8592 {
8593 	USE_OPLINE
8594 
8595 	zval *op1, *op2;
8596 
8597 	SAVE_OPLINE();
8598 	op1 = EX_CONSTANT(opline->op1);
8599 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8600 	pow_function(EX_VAR(opline->result.var), op1, op2);
8601 
8602 
8603 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8604 }
8605 
8606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8607 {
8608 	USE_OPLINE
8609 
8610 	zval *op1, *op2;
8611 
8612 	SAVE_OPLINE();
8613 	op1 = EX_CONSTANT(opline->op1);
8614 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8615 
8616 	do {
8617 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8618 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8619 			zend_string *op1_str = Z_STR_P(op1);
8620 			zend_string *op2_str = Z_STR_P(op2);
8621 			zend_string *str;
8622 
8623 			if (IS_CONST != IS_CONST) {
8624 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8625 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8626 
8627 					break;
8628 				}
8629 			}
8630 			if (IS_CV != IS_CONST) {
8631 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8632 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8633 
8634 					break;
8635 				}
8636 			}
8637 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8638 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8639 			    size_t len = ZSTR_LEN(op1_str);
8640 
8641 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
8642 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8643 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8644 				break;
8645 			} else {
8646 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8647 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8648 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8649 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8650 			}
8651 		} else {
8652 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8653 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8654 			}
8655 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8656 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8657 			}
8658 			concat_function(EX_VAR(opline->result.var), op1, op2);
8659 		}
8660 
8661 	} while (0);
8662 
8663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8664 }
8665 
8666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8667 {
8668 	USE_OPLINE
8669 
8670 	zval *op1, *op2;
8671 	int result;
8672 
8673 	SAVE_OPLINE();
8674 	op1 = EX_CONSTANT(opline->op1);
8675 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
8676 	result = fast_is_identical_function(op1, op2);
8677 
8678 
8679 	ZEND_VM_SMART_BRANCH(result, 1);
8680 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8681 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8682 }
8683 
8684 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8685 {
8686 	USE_OPLINE
8687 
8688 	zval *op1, *op2;
8689 	int result;
8690 
8691 	SAVE_OPLINE();
8692 	op1 = EX_CONSTANT(opline->op1);
8693 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
8694 	result = fast_is_not_identical_function(op1, op2);
8695 
8696 
8697 	ZEND_VM_SMART_BRANCH(result, 1);
8698 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8700 }
8701 
8702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8703 {
8704 	USE_OPLINE
8705 
8706 	zval *op1, *op2, *result;
8707 
8708 	op1 = EX_CONSTANT(opline->op1);
8709 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8710 	do {
8711 		int result;
8712 
8713 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8714 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8715 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
8716 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8717 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
8718 			} else {
8719 				break;
8720 			}
8721 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
8722 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8723 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
8724 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8725 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
8726 			} else {
8727 				break;
8728 			}
8729 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8730 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8731 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
8732 					result = 1;
8733 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
8734 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
8735 						result = 0;
8736 					} else {
8737 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
8738 					}
8739 				} else {
8740 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
8741 				}
8742 
8743 
8744 			} else {
8745 				break;
8746 			}
8747 		} else {
8748 			break;
8749 		}
8750 		ZEND_VM_SMART_BRANCH(result, 0);
8751 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8752 		ZEND_VM_NEXT_OPCODE();
8753 	} while (0);
8754 
8755 	SAVE_OPLINE();
8756 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8757 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8758 	}
8759 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8760 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8761 	}
8762 	result = EX_VAR(opline->result.var);
8763 	compare_function(result, op1, op2);
8764 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
8765 
8766 
8767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8768 }
8769 
8770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8771 {
8772 	USE_OPLINE
8773 
8774 	zval *op1, *op2, *result;
8775 
8776 	op1 = EX_CONSTANT(opline->op1);
8777 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8778 	do {
8779 		int result;
8780 
8781 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8782 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8783 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
8784 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8785 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
8786 			} else {
8787 				break;
8788 			}
8789 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
8790 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8791 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
8792 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8793 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
8794 			} else {
8795 				break;
8796 			}
8797 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8798 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8799 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
8800 					result = 0;
8801 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
8802 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
8803 						result = 1;
8804 					} else {
8805 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
8806 					}
8807 				} else {
8808 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
8809 				}
8810 
8811 
8812 			} else {
8813 				break;
8814 			}
8815 		} else {
8816 			break;
8817 		}
8818 		ZEND_VM_SMART_BRANCH(result, 0);
8819 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8820 		ZEND_VM_NEXT_OPCODE();
8821 	} while (0);
8822 
8823 	SAVE_OPLINE();
8824 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8825 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8826 	}
8827 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8828 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8829 	}
8830 	result = EX_VAR(opline->result.var);
8831 	compare_function(result, op1, op2);
8832 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
8833 
8834 
8835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8836 }
8837 
8838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8839 {
8840 	USE_OPLINE
8841 
8842 	zval *op1, *op2, *result;
8843 
8844 	op1 = EX_CONSTANT(opline->op1);
8845 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8846 	do {
8847 		int result;
8848 
8849 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8850 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8851 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8852 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8853 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
8854 			} else {
8855 				break;
8856 			}
8857 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8858 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8859 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8860 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8861 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
8862 			} else {
8863 				break;
8864 			}
8865 		} else {
8866 			break;
8867 		}
8868 		ZEND_VM_SMART_BRANCH(result, 0);
8869 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8870 		ZEND_VM_NEXT_OPCODE();
8871 	} while (0);
8872 
8873 	SAVE_OPLINE();
8874 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8875 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8876 	}
8877 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8878 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8879 	}
8880 	result = EX_VAR(opline->result.var);
8881 	compare_function(result, op1, op2);
8882 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
8883 
8884 
8885 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8886 }
8887 
8888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8889 {
8890 	USE_OPLINE
8891 
8892 	zval *op1, *op2, *result;
8893 
8894 	op1 = EX_CONSTANT(opline->op1);
8895 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8896 	do {
8897 		int result;
8898 
8899 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8900 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8901 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8902 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8903 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
8904 			} else {
8905 				break;
8906 			}
8907 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8908 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8909 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8910 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8911 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
8912 			} else {
8913 				break;
8914 			}
8915 		} else {
8916 			break;
8917 		}
8918 		ZEND_VM_SMART_BRANCH(result, 0);
8919 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8920 		ZEND_VM_NEXT_OPCODE();
8921 	} while (0);
8922 
8923 	SAVE_OPLINE();
8924 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8925 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8926 	}
8927 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8928 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8929 	}
8930 	result = EX_VAR(opline->result.var);
8931 	compare_function(result, op1, op2);
8932 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
8933 
8934 
8935 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8936 }
8937 
8938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8939 {
8940 	USE_OPLINE
8941 
8942 	zval *op1, *op2;
8943 
8944 	SAVE_OPLINE();
8945 	op1 = EX_CONSTANT(opline->op1);
8946 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8947 	compare_function(EX_VAR(opline->result.var), op1, op2);
8948 
8949 
8950 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8951 }
8952 
8953 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8954 {
8955 	USE_OPLINE
8956 
8957 	zval *op1, *op2;
8958 
8959 	SAVE_OPLINE();
8960 	op1 = EX_CONSTANT(opline->op1);
8961 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8962 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
8963 
8964 
8965 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8966 }
8967 
8968 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8969 {
8970 	USE_OPLINE
8971 
8972 	zval *op1, *op2;
8973 
8974 	SAVE_OPLINE();
8975 	op1 = EX_CONSTANT(opline->op1);
8976 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8977 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
8978 
8979 
8980 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8981 }
8982 
8983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8984 {
8985 	USE_OPLINE
8986 
8987 	zval *op1, *op2;
8988 
8989 	SAVE_OPLINE();
8990 	op1 = EX_CONSTANT(opline->op1);
8991 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8992 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
8993 
8994 
8995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8996 }
8997 
8998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8999 {
9000 	USE_OPLINE
9001 
9002 	zval *op1, *op2;
9003 
9004 	SAVE_OPLINE();
9005 	op1 = EX_CONSTANT(opline->op1);
9006 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9007 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
9008 
9009 
9010 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9011 }
9012 
9013 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9014 {
9015 	USE_OPLINE
9016 
9017 	zval *container;
9018 
9019 	SAVE_OPLINE();
9020 	container = EX_CONSTANT(opline->op1);
9021 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
9022 
9023 
9024 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9025 }
9026 
9027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9028 {
9029 	USE_OPLINE
9030 
9031 	zval *container;
9032 
9033 	SAVE_OPLINE();
9034 	container = EX_CONSTANT(opline->op1);
9035 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
9036 
9037 
9038 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9039 }
9040 
9041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9042 {
9043 	USE_OPLINE
9044 	zval *container;
9045 	zend_free_op free_op1;
9046 
9047 	SAVE_OPLINE();
9048 
9049 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
9050         if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
9051             zend_throw_error(NULL, "Cannot use temporary expression in write context");
9052 
9053 
9054 			HANDLE_EXCEPTION();
9055         }
9056 		container = NULL;
9057 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
9058 			zend_throw_error(NULL, "Cannot use string offset as an array");
9059 
9060 			HANDLE_EXCEPTION();
9061 		}
9062 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
9063 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
9064 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
9065 		}
9066 
9067 
9068 	} else {
9069 		if (IS_CV == IS_UNUSED) {
9070 			zend_throw_error(NULL, "Cannot use [] for reading");
9071 
9072 
9073 			HANDLE_EXCEPTION();
9074 		}
9075 		container = EX_CONSTANT(opline->op1);
9076 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
9077 
9078 
9079 	}
9080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9081 }
9082 
9083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9084 {
9085 	USE_OPLINE
9086 
9087 	zval *container;
9088 
9089 	zval *offset;
9090 
9091 	SAVE_OPLINE();
9092 	container = EX_CONSTANT(opline->op1);
9093 
9094 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
9095 		zend_throw_error(NULL, "Using $this when not in object context");
9096 
9097 		HANDLE_EXCEPTION();
9098 	}
9099 
9100 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9101 
9102 	if (IS_CONST == IS_CONST ||
9103 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9104 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9105 			container = Z_REFVAL_P(container);
9106 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9107 				goto fetch_obj_r_no_object;
9108 			}
9109 		} else {
9110 			goto fetch_obj_r_no_object;
9111 		}
9112 	}
9113 
9114 	/* here we are sure we are dealing with an object */
9115 	do {
9116 		zend_object *zobj = Z_OBJ_P(container);
9117 		zval *retval;
9118 
9119 		if (IS_CV == IS_CONST &&
9120 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
9121 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
9122 
9123 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
9124 				retval = OBJ_PROP(zobj, prop_offset);
9125 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
9126 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
9127 					break;
9128 				}
9129 			} else if (EXPECTED(zobj->properties != NULL)) {
9130 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
9131 				if (EXPECTED(retval)) {
9132 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
9133 					break;
9134 				}
9135 			}
9136 		}
9137 
9138 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
9139 fetch_obj_r_no_object:
9140 			zend_error(E_NOTICE, "Trying to get property of non-object");
9141 			ZVAL_NULL(EX_VAR(opline->result.var));
9142 		} else {
9143 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
9144 
9145 			if (retval != EX_VAR(opline->result.var)) {
9146 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
9147 			}
9148 		}
9149 	} while (0);
9150 
9151 
9152 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9153 }
9154 
9155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9156 {
9157 	USE_OPLINE
9158 
9159 	zval *container;
9160 
9161 	zval *offset;
9162 
9163 	SAVE_OPLINE();
9164 	container = EX_CONSTANT(opline->op1);
9165 
9166 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
9167 		zend_throw_error(NULL, "Using $this when not in object context");
9168 
9169 		HANDLE_EXCEPTION();
9170 	}
9171 
9172 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9173 
9174 	if (IS_CONST == IS_CONST ||
9175 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9176 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9177 			container = Z_REFVAL_P(container);
9178 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9179 				goto fetch_obj_is_no_object;
9180 			}
9181 		} else {
9182 			goto fetch_obj_is_no_object;
9183 		}
9184 	}
9185 
9186 	/* here we are sure we are dealing with an object */
9187 	do {
9188 		zend_object *zobj = Z_OBJ_P(container);
9189 		zval *retval;
9190 
9191 		if (IS_CV == IS_CONST &&
9192 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
9193 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
9194 
9195 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
9196 				retval = OBJ_PROP(zobj, prop_offset);
9197 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
9198 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
9199 					break;
9200 				}
9201 			} else if (EXPECTED(zobj->properties != NULL)) {
9202 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
9203 				if (EXPECTED(retval)) {
9204 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
9205 					break;
9206 				}
9207 			}
9208 		}
9209 
9210 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
9211 fetch_obj_is_no_object:
9212 			ZVAL_NULL(EX_VAR(opline->result.var));
9213 		} else {
9214 
9215 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
9216 
9217 			if (retval != EX_VAR(opline->result.var)) {
9218 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
9219 			}
9220 		}
9221 	} while (0);
9222 
9223 
9224 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9225 }
9226 
9227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9228 {
9229 	USE_OPLINE
9230 	zval *container;
9231 
9232 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
9233 		/* Behave like FETCH_OBJ_W */
9234 		zend_free_op free_op1;
9235 		zval *property;
9236 
9237 		SAVE_OPLINE();
9238 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9239 		container = NULL;
9240 
9241 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
9242 			zend_throw_error(NULL, "Using $this when not in object context");
9243 
9244 			HANDLE_EXCEPTION();
9245 		}
9246 		if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
9247 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
9248 
9249 
9250 			HANDLE_EXCEPTION();
9251 		}
9252 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
9253 			zend_throw_error(NULL, "Cannot use string offset as an object");
9254 
9255 			HANDLE_EXCEPTION();
9256 		}
9257 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
9258 
9259 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
9260 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
9261 		}
9262 
9263 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9264 	} else {
9265 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9266 	}
9267 }
9268 
9269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9270 {
9271 	USE_OPLINE
9272 
9273 	zval *op1, *op2;
9274 	zend_string *op1_str, *op2_str, *str;
9275 
9276 	SAVE_OPLINE();
9277 	op1 = EX_CONSTANT(opline->op1);
9278 	if (IS_CONST == IS_CONST) {
9279 		op1_str = Z_STR_P(op1);
9280 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9281 		op1_str = zend_string_copy(Z_STR_P(op1));
9282 	} else {
9283 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9284 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
9285 		}
9286 		op1_str = _zval_get_string_func(op1);
9287 	}
9288 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9289 	if (IS_CV == IS_CONST) {
9290 		op2_str = Z_STR_P(op2);
9291 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9292 		op2_str = zend_string_copy(Z_STR_P(op2));
9293 	} else {
9294 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9295 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
9296 		}
9297 		op2_str = _zval_get_string_func(op2);
9298 	}
9299 	do {
9300 		if (IS_CONST != IS_CONST) {
9301 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9302 				if (IS_CV == IS_CONST) {
9303 					zend_string_addref(op2_str);
9304 				}
9305 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9306 				zend_string_release(op1_str);
9307 				break;
9308 			}
9309 		}
9310 		if (IS_CV != IS_CONST) {
9311 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9312 				if (IS_CONST == IS_CONST) {
9313 					zend_string_addref(op1_str);
9314 				}
9315 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9316 				zend_string_release(op2_str);
9317 				break;
9318 			}
9319 		}
9320 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9321 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9322 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9323 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9324 		if (IS_CONST != IS_CONST) {
9325 			zend_string_release(op1_str);
9326 		}
9327 		if (IS_CV != IS_CONST) {
9328 			zend_string_release(op2_str);
9329 		}
9330 	} while (0);
9331 
9332 
9333 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9334 }
9335 
9336 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9337 {
9338 	USE_OPLINE
9339 	zval *function_name;
9340 
9341 	zval *object;
9342 	zend_function *fbc;
9343 	zend_class_entry *called_scope;
9344 	zend_object *obj;
9345 	zend_execute_data *call;
9346 	uint32_t call_info;
9347 
9348 	SAVE_OPLINE();
9349 
9350 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9351 
9352 	if (IS_CV != IS_CONST &&
9353 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9354 		do {
9355 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
9356 				function_name = Z_REFVAL_P(function_name);
9357 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9358 					break;
9359 				}
9360 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9361 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
9362 				if (UNEXPECTED(EG(exception) != NULL)) {
9363 					HANDLE_EXCEPTION();
9364 				}
9365 			}
9366 			zend_throw_error(NULL, "Method name must be a string");
9367 
9368 
9369 			HANDLE_EXCEPTION();
9370 		} while (0);
9371 	}
9372 
9373 	object = EX_CONSTANT(opline->op1);
9374 
9375 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
9376 		zend_throw_error(NULL, "Using $this when not in object context");
9377 
9378 		HANDLE_EXCEPTION();
9379 	}
9380 
9381 	if (IS_CONST != IS_UNUSED) {
9382 		do {
9383 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
9384 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
9385 					object = Z_REFVAL_P(object);
9386 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9387 						break;
9388 					}
9389 				}
9390 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9391 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
9392 					if (UNEXPECTED(EG(exception) != NULL)) {
9393 
9394 						HANDLE_EXCEPTION();
9395 					}
9396 				}
9397 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
9398 
9399 
9400 				HANDLE_EXCEPTION();
9401 			}
9402 		} while (0);
9403 	}
9404 
9405 	obj = Z_OBJ_P(object);
9406 	called_scope = obj->ce;
9407 
9408 	if (IS_CV != IS_CONST ||
9409 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
9410 	    zend_object *orig_obj = obj;
9411 
9412 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
9413 			zend_throw_error(NULL, "Object does not support method calls");
9414 
9415 
9416 			HANDLE_EXCEPTION();
9417 		}
9418 
9419 		/* First, locate the function. */
9420 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
9421 		if (UNEXPECTED(fbc == NULL)) {
9422 			if (EXPECTED(!EG(exception))) {
9423 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
9424 			}
9425 
9426 
9427 			HANDLE_EXCEPTION();
9428 		}
9429 		if (IS_CV == IS_CONST &&
9430 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
9431 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9432 		    EXPECTED(obj == orig_obj)) {
9433 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
9434 		}
9435 	}
9436 
9437 	call_info = ZEND_CALL_NESTED_FUNCTION;
9438 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
9439 		obj = NULL;
9440 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
9441 		/* CV may be changed indirectly (e.g. when it's a reference) */
9442 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
9443 		GC_REFCOUNT(obj)++; /* For $this pointer */
9444 	}
9445 
9446 
9447 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
9448 		HANDLE_EXCEPTION();
9449 	}
9450 
9451 	call = zend_vm_stack_push_call_frame(call_info,
9452 		fbc, opline->extended_value, called_scope, obj);
9453 	call->prev_execute_data = EX(call);
9454 	EX(call) = call;
9455 
9456 	ZEND_VM_NEXT_OPCODE();
9457 }
9458 
9459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9460 {
9461 	USE_OPLINE
9462 	zval *function_name;
9463 	zend_class_entry *ce;
9464 	zend_object *object;
9465 	zend_function *fbc;
9466 	zend_execute_data *call;
9467 
9468 	SAVE_OPLINE();
9469 
9470 	if (IS_CONST == IS_CONST) {
9471 		/* no function found. try a static method in class */
9472 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
9473 		if (UNEXPECTED(ce == NULL)) {
9474 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
9475 			if (UNEXPECTED(ce == NULL)) {
9476 				if (UNEXPECTED(EG(exception) != NULL)) {
9477 					HANDLE_EXCEPTION();
9478 				}
9479 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
9480 				HANDLE_EXCEPTION();
9481 			}
9482 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
9483 		}
9484 	} else {
9485 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9486 	}
9487 
9488 	if (IS_CONST == IS_CONST &&
9489 	    IS_CV == IS_CONST &&
9490 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
9491 		/* nothing to do */
9492 	} else if (IS_CONST != IS_CONST &&
9493 	           IS_CV == IS_CONST &&
9494 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
9495 		/* do nothing */
9496 	} else if (IS_CV != IS_UNUSED) {
9497 
9498 
9499 		function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9500 		if (IS_CV != IS_CONST) {
9501 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9502 				do {
9503 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9504 						function_name = Z_REFVAL_P(function_name);
9505 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9506 							break;
9507 						}
9508 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9509 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
9510 						if (UNEXPECTED(EG(exception) != NULL)) {
9511 							HANDLE_EXCEPTION();
9512 						}
9513 					}
9514 					zend_throw_error(NULL, "Function name must be a string");
9515 
9516 					HANDLE_EXCEPTION();
9517 				} while (0);
9518  			}
9519 		}
9520 
9521 		if (ce->get_static_method) {
9522 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9523 		} else {
9524 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
9525 		}
9526 		if (UNEXPECTED(fbc == NULL)) {
9527 			if (EXPECTED(!EG(exception))) {
9528 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
9529 			}
9530 
9531 			HANDLE_EXCEPTION();
9532 		}
9533 		if (IS_CV == IS_CONST &&
9534 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
9535 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
9536 			if (IS_CONST == IS_CONST) {
9537 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
9538 			} else {
9539 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
9540 			}
9541 		}
9542 		if (IS_CV != IS_CONST) {
9543 
9544 		}
9545 	} else {
9546 		if (UNEXPECTED(ce->constructor == NULL)) {
9547 			zend_throw_error(NULL, "Cannot call constructor");
9548 			HANDLE_EXCEPTION();
9549 		}
9550 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9551 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9552 			HANDLE_EXCEPTION();
9553 		}
9554 		fbc = ce->constructor;
9555 	}
9556 
9557 	object = NULL;
9558 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9559 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9560 			object = Z_OBJ(EX(This));
9561 			ce = object->ce;
9562 		} else {
9563 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
9564 				/* Allowed for PHP 4 compatibility. */
9565 				zend_error(
9566 					E_DEPRECATED,
9567 					"Non-static method %s::%s() should not be called statically",
9568 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
9569 				if (UNEXPECTED(EG(exception) != NULL)) {
9570 					HANDLE_EXCEPTION();
9571 				}
9572 			} else {
9573 				/* An internal function assumes $this is present and won't check that.
9574 				 * So PHP would crash by allowing the call. */
9575 				zend_throw_error(
9576 					zend_ce_error,
9577 					"Non-static method %s::%s() cannot be called statically",
9578 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
9579 				HANDLE_EXCEPTION();
9580 			}
9581 		}
9582 	}
9583 
9584 	if (IS_CONST != IS_CONST) {
9585 		/* previous opcode is ZEND_FETCH_CLASS */
9586 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9587 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
9588 			ce = EX(called_scope);
9589 		}
9590 	}
9591 
9592 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
9593 		fbc, opline->extended_value, ce, object);
9594 	call->prev_execute_data = EX(call);
9595 	EX(call) = call;
9596 
9597 	ZEND_VM_NEXT_OPCODE();
9598 }
9599 
9600 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9601 {
9602 	USE_OPLINE
9603 
9604 	zval *function_name;
9605 	zend_fcall_info_cache fcc;
9606 	char *error = NULL;
9607 	zend_function *func;
9608 	zend_class_entry *called_scope;
9609 	zend_object *object;
9610 	zend_execute_data *call;
9611 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
9612 
9613 	SAVE_OPLINE();
9614 	function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9615 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9616 		func = fcc.function_handler;
9617 		called_scope = fcc.called_scope;
9618 		object = fcc.object;
9619 		if (error) {
9620 			efree(error);
9621 			/* This is the only soft error is_callable() can generate */
9622 			zend_error(E_DEPRECATED,
9623 				"Non-static method %s::%s() should not be called statically",
9624 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
9625 			if (UNEXPECTED(EG(exception) != NULL)) {
9626 
9627 				HANDLE_EXCEPTION();
9628 			}
9629 		}
9630 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9631 			/* Delay closure destruction until its invocation */
9632 			if (IS_CV & (IS_VAR|IS_CV)) {
9633 				ZVAL_DEREF(function_name);
9634 			}
9635 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
9636 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
9637 			call_info |= ZEND_CALL_CLOSURE;
9638 		}
9639 		if (object) {
9640 			call_info |= ZEND_CALL_RELEASE_THIS;
9641 			GC_REFCOUNT(object)++; /* For $this pointer */
9642 		}
9643 
9644 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9645 			if (call_info & ZEND_CALL_CLOSURE) {
9646 				zend_object_release((zend_object*)func->common.prototype);
9647 			}
9648 			if (call_info & ZEND_CALL_RELEASE_THIS) {
9649 				zend_object_release(object);
9650 			}
9651 			HANDLE_EXCEPTION();
9652 		}
9653 	} else {
9654 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error);
9655 		efree(error);
9656 
9657 		if (UNEXPECTED(EG(exception))) {
9658 			HANDLE_EXCEPTION();
9659 		}
9660 		func = (zend_function*)&zend_pass_function;
9661 		called_scope = NULL;
9662 		object = NULL;
9663 	}
9664 
9665 	call = zend_vm_stack_push_call_frame(call_info,
9666 		func, opline->extended_value, called_scope, object);
9667 	call->prev_execute_data = EX(call);
9668 	EX(call) = call;
9669 
9670 	ZEND_VM_NEXT_OPCODE();
9671 }
9672 
9673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9674 {
9675 	USE_OPLINE
9676 	zend_class_entry *ce, *catch_ce;
9677 	zend_object *exception;
9678 	zval *ex;
9679 
9680 	SAVE_OPLINE();
9681 	/* Check whether an exception has been thrown, if not, jump over code */
9682 	zend_exception_restore();
9683 	if (EG(exception) == NULL) {
9684 		ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
9685 		ZEND_VM_CONTINUE(); /* CHECK_ME */
9686 	}
9687 	catch_ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
9688 	if (UNEXPECTED(catch_ce == NULL)) {
9689 		catch_ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
9690 
9691 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), catch_ce);
9692 	}
9693 	ce = EG(exception)->ce;
9694 
9695 #ifdef HAVE_DTRACE
9696 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
9697 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
9698 	}
9699 #endif /* HAVE_DTRACE */
9700 
9701 	if (ce != catch_ce) {
9702 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
9703 			if (opline->result.num) {
9704 				zend_throw_exception_internal(NULL);
9705 				HANDLE_EXCEPTION();
9706 			}
9707 			ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->extended_value]);
9708 			ZEND_VM_CONTINUE(); /* CHECK_ME */
9709 		}
9710 	}
9711 
9712 	exception = EG(exception);
9713 	ex = EX_VAR(opline->op2.var);
9714 	if (UNEXPECTED(Z_ISREF_P(ex))) {
9715 		ex = Z_REFVAL_P(ex);
9716 	}
9717 	zval_ptr_dtor(ex);
9718 	ZVAL_OBJ(ex, EG(exception));
9719 	if (UNEXPECTED(EG(exception) != exception)) {
9720 		GC_REFCOUNT(EG(exception))++;
9721 		HANDLE_EXCEPTION();
9722 	} else {
9723 		EG(exception) = NULL;
9724 		ZEND_VM_NEXT_OPCODE();
9725 	}
9726 }
9727 
9728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9729 {
9730 	USE_OPLINE
9731 
9732 	zval *op1, *op2, *result;
9733 
9734 	op1 = EX_CONSTANT(opline->op1);
9735 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9736 	do {
9737 		int result;
9738 
9739 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
9740 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
9741 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
9742 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
9743 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
9744 			} else {
9745 				break;
9746 			}
9747 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
9748 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
9749 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
9750 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
9751 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
9752 			} else {
9753 				break;
9754 			}
9755 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9756 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9757 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
9758 					result = 1;
9759 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
9760 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
9761 						result = 0;
9762 					} else {
9763 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
9764 					}
9765 				} else {
9766 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
9767 				}
9768 
9769 			} else {
9770 				break;
9771 			}
9772 		} else {
9773 			break;
9774 		}
9775 		ZEND_VM_SMART_BRANCH(result, 0);
9776 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
9777 		ZEND_VM_NEXT_OPCODE();
9778 	} while (0);
9779 
9780 	SAVE_OPLINE();
9781 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9782 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
9783 	} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
9784 		/* Don't keep lock on reference, lock the value instead */
9785 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
9786 			ZVAL_UNREF(op1);
9787 		} else {
9788 			Z_DELREF_P(op1);
9789 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
9790 		}
9791 	}
9792 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9793 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
9794 	}
9795 	result = EX_VAR(opline->result.var);
9796 	compare_function(result, op1, op2);
9797 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
9798 
9799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9800 }
9801 
9802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9803 {
9804 	USE_OPLINE
9805 
9806 	zval *expr_ptr, new_expr;
9807 
9808 	SAVE_OPLINE();
9809 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9810 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9811 		expr_ptr = NULL;
9812 		if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
9813 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
9814 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
9815 			HANDLE_EXCEPTION();
9816 		}
9817 		ZVAL_MAKE_REF(expr_ptr);
9818 		Z_ADDREF_P(expr_ptr);
9819 
9820 	} else {
9821 		expr_ptr = EX_CONSTANT(opline->op1);
9822 		if (IS_CONST == IS_TMP_VAR) {
9823 			/* pass */
9824 		} else if (IS_CONST == IS_CONST) {
9825 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
9826 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9827 				zval_copy_ctor_func(&new_expr);
9828 				expr_ptr = &new_expr;
9829 			}
9830 		} else if (IS_CONST == IS_CV) {
9831 			ZVAL_DEREF(expr_ptr);
9832 			if (Z_REFCOUNTED_P(expr_ptr)) {
9833 				Z_ADDREF_P(expr_ptr);
9834 			}
9835 		} else /* if (IS_CONST == IS_VAR) */ {
9836 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9837 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9838 
9839 				expr_ptr = Z_REFVAL_P(expr_ptr);
9840 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
9841 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9842 					expr_ptr = &new_expr;
9843 					efree_size(ref, sizeof(zend_reference));
9844 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9845 					Z_ADDREF_P(expr_ptr);
9846 				}
9847 			}
9848 		}
9849 	}
9850 
9851 	if (IS_CV != IS_UNUSED) {
9852 
9853 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9854 		zend_string *str;
9855 		zend_ulong hval;
9856 
9857 add_again:
9858 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9859 			str = Z_STR_P(offset);
9860 			if (IS_CV != IS_CONST) {
9861 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9862 					goto num_index;
9863 				}
9864 			}
9865 str_index:
9866 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9867 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9868 			hval = Z_LVAL_P(offset);
9869 num_index:
9870 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9871 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9872 			offset = Z_REFVAL_P(offset);
9873 			goto add_again;
9874 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9875 			str = ZSTR_EMPTY_ALLOC();
9876 			goto str_index;
9877 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9878 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9879 			goto num_index;
9880 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9881 			hval = 0;
9882 			goto num_index;
9883 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9884 			hval = 1;
9885 			goto num_index;
9886 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9887 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
9888 			str = ZSTR_EMPTY_ALLOC();
9889 			goto str_index;
9890 		} else {
9891 			zend_error(E_WARNING, "Illegal offset type");
9892 			zval_ptr_dtor(expr_ptr);
9893 		}
9894 
9895 	} else {
9896 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9897 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
9898 			zval_ptr_dtor(expr_ptr);
9899 		}
9900 	}
9901 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9902 }
9903 
9904 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9905 {
9906 	zval *array;
9907 	uint32_t size;
9908 	USE_OPLINE
9909 
9910 	array = EX_VAR(opline->result.var);
9911 	if (IS_CONST != IS_UNUSED) {
9912 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9913 	} else {
9914 		size = 0;
9915 	}
9916 	ZVAL_NEW_ARR(array);
9917 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
9918 
9919 	if (IS_CONST != IS_UNUSED) {
9920 		/* Explicitly initialize array as not-packed if flag is set */
9921 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9922 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
9923 		}
9924 	}
9925 
9926 	if (IS_CONST == IS_UNUSED) {
9927 		ZEND_VM_NEXT_OPCODE();
9928 #if 0 || (IS_CONST != IS_UNUSED)
9929 	} else {
9930 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9931 #endif
9932 	}
9933 }
9934 
9935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9936 {
9937 	USE_OPLINE
9938 
9939 	zval *container;
9940 	int result;
9941 	zend_ulong hval;
9942 	zval *offset;
9943 
9944 	SAVE_OPLINE();
9945 	container = EX_CONSTANT(opline->op1);
9946 
9947 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
9948 		zend_throw_error(NULL, "Using $this when not in object context");
9949 
9950 		HANDLE_EXCEPTION();
9951 	}
9952 
9953 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9954 
9955 	if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9956 		HashTable *ht;
9957 		zval *value;
9958 		zend_string *str;
9959 
9960 isset_dim_obj_array:
9961 		ht = Z_ARRVAL_P(container);
9962 isset_again:
9963 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9964 			str = Z_STR_P(offset);
9965 			if (IS_CV != IS_CONST) {
9966 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9967 					goto num_index_prop;
9968 				}
9969 			}
9970 str_index_prop:
9971 			value = zend_hash_find_ind(ht, str);
9972 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9973 			hval = Z_LVAL_P(offset);
9974 num_index_prop:
9975 			value = zend_hash_index_find(ht, hval);
9976 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
9977 			offset = Z_REFVAL_P(offset);
9978 			goto isset_again;
9979 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9980 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9981 			goto num_index_prop;
9982 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9983 			str = ZSTR_EMPTY_ALLOC();
9984 			goto str_index_prop;
9985 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9986 			hval = 0;
9987 			goto num_index_prop;
9988 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9989 			hval = 1;
9990 			goto num_index_prop;
9991 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9992 			hval = Z_RES_HANDLE_P(offset);
9993 			goto num_index_prop;
9994 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9995 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
9996 			str = ZSTR_EMPTY_ALLOC();
9997 			goto str_index_prop;
9998 		} else {
9999 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
10000 			goto isset_not_found;
10001 		}
10002 
10003 		if (opline->extended_value & ZEND_ISSET) {
10004 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
10005 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
10006 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
10007 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
10008 			result = (value == NULL || !i_zend_is_true(value));
10009 		}
10010 		goto isset_dim_obj_exit;
10011 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10012 		container = Z_REFVAL_P(container);
10013 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10014 			goto isset_dim_obj_array;
10015 		}
10016 	}
10017 
10018 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
10019 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
10020 	}
10021 
10022 	if (IS_CONST == IS_UNUSED ||
10023 	    (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
10024 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
10025 			result =
10026 				((opline->extended_value & ZEND_ISSET) == 0) ^
10027 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
10028 		} else {
10029 			zend_error(E_NOTICE, "Trying to check element of non-array");
10030 			goto isset_not_found;
10031 		}
10032 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
10033 		zend_long lval;
10034 
10035 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10036 			lval = Z_LVAL_P(offset);
10037 isset_str_offset:
10038 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
10039 				if (opline->extended_value & ZEND_ISSET) {
10040 					result = 1;
10041 				} else {
10042 					result = (Z_STRVAL_P(container)[lval] == '0');
10043 				}
10044 			} else {
10045 				goto isset_not_found;
10046 			}
10047 		} else {
10048 			if (IS_CV & (IS_CV|IS_VAR)) {
10049 				ZVAL_DEREF(offset);
10050 			}
10051 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
10052 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
10053 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
10054 				lval = zval_get_long(offset);
10055 				goto isset_str_offset;
10056 			}
10057 			goto isset_not_found;
10058 		}
10059 	} else {
10060 isset_not_found:
10061 		result = ((opline->extended_value & ZEND_ISSET) == 0);
10062 	}
10063 
10064 isset_dim_obj_exit:
10065 
10066 
10067 	ZEND_VM_SMART_BRANCH(result, 1);
10068 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
10069 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10070 }
10071 
10072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10073 {
10074 	USE_OPLINE
10075 
10076 	zval *container;
10077 	int result;
10078 	zval *offset;
10079 
10080 	SAVE_OPLINE();
10081 	container = EX_CONSTANT(opline->op1);
10082 
10083 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
10084 		zend_throw_error(NULL, "Using $this when not in object context");
10085 
10086 		HANDLE_EXCEPTION();
10087 	}
10088 
10089 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
10090 
10091 	if (IS_CONST == IS_CONST ||
10092 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10093 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10094 			container = Z_REFVAL_P(container);
10095 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
10096 				goto isset_no_object;
10097 			}
10098 		} else {
10099 			goto isset_no_object;
10100 		}
10101 	}
10102 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
10103 		zend_error(E_NOTICE, "Trying to check property of non-object");
10104 isset_no_object:
10105 		result = ((opline->extended_value & ZEND_ISSET) == 0);
10106 	} else {
10107 		result =
10108 			((opline->extended_value & ZEND_ISSET) == 0) ^
10109 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
10110 	}
10111 
10112 
10113 	ZEND_VM_SMART_BRANCH(result, 1);
10114 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
10115 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10116 }
10117 
10118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10119 {
10120 	USE_OPLINE
10121 
10122 	zend_generator *generator = zend_get_running_generator(execute_data);
10123 
10124 	SAVE_OPLINE();
10125 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10126 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
10127 
10128 
10129 		HANDLE_EXCEPTION();
10130 	}
10131 
10132 	/* Destroy the previously yielded value */
10133 	zval_ptr_dtor(&generator->value);
10134 
10135 	/* Destroy the previously yielded key */
10136 	zval_ptr_dtor(&generator->key);
10137 
10138 	/* Set the new yielded value */
10139 	if (IS_CONST != IS_UNUSED) {
10140 
10141 
10142 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10143 			/* Constants and temporary variables aren't yieldable by reference,
10144 			 * but we still allow them with a notice. */
10145 			if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
10146 				zval *value;
10147 
10148 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10149 
10150 				value = EX_CONSTANT(opline->op1);
10151 				ZVAL_COPY_VALUE(&generator->value, value);
10152 				if (IS_CONST == IS_CONST) {
10153 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
10154 						zval_copy_ctor_func(&generator->value);
10155 					}
10156 				}
10157 			} else {
10158 				zval *value_ptr = NULL;
10159 
10160 				if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
10161 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
10162 
10163 					HANDLE_EXCEPTION();
10164 				}
10165 
10166 				/* If a function call result is yielded and the function did
10167 				 * not return by reference we throw a notice. */
10168 				if (IS_CONST == IS_VAR &&
10169 				    (value_ptr == &EG(uninitialized_zval) ||
10170 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
10171 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
10172 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10173 				} else {
10174 					ZVAL_MAKE_REF(value_ptr);
10175 				}
10176 				ZVAL_COPY(&generator->value, value_ptr);
10177 
10178 			}
10179 		} else {
10180 			zval *value = EX_CONSTANT(opline->op1);
10181 
10182 			/* Consts, temporary variables and references need copying */
10183 			if (IS_CONST == IS_CONST) {
10184 				ZVAL_COPY_VALUE(&generator->value, value);
10185 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
10186 					zval_copy_ctor_func(&generator->value);
10187 				}
10188 			} else if (IS_CONST == IS_TMP_VAR) {
10189 				ZVAL_COPY_VALUE(&generator->value, value);
10190             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10191 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10192 
10193 			} else {
10194 				ZVAL_COPY_VALUE(&generator->value, value);
10195 				if (IS_CONST == IS_CV) {
10196 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10197 				}
10198 			}
10199 		}
10200 	} else {
10201 		/* If no value was specified yield null */
10202 		ZVAL_NULL(&generator->value);
10203 	}
10204 
10205 	/* Set the new yielded key */
10206 	if (IS_CV != IS_UNUSED) {
10207 
10208 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
10209 
10210 		/* Consts, temporary variables and references need copying */
10211 		if (IS_CV == IS_CONST) {
10212 			ZVAL_COPY_VALUE(&generator->key, key);
10213 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
10214 				zval_copy_ctor_func(&generator->key);
10215 			}
10216 		} else if (IS_CV == IS_TMP_VAR) {
10217 			ZVAL_COPY_VALUE(&generator->key, key);
10218 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
10219 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
10220 
10221 		} else {
10222 			ZVAL_COPY_VALUE(&generator->key, key);
10223 			if (IS_CV == IS_CV) {
10224 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
10225 			}
10226 		}
10227 
10228 		if (Z_TYPE(generator->key) == IS_LONG
10229 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10230 		) {
10231 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10232 		}
10233 	} else {
10234 		/* If no key was specified we use auto-increment keys */
10235 		generator->largest_used_integer_key++;
10236 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10237 	}
10238 
10239 	if (RETURN_VALUE_USED(opline)) {
10240 		/* If the return value of yield is used set the send
10241 		 * target and initialize it to NULL */
10242 		generator->send_target = EX_VAR(opline->result.var);
10243 		ZVAL_NULL(generator->send_target);
10244 	} else {
10245 		generator->send_target = NULL;
10246 	}
10247 
10248 	/* We increment to the next op, so we are at the correct position when the
10249 	 * generator is resumed. */
10250 	ZEND_VM_INC_OPCODE();
10251 
10252 	/* The GOTO VM uses a local opline variable. We need to set the opline
10253 	 * variable in execute_data so we don't resume at an old position. */
10254 	SAVE_OPLINE();
10255 
10256 	ZEND_VM_RETURN();
10257 }
10258 
10259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10260 {
10261 	USE_OPLINE
10262 	zend_free_op free_op2;
10263 	zval *op1, *op2, *result;
10264 
10265 	op1 = EX_CONSTANT(opline->op1);
10266 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10267 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10268 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10269 			result = EX_VAR(opline->result.var);
10270 			fast_long_add_function(result, op1, op2);
10271 			ZEND_VM_NEXT_OPCODE();
10272 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10273 			result = EX_VAR(opline->result.var);
10274 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
10275 			ZEND_VM_NEXT_OPCODE();
10276 		}
10277 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10278 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10279 			result = EX_VAR(opline->result.var);
10280 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
10281 			ZEND_VM_NEXT_OPCODE();
10282 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10283 			result = EX_VAR(opline->result.var);
10284 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
10285 			ZEND_VM_NEXT_OPCODE();
10286 		}
10287 	}
10288 
10289 	SAVE_OPLINE();
10290 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10291 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10292 	}
10293 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10294 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10295 	}
10296 	add_function(EX_VAR(opline->result.var), op1, op2);
10297 
10298 	zval_ptr_dtor_nogc(free_op2);
10299 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10300 }
10301 
10302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10303 {
10304 	USE_OPLINE
10305 	zend_free_op free_op2;
10306 	zval *op1, *op2, *result;
10307 
10308 	op1 = EX_CONSTANT(opline->op1);
10309 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10310 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10311 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10312 			result = EX_VAR(opline->result.var);
10313 			fast_long_sub_function(result, op1, op2);
10314 			ZEND_VM_NEXT_OPCODE();
10315 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10316 			result = EX_VAR(opline->result.var);
10317 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
10318 			ZEND_VM_NEXT_OPCODE();
10319 		}
10320 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10321 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10322 			result = EX_VAR(opline->result.var);
10323 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
10324 			ZEND_VM_NEXT_OPCODE();
10325 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10326 			result = EX_VAR(opline->result.var);
10327 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
10328 			ZEND_VM_NEXT_OPCODE();
10329 		}
10330 	}
10331 
10332 	SAVE_OPLINE();
10333 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10334 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10335 	}
10336 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10337 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10338 	}
10339 	sub_function(EX_VAR(opline->result.var), op1, op2);
10340 
10341 	zval_ptr_dtor_nogc(free_op2);
10342 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10343 }
10344 
10345 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10346 {
10347 	USE_OPLINE
10348 	zend_free_op free_op2;
10349 	zval *op1, *op2, *result;
10350 
10351 	op1 = EX_CONSTANT(opline->op1);
10352 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10353 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10354 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10355 			zend_long overflow;
10356 
10357 			result = EX_VAR(opline->result.var);
10358 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
10359 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
10360 			ZEND_VM_NEXT_OPCODE();
10361 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10362 			result = EX_VAR(opline->result.var);
10363 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
10364 			ZEND_VM_NEXT_OPCODE();
10365 		}
10366 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10367 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10368 			result = EX_VAR(opline->result.var);
10369 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
10370 			ZEND_VM_NEXT_OPCODE();
10371 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10372 			result = EX_VAR(opline->result.var);
10373 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
10374 			ZEND_VM_NEXT_OPCODE();
10375 		}
10376 	}
10377 
10378 	SAVE_OPLINE();
10379 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10380 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10381 	}
10382 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10383 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10384 	}
10385 	mul_function(EX_VAR(opline->result.var), op1, op2);
10386 
10387 	zval_ptr_dtor_nogc(free_op2);
10388 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10389 }
10390 
10391 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10392 {
10393 	USE_OPLINE
10394 	zend_free_op free_op2;
10395 	zval *op1, *op2;
10396 
10397 	SAVE_OPLINE();
10398 	op1 = EX_CONSTANT(opline->op1);
10399 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10400 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
10401 
10402 	zval_ptr_dtor_nogc(free_op2);
10403 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10404 }
10405 
10406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10407 {
10408 	USE_OPLINE
10409 	zend_free_op free_op2;
10410 	zval *op1, *op2, *result;
10411 
10412 	op1 = EX_CONSTANT(opline->op1);
10413 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10414 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10415 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10416 			result = EX_VAR(opline->result.var);
10417 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
10418 				SAVE_OPLINE();
10419 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
10420 				HANDLE_EXCEPTION();
10421 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
10422 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
10423 				ZVAL_LONG(result, 0);
10424 			} else {
10425 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
10426 			}
10427 			ZEND_VM_NEXT_OPCODE();
10428 		}
10429 	}
10430 
10431 	SAVE_OPLINE();
10432 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10433 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10434 	}
10435 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10436 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10437 	}
10438 	mod_function(EX_VAR(opline->result.var), op1, op2);
10439 
10440 	zval_ptr_dtor_nogc(free_op2);
10441 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10442 }
10443 
10444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10445 {
10446 	USE_OPLINE
10447 	zend_free_op free_op2;
10448 	zval *op1, *op2;
10449 
10450 	SAVE_OPLINE();
10451 	op1 = EX_CONSTANT(opline->op1);
10452 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10453 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
10454 
10455 	zval_ptr_dtor_nogc(free_op2);
10456 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10457 }
10458 
10459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10460 {
10461 	USE_OPLINE
10462 	zend_free_op free_op2;
10463 	zval *op1, *op2;
10464 
10465 	SAVE_OPLINE();
10466 	op1 = EX_CONSTANT(opline->op1);
10467 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10468 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
10469 
10470 	zval_ptr_dtor_nogc(free_op2);
10471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10472 }
10473 
10474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10475 {
10476 	USE_OPLINE
10477 	zend_free_op free_op2;
10478 	zval *op1, *op2;
10479 
10480 	SAVE_OPLINE();
10481 	op1 = EX_CONSTANT(opline->op1);
10482 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10483 	pow_function(EX_VAR(opline->result.var), op1, op2);
10484 
10485 	zval_ptr_dtor_nogc(free_op2);
10486 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10487 }
10488 
10489 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10490 {
10491 	USE_OPLINE
10492 	zend_free_op free_op2;
10493 	zval *op1, *op2;
10494 
10495 	SAVE_OPLINE();
10496 	op1 = EX_CONSTANT(opline->op1);
10497 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10498 
10499 	do {
10500 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
10501 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
10502 			zend_string *op1_str = Z_STR_P(op1);
10503 			zend_string *op2_str = Z_STR_P(op2);
10504 			zend_string *str;
10505 
10506 			if (IS_CONST != IS_CONST) {
10507 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10508 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
10509 
10510 					break;
10511 				}
10512 			}
10513 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
10514 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10515 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
10516 
10517 					break;
10518 				}
10519 			}
10520 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
10521 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
10522 			    size_t len = ZSTR_LEN(op1_str);
10523 
10524 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
10525 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10526 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10527 				break;
10528 			} else {
10529 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10530 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10531 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10532 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10533 			}
10534 		} else {
10535 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10536 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10537 			}
10538 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10539 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10540 			}
10541 			concat_function(EX_VAR(opline->result.var), op1, op2);
10542 		}
10543 
10544 	} while (0);
10545 	zval_ptr_dtor_nogc(free_op2);
10546 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10547 }
10548 
10549 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10550 {
10551 	USE_OPLINE
10552 	zend_free_op free_op2;
10553 	zval *op1, *op2, *result;
10554 
10555 	op1 = EX_CONSTANT(opline->op1);
10556 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10557 	do {
10558 		int result;
10559 
10560 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
10561 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10562 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
10563 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10564 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
10565 			} else {
10566 				break;
10567 			}
10568 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
10569 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10570 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
10571 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10572 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
10573 			} else {
10574 				break;
10575 			}
10576 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
10577 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
10578 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
10579 					result = 1;
10580 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
10581 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
10582 						result = 0;
10583 					} else {
10584 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
10585 					}
10586 				} else {
10587 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
10588 				}
10589 
10590 				zval_ptr_dtor_nogc(free_op2);
10591 			} else {
10592 				break;
10593 			}
10594 		} else {
10595 			break;
10596 		}
10597 		ZEND_VM_SMART_BRANCH(result, 0);
10598 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10599 		ZEND_VM_NEXT_OPCODE();
10600 	} while (0);
10601 
10602 	SAVE_OPLINE();
10603 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10604 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10605 	}
10606 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10607 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10608 	}
10609 	result = EX_VAR(opline->result.var);
10610 	compare_function(result, op1, op2);
10611 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
10612 
10613 	zval_ptr_dtor_nogc(free_op2);
10614 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10615 }
10616 
10617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10618 {
10619 	USE_OPLINE
10620 	zend_free_op free_op2;
10621 	zval *op1, *op2, *result;
10622 
10623 	op1 = EX_CONSTANT(opline->op1);
10624 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10625 	do {
10626 		int result;
10627 
10628 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
10629 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10630 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
10631 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10632 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
10633 			} else {
10634 				break;
10635 			}
10636 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
10637 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10638 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
10639 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10640 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
10641 			} else {
10642 				break;
10643 			}
10644 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
10645 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
10646 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
10647 					result = 0;
10648 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
10649 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
10650 						result = 1;
10651 					} else {
10652 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
10653 					}
10654 				} else {
10655 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
10656 				}
10657 
10658 				zval_ptr_dtor_nogc(free_op2);
10659 			} else {
10660 				break;
10661 			}
10662 		} else {
10663 			break;
10664 		}
10665 		ZEND_VM_SMART_BRANCH(result, 0);
10666 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10667 		ZEND_VM_NEXT_OPCODE();
10668 	} while (0);
10669 
10670 	SAVE_OPLINE();
10671 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10672 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10673 	}
10674 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10675 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10676 	}
10677 	result = EX_VAR(opline->result.var);
10678 	compare_function(result, op1, op2);
10679 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
10680 
10681 	zval_ptr_dtor_nogc(free_op2);
10682 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10683 }
10684 
10685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10686 {
10687 	USE_OPLINE
10688 	zend_free_op free_op2;
10689 	zval *op1, *op2, *result;
10690 
10691 	op1 = EX_CONSTANT(opline->op1);
10692 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10693 	do {
10694 		int result;
10695 
10696 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10697 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10698 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
10699 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10700 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
10701 			} else {
10702 				break;
10703 			}
10704 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10705 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10706 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
10707 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10708 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
10709 			} else {
10710 				break;
10711 			}
10712 		} else {
10713 			break;
10714 		}
10715 		ZEND_VM_SMART_BRANCH(result, 0);
10716 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10717 		ZEND_VM_NEXT_OPCODE();
10718 	} while (0);
10719 
10720 	SAVE_OPLINE();
10721 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10722 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10723 	}
10724 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10725 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10726 	}
10727 	result = EX_VAR(opline->result.var);
10728 	compare_function(result, op1, op2);
10729 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
10730 
10731 	zval_ptr_dtor_nogc(free_op2);
10732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10733 }
10734 
10735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10736 {
10737 	USE_OPLINE
10738 	zend_free_op free_op2;
10739 	zval *op1, *op2, *result;
10740 
10741 	op1 = EX_CONSTANT(opline->op1);
10742 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10743 	do {
10744 		int result;
10745 
10746 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10747 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10748 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
10749 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10750 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
10751 			} else {
10752 				break;
10753 			}
10754 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10755 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10756 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
10757 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10758 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
10759 			} else {
10760 				break;
10761 			}
10762 		} else {
10763 			break;
10764 		}
10765 		ZEND_VM_SMART_BRANCH(result, 0);
10766 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10767 		ZEND_VM_NEXT_OPCODE();
10768 	} while (0);
10769 
10770 	SAVE_OPLINE();
10771 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10772 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10773 	}
10774 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10775 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10776 	}
10777 	result = EX_VAR(opline->result.var);
10778 	compare_function(result, op1, op2);
10779 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
10780 
10781 	zval_ptr_dtor_nogc(free_op2);
10782 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10783 }
10784 
10785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10786 {
10787 	USE_OPLINE
10788 	zend_free_op free_op2;
10789 	zval *op1, *op2;
10790 
10791 	SAVE_OPLINE();
10792 	op1 = EX_CONSTANT(opline->op1);
10793 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10794 	compare_function(EX_VAR(opline->result.var), op1, op2);
10795 
10796 	zval_ptr_dtor_nogc(free_op2);
10797 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10798 }
10799 
10800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10801 {
10802 	USE_OPLINE
10803 	zend_free_op free_op2;
10804 	zval *op1, *op2;
10805 
10806 	SAVE_OPLINE();
10807 	op1 = EX_CONSTANT(opline->op1);
10808 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10809 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
10810 
10811 	zval_ptr_dtor_nogc(free_op2);
10812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10813 }
10814 
10815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10816 {
10817 	USE_OPLINE
10818 	zend_free_op free_op2;
10819 	zval *op1, *op2;
10820 
10821 	SAVE_OPLINE();
10822 	op1 = EX_CONSTANT(opline->op1);
10823 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10824 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
10825 
10826 	zval_ptr_dtor_nogc(free_op2);
10827 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10828 }
10829 
10830 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10831 {
10832 	USE_OPLINE
10833 	zend_free_op free_op2;
10834 	zval *op1, *op2;
10835 
10836 	SAVE_OPLINE();
10837 	op1 = EX_CONSTANT(opline->op1);
10838 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10839 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
10840 
10841 	zval_ptr_dtor_nogc(free_op2);
10842 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10843 }
10844 
10845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10846 {
10847 	USE_OPLINE
10848 	zend_free_op free_op2;
10849 	zval *op1, *op2;
10850 
10851 	SAVE_OPLINE();
10852 	op1 = EX_CONSTANT(opline->op1);
10853 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10854 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
10855 
10856 	zval_ptr_dtor_nogc(free_op2);
10857 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10858 }
10859 
10860 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10861 {
10862 	USE_OPLINE
10863 	zend_free_op free_op2;
10864 	zval *container;
10865 
10866 	SAVE_OPLINE();
10867 	container = EX_CONSTANT(opline->op1);
10868 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
10869 	zval_ptr_dtor_nogc(free_op2);
10870 
10871 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10872 }
10873 
10874 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10875 {
10876 	USE_OPLINE
10877 	zend_free_op free_op2;
10878 	zval *container;
10879 
10880 	SAVE_OPLINE();
10881 	container = EX_CONSTANT(opline->op1);
10882 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
10883 	zval_ptr_dtor_nogc(free_op2);
10884 
10885 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10886 }
10887 
10888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10889 {
10890 	USE_OPLINE
10891 	zval *container;
10892 	zend_free_op free_op1, free_op2;
10893 
10894 	SAVE_OPLINE();
10895 
10896 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
10897         if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
10898             zend_throw_error(NULL, "Cannot use temporary expression in write context");
10899 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10900 
10901 			HANDLE_EXCEPTION();
10902         }
10903 		container = NULL;
10904 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
10905 			zend_throw_error(NULL, "Cannot use string offset as an array");
10906 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10907 			HANDLE_EXCEPTION();
10908 		}
10909 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
10910 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
10911 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
10912 		}
10913 		zval_ptr_dtor_nogc(free_op2);
10914 
10915 	} else {
10916 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
10917 			zend_throw_error(NULL, "Cannot use [] for reading");
10918 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10919 
10920 			HANDLE_EXCEPTION();
10921 		}
10922 		container = EX_CONSTANT(opline->op1);
10923 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
10924 		zval_ptr_dtor_nogc(free_op2);
10925 
10926 	}
10927 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10928 }
10929 
10930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10931 {
10932 	USE_OPLINE
10933 
10934 	zval *container;
10935 	zend_free_op free_op2;
10936 	zval *offset;
10937 
10938 	SAVE_OPLINE();
10939 	container = EX_CONSTANT(opline->op1);
10940 
10941 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
10942 		zend_throw_error(NULL, "Using $this when not in object context");
10943 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10944 		HANDLE_EXCEPTION();
10945 	}
10946 
10947 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10948 
10949 	if (IS_CONST == IS_CONST ||
10950 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10951 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10952 			container = Z_REFVAL_P(container);
10953 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
10954 				goto fetch_obj_r_no_object;
10955 			}
10956 		} else {
10957 			goto fetch_obj_r_no_object;
10958 		}
10959 	}
10960 
10961 	/* here we are sure we are dealing with an object */
10962 	do {
10963 		zend_object *zobj = Z_OBJ_P(container);
10964 		zval *retval;
10965 
10966 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
10967 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
10968 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
10969 
10970 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
10971 				retval = OBJ_PROP(zobj, prop_offset);
10972 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
10973 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
10974 					break;
10975 				}
10976 			} else if (EXPECTED(zobj->properties != NULL)) {
10977 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
10978 				if (EXPECTED(retval)) {
10979 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
10980 					break;
10981 				}
10982 			}
10983 		}
10984 
10985 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
10986 fetch_obj_r_no_object:
10987 			zend_error(E_NOTICE, "Trying to get property of non-object");
10988 			ZVAL_NULL(EX_VAR(opline->result.var));
10989 		} else {
10990 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
10991 
10992 			if (retval != EX_VAR(opline->result.var)) {
10993 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
10994 			}
10995 		}
10996 	} while (0);
10997 
10998 	zval_ptr_dtor_nogc(free_op2);
10999 
11000 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11001 }
11002 
11003 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11004 {
11005 	USE_OPLINE
11006 
11007 	zval *container;
11008 	zend_free_op free_op2;
11009 	zval *offset;
11010 
11011 	SAVE_OPLINE();
11012 	container = EX_CONSTANT(opline->op1);
11013 
11014 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
11015 		zend_throw_error(NULL, "Using $this when not in object context");
11016 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11017 		HANDLE_EXCEPTION();
11018 	}
11019 
11020 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11021 
11022 	if (IS_CONST == IS_CONST ||
11023 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11024 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11025 			container = Z_REFVAL_P(container);
11026 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11027 				goto fetch_obj_is_no_object;
11028 			}
11029 		} else {
11030 			goto fetch_obj_is_no_object;
11031 		}
11032 	}
11033 
11034 	/* here we are sure we are dealing with an object */
11035 	do {
11036 		zend_object *zobj = Z_OBJ_P(container);
11037 		zval *retval;
11038 
11039 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11040 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
11041 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
11042 
11043 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
11044 				retval = OBJ_PROP(zobj, prop_offset);
11045 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11046 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
11047 					break;
11048 				}
11049 			} else if (EXPECTED(zobj->properties != NULL)) {
11050 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
11051 				if (EXPECTED(retval)) {
11052 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
11053 					break;
11054 				}
11055 			}
11056 		}
11057 
11058 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
11059 fetch_obj_is_no_object:
11060 			ZVAL_NULL(EX_VAR(opline->result.var));
11061 		} else {
11062 
11063 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
11064 
11065 			if (retval != EX_VAR(opline->result.var)) {
11066 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
11067 			}
11068 		}
11069 	} while (0);
11070 
11071 	zval_ptr_dtor_nogc(free_op2);
11072 
11073 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11074 }
11075 
11076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11077 {
11078 	USE_OPLINE
11079 	zval *container;
11080 
11081 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
11082 		/* Behave like FETCH_OBJ_W */
11083 		zend_free_op free_op1, free_op2;
11084 		zval *property;
11085 
11086 		SAVE_OPLINE();
11087 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11088 		container = NULL;
11089 
11090 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
11091 			zend_throw_error(NULL, "Using $this when not in object context");
11092 			zval_ptr_dtor_nogc(free_op2);
11093 			HANDLE_EXCEPTION();
11094 		}
11095 		if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
11096 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
11097 			zval_ptr_dtor_nogc(free_op2);
11098 
11099 			HANDLE_EXCEPTION();
11100 		}
11101 		if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
11102 			zend_throw_error(NULL, "Cannot use string offset as an object");
11103 			zval_ptr_dtor_nogc(free_op2);
11104 			HANDLE_EXCEPTION();
11105 		}
11106 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
11107 		zval_ptr_dtor_nogc(free_op2);
11108 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
11109 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
11110 		}
11111 
11112 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11113 	} else {
11114 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11115 	}
11116 }
11117 
11118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11119 {
11120 	USE_OPLINE
11121 	zend_free_op free_op2;
11122 	zval *op1, *op2;
11123 	zend_string *op1_str, *op2_str, *str;
11124 
11125 	SAVE_OPLINE();
11126 	op1 = EX_CONSTANT(opline->op1);
11127 	if (IS_CONST == IS_CONST) {
11128 		op1_str = Z_STR_P(op1);
11129 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11130 		op1_str = zend_string_copy(Z_STR_P(op1));
11131 	} else {
11132 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11133 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
11134 		}
11135 		op1_str = _zval_get_string_func(op1);
11136 	}
11137 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11138 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
11139 		op2_str = Z_STR_P(op2);
11140 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11141 		op2_str = zend_string_copy(Z_STR_P(op2));
11142 	} else {
11143 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11144 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
11145 		}
11146 		op2_str = _zval_get_string_func(op2);
11147 	}
11148 	do {
11149 		if (IS_CONST != IS_CONST) {
11150 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11151 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
11152 					zend_string_addref(op2_str);
11153 				}
11154 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11155 				zend_string_release(op1_str);
11156 				break;
11157 			}
11158 		}
11159 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11160 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11161 				if (IS_CONST == IS_CONST) {
11162 					zend_string_addref(op1_str);
11163 				}
11164 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11165 				zend_string_release(op2_str);
11166 				break;
11167 			}
11168 		}
11169 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11170 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11171 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11172 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11173 		if (IS_CONST != IS_CONST) {
11174 			zend_string_release(op1_str);
11175 		}
11176 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11177 			zend_string_release(op2_str);
11178 		}
11179 	} while (0);
11180 
11181 	zval_ptr_dtor_nogc(free_op2);
11182 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11183 }
11184 
11185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11186 {
11187 	USE_OPLINE
11188 	zval *function_name;
11189 	zend_free_op free_op2;
11190 	zval *object;
11191 	zend_function *fbc;
11192 	zend_class_entry *called_scope;
11193 	zend_object *obj;
11194 	zend_execute_data *call;
11195 	uint32_t call_info;
11196 
11197 	SAVE_OPLINE();
11198 
11199 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11200 
11201 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
11202 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11203 		do {
11204 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11205 				function_name = Z_REFVAL_P(function_name);
11206 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11207 					break;
11208 				}
11209 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11210 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
11211 				if (UNEXPECTED(EG(exception) != NULL)) {
11212 					HANDLE_EXCEPTION();
11213 				}
11214 			}
11215 			zend_throw_error(NULL, "Method name must be a string");
11216 			zval_ptr_dtor_nogc(free_op2);
11217 
11218 			HANDLE_EXCEPTION();
11219 		} while (0);
11220 	}
11221 
11222 	object = EX_CONSTANT(opline->op1);
11223 
11224 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
11225 		zend_throw_error(NULL, "Using $this when not in object context");
11226 		zval_ptr_dtor_nogc(free_op2);
11227 		HANDLE_EXCEPTION();
11228 	}
11229 
11230 	if (IS_CONST != IS_UNUSED) {
11231 		do {
11232 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
11233 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11234 					object = Z_REFVAL_P(object);
11235 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11236 						break;
11237 					}
11238 				}
11239 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11240 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
11241 					if (UNEXPECTED(EG(exception) != NULL)) {
11242 						zval_ptr_dtor_nogc(free_op2);
11243 						HANDLE_EXCEPTION();
11244 					}
11245 				}
11246 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
11247 				zval_ptr_dtor_nogc(free_op2);
11248 
11249 				HANDLE_EXCEPTION();
11250 			}
11251 		} while (0);
11252 	}
11253 
11254 	obj = Z_OBJ_P(object);
11255 	called_scope = obj->ce;
11256 
11257 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
11258 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
11259 	    zend_object *orig_obj = obj;
11260 
11261 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
11262 			zend_throw_error(NULL, "Object does not support method calls");
11263 			zval_ptr_dtor_nogc(free_op2);
11264 
11265 			HANDLE_EXCEPTION();
11266 		}
11267 
11268 		/* First, locate the function. */
11269 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
11270 		if (UNEXPECTED(fbc == NULL)) {
11271 			if (EXPECTED(!EG(exception))) {
11272 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
11273 			}
11274 			zval_ptr_dtor_nogc(free_op2);
11275 
11276 			HANDLE_EXCEPTION();
11277 		}
11278 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11279 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
11280 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11281 		    EXPECTED(obj == orig_obj)) {
11282 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
11283 		}
11284 	}
11285 
11286 	call_info = ZEND_CALL_NESTED_FUNCTION;
11287 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
11288 		obj = NULL;
11289 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
11290 		/* CV may be changed indirectly (e.g. when it's a reference) */
11291 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
11292 		GC_REFCOUNT(obj)++; /* For $this pointer */
11293 	}
11294 
11295 	zval_ptr_dtor_nogc(free_op2);
11296 
11297 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
11298 		HANDLE_EXCEPTION();
11299 	}
11300 
11301 	call = zend_vm_stack_push_call_frame(call_info,
11302 		fbc, opline->extended_value, called_scope, obj);
11303 	call->prev_execute_data = EX(call);
11304 	EX(call) = call;
11305 
11306 	ZEND_VM_NEXT_OPCODE();
11307 }
11308 
11309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11310 {
11311 	USE_OPLINE
11312 	zval *function_name;
11313 	zend_class_entry *ce;
11314 	zend_object *object;
11315 	zend_function *fbc;
11316 	zend_execute_data *call;
11317 
11318 	SAVE_OPLINE();
11319 
11320 	if (IS_CONST == IS_CONST) {
11321 		/* no function found. try a static method in class */
11322 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
11323 		if (UNEXPECTED(ce == NULL)) {
11324 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
11325 			if (UNEXPECTED(ce == NULL)) {
11326 				if (UNEXPECTED(EG(exception) != NULL)) {
11327 					HANDLE_EXCEPTION();
11328 				}
11329 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
11330 				HANDLE_EXCEPTION();
11331 			}
11332 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
11333 		}
11334 	} else {
11335 		ce = Z_CE_P(EX_VAR(opline->op1.var));
11336 	}
11337 
11338 	if (IS_CONST == IS_CONST &&
11339 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
11340 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
11341 		/* nothing to do */
11342 	} else if (IS_CONST != IS_CONST &&
11343 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
11344 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
11345 		/* do nothing */
11346 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
11347 		zend_free_op free_op2;
11348 
11349 		function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11350 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11351 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11352 				do {
11353 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
11354 						function_name = Z_REFVAL_P(function_name);
11355 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11356 							break;
11357 						}
11358 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11359 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
11360 						if (UNEXPECTED(EG(exception) != NULL)) {
11361 							HANDLE_EXCEPTION();
11362 						}
11363 					}
11364 					zend_throw_error(NULL, "Function name must be a string");
11365 					zval_ptr_dtor_nogc(free_op2);
11366 					HANDLE_EXCEPTION();
11367 				} while (0);
11368  			}
11369 		}
11370 
11371 		if (ce->get_static_method) {
11372 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
11373 		} else {
11374 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
11375 		}
11376 		if (UNEXPECTED(fbc == NULL)) {
11377 			if (EXPECTED(!EG(exception))) {
11378 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
11379 			}
11380 			zval_ptr_dtor_nogc(free_op2);
11381 			HANDLE_EXCEPTION();
11382 		}
11383 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11384 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
11385 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
11386 			if (IS_CONST == IS_CONST) {
11387 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
11388 			} else {
11389 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
11390 			}
11391 		}
11392 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11393 			zval_ptr_dtor_nogc(free_op2);
11394 		}
11395 	} else {
11396 		if (UNEXPECTED(ce->constructor == NULL)) {
11397 			zend_throw_error(NULL, "Cannot call constructor");
11398 			HANDLE_EXCEPTION();
11399 		}
11400 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
11401 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
11402 			HANDLE_EXCEPTION();
11403 		}
11404 		fbc = ce->constructor;
11405 	}
11406 
11407 	object = NULL;
11408 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
11409 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
11410 			object = Z_OBJ(EX(This));
11411 			ce = object->ce;
11412 		} else {
11413 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
11414 				/* Allowed for PHP 4 compatibility. */
11415 				zend_error(
11416 					E_DEPRECATED,
11417 					"Non-static method %s::%s() should not be called statically",
11418 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
11419 				if (UNEXPECTED(EG(exception) != NULL)) {
11420 					HANDLE_EXCEPTION();
11421 				}
11422 			} else {
11423 				/* An internal function assumes $this is present and won't check that.
11424 				 * So PHP would crash by allowing the call. */
11425 				zend_throw_error(
11426 					zend_ce_error,
11427 					"Non-static method %s::%s() cannot be called statically",
11428 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
11429 				HANDLE_EXCEPTION();
11430 			}
11431 		}
11432 	}
11433 
11434 	if (IS_CONST != IS_CONST) {
11435 		/* previous opcode is ZEND_FETCH_CLASS */
11436 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
11437 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
11438 			ce = EX(called_scope);
11439 		}
11440 	}
11441 
11442 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
11443 		fbc, opline->extended_value, ce, object);
11444 	call->prev_execute_data = EX(call);
11445 	EX(call) = call;
11446 
11447 	ZEND_VM_NEXT_OPCODE();
11448 }
11449 
11450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11451 {
11452 	USE_OPLINE
11453 	zend_free_op free_op2;
11454 	zval *function_name;
11455 	zend_fcall_info_cache fcc;
11456 	char *error = NULL;
11457 	zend_function *func;
11458 	zend_class_entry *called_scope;
11459 	zend_object *object;
11460 	zend_execute_data *call;
11461 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
11462 
11463 	SAVE_OPLINE();
11464 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11465 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
11466 		func = fcc.function_handler;
11467 		called_scope = fcc.called_scope;
11468 		object = fcc.object;
11469 		if (error) {
11470 			efree(error);
11471 			/* This is the only soft error is_callable() can generate */
11472 			zend_error(E_DEPRECATED,
11473 				"Non-static method %s::%s() should not be called statically",
11474 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
11475 			if (UNEXPECTED(EG(exception) != NULL)) {
11476 				zval_ptr_dtor_nogc(free_op2);
11477 				HANDLE_EXCEPTION();
11478 			}
11479 		}
11480 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
11481 			/* Delay closure destruction until its invocation */
11482 			if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) {
11483 				ZVAL_DEREF(function_name);
11484 			}
11485 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
11486 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
11487 			call_info |= ZEND_CALL_CLOSURE;
11488 		}
11489 		if (object) {
11490 			call_info |= ZEND_CALL_RELEASE_THIS;
11491 			GC_REFCOUNT(object)++; /* For $this pointer */
11492 		}
11493 
11494 		zval_ptr_dtor_nogc(free_op2);
11495 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
11496 			if (call_info & ZEND_CALL_CLOSURE) {
11497 				zend_object_release((zend_object*)func->common.prototype);
11498 			}
11499 			if (call_info & ZEND_CALL_RELEASE_THIS) {
11500 				zend_object_release(object);
11501 			}
11502 			HANDLE_EXCEPTION();
11503 		}
11504 	} else {
11505 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(EX_CONSTANT(opline->op1)), error);
11506 		efree(error);
11507 		zval_ptr_dtor_nogc(free_op2);
11508 		if (UNEXPECTED(EG(exception))) {
11509 			HANDLE_EXCEPTION();
11510 		}
11511 		func = (zend_function*)&zend_pass_function;
11512 		called_scope = NULL;
11513 		object = NULL;
11514 	}
11515 
11516 	call = zend_vm_stack_push_call_frame(call_info,
11517 		func, opline->extended_value, called_scope, object);
11518 	call->prev_execute_data = EX(call);
11519 	EX(call) = call;
11520 
11521 	ZEND_VM_NEXT_OPCODE();
11522 }
11523 
11524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11525 {
11526 	USE_OPLINE
11527 	zend_free_op free_op2;
11528 	zval *op1, *op2, *result;
11529 
11530 	op1 = EX_CONSTANT(opline->op1);
11531 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11532 	do {
11533 		int result;
11534 
11535 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
11536 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
11537 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
11538 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
11539 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
11540 			} else {
11541 				break;
11542 			}
11543 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
11544 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
11545 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
11546 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
11547 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
11548 			} else {
11549 				break;
11550 			}
11551 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11552 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11553 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
11554 					result = 1;
11555 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
11556 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
11557 						result = 0;
11558 					} else {
11559 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
11560 					}
11561 				} else {
11562 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
11563 				}
11564 				zval_ptr_dtor_nogc(free_op2);
11565 			} else {
11566 				break;
11567 			}
11568 		} else {
11569 			break;
11570 		}
11571 		ZEND_VM_SMART_BRANCH(result, 0);
11572 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
11573 		ZEND_VM_NEXT_OPCODE();
11574 	} while (0);
11575 
11576 	SAVE_OPLINE();
11577 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11578 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
11579 	} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
11580 		/* Don't keep lock on reference, lock the value instead */
11581 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
11582 			ZVAL_UNREF(op1);
11583 		} else {
11584 			Z_DELREF_P(op1);
11585 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
11586 		}
11587 	}
11588 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11589 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
11590 	}
11591 	result = EX_VAR(opline->result.var);
11592 	compare_function(result, op1, op2);
11593 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
11594 	zval_ptr_dtor_nogc(free_op2);
11595 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11596 }
11597 
11598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11599 {
11600 	USE_OPLINE
11601 
11602 	zval *expr_ptr, new_expr;
11603 
11604 	SAVE_OPLINE();
11605 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
11606 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
11607 		expr_ptr = NULL;
11608 		if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
11609 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
11610 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
11611 			HANDLE_EXCEPTION();
11612 		}
11613 		ZVAL_MAKE_REF(expr_ptr);
11614 		Z_ADDREF_P(expr_ptr);
11615 
11616 	} else {
11617 		expr_ptr = EX_CONSTANT(opline->op1);
11618 		if (IS_CONST == IS_TMP_VAR) {
11619 			/* pass */
11620 		} else if (IS_CONST == IS_CONST) {
11621 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
11622 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
11623 				zval_copy_ctor_func(&new_expr);
11624 				expr_ptr = &new_expr;
11625 			}
11626 		} else if (IS_CONST == IS_CV) {
11627 			ZVAL_DEREF(expr_ptr);
11628 			if (Z_REFCOUNTED_P(expr_ptr)) {
11629 				Z_ADDREF_P(expr_ptr);
11630 			}
11631 		} else /* if (IS_CONST == IS_VAR) */ {
11632 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
11633 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
11634 
11635 				expr_ptr = Z_REFVAL_P(expr_ptr);
11636 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
11637 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
11638 					expr_ptr = &new_expr;
11639 					efree_size(ref, sizeof(zend_reference));
11640 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
11641 					Z_ADDREF_P(expr_ptr);
11642 				}
11643 			}
11644 		}
11645 	}
11646 
11647 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
11648 		zend_free_op free_op2;
11649 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11650 		zend_string *str;
11651 		zend_ulong hval;
11652 
11653 add_again:
11654 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11655 			str = Z_STR_P(offset);
11656 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11657 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11658 					goto num_index;
11659 				}
11660 			}
11661 str_index:
11662 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
11663 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11664 			hval = Z_LVAL_P(offset);
11665 num_index:
11666 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
11667 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
11668 			offset = Z_REFVAL_P(offset);
11669 			goto add_again;
11670 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11671 			str = ZSTR_EMPTY_ALLOC();
11672 			goto str_index;
11673 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11674 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
11675 			goto num_index;
11676 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11677 			hval = 0;
11678 			goto num_index;
11679 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11680 			hval = 1;
11681 			goto num_index;
11682 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11683 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11684 			str = ZSTR_EMPTY_ALLOC();
11685 			goto str_index;
11686 		} else {
11687 			zend_error(E_WARNING, "Illegal offset type");
11688 			zval_ptr_dtor(expr_ptr);
11689 		}
11690 		zval_ptr_dtor_nogc(free_op2);
11691 	} else {
11692 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
11693 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
11694 			zval_ptr_dtor(expr_ptr);
11695 		}
11696 	}
11697 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11698 }
11699 
11700 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11701 {
11702 	zval *array;
11703 	uint32_t size;
11704 	USE_OPLINE
11705 
11706 	array = EX_VAR(opline->result.var);
11707 	if (IS_CONST != IS_UNUSED) {
11708 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
11709 	} else {
11710 		size = 0;
11711 	}
11712 	ZVAL_NEW_ARR(array);
11713 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
11714 
11715 	if (IS_CONST != IS_UNUSED) {
11716 		/* Explicitly initialize array as not-packed if flag is set */
11717 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
11718 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
11719 		}
11720 	}
11721 
11722 	if (IS_CONST == IS_UNUSED) {
11723 		ZEND_VM_NEXT_OPCODE();
11724 #if 0 || (IS_CONST != IS_UNUSED)
11725 	} else {
11726 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11727 #endif
11728 	}
11729 }
11730 
11731 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11732 {
11733 	USE_OPLINE
11734 	zend_free_op free_op2;
11735 	zval *container;
11736 	int result;
11737 	zend_ulong hval;
11738 	zval *offset;
11739 
11740 	SAVE_OPLINE();
11741 	container = EX_CONSTANT(opline->op1);
11742 
11743 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
11744 		zend_throw_error(NULL, "Using $this when not in object context");
11745 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11746 		HANDLE_EXCEPTION();
11747 	}
11748 
11749 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11750 
11751 	if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11752 		HashTable *ht;
11753 		zval *value;
11754 		zend_string *str;
11755 
11756 isset_dim_obj_array:
11757 		ht = Z_ARRVAL_P(container);
11758 isset_again:
11759 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11760 			str = Z_STR_P(offset);
11761 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11762 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11763 					goto num_index_prop;
11764 				}
11765 			}
11766 str_index_prop:
11767 			value = zend_hash_find_ind(ht, str);
11768 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11769 			hval = Z_LVAL_P(offset);
11770 num_index_prop:
11771 			value = zend_hash_index_find(ht, hval);
11772 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
11773 			offset = Z_REFVAL_P(offset);
11774 			goto isset_again;
11775 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11776 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
11777 			goto num_index_prop;
11778 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11779 			str = ZSTR_EMPTY_ALLOC();
11780 			goto str_index_prop;
11781 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11782 			hval = 0;
11783 			goto num_index_prop;
11784 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11785 			hval = 1;
11786 			goto num_index_prop;
11787 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
11788 			hval = Z_RES_HANDLE_P(offset);
11789 			goto num_index_prop;
11790 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11791 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11792 			str = ZSTR_EMPTY_ALLOC();
11793 			goto str_index_prop;
11794 		} else {
11795 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
11796 			goto isset_not_found;
11797 		}
11798 
11799 		if (opline->extended_value & ZEND_ISSET) {
11800 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
11801 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
11802 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
11803 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
11804 			result = (value == NULL || !i_zend_is_true(value));
11805 		}
11806 		goto isset_dim_obj_exit;
11807 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11808 		container = Z_REFVAL_P(container);
11809 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11810 			goto isset_dim_obj_array;
11811 		}
11812 	}
11813 
11814 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
11815 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11816 	}
11817 
11818 	if (IS_CONST == IS_UNUSED ||
11819 	    (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
11820 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
11821 			result =
11822 				((opline->extended_value & ZEND_ISSET) == 0) ^
11823 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
11824 		} else {
11825 			zend_error(E_NOTICE, "Trying to check element of non-array");
11826 			goto isset_not_found;
11827 		}
11828 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
11829 		zend_long lval;
11830 
11831 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11832 			lval = Z_LVAL_P(offset);
11833 isset_str_offset:
11834 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
11835 				if (opline->extended_value & ZEND_ISSET) {
11836 					result = 1;
11837 				} else {
11838 					result = (Z_STRVAL_P(container)[lval] == '0');
11839 				}
11840 			} else {
11841 				goto isset_not_found;
11842 			}
11843 		} else {
11844 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
11845 				ZVAL_DEREF(offset);
11846 			}
11847 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
11848 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
11849 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
11850 				lval = zval_get_long(offset);
11851 				goto isset_str_offset;
11852 			}
11853 			goto isset_not_found;
11854 		}
11855 	} else {
11856 isset_not_found:
11857 		result = ((opline->extended_value & ZEND_ISSET) == 0);
11858 	}
11859 
11860 isset_dim_obj_exit:
11861 	zval_ptr_dtor_nogc(free_op2);
11862 
11863 	ZEND_VM_SMART_BRANCH(result, 1);
11864 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11865 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11866 }
11867 
11868 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11869 {
11870 	USE_OPLINE
11871 	zend_free_op free_op2;
11872 	zval *container;
11873 	int result;
11874 	zval *offset;
11875 
11876 	SAVE_OPLINE();
11877 	container = EX_CONSTANT(opline->op1);
11878 
11879 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
11880 		zend_throw_error(NULL, "Using $this when not in object context");
11881 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11882 		HANDLE_EXCEPTION();
11883 	}
11884 
11885 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11886 
11887 	if (IS_CONST == IS_CONST ||
11888 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11889 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11890 			container = Z_REFVAL_P(container);
11891 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11892 				goto isset_no_object;
11893 			}
11894 		} else {
11895 			goto isset_no_object;
11896 		}
11897 	}
11898 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
11899 		zend_error(E_NOTICE, "Trying to check property of non-object");
11900 isset_no_object:
11901 		result = ((opline->extended_value & ZEND_ISSET) == 0);
11902 	} else {
11903 		result =
11904 			((opline->extended_value & ZEND_ISSET) == 0) ^
11905 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
11906 	}
11907 
11908 	zval_ptr_dtor_nogc(free_op2);
11909 
11910 	ZEND_VM_SMART_BRANCH(result, 1);
11911 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11912 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11913 }
11914 
11915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11916 {
11917 	USE_OPLINE
11918 	zval *retval_ptr;
11919 	zend_free_op free_op1;
11920 
11921 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
11922 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
11923 		SAVE_OPLINE();
11924 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
11925 		if (EX(return_value)) {
11926 			ZVAL_NULL(EX(return_value));
11927 		}
11928 	} else if (!EX(return_value)) {
11929 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_TMP_VAR ) {
11930 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
11931 				SAVE_OPLINE();
11932 				zval_dtor_func_for_ptr(Z_COUNTED_P(free_op1));
11933 			}
11934 		}
11935 	} else {
11936 		if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
11937 			ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
11938 			if (IS_TMP_VAR == IS_CONST) {
11939 				if (UNEXPECTED(Z_OPT_COPYABLE_P(EX(return_value)))) {
11940 					zval_copy_ctor_func(EX(return_value));
11941 				}
11942 			}
11943 		} else if (IS_TMP_VAR == IS_CV) {
11944 			ZVAL_DEREF(retval_ptr);
11945 			ZVAL_COPY(EX(return_value), retval_ptr);
11946 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
11947 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
11948 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
11949 
11950 				retval_ptr = Z_REFVAL_P(retval_ptr);
11951 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
11952 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
11953 					efree_size(ref, sizeof(zend_reference));
11954 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
11955 					Z_ADDREF_P(retval_ptr);
11956 				}
11957 			} else {
11958 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
11959 			}
11960 		}
11961 	}
11962 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11963 }
11964 
11965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11966 {
11967 	USE_OPLINE
11968 	zval *retval_ptr;
11969 	zend_free_op free_op1;
11970 
11971 	SAVE_OPLINE();
11972 
11973 	do {
11974 		if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR ||
11975 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
11976 			/* Not supposed to happen, but we'll allow it */
11977 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
11978 
11979 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
11980 			if (!EX(return_value)) {
11981 				if (IS_TMP_VAR == IS_TMP_VAR) {
11982 					zval_ptr_dtor_nogc(free_op1);
11983 				}
11984 			} else {
11985 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
11986 				Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
11987 				if (IS_TMP_VAR != IS_TMP_VAR) {
11988 					zval_opt_copy_ctor_no_imm(EX(return_value));
11989 				}
11990 			}
11991 			break;
11992 		}
11993 
11994 		retval_ptr = NULL;
11995 
11996 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
11997 			zend_throw_error(NULL, "Cannot return string offsets by reference");
11998 			HANDLE_EXCEPTION();
11999 		}
12000 
12001 		if (IS_TMP_VAR == IS_VAR) {
12002 			if (retval_ptr == &EG(uninitialized_zval) ||
12003 			    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
12004 			     !(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF))) {
12005 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
12006 				if (EX(return_value)) {
12007 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
12008 					Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
12009 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
12010 				}
12011 				break;
12012 			}
12013 		}
12014 
12015 		if (EX(return_value)) {
12016 			ZVAL_MAKE_REF(retval_ptr);
12017 			Z_ADDREF_P(retval_ptr);
12018 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
12019 			Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
12020 		}
12021 	} while (0);
12022 
12023 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12024 }
12025 
12026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12027 {
12028 	USE_OPLINE
12029 	zval *retval;
12030 	zend_free_op free_op1;
12031 
12032 	zend_generator *generator = zend_get_running_generator(execute_data);
12033 
12034 	SAVE_OPLINE();
12035 	retval = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12036 
12037 	/* Copy return value into generator->retval */
12038 	if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
12039 		ZVAL_COPY_VALUE(&generator->retval, retval);
12040 		if (IS_TMP_VAR == IS_CONST) {
12041 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->retval))) {
12042 				zval_copy_ctor_func(&generator->retval);
12043 			}
12044 		}
12045 	} else if (IS_TMP_VAR == IS_CV) {
12046 		ZVAL_DEREF(retval);
12047 		ZVAL_COPY(&generator->retval, retval);
12048 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
12049 		if (UNEXPECTED(Z_ISREF_P(retval))) {
12050 			zend_refcounted *ref = Z_COUNTED_P(retval);
12051 
12052 			retval = Z_REFVAL_P(retval);
12053 			ZVAL_COPY_VALUE(&generator->retval, retval);
12054 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
12055 				efree_size(ref, sizeof(zend_reference));
12056 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
12057 				Z_ADDREF_P(retval);
12058 			}
12059 		} else {
12060 			ZVAL_COPY_VALUE(&generator->retval, retval);
12061 		}
12062 	}
12063 
12064 	/* Close the generator to free up resources */
12065 	zend_generator_close(generator, 1);
12066 
12067 	/* Pass execution back to handling code */
12068 	ZEND_VM_RETURN();
12069 }
12070 
12071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12072 {
12073 	USE_OPLINE
12074 	zval *value;
12075 	zend_free_op free_op1;
12076 
12077 	SAVE_OPLINE();
12078 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12079 
12080 	do {
12081 		if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
12082 			if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12083 				value = Z_REFVAL_P(value);
12084 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
12085 					break;
12086 				}
12087 			}
12088 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
12089 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
12090 				if (UNEXPECTED(EG(exception) != NULL)) {
12091 					HANDLE_EXCEPTION();
12092 				}
12093 			}
12094 			zend_throw_error(NULL, "Can only throw objects");
12095 			zval_ptr_dtor_nogc(free_op1);
12096 			HANDLE_EXCEPTION();
12097 		}
12098 	} while (0);
12099 
12100 	zend_exception_save();
12101 	if (IS_TMP_VAR != IS_TMP_VAR) {
12102 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12103 	}
12104 
12105 	zend_throw_exception_object(value);
12106 	zend_exception_restore();
12107 
12108 	HANDLE_EXCEPTION();
12109 }
12110 
12111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12112 {
12113 	USE_OPLINE
12114 	zval *value, *arg;
12115 	zend_free_op free_op1;
12116 
12117 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12118 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12119 	ZVAL_COPY_VALUE(arg, value);
12120 	if (IS_TMP_VAR == IS_CONST) {
12121 		if (UNEXPECTED(Z_OPT_COPYABLE_P(arg))) {
12122 			zval_copy_ctor_func(arg);
12123 		}
12124 	}
12125 	ZEND_VM_NEXT_OPCODE();
12126 }
12127 
12128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12129 {
12130 	USE_OPLINE
12131 	zval *value, *arg;
12132 	zend_free_op free_op1;
12133 	uint32_t arg_num = opline->op2.num;
12134 
12135 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
12136 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12137 			goto send_val_by_ref;
12138 		}
12139 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12140 send_val_by_ref:
12141 		SAVE_OPLINE();
12142 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
12143 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
12144 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12145 		ZVAL_UNDEF(arg);
12146 		HANDLE_EXCEPTION();
12147 	}
12148 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12149 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12150 	ZVAL_COPY_VALUE(arg, value);
12151 	if (IS_TMP_VAR == IS_CONST) {
12152 		if (UNEXPECTED(Z_OPT_COPYABLE_P(arg))) {
12153 			zval_copy_ctor_func(arg);
12154 		}
12155 	}
12156 	ZEND_VM_NEXT_OPCODE();
12157 }
12158 
12159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12160 {
12161 	USE_OPLINE
12162 	zend_free_op free_op1;
12163 	zval *expr;
12164 	zval *result = EX_VAR(opline->result.var);
12165 
12166 	SAVE_OPLINE();
12167 	expr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12168 
12169 	switch (opline->extended_value) {
12170 		case IS_NULL:
12171 			/* This code is taken from convert_to_null. However, it does not seems very useful,
12172 			 * because a conversion to null always results in the same value. This could only
12173 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
12174 #if 0
12175 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12176 				ZVAL_DEREF(expr);
12177 			}
12178 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
12179 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
12180 					break;
12181 				}
12182 			}
12183 #endif
12184 
12185 			ZVAL_NULL(result);
12186 			break;
12187 		case _IS_BOOL:
12188 			ZVAL_BOOL(result, zend_is_true(expr));
12189 			break;
12190 		case IS_LONG:
12191 			ZVAL_LONG(result, zval_get_long(expr));
12192 			break;
12193 		case IS_DOUBLE:
12194 			ZVAL_DOUBLE(result, zval_get_double(expr));
12195 			break;
12196 		case IS_STRING:
12197 			ZVAL_STR(result, zval_get_string(expr));
12198 			break;
12199 		default:
12200 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
12201 				ZVAL_DEREF(expr);
12202 			}
12203 			/* If value is already of correct type, return it directly */
12204 			if (Z_TYPE_P(expr) == opline->extended_value) {
12205 				ZVAL_COPY_VALUE(result, expr);
12206 				if (IS_TMP_VAR == IS_CONST) {
12207 					if (UNEXPECTED(Z_OPT_COPYABLE_P(result))) {
12208 						zval_copy_ctor_func(result);
12209 					}
12210 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
12211 					if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
12212 				}
12213 
12214 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12215 			}
12216 
12217 			if (opline->extended_value == IS_ARRAY) {
12218 				if (Z_TYPE_P(expr) != IS_OBJECT) {
12219 					ZVAL_NEW_ARR(result);
12220 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
12221 					if (Z_TYPE_P(expr) != IS_NULL) {
12222 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
12223 						if (IS_TMP_VAR == IS_CONST) {
12224 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
12225 								zval_copy_ctor_func(expr);
12226 							}
12227 						} else {
12228 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
12229 						}
12230 					}
12231 				} else {
12232 					ZVAL_COPY_VALUE(result, expr);
12233 					Z_ADDREF_P(result);
12234 					convert_to_array(result);
12235 				}
12236 			} else {
12237 				if (Z_TYPE_P(expr) != IS_ARRAY) {
12238 					object_init(result);
12239 					if (Z_TYPE_P(expr) != IS_NULL) {
12240 						expr = zend_hash_str_add_new(Z_OBJPROP_P(result), "scalar", sizeof("scalar")-1, expr);
12241 						if (IS_TMP_VAR == IS_CONST) {
12242 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
12243 								zval_copy_ctor_func(expr);
12244 							}
12245 						} else {
12246 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
12247 						}
12248 					}
12249 				} else {
12250 					ZVAL_COPY(result, expr);
12251 					convert_to_object(result);
12252 				}
12253 			}
12254 	}
12255 
12256 	zval_ptr_dtor_nogc(free_op1);
12257 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12258 }
12259 
12260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12261 {
12262 	USE_OPLINE
12263 	zend_free_op free_op1;
12264 	zval *array_ptr, *result;
12265 	HashTable *fe_ht;
12266 
12267 	SAVE_OPLINE();
12268 
12269 	array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12270 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
12271 		result = EX_VAR(opline->result.var);
12272 		ZVAL_COPY_VALUE(result, array_ptr);
12273 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
12274 			Z_ADDREF_P(array_ptr);
12275 		}
12276 		Z_FE_POS_P(result) = 0;
12277 
12278 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12279 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
12280 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
12281 			HashPosition pos = 0;
12282 			Bucket *p;
12283 
12284 			result = EX_VAR(opline->result.var);
12285 			ZVAL_COPY_VALUE(result, array_ptr);
12286 			if (IS_TMP_VAR != IS_TMP_VAR) {
12287 				Z_ADDREF_P(array_ptr);
12288 			}
12289 			fe_ht = Z_OBJPROP_P(array_ptr);
12290 			pos = 0;
12291 			p = fe_ht->arData;
12292 			while (1) {
12293 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
12294 
12295 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12296 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12297 				}
12298 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
12299 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
12300 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
12301 				    (UNEXPECTED(!p->key) ||
12302 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
12303 					break;
12304 				}
12305 				pos++;
12306 				p++;
12307 			}
12308 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
12309 
12310 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12311 		} else {
12312 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
12313 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
12314 			zend_bool is_empty;
12315 
12316 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
12317 				zval_ptr_dtor_nogc(free_op1);
12318 				if (!EG(exception)) {
12319 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
12320 				}
12321 				zend_throw_exception_internal(NULL);
12322 				HANDLE_EXCEPTION();
12323 			}
12324 
12325 			iter->index = 0;
12326 			if (iter->funcs->rewind) {
12327 				iter->funcs->rewind(iter);
12328 				if (UNEXPECTED(EG(exception) != NULL)) {
12329 					OBJ_RELEASE(&iter->std);
12330 					zval_ptr_dtor_nogc(free_op1);
12331 					HANDLE_EXCEPTION();
12332 				}
12333 			}
12334 
12335 			is_empty = iter->funcs->valid(iter) != SUCCESS;
12336 
12337 			if (UNEXPECTED(EG(exception) != NULL)) {
12338 				OBJ_RELEASE(&iter->std);
12339 				zval_ptr_dtor_nogc(free_op1);
12340 				HANDLE_EXCEPTION();
12341 			}
12342 			iter->index = -1; /* will be set to 0 before using next handler */
12343 
12344 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
12345 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12346 
12347 			zval_ptr_dtor_nogc(free_op1);
12348 			if (is_empty) {
12349 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12350 			} else {
12351 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12352 			}
12353 		}
12354 	} else {
12355 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
12356 		ZVAL_UNDEF(EX_VAR(opline->result.var));
12357 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12358 		zval_ptr_dtor_nogc(free_op1);
12359 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12360 	}
12361 }
12362 
12363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12364 {
12365 	USE_OPLINE
12366 	zend_free_op free_op1;
12367 	zval *array_ptr, *array_ref;
12368 	HashTable *fe_ht;
12369 	HashPosition pos = 0;
12370 	Bucket *p;
12371 
12372 	SAVE_OPLINE();
12373 
12374 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12375 		array_ref = array_ptr = NULL;
12376 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(array_ref == NULL)) {
12377 			zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
12378 			ZVAL_UNDEF(EX_VAR(opline->result.var));
12379 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12380 			HANDLE_EXCEPTION();
12381 		}
12382 		if (Z_ISREF_P(array_ref)) {
12383 			array_ptr = Z_REFVAL_P(array_ref);
12384 		}
12385 	} else {
12386 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12387 	}
12388 
12389 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
12390 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12391 			if (array_ptr == array_ref) {
12392 				ZVAL_NEW_REF(array_ref, array_ref);
12393 				array_ptr = Z_REFVAL_P(array_ref);
12394 			}
12395 			Z_ADDREF_P(array_ref);
12396 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
12397 		} else {
12398 			array_ref = EX_VAR(opline->result.var);
12399 			ZVAL_NEW_REF(array_ref, array_ptr);
12400 			array_ptr = Z_REFVAL_P(array_ref);
12401 		}
12402 		if (IS_TMP_VAR == IS_CONST) {
12403 			zval_copy_ctor_func(array_ptr);
12404 		} else {
12405 			SEPARATE_ARRAY(array_ptr);
12406 		}
12407 		fe_ht = Z_ARRVAL_P(array_ptr);
12408 		p = fe_ht->arData;
12409 		while (1) {
12410 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
12411 
12412 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12413 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12414 			}
12415 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
12416 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
12417 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
12418 				break;
12419 			}
12420 			pos++;
12421 			p++;
12422 		}
12423 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
12424 
12425 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12426 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
12427 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
12428 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12429 				if (array_ptr == array_ref) {
12430 					ZVAL_NEW_REF(array_ref, array_ref);
12431 					array_ptr = Z_REFVAL_P(array_ref);
12432 				}
12433 				Z_ADDREF_P(array_ref);
12434 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
12435 			} else {
12436 				array_ptr = EX_VAR(opline->result.var);
12437 				ZVAL_COPY_VALUE(array_ptr, array_ref);
12438 			}
12439 			fe_ht = Z_OBJPROP_P(array_ptr);
12440 			p = fe_ht->arData;
12441 			while (1) {
12442 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
12443 
12444 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12445 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12446 				}
12447 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
12448 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
12449 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
12450 				    (UNEXPECTED(!p->key) ||
12451 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
12452 					break;
12453 				}
12454 				pos++;
12455 				p++;
12456 			}
12457 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
12458 
12459 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12460 		} else {
12461 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
12462 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
12463 			zend_bool is_empty;
12464 
12465 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
12466 				if (IS_TMP_VAR == IS_VAR) {
12467 
12468 				} else {
12469 					zval_ptr_dtor_nogc(free_op1);
12470 				}
12471 				if (!EG(exception)) {
12472 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
12473 				}
12474 				zend_throw_exception_internal(NULL);
12475 				HANDLE_EXCEPTION();
12476 			}
12477 
12478 			iter->index = 0;
12479 			if (iter->funcs->rewind) {
12480 				iter->funcs->rewind(iter);
12481 				if (UNEXPECTED(EG(exception) != NULL)) {
12482 					OBJ_RELEASE(&iter->std);
12483 					if (IS_TMP_VAR == IS_VAR) {
12484 
12485 					} else {
12486 						zval_ptr_dtor_nogc(free_op1);
12487 					}
12488 					HANDLE_EXCEPTION();
12489 				}
12490 			}
12491 
12492 			is_empty = iter->funcs->valid(iter) != SUCCESS;
12493 
12494 			if (UNEXPECTED(EG(exception) != NULL)) {
12495 				OBJ_RELEASE(&iter->std);
12496 				if (IS_TMP_VAR == IS_VAR) {
12497 
12498 				} else {
12499 					zval_ptr_dtor_nogc(free_op1);
12500 				}
12501 				HANDLE_EXCEPTION();
12502 			}
12503 			iter->index = -1; /* will be set to 0 before using next handler */
12504 
12505 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
12506 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12507 
12508 			if (IS_TMP_VAR == IS_VAR) {
12509 
12510 			} else {
12511 				zval_ptr_dtor_nogc(free_op1);
12512 			}
12513 			if (is_empty) {
12514 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12515 			} else {
12516 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12517 			}
12518 		}
12519 	} else {
12520 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
12521 		ZVAL_UNDEF(EX_VAR(opline->result.var));
12522 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12523 		if (IS_TMP_VAR == IS_VAR) {
12524 
12525 		} else {
12526 			zval_ptr_dtor_nogc(free_op1);
12527 		}
12528 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12529 	}
12530 }
12531 
12532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12533 {
12534 	USE_OPLINE
12535 
12536 	if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) {
12537 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
12538 	}
12539 	ZEND_VM_NEXT_OPCODE();
12540 }
12541 
12542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12543 {
12544 	USE_OPLINE
12545 	zend_free_op free_op1;
12546 	zval *value;
12547 	zval *ref = NULL;
12548 
12549 	SAVE_OPLINE();
12550 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12551 
12552 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
12553 		if (IS_TMP_VAR == IS_VAR) {
12554 			ref = value;
12555 		}
12556 		value = Z_REFVAL_P(value);
12557 	}
12558 	if (i_zend_is_true(value)) {
12559 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
12560 		if (IS_TMP_VAR == IS_CONST) {
12561 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
12562 				zval_copy_ctor_func(EX_VAR(opline->result.var));
12563 			}
12564 		} else if (IS_TMP_VAR == IS_CV) {
12565 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12566 		} else if (IS_TMP_VAR == IS_VAR && ref) {
12567 			zend_reference *r = Z_REF_P(ref);
12568 
12569 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
12570 				efree_size(r, sizeof(zend_reference));
12571 			} else if (Z_OPT_REFCOUNTED_P(value)) {
12572 				Z_ADDREF_P(value);
12573 			}
12574 		}
12575 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12576 	}
12577 
12578 	zval_ptr_dtor_nogc(free_op1);
12579 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12580 }
12581 
12582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12583 {
12584 	USE_OPLINE
12585 	zend_free_op free_op1;
12586 	zval *value;
12587 	zval *ref = NULL;
12588 
12589 	SAVE_OPLINE();
12590 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12591 
12592 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
12593 		if (IS_TMP_VAR == IS_VAR) {
12594 			ref = value;
12595 		}
12596 		value = Z_REFVAL_P(value);
12597 	}
12598 
12599 	if (Z_TYPE_P(value) > IS_NULL) {
12600 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
12601 		if (IS_TMP_VAR == IS_CONST) {
12602 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
12603 				zval_copy_ctor_func(EX_VAR(opline->result.var));
12604 			}
12605 		} else if (IS_TMP_VAR == IS_CV) {
12606 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12607 		} else if (IS_TMP_VAR == IS_VAR && ref) {
12608 			zend_reference *r = Z_REF_P(ref);
12609 
12610 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
12611 				efree_size(r, sizeof(zend_reference));
12612 			} else if (Z_OPT_REFCOUNTED_P(value)) {
12613 				Z_ADDREF_P(value);
12614 			}
12615 		}
12616 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12617 	}
12618 
12619 	zval_ptr_dtor_nogc(free_op1);
12620 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12621 }
12622 
12623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12624 {
12625 	USE_OPLINE
12626 	zend_free_op free_op1;
12627 	zval *value;
12628 	zval *result = EX_VAR(opline->result.var);
12629 
12630 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12631 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
12632 		SAVE_OPLINE();
12633 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
12634 		ZVAL_NULL(result);
12635 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12636 	}
12637 
12638 	if (IS_TMP_VAR == IS_CV) {
12639 		ZVAL_DEREF(value);
12640 		ZVAL_COPY(result, value);
12641 	} else if (IS_TMP_VAR == IS_VAR) {
12642 		if (UNEXPECTED(Z_ISREF_P(value))) {
12643 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
12644 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
12645 				efree_size(Z_REF_P(value), sizeof(zend_reference));
12646 			} else if (Z_OPT_REFCOUNTED_P(result)) {
12647 				Z_ADDREF_P(result);
12648 			}
12649 		} else {
12650 			ZVAL_COPY_VALUE(result, value);
12651 		}
12652 	} else {
12653 		ZVAL_COPY_VALUE(result, value);
12654 		if (IS_TMP_VAR == IS_CONST) {
12655 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
12656 				zval_copy_ctor_func(result);
12657 			}
12658 		}
12659 	}
12660 	ZEND_VM_NEXT_OPCODE();
12661 }
12662 
12663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12664 {
12665 	USE_OPLINE
12666 
12667 	zend_generator *generator = zend_get_running_generator(execute_data);
12668 
12669 	zval *val;
12670 	zend_free_op free_op1;
12671 
12672 	SAVE_OPLINE();
12673 	val = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12674 
12675 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
12676 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
12677 		zval_ptr_dtor_nogc(free_op1);
12678 		HANDLE_EXCEPTION();
12679 	}
12680 
12681 	if (Z_TYPE_P(val) == IS_ARRAY) {
12682 		ZVAL_COPY_VALUE(&generator->values, val);
12683 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
12684 			Z_ADDREF_P(val);
12685 		}
12686 		Z_FE_POS(generator->values) = 0;
12687 
12688 	} else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
12689 		zend_class_entry *ce = Z_OBJCE_P(val);
12690 		if (ce == zend_ce_generator) {
12691 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
12692 
12693 			if (IS_TMP_VAR != IS_TMP_VAR) {
12694 				Z_ADDREF_P(val);
12695 			}
12696 
12697 			if (Z_ISUNDEF(new_gen->retval)) {
12698 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
12699 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
12700 					zval_ptr_dtor(val);
12701 					HANDLE_EXCEPTION();
12702 				} else {
12703 					zend_generator_yield_from(generator, new_gen);
12704 				}
12705 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
12706 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
12707 				zval_ptr_dtor(val);
12708 				HANDLE_EXCEPTION();
12709 			} else {
12710 				if (RETURN_VALUE_USED(opline)) {
12711 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
12712 				}
12713 				ZEND_VM_NEXT_OPCODE();
12714 			}
12715 		} else {
12716 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
12717 			zval_ptr_dtor_nogc(free_op1);
12718 
12719 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
12720 				if (!EG(exception)) {
12721 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
12722 				}
12723 				HANDLE_EXCEPTION();
12724 			}
12725 
12726 			iter->index = 0;
12727 			if (iter->funcs->rewind) {
12728 				iter->funcs->rewind(iter);
12729 				if (UNEXPECTED(EG(exception) != NULL)) {
12730 					OBJ_RELEASE(&iter->std);
12731 					HANDLE_EXCEPTION();
12732 				}
12733 			}
12734 
12735 			ZVAL_OBJ(&generator->values, &iter->std);
12736 		}
12737 	} else {
12738 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
12739 		HANDLE_EXCEPTION();
12740 	}
12741 
12742 	/* This is the default return value
12743 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
12744 	if (RETURN_VALUE_USED(opline)) {
12745 		ZVAL_NULL(EX_VAR(opline->result.var));
12746 	}
12747 
12748 	/* This generator has no send target (though the generator we delegate to might have one) */
12749 	generator->send_target = NULL;
12750 
12751 	/* We increment to the next op, so we are at the correct position when the
12752 	 * generator is resumed. */
12753 	ZEND_VM_INC_OPCODE();
12754 
12755 	/* The GOTO VM uses a local opline variable. We need to set the opline
12756 	 * variable in execute_data so we don't resume at an old position. */
12757 	SAVE_OPLINE();
12758 
12759 	ZEND_VM_RETURN();
12760 }
12761 
12762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12763 {
12764 	USE_OPLINE
12765 	zval *value;
12766 	int result = 0;
12767 	zend_free_op free_op1;
12768 
12769 	SAVE_OPLINE();
12770 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12771 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
12772 		if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
12773 			zend_class_entry *ce = Z_OBJCE_P(value);
12774 
12775 			if (UNEXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
12776 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
12777 				result = 1;
12778 			}
12779 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
12780 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
12781 
12782 			if (EXPECTED(type_name != NULL)) {
12783 				result = 1;
12784 			}
12785 		} else {
12786 			result = 1;
12787 		}
12788 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
12789 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
12790 		result = 1;
12791 	}
12792 	zval_ptr_dtor_nogc(free_op1);
12793 	ZEND_VM_SMART_BRANCH(result, 1);
12794 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12795 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12796 }
12797 
12798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12799 {
12800 	USE_OPLINE
12801 	zend_free_op free_op1;
12802 	zval *op1, *op2;
12803 	int result;
12804 
12805 	SAVE_OPLINE();
12806 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12807 	op2 = EX_CONSTANT(opline->op2);
12808 	result = fast_is_identical_function(op1, op2);
12809 	zval_ptr_dtor_nogc(free_op1);
12810 
12811 	ZEND_VM_SMART_BRANCH(result, 1);
12812 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12814 }
12815 
12816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12817 {
12818 	USE_OPLINE
12819 	zend_free_op free_op1;
12820 	zval *op1, *op2;
12821 	int result;
12822 
12823 	SAVE_OPLINE();
12824 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12825 	op2 = EX_CONSTANT(opline->op2);
12826 	result = fast_is_not_identical_function(op1, op2);
12827 	zval_ptr_dtor_nogc(free_op1);
12828 
12829 	ZEND_VM_SMART_BRANCH(result, 1);
12830 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12831 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12832 }
12833 
12834 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12835 {
12836 	USE_OPLINE
12837 	zval *container;
12838 	zend_free_op free_op1;
12839 
12840 	SAVE_OPLINE();
12841 
12842 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
12843         if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
12844             zend_throw_error(NULL, "Cannot use temporary expression in write context");
12845 
12846 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
12847 			HANDLE_EXCEPTION();
12848         }
12849 		container = NULL;
12850 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
12851 			zend_throw_error(NULL, "Cannot use string offset as an array");
12852 
12853 			HANDLE_EXCEPTION();
12854 		}
12855 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
12856 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
12857 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
12858 		}
12859 
12860 
12861 	} else {
12862 		if (IS_CONST == IS_UNUSED) {
12863 			zend_throw_error(NULL, "Cannot use [] for reading");
12864 
12865 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
12866 			HANDLE_EXCEPTION();
12867 		}
12868 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12869 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
12870 
12871 		zval_ptr_dtor_nogc(free_op1);
12872 	}
12873 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12874 }
12875 
12876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12877 {
12878 	USE_OPLINE
12879 	zend_free_op free_op1;
12880 	zval *container;
12881 
12882 	zval *offset;
12883 
12884 	SAVE_OPLINE();
12885 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12886 
12887 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
12888 		zend_throw_error(NULL, "Using $this when not in object context");
12889 
12890 		HANDLE_EXCEPTION();
12891 	}
12892 
12893 	offset = EX_CONSTANT(opline->op2);
12894 
12895 	if (IS_TMP_VAR == IS_CONST ||
12896 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
12897 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
12898 			container = Z_REFVAL_P(container);
12899 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
12900 				goto fetch_obj_r_no_object;
12901 			}
12902 		} else {
12903 			goto fetch_obj_r_no_object;
12904 		}
12905 	}
12906 
12907 	/* here we are sure we are dealing with an object */
12908 	do {
12909 		zend_object *zobj = Z_OBJ_P(container);
12910 		zval *retval;
12911 
12912 		if (IS_CONST == IS_CONST &&
12913 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
12914 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
12915 
12916 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
12917 				retval = OBJ_PROP(zobj, prop_offset);
12918 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
12919 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
12920 					break;
12921 				}
12922 			} else if (EXPECTED(zobj->properties != NULL)) {
12923 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
12924 				if (EXPECTED(retval)) {
12925 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
12926 					break;
12927 				}
12928 			}
12929 		}
12930 
12931 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
12932 fetch_obj_r_no_object:
12933 			zend_error(E_NOTICE, "Trying to get property of non-object");
12934 			ZVAL_NULL(EX_VAR(opline->result.var));
12935 		} else {
12936 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
12937 
12938 			if (retval != EX_VAR(opline->result.var)) {
12939 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
12940 			}
12941 		}
12942 	} while (0);
12943 
12944 	zval_ptr_dtor_nogc(free_op1);
12945 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12946 }
12947 
12948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12949 {
12950 	USE_OPLINE
12951 	zval *container;
12952 
12953 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
12954 		/* Behave like FETCH_OBJ_W */
12955 		zend_free_op free_op1;
12956 		zval *property;
12957 
12958 		SAVE_OPLINE();
12959 		property = EX_CONSTANT(opline->op2);
12960 		container = NULL;
12961 
12962 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
12963 			zend_throw_error(NULL, "Using $this when not in object context");
12964 
12965 			HANDLE_EXCEPTION();
12966 		}
12967 		if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
12968 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
12969 
12970 
12971 			HANDLE_EXCEPTION();
12972 		}
12973 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
12974 			zend_throw_error(NULL, "Cannot use string offset as an object");
12975 
12976 			HANDLE_EXCEPTION();
12977 		}
12978 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
12979 
12980 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
12981 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
12982 		}
12983 
12984 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12985 	} else {
12986 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12987 	}
12988 }
12989 
12990 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12991 {
12992 	USE_OPLINE
12993 
12994 	zend_string **rope;
12995 	zval *var;
12996 
12997 	/* op1 and result are the same */
12998 	rope = (zend_string**)EX_VAR(opline->op1.var);
12999 	if (IS_CONST == IS_CONST) {
13000 		var = EX_CONSTANT(opline->op2);
13001 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13002 	} else {
13003 		var = EX_CONSTANT(opline->op2);
13004 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
13005 			if (IS_CONST == IS_CV) {
13006 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13007 			} else {
13008 				rope[opline->extended_value] = Z_STR_P(var);
13009 			}
13010 		} else {
13011 			SAVE_OPLINE();
13012 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
13013 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
13014 			}
13015 			rope[opline->extended_value] = _zval_get_string_func(var);
13016 
13017 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13018 		}
13019 	}
13020 	ZEND_VM_NEXT_OPCODE();
13021 }
13022 
13023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13024 {
13025 	USE_OPLINE
13026 
13027 	zend_string **rope;
13028 	zval *var, *ret;
13029 	uint32_t i;
13030 	size_t len = 0;
13031 	char *target;
13032 
13033 	rope = (zend_string**)EX_VAR(opline->op1.var);
13034 	if (IS_CONST == IS_CONST) {
13035 		var = EX_CONSTANT(opline->op2);
13036 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13037 	} else {
13038 		var = EX_CONSTANT(opline->op2);
13039 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
13040 			if (IS_CONST == IS_CV) {
13041 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13042 			} else {
13043 				rope[opline->extended_value] = Z_STR_P(var);
13044 			}
13045 		} else {
13046 			SAVE_OPLINE();
13047 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
13048 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
13049 			}
13050 			rope[opline->extended_value] = _zval_get_string_func(var);
13051 
13052 			if (UNEXPECTED(EG(exception))) {
13053 				for (i = 0; i <= opline->extended_value; i++) {
13054 					zend_string_release(rope[i]);
13055 				}
13056 				HANDLE_EXCEPTION();
13057 			}
13058 		}
13059 	}
13060 	for (i = 0; i <= opline->extended_value; i++) {
13061 		len += ZSTR_LEN(rope[i]);
13062 	}
13063 	ret = EX_VAR(opline->result.var);
13064 	ZVAL_STR(ret, zend_string_alloc(len, 0));
13065 	target = Z_STRVAL_P(ret);
13066 	for (i = 0; i <= opline->extended_value; i++) {
13067 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
13068 		target += ZSTR_LEN(rope[i]);
13069 		zend_string_release(rope[i]);
13070 	}
13071 	*target = '\0';
13072 
13073 	ZEND_VM_NEXT_OPCODE();
13074 }
13075 
13076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13077 {
13078 	USE_OPLINE
13079 	zend_free_op free_op1;
13080 	zval *expr_ptr, new_expr;
13081 
13082 	SAVE_OPLINE();
13083 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
13084 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
13085 		expr_ptr = NULL;
13086 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
13087 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
13088 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
13089 			HANDLE_EXCEPTION();
13090 		}
13091 		ZVAL_MAKE_REF(expr_ptr);
13092 		Z_ADDREF_P(expr_ptr);
13093 
13094 	} else {
13095 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13096 		if (IS_TMP_VAR == IS_TMP_VAR) {
13097 			/* pass */
13098 		} else if (IS_TMP_VAR == IS_CONST) {
13099 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
13100 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
13101 				zval_copy_ctor_func(&new_expr);
13102 				expr_ptr = &new_expr;
13103 			}
13104 		} else if (IS_TMP_VAR == IS_CV) {
13105 			ZVAL_DEREF(expr_ptr);
13106 			if (Z_REFCOUNTED_P(expr_ptr)) {
13107 				Z_ADDREF_P(expr_ptr);
13108 			}
13109 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
13110 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
13111 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
13112 
13113 				expr_ptr = Z_REFVAL_P(expr_ptr);
13114 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
13115 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
13116 					expr_ptr = &new_expr;
13117 					efree_size(ref, sizeof(zend_reference));
13118 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
13119 					Z_ADDREF_P(expr_ptr);
13120 				}
13121 			}
13122 		}
13123 	}
13124 
13125 	if (IS_CONST != IS_UNUSED) {
13126 
13127 		zval *offset = EX_CONSTANT(opline->op2);
13128 		zend_string *str;
13129 		zend_ulong hval;
13130 
13131 add_again:
13132 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
13133 			str = Z_STR_P(offset);
13134 			if (IS_CONST != IS_CONST) {
13135 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
13136 					goto num_index;
13137 				}
13138 			}
13139 str_index:
13140 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
13141 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
13142 			hval = Z_LVAL_P(offset);
13143 num_index:
13144 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
13145 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
13146 			offset = Z_REFVAL_P(offset);
13147 			goto add_again;
13148 		} else if (Z_TYPE_P(offset) == IS_NULL) {
13149 			str = ZSTR_EMPTY_ALLOC();
13150 			goto str_index;
13151 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
13152 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
13153 			goto num_index;
13154 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
13155 			hval = 0;
13156 			goto num_index;
13157 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
13158 			hval = 1;
13159 			goto num_index;
13160 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
13161 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
13162 			str = ZSTR_EMPTY_ALLOC();
13163 			goto str_index;
13164 		} else {
13165 			zend_error(E_WARNING, "Illegal offset type");
13166 			zval_ptr_dtor(expr_ptr);
13167 		}
13168 
13169 	} else {
13170 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
13171 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
13172 			zval_ptr_dtor(expr_ptr);
13173 		}
13174 	}
13175 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13176 }
13177 
13178 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13179 {
13180 	zval *array;
13181 	uint32_t size;
13182 	USE_OPLINE
13183 
13184 	array = EX_VAR(opline->result.var);
13185 	if (IS_TMP_VAR != IS_UNUSED) {
13186 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
13187 	} else {
13188 		size = 0;
13189 	}
13190 	ZVAL_NEW_ARR(array);
13191 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
13192 
13193 	if (IS_TMP_VAR != IS_UNUSED) {
13194 		/* Explicitly initialize array as not-packed if flag is set */
13195 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
13196 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
13197 		}
13198 	}
13199 
13200 	if (IS_TMP_VAR == IS_UNUSED) {
13201 		ZEND_VM_NEXT_OPCODE();
13202 #if 0 || (IS_TMP_VAR != IS_UNUSED)
13203 	} else {
13204 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13205 #endif
13206 	}
13207 }
13208 
13209 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13210 {
13211 	USE_OPLINE
13212 
13213 	zend_generator *generator = zend_get_running_generator(execute_data);
13214 
13215 	SAVE_OPLINE();
13216 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13217 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13218 
13219 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13220 		HANDLE_EXCEPTION();
13221 	}
13222 
13223 	/* Destroy the previously yielded value */
13224 	zval_ptr_dtor(&generator->value);
13225 
13226 	/* Destroy the previously yielded key */
13227 	zval_ptr_dtor(&generator->key);
13228 
13229 	/* Set the new yielded value */
13230 	if (IS_TMP_VAR != IS_UNUSED) {
13231 		zend_free_op free_op1;
13232 
13233 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
13234 			/* Constants and temporary variables aren't yieldable by reference,
13235 			 * but we still allow them with a notice. */
13236 			if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
13237 				zval *value;
13238 
13239 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13240 
13241 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13242 				ZVAL_COPY_VALUE(&generator->value, value);
13243 				if (IS_TMP_VAR == IS_CONST) {
13244 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13245 						zval_copy_ctor_func(&generator->value);
13246 					}
13247 				}
13248 			} else {
13249 				zval *value_ptr = NULL;
13250 
13251 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
13252 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
13253 
13254 					HANDLE_EXCEPTION();
13255 				}
13256 
13257 				/* If a function call result is yielded and the function did
13258 				 * not return by reference we throw a notice. */
13259 				if (IS_TMP_VAR == IS_VAR &&
13260 				    (value_ptr == &EG(uninitialized_zval) ||
13261 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
13262 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
13263 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13264 				} else {
13265 					ZVAL_MAKE_REF(value_ptr);
13266 				}
13267 				ZVAL_COPY(&generator->value, value_ptr);
13268 
13269 			}
13270 		} else {
13271 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13272 
13273 			/* Consts, temporary variables and references need copying */
13274 			if (IS_TMP_VAR == IS_CONST) {
13275 				ZVAL_COPY_VALUE(&generator->value, value);
13276 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13277 					zval_copy_ctor_func(&generator->value);
13278 				}
13279 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
13280 				ZVAL_COPY_VALUE(&generator->value, value);
13281             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
13282 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
13283 
13284 			} else {
13285 				ZVAL_COPY_VALUE(&generator->value, value);
13286 				if (IS_TMP_VAR == IS_CV) {
13287 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
13288 				}
13289 			}
13290 		}
13291 	} else {
13292 		/* If no value was specified yield null */
13293 		ZVAL_NULL(&generator->value);
13294 	}
13295 
13296 	/* Set the new yielded key */
13297 	if (IS_CONST != IS_UNUSED) {
13298 
13299 		zval *key = EX_CONSTANT(opline->op2);
13300 
13301 		/* Consts, temporary variables and references need copying */
13302 		if (IS_CONST == IS_CONST) {
13303 			ZVAL_COPY_VALUE(&generator->key, key);
13304 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
13305 				zval_copy_ctor_func(&generator->key);
13306 			}
13307 		} else if (IS_CONST == IS_TMP_VAR) {
13308 			ZVAL_COPY_VALUE(&generator->key, key);
13309 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
13310 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
13311 
13312 		} else {
13313 			ZVAL_COPY_VALUE(&generator->key, key);
13314 			if (IS_CONST == IS_CV) {
13315 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
13316 			}
13317 		}
13318 
13319 		if (Z_TYPE(generator->key) == IS_LONG
13320 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
13321 		) {
13322 			generator->largest_used_integer_key = Z_LVAL(generator->key);
13323 		}
13324 	} else {
13325 		/* If no key was specified we use auto-increment keys */
13326 		generator->largest_used_integer_key++;
13327 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
13328 	}
13329 
13330 	if (RETURN_VALUE_USED(opline)) {
13331 		/* If the return value of yield is used set the send
13332 		 * target and initialize it to NULL */
13333 		generator->send_target = EX_VAR(opline->result.var);
13334 		ZVAL_NULL(generator->send_target);
13335 	} else {
13336 		generator->send_target = NULL;
13337 	}
13338 
13339 	/* We increment to the next op, so we are at the correct position when the
13340 	 * generator is resumed. */
13341 	ZEND_VM_INC_OPCODE();
13342 
13343 	/* The GOTO VM uses a local opline variable. We need to set the opline
13344 	 * variable in execute_data so we don't resume at an old position. */
13345 	SAVE_OPLINE();
13346 
13347 	ZEND_VM_RETURN();
13348 }
13349 
13350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13351 {
13352 	USE_OPLINE
13353 	zend_free_op free_op1, free_op2;
13354 	zval *op1, *op2;
13355 	int result;
13356 
13357 	SAVE_OPLINE();
13358 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13359 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
13360 	result = fast_is_identical_function(op1, op2);
13361 	zval_ptr_dtor_nogc(free_op1);
13362 	zval_ptr_dtor_nogc(free_op2);
13363 	ZEND_VM_SMART_BRANCH(result, 1);
13364 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13365 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13366 }
13367 
13368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13369 {
13370 	USE_OPLINE
13371 	zend_free_op free_op1, free_op2;
13372 	zval *op1, *op2;
13373 	int result;
13374 
13375 	SAVE_OPLINE();
13376 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13377 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
13378 	result = fast_is_not_identical_function(op1, op2);
13379 	zval_ptr_dtor_nogc(free_op1);
13380 	zval_ptr_dtor_nogc(free_op2);
13381 	ZEND_VM_SMART_BRANCH(result, 1);
13382 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13383 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13384 }
13385 
13386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13387 {
13388 	USE_OPLINE
13389 
13390 	zend_generator *generator = zend_get_running_generator(execute_data);
13391 
13392 	SAVE_OPLINE();
13393 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13394 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13395 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13396 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13397 		HANDLE_EXCEPTION();
13398 	}
13399 
13400 	/* Destroy the previously yielded value */
13401 	zval_ptr_dtor(&generator->value);
13402 
13403 	/* Destroy the previously yielded key */
13404 	zval_ptr_dtor(&generator->key);
13405 
13406 	/* Set the new yielded value */
13407 	if (IS_TMP_VAR != IS_UNUSED) {
13408 		zend_free_op free_op1;
13409 
13410 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
13411 			/* Constants and temporary variables aren't yieldable by reference,
13412 			 * but we still allow them with a notice. */
13413 			if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
13414 				zval *value;
13415 
13416 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13417 
13418 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13419 				ZVAL_COPY_VALUE(&generator->value, value);
13420 				if (IS_TMP_VAR == IS_CONST) {
13421 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13422 						zval_copy_ctor_func(&generator->value);
13423 					}
13424 				}
13425 			} else {
13426 				zval *value_ptr = NULL;
13427 
13428 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
13429 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
13430 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13431 					HANDLE_EXCEPTION();
13432 				}
13433 
13434 				/* If a function call result is yielded and the function did
13435 				 * not return by reference we throw a notice. */
13436 				if (IS_TMP_VAR == IS_VAR &&
13437 				    (value_ptr == &EG(uninitialized_zval) ||
13438 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
13439 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
13440 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13441 				} else {
13442 					ZVAL_MAKE_REF(value_ptr);
13443 				}
13444 				ZVAL_COPY(&generator->value, value_ptr);
13445 
13446 			}
13447 		} else {
13448 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13449 
13450 			/* Consts, temporary variables and references need copying */
13451 			if (IS_TMP_VAR == IS_CONST) {
13452 				ZVAL_COPY_VALUE(&generator->value, value);
13453 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13454 					zval_copy_ctor_func(&generator->value);
13455 				}
13456 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
13457 				ZVAL_COPY_VALUE(&generator->value, value);
13458             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
13459 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
13460 
13461 			} else {
13462 				ZVAL_COPY_VALUE(&generator->value, value);
13463 				if (IS_TMP_VAR == IS_CV) {
13464 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
13465 				}
13466 			}
13467 		}
13468 	} else {
13469 		/* If no value was specified yield null */
13470 		ZVAL_NULL(&generator->value);
13471 	}
13472 
13473 	/* Set the new yielded key */
13474 	if (IS_TMP_VAR != IS_UNUSED) {
13475 		zend_free_op free_op2;
13476 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
13477 
13478 		/* Consts, temporary variables and references need copying */
13479 		if (IS_TMP_VAR == IS_CONST) {
13480 			ZVAL_COPY_VALUE(&generator->key, key);
13481 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
13482 				zval_copy_ctor_func(&generator->key);
13483 			}
13484 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
13485 			ZVAL_COPY_VALUE(&generator->key, key);
13486 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
13487 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
13488 
13489 		} else {
13490 			ZVAL_COPY_VALUE(&generator->key, key);
13491 			if (IS_TMP_VAR == IS_CV) {
13492 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
13493 			}
13494 		}
13495 
13496 		if (Z_TYPE(generator->key) == IS_LONG
13497 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
13498 		) {
13499 			generator->largest_used_integer_key = Z_LVAL(generator->key);
13500 		}
13501 	} else {
13502 		/* If no key was specified we use auto-increment keys */
13503 		generator->largest_used_integer_key++;
13504 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
13505 	}
13506 
13507 	if (RETURN_VALUE_USED(opline)) {
13508 		/* If the return value of yield is used set the send
13509 		 * target and initialize it to NULL */
13510 		generator->send_target = EX_VAR(opline->result.var);
13511 		ZVAL_NULL(generator->send_target);
13512 	} else {
13513 		generator->send_target = NULL;
13514 	}
13515 
13516 	/* We increment to the next op, so we are at the correct position when the
13517 	 * generator is resumed. */
13518 	ZEND_VM_INC_OPCODE();
13519 
13520 	/* The GOTO VM uses a local opline variable. We need to set the opline
13521 	 * variable in execute_data so we don't resume at an old position. */
13522 	SAVE_OPLINE();
13523 
13524 	ZEND_VM_RETURN();
13525 }
13526 
13527 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13528 {
13529 	USE_OPLINE
13530 	zend_free_op free_op1, free_op2;
13531 	zval *op1, *op2;
13532 	int result;
13533 
13534 	SAVE_OPLINE();
13535 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13536 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
13537 	result = fast_is_identical_function(op1, op2);
13538 	zval_ptr_dtor_nogc(free_op1);
13539 	zval_ptr_dtor_nogc(free_op2);
13540 	ZEND_VM_SMART_BRANCH(result, 1);
13541 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13542 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13543 }
13544 
13545 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13546 {
13547 	USE_OPLINE
13548 	zend_free_op free_op1, free_op2;
13549 	zval *op1, *op2;
13550 	int result;
13551 
13552 	SAVE_OPLINE();
13553 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13554 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
13555 	result = fast_is_not_identical_function(op1, op2);
13556 	zval_ptr_dtor_nogc(free_op1);
13557 	zval_ptr_dtor_nogc(free_op2);
13558 	ZEND_VM_SMART_BRANCH(result, 1);
13559 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13560 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13561 }
13562 
13563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13564 {
13565 	USE_OPLINE
13566 
13567 	zend_generator *generator = zend_get_running_generator(execute_data);
13568 
13569 	SAVE_OPLINE();
13570 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13571 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13572 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13573 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13574 		HANDLE_EXCEPTION();
13575 	}
13576 
13577 	/* Destroy the previously yielded value */
13578 	zval_ptr_dtor(&generator->value);
13579 
13580 	/* Destroy the previously yielded key */
13581 	zval_ptr_dtor(&generator->key);
13582 
13583 	/* Set the new yielded value */
13584 	if (IS_TMP_VAR != IS_UNUSED) {
13585 		zend_free_op free_op1;
13586 
13587 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
13588 			/* Constants and temporary variables aren't yieldable by reference,
13589 			 * but we still allow them with a notice. */
13590 			if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
13591 				zval *value;
13592 
13593 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13594 
13595 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13596 				ZVAL_COPY_VALUE(&generator->value, value);
13597 				if (IS_TMP_VAR == IS_CONST) {
13598 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13599 						zval_copy_ctor_func(&generator->value);
13600 					}
13601 				}
13602 			} else {
13603 				zval *value_ptr = NULL;
13604 
13605 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
13606 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
13607 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13608 					HANDLE_EXCEPTION();
13609 				}
13610 
13611 				/* If a function call result is yielded and the function did
13612 				 * not return by reference we throw a notice. */
13613 				if (IS_TMP_VAR == IS_VAR &&
13614 				    (value_ptr == &EG(uninitialized_zval) ||
13615 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
13616 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
13617 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13618 				} else {
13619 					ZVAL_MAKE_REF(value_ptr);
13620 				}
13621 				ZVAL_COPY(&generator->value, value_ptr);
13622 
13623 			}
13624 		} else {
13625 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13626 
13627 			/* Consts, temporary variables and references need copying */
13628 			if (IS_TMP_VAR == IS_CONST) {
13629 				ZVAL_COPY_VALUE(&generator->value, value);
13630 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13631 					zval_copy_ctor_func(&generator->value);
13632 				}
13633 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
13634 				ZVAL_COPY_VALUE(&generator->value, value);
13635             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
13636 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
13637 
13638 			} else {
13639 				ZVAL_COPY_VALUE(&generator->value, value);
13640 				if (IS_TMP_VAR == IS_CV) {
13641 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
13642 				}
13643 			}
13644 		}
13645 	} else {
13646 		/* If no value was specified yield null */
13647 		ZVAL_NULL(&generator->value);
13648 	}
13649 
13650 	/* Set the new yielded key */
13651 	if (IS_VAR != IS_UNUSED) {
13652 		zend_free_op free_op2;
13653 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
13654 
13655 		/* Consts, temporary variables and references need copying */
13656 		if (IS_VAR == IS_CONST) {
13657 			ZVAL_COPY_VALUE(&generator->key, key);
13658 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
13659 				zval_copy_ctor_func(&generator->key);
13660 			}
13661 		} else if (IS_VAR == IS_TMP_VAR) {
13662 			ZVAL_COPY_VALUE(&generator->key, key);
13663 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
13664 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
13665 			zval_ptr_dtor_nogc(free_op2);
13666 		} else {
13667 			ZVAL_COPY_VALUE(&generator->key, key);
13668 			if (IS_VAR == IS_CV) {
13669 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
13670 			}
13671 		}
13672 
13673 		if (Z_TYPE(generator->key) == IS_LONG
13674 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
13675 		) {
13676 			generator->largest_used_integer_key = Z_LVAL(generator->key);
13677 		}
13678 	} else {
13679 		/* If no key was specified we use auto-increment keys */
13680 		generator->largest_used_integer_key++;
13681 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
13682 	}
13683 
13684 	if (RETURN_VALUE_USED(opline)) {
13685 		/* If the return value of yield is used set the send
13686 		 * target and initialize it to NULL */
13687 		generator->send_target = EX_VAR(opline->result.var);
13688 		ZVAL_NULL(generator->send_target);
13689 	} else {
13690 		generator->send_target = NULL;
13691 	}
13692 
13693 	/* We increment to the next op, so we are at the correct position when the
13694 	 * generator is resumed. */
13695 	ZEND_VM_INC_OPCODE();
13696 
13697 	/* The GOTO VM uses a local opline variable. We need to set the opline
13698 	 * variable in execute_data so we don't resume at an old position. */
13699 	SAVE_OPLINE();
13700 
13701 	ZEND_VM_RETURN();
13702 }
13703 
13704 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13705 {
13706 	USE_OPLINE
13707 	zval *container;
13708 	zend_free_op free_op1;
13709 
13710 	SAVE_OPLINE();
13711 
13712 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
13713         if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
13714             zend_throw_error(NULL, "Cannot use temporary expression in write context");
13715 
13716 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13717 			HANDLE_EXCEPTION();
13718         }
13719 		container = NULL;
13720 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
13721 			zend_throw_error(NULL, "Cannot use string offset as an array");
13722 
13723 			HANDLE_EXCEPTION();
13724 		}
13725 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
13726 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
13727 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
13728 		}
13729 
13730 
13731 	} else {
13732 		if (IS_UNUSED == IS_UNUSED) {
13733 			zend_throw_error(NULL, "Cannot use [] for reading");
13734 
13735 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13736 			HANDLE_EXCEPTION();
13737 		}
13738 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13739 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
13740 
13741 		zval_ptr_dtor_nogc(free_op1);
13742 	}
13743 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13744 }
13745 
13746 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13747 {
13748 	USE_OPLINE
13749 
13750 	SAVE_OPLINE();
13751 	if (IS_TMP_VAR == IS_UNUSED) {
13752 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
13753 	} else {
13754 /* prevents "undefined variable opline" errors */
13755 #if 0 || (IS_TMP_VAR != IS_UNUSED)
13756 		zval *retval_ref, *retval_ptr;
13757 		zend_free_op free_op1;
13758 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
13759 
13760 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13761 
13762 		if (IS_TMP_VAR == IS_CONST) {
13763 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
13764 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
13765 		} else if (IS_TMP_VAR == IS_VAR) {
13766 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
13767 				retval_ptr = Z_INDIRECT_P(retval_ptr);
13768 			}
13769 			ZVAL_DEREF(retval_ptr);
13770 		} else if (IS_TMP_VAR == IS_CV) {
13771 			ZVAL_DEREF(retval_ptr);
13772 		}
13773 
13774 		if (UNEXPECTED(!ret_info->class_name
13775 			&& ret_info->type_hint != IS_CALLABLE
13776 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
13777 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
13778 			&& retval_ref != retval_ptr)
13779 		) {
13780 			/* A cast might happen - unwrap the reference if this is a by-value return */
13781 			if (Z_REFCOUNT_P(retval_ref) == 1) {
13782 				ZVAL_UNREF(retval_ref);
13783 			} else {
13784 				Z_DELREF_P(retval_ref);
13785 				ZVAL_COPY(retval_ref, retval_ptr);
13786 			}
13787 			retval_ptr = retval_ref;
13788 		}
13789 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
13790 
13791 		if (UNEXPECTED(EG(exception) != NULL)) {
13792 			if (IS_TMP_VAR == IS_CONST) {
13793 				zval_ptr_dtor_nogc(retval_ptr);
13794 			} else {
13795 				zval_ptr_dtor_nogc(free_op1);
13796 			}
13797 		}
13798 #endif
13799 	}
13800 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13801 }
13802 
13803 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13804 {
13805 	USE_OPLINE
13806 	zend_free_op free_op1;
13807 	zval *expr_ptr, new_expr;
13808 
13809 	SAVE_OPLINE();
13810 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
13811 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
13812 		expr_ptr = NULL;
13813 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
13814 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
13815 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
13816 			HANDLE_EXCEPTION();
13817 		}
13818 		ZVAL_MAKE_REF(expr_ptr);
13819 		Z_ADDREF_P(expr_ptr);
13820 
13821 	} else {
13822 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13823 		if (IS_TMP_VAR == IS_TMP_VAR) {
13824 			/* pass */
13825 		} else if (IS_TMP_VAR == IS_CONST) {
13826 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
13827 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
13828 				zval_copy_ctor_func(&new_expr);
13829 				expr_ptr = &new_expr;
13830 			}
13831 		} else if (IS_TMP_VAR == IS_CV) {
13832 			ZVAL_DEREF(expr_ptr);
13833 			if (Z_REFCOUNTED_P(expr_ptr)) {
13834 				Z_ADDREF_P(expr_ptr);
13835 			}
13836 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
13837 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
13838 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
13839 
13840 				expr_ptr = Z_REFVAL_P(expr_ptr);
13841 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
13842 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
13843 					expr_ptr = &new_expr;
13844 					efree_size(ref, sizeof(zend_reference));
13845 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
13846 					Z_ADDREF_P(expr_ptr);
13847 				}
13848 			}
13849 		}
13850 	}
13851 
13852 	if (IS_UNUSED != IS_UNUSED) {
13853 
13854 		zval *offset = NULL;
13855 		zend_string *str;
13856 		zend_ulong hval;
13857 
13858 add_again:
13859 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
13860 			str = Z_STR_P(offset);
13861 			if (IS_UNUSED != IS_CONST) {
13862 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
13863 					goto num_index;
13864 				}
13865 			}
13866 str_index:
13867 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
13868 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
13869 			hval = Z_LVAL_P(offset);
13870 num_index:
13871 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
13872 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
13873 			offset = Z_REFVAL_P(offset);
13874 			goto add_again;
13875 		} else if (Z_TYPE_P(offset) == IS_NULL) {
13876 			str = ZSTR_EMPTY_ALLOC();
13877 			goto str_index;
13878 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
13879 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
13880 			goto num_index;
13881 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
13882 			hval = 0;
13883 			goto num_index;
13884 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
13885 			hval = 1;
13886 			goto num_index;
13887 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
13888 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
13889 			str = ZSTR_EMPTY_ALLOC();
13890 			goto str_index;
13891 		} else {
13892 			zend_error(E_WARNING, "Illegal offset type");
13893 			zval_ptr_dtor(expr_ptr);
13894 		}
13895 
13896 	} else {
13897 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
13898 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
13899 			zval_ptr_dtor(expr_ptr);
13900 		}
13901 	}
13902 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13903 }
13904 
13905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13906 {
13907 	zval *array;
13908 	uint32_t size;
13909 	USE_OPLINE
13910 
13911 	array = EX_VAR(opline->result.var);
13912 	if (IS_TMP_VAR != IS_UNUSED) {
13913 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
13914 	} else {
13915 		size = 0;
13916 	}
13917 	ZVAL_NEW_ARR(array);
13918 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
13919 
13920 	if (IS_TMP_VAR != IS_UNUSED) {
13921 		/* Explicitly initialize array as not-packed if flag is set */
13922 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
13923 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
13924 		}
13925 	}
13926 
13927 	if (IS_TMP_VAR == IS_UNUSED) {
13928 		ZEND_VM_NEXT_OPCODE();
13929 #if 0 || (IS_TMP_VAR != IS_UNUSED)
13930 	} else {
13931 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13932 #endif
13933 	}
13934 }
13935 
13936 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13937 {
13938 	USE_OPLINE
13939 
13940 	zend_generator *generator = zend_get_running_generator(execute_data);
13941 
13942 	SAVE_OPLINE();
13943 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13944 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13945 
13946 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13947 		HANDLE_EXCEPTION();
13948 	}
13949 
13950 	/* Destroy the previously yielded value */
13951 	zval_ptr_dtor(&generator->value);
13952 
13953 	/* Destroy the previously yielded key */
13954 	zval_ptr_dtor(&generator->key);
13955 
13956 	/* Set the new yielded value */
13957 	if (IS_TMP_VAR != IS_UNUSED) {
13958 		zend_free_op free_op1;
13959 
13960 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
13961 			/* Constants and temporary variables aren't yieldable by reference,
13962 			 * but we still allow them with a notice. */
13963 			if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
13964 				zval *value;
13965 
13966 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13967 
13968 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13969 				ZVAL_COPY_VALUE(&generator->value, value);
13970 				if (IS_TMP_VAR == IS_CONST) {
13971 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
13972 						zval_copy_ctor_func(&generator->value);
13973 					}
13974 				}
13975 			} else {
13976 				zval *value_ptr = NULL;
13977 
13978 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
13979 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
13980 
13981 					HANDLE_EXCEPTION();
13982 				}
13983 
13984 				/* If a function call result is yielded and the function did
13985 				 * not return by reference we throw a notice. */
13986 				if (IS_TMP_VAR == IS_VAR &&
13987 				    (value_ptr == &EG(uninitialized_zval) ||
13988 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
13989 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
13990 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13991 				} else {
13992 					ZVAL_MAKE_REF(value_ptr);
13993 				}
13994 				ZVAL_COPY(&generator->value, value_ptr);
13995 
13996 			}
13997 		} else {
13998 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13999 
14000 			/* Consts, temporary variables and references need copying */
14001 			if (IS_TMP_VAR == IS_CONST) {
14002 				ZVAL_COPY_VALUE(&generator->value, value);
14003 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
14004 					zval_copy_ctor_func(&generator->value);
14005 				}
14006 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
14007 				ZVAL_COPY_VALUE(&generator->value, value);
14008             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14009 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
14010 
14011 			} else {
14012 				ZVAL_COPY_VALUE(&generator->value, value);
14013 				if (IS_TMP_VAR == IS_CV) {
14014 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
14015 				}
14016 			}
14017 		}
14018 	} else {
14019 		/* If no value was specified yield null */
14020 		ZVAL_NULL(&generator->value);
14021 	}
14022 
14023 	/* Set the new yielded key */
14024 	if (IS_UNUSED != IS_UNUSED) {
14025 
14026 		zval *key = NULL;
14027 
14028 		/* Consts, temporary variables and references need copying */
14029 		if (IS_UNUSED == IS_CONST) {
14030 			ZVAL_COPY_VALUE(&generator->key, key);
14031 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
14032 				zval_copy_ctor_func(&generator->key);
14033 			}
14034 		} else if (IS_UNUSED == IS_TMP_VAR) {
14035 			ZVAL_COPY_VALUE(&generator->key, key);
14036 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
14037 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
14038 
14039 		} else {
14040 			ZVAL_COPY_VALUE(&generator->key, key);
14041 			if (IS_UNUSED == IS_CV) {
14042 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
14043 			}
14044 		}
14045 
14046 		if (Z_TYPE(generator->key) == IS_LONG
14047 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
14048 		) {
14049 			generator->largest_used_integer_key = Z_LVAL(generator->key);
14050 		}
14051 	} else {
14052 		/* If no key was specified we use auto-increment keys */
14053 		generator->largest_used_integer_key++;
14054 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
14055 	}
14056 
14057 	if (RETURN_VALUE_USED(opline)) {
14058 		/* If the return value of yield is used set the send
14059 		 * target and initialize it to NULL */
14060 		generator->send_target = EX_VAR(opline->result.var);
14061 		ZVAL_NULL(generator->send_target);
14062 	} else {
14063 		generator->send_target = NULL;
14064 	}
14065 
14066 	/* We increment to the next op, so we are at the correct position when the
14067 	 * generator is resumed. */
14068 	ZEND_VM_INC_OPCODE();
14069 
14070 	/* The GOTO VM uses a local opline variable. We need to set the opline
14071 	 * variable in execute_data so we don't resume at an old position. */
14072 	SAVE_OPLINE();
14073 
14074 	ZEND_VM_RETURN();
14075 }
14076 
14077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14078 {
14079 	USE_OPLINE
14080 	zend_free_op free_op1;
14081 	zval *op1, *op2;
14082 	int result;
14083 
14084 	SAVE_OPLINE();
14085 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14086 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
14087 	result = fast_is_identical_function(op1, op2);
14088 	zval_ptr_dtor_nogc(free_op1);
14089 
14090 	ZEND_VM_SMART_BRANCH(result, 1);
14091 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14092 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14093 }
14094 
14095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14096 {
14097 	USE_OPLINE
14098 	zend_free_op free_op1;
14099 	zval *op1, *op2;
14100 	int result;
14101 
14102 	SAVE_OPLINE();
14103 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14104 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
14105 	result = fast_is_not_identical_function(op1, op2);
14106 	zval_ptr_dtor_nogc(free_op1);
14107 
14108 	ZEND_VM_SMART_BRANCH(result, 1);
14109 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14110 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14111 }
14112 
14113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14114 {
14115 	USE_OPLINE
14116 	zval *container;
14117 	zend_free_op free_op1;
14118 
14119 	SAVE_OPLINE();
14120 
14121 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14122         if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
14123             zend_throw_error(NULL, "Cannot use temporary expression in write context");
14124 
14125 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14126 			HANDLE_EXCEPTION();
14127         }
14128 		container = NULL;
14129 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
14130 			zend_throw_error(NULL, "Cannot use string offset as an array");
14131 
14132 			HANDLE_EXCEPTION();
14133 		}
14134 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
14135 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14136 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
14137 		}
14138 
14139 
14140 	} else {
14141 		if (IS_CV == IS_UNUSED) {
14142 			zend_throw_error(NULL, "Cannot use [] for reading");
14143 
14144 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14145 			HANDLE_EXCEPTION();
14146 		}
14147 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14148 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
14149 
14150 		zval_ptr_dtor_nogc(free_op1);
14151 	}
14152 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14153 }
14154 
14155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14156 {
14157 	USE_OPLINE
14158 	zend_free_op free_op1;
14159 	zval *container;
14160 
14161 	zval *offset;
14162 
14163 	SAVE_OPLINE();
14164 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14165 
14166 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
14167 		zend_throw_error(NULL, "Using $this when not in object context");
14168 
14169 		HANDLE_EXCEPTION();
14170 	}
14171 
14172 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14173 
14174 	if (IS_TMP_VAR == IS_CONST ||
14175 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
14176 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
14177 			container = Z_REFVAL_P(container);
14178 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
14179 				goto fetch_obj_r_no_object;
14180 			}
14181 		} else {
14182 			goto fetch_obj_r_no_object;
14183 		}
14184 	}
14185 
14186 	/* here we are sure we are dealing with an object */
14187 	do {
14188 		zend_object *zobj = Z_OBJ_P(container);
14189 		zval *retval;
14190 
14191 		if (IS_CV == IS_CONST &&
14192 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
14193 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
14194 
14195 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
14196 				retval = OBJ_PROP(zobj, prop_offset);
14197 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
14198 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
14199 					break;
14200 				}
14201 			} else if (EXPECTED(zobj->properties != NULL)) {
14202 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
14203 				if (EXPECTED(retval)) {
14204 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
14205 					break;
14206 				}
14207 			}
14208 		}
14209 
14210 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
14211 fetch_obj_r_no_object:
14212 			zend_error(E_NOTICE, "Trying to get property of non-object");
14213 			ZVAL_NULL(EX_VAR(opline->result.var));
14214 		} else {
14215 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
14216 
14217 			if (retval != EX_VAR(opline->result.var)) {
14218 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
14219 			}
14220 		}
14221 	} while (0);
14222 
14223 	zval_ptr_dtor_nogc(free_op1);
14224 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14225 }
14226 
14227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14228 {
14229 	USE_OPLINE
14230 	zval *container;
14231 
14232 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14233 		/* Behave like FETCH_OBJ_W */
14234 		zend_free_op free_op1;
14235 		zval *property;
14236 
14237 		SAVE_OPLINE();
14238 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14239 		container = NULL;
14240 
14241 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
14242 			zend_throw_error(NULL, "Using $this when not in object context");
14243 
14244 			HANDLE_EXCEPTION();
14245 		}
14246 		if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
14247 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
14248 
14249 
14250 			HANDLE_EXCEPTION();
14251 		}
14252 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
14253 			zend_throw_error(NULL, "Cannot use string offset as an object");
14254 
14255 			HANDLE_EXCEPTION();
14256 		}
14257 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
14258 
14259 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14260 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
14261 		}
14262 
14263 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14264 	} else {
14265 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14266 	}
14267 }
14268 
14269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14270 {
14271 	USE_OPLINE
14272 
14273 	zend_string **rope;
14274 	zval *var;
14275 
14276 	/* op1 and result are the same */
14277 	rope = (zend_string**)EX_VAR(opline->op1.var);
14278 	if (IS_CV == IS_CONST) {
14279 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14280 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14281 	} else {
14282 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14283 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14284 			if (IS_CV == IS_CV) {
14285 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14286 			} else {
14287 				rope[opline->extended_value] = Z_STR_P(var);
14288 			}
14289 		} else {
14290 			SAVE_OPLINE();
14291 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14292 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14293 			}
14294 			rope[opline->extended_value] = _zval_get_string_func(var);
14295 
14296 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14297 		}
14298 	}
14299 	ZEND_VM_NEXT_OPCODE();
14300 }
14301 
14302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14303 {
14304 	USE_OPLINE
14305 
14306 	zend_string **rope;
14307 	zval *var, *ret;
14308 	uint32_t i;
14309 	size_t len = 0;
14310 	char *target;
14311 
14312 	rope = (zend_string**)EX_VAR(opline->op1.var);
14313 	if (IS_CV == IS_CONST) {
14314 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14315 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14316 	} else {
14317 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14318 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14319 			if (IS_CV == IS_CV) {
14320 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14321 			} else {
14322 				rope[opline->extended_value] = Z_STR_P(var);
14323 			}
14324 		} else {
14325 			SAVE_OPLINE();
14326 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14327 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14328 			}
14329 			rope[opline->extended_value] = _zval_get_string_func(var);
14330 
14331 			if (UNEXPECTED(EG(exception))) {
14332 				for (i = 0; i <= opline->extended_value; i++) {
14333 					zend_string_release(rope[i]);
14334 				}
14335 				HANDLE_EXCEPTION();
14336 			}
14337 		}
14338 	}
14339 	for (i = 0; i <= opline->extended_value; i++) {
14340 		len += ZSTR_LEN(rope[i]);
14341 	}
14342 	ret = EX_VAR(opline->result.var);
14343 	ZVAL_STR(ret, zend_string_alloc(len, 0));
14344 	target = Z_STRVAL_P(ret);
14345 	for (i = 0; i <= opline->extended_value; i++) {
14346 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
14347 		target += ZSTR_LEN(rope[i]);
14348 		zend_string_release(rope[i]);
14349 	}
14350 	*target = '\0';
14351 
14352 	ZEND_VM_NEXT_OPCODE();
14353 }
14354 
14355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14356 {
14357 	USE_OPLINE
14358 	zend_free_op free_op1;
14359 	zval *expr_ptr, new_expr;
14360 
14361 	SAVE_OPLINE();
14362 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
14363 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
14364 		expr_ptr = NULL;
14365 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
14366 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
14367 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
14368 			HANDLE_EXCEPTION();
14369 		}
14370 		ZVAL_MAKE_REF(expr_ptr);
14371 		Z_ADDREF_P(expr_ptr);
14372 
14373 	} else {
14374 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14375 		if (IS_TMP_VAR == IS_TMP_VAR) {
14376 			/* pass */
14377 		} else if (IS_TMP_VAR == IS_CONST) {
14378 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
14379 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14380 				zval_copy_ctor_func(&new_expr);
14381 				expr_ptr = &new_expr;
14382 			}
14383 		} else if (IS_TMP_VAR == IS_CV) {
14384 			ZVAL_DEREF(expr_ptr);
14385 			if (Z_REFCOUNTED_P(expr_ptr)) {
14386 				Z_ADDREF_P(expr_ptr);
14387 			}
14388 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
14389 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
14390 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
14391 
14392 				expr_ptr = Z_REFVAL_P(expr_ptr);
14393 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
14394 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14395 					expr_ptr = &new_expr;
14396 					efree_size(ref, sizeof(zend_reference));
14397 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
14398 					Z_ADDREF_P(expr_ptr);
14399 				}
14400 			}
14401 		}
14402 	}
14403 
14404 	if (IS_CV != IS_UNUSED) {
14405 
14406 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14407 		zend_string *str;
14408 		zend_ulong hval;
14409 
14410 add_again:
14411 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
14412 			str = Z_STR_P(offset);
14413 			if (IS_CV != IS_CONST) {
14414 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
14415 					goto num_index;
14416 				}
14417 			}
14418 str_index:
14419 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
14420 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
14421 			hval = Z_LVAL_P(offset);
14422 num_index:
14423 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
14424 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
14425 			offset = Z_REFVAL_P(offset);
14426 			goto add_again;
14427 		} else if (Z_TYPE_P(offset) == IS_NULL) {
14428 			str = ZSTR_EMPTY_ALLOC();
14429 			goto str_index;
14430 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
14431 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
14432 			goto num_index;
14433 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
14434 			hval = 0;
14435 			goto num_index;
14436 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
14437 			hval = 1;
14438 			goto num_index;
14439 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
14440 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
14441 			str = ZSTR_EMPTY_ALLOC();
14442 			goto str_index;
14443 		} else {
14444 			zend_error(E_WARNING, "Illegal offset type");
14445 			zval_ptr_dtor(expr_ptr);
14446 		}
14447 
14448 	} else {
14449 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
14450 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
14451 			zval_ptr_dtor(expr_ptr);
14452 		}
14453 	}
14454 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14455 }
14456 
14457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14458 {
14459 	zval *array;
14460 	uint32_t size;
14461 	USE_OPLINE
14462 
14463 	array = EX_VAR(opline->result.var);
14464 	if (IS_TMP_VAR != IS_UNUSED) {
14465 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
14466 	} else {
14467 		size = 0;
14468 	}
14469 	ZVAL_NEW_ARR(array);
14470 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
14471 
14472 	if (IS_TMP_VAR != IS_UNUSED) {
14473 		/* Explicitly initialize array as not-packed if flag is set */
14474 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
14475 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
14476 		}
14477 	}
14478 
14479 	if (IS_TMP_VAR == IS_UNUSED) {
14480 		ZEND_VM_NEXT_OPCODE();
14481 #if 0 || (IS_TMP_VAR != IS_UNUSED)
14482 	} else {
14483 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14484 #endif
14485 	}
14486 }
14487 
14488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14489 {
14490 	USE_OPLINE
14491 
14492 	zend_generator *generator = zend_get_running_generator(execute_data);
14493 
14494 	SAVE_OPLINE();
14495 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14496 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
14497 
14498 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14499 		HANDLE_EXCEPTION();
14500 	}
14501 
14502 	/* Destroy the previously yielded value */
14503 	zval_ptr_dtor(&generator->value);
14504 
14505 	/* Destroy the previously yielded key */
14506 	zval_ptr_dtor(&generator->key);
14507 
14508 	/* Set the new yielded value */
14509 	if (IS_TMP_VAR != IS_UNUSED) {
14510 		zend_free_op free_op1;
14511 
14512 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
14513 			/* Constants and temporary variables aren't yieldable by reference,
14514 			 * but we still allow them with a notice. */
14515 			if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
14516 				zval *value;
14517 
14518 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14519 
14520 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14521 				ZVAL_COPY_VALUE(&generator->value, value);
14522 				if (IS_TMP_VAR == IS_CONST) {
14523 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
14524 						zval_copy_ctor_func(&generator->value);
14525 					}
14526 				}
14527 			} else {
14528 				zval *value_ptr = NULL;
14529 
14530 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
14531 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
14532 
14533 					HANDLE_EXCEPTION();
14534 				}
14535 
14536 				/* If a function call result is yielded and the function did
14537 				 * not return by reference we throw a notice. */
14538 				if (IS_TMP_VAR == IS_VAR &&
14539 				    (value_ptr == &EG(uninitialized_zval) ||
14540 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
14541 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
14542 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14543 				} else {
14544 					ZVAL_MAKE_REF(value_ptr);
14545 				}
14546 				ZVAL_COPY(&generator->value, value_ptr);
14547 
14548 			}
14549 		} else {
14550 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14551 
14552 			/* Consts, temporary variables and references need copying */
14553 			if (IS_TMP_VAR == IS_CONST) {
14554 				ZVAL_COPY_VALUE(&generator->value, value);
14555 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
14556 					zval_copy_ctor_func(&generator->value);
14557 				}
14558 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
14559 				ZVAL_COPY_VALUE(&generator->value, value);
14560             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14561 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
14562 
14563 			} else {
14564 				ZVAL_COPY_VALUE(&generator->value, value);
14565 				if (IS_TMP_VAR == IS_CV) {
14566 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
14567 				}
14568 			}
14569 		}
14570 	} else {
14571 		/* If no value was specified yield null */
14572 		ZVAL_NULL(&generator->value);
14573 	}
14574 
14575 	/* Set the new yielded key */
14576 	if (IS_CV != IS_UNUSED) {
14577 
14578 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14579 
14580 		/* Consts, temporary variables and references need copying */
14581 		if (IS_CV == IS_CONST) {
14582 			ZVAL_COPY_VALUE(&generator->key, key);
14583 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
14584 				zval_copy_ctor_func(&generator->key);
14585 			}
14586 		} else if (IS_CV == IS_TMP_VAR) {
14587 			ZVAL_COPY_VALUE(&generator->key, key);
14588 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
14589 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
14590 
14591 		} else {
14592 			ZVAL_COPY_VALUE(&generator->key, key);
14593 			if (IS_CV == IS_CV) {
14594 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
14595 			}
14596 		}
14597 
14598 		if (Z_TYPE(generator->key) == IS_LONG
14599 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
14600 		) {
14601 			generator->largest_used_integer_key = Z_LVAL(generator->key);
14602 		}
14603 	} else {
14604 		/* If no key was specified we use auto-increment keys */
14605 		generator->largest_used_integer_key++;
14606 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
14607 	}
14608 
14609 	if (RETURN_VALUE_USED(opline)) {
14610 		/* If the return value of yield is used set the send
14611 		 * target and initialize it to NULL */
14612 		generator->send_target = EX_VAR(opline->result.var);
14613 		ZVAL_NULL(generator->send_target);
14614 	} else {
14615 		generator->send_target = NULL;
14616 	}
14617 
14618 	/* We increment to the next op, so we are at the correct position when the
14619 	 * generator is resumed. */
14620 	ZEND_VM_INC_OPCODE();
14621 
14622 	/* The GOTO VM uses a local opline variable. We need to set the opline
14623 	 * variable in execute_data so we don't resume at an old position. */
14624 	SAVE_OPLINE();
14625 
14626 	ZEND_VM_RETURN();
14627 }
14628 
14629 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14630 {
14631 	USE_OPLINE
14632 	zval *container;
14633 	zend_free_op free_op1, free_op2;
14634 
14635 	SAVE_OPLINE();
14636 
14637 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14638         if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
14639             zend_throw_error(NULL, "Cannot use temporary expression in write context");
14640 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14641 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14642 			HANDLE_EXCEPTION();
14643         }
14644 		container = NULL;
14645 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
14646 			zend_throw_error(NULL, "Cannot use string offset as an array");
14647 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14648 			HANDLE_EXCEPTION();
14649 		}
14650 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
14651 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14652 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
14653 		}
14654 		zval_ptr_dtor_nogc(free_op2);
14655 
14656 	} else {
14657 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
14658 			zend_throw_error(NULL, "Cannot use [] for reading");
14659 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14660 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14661 			HANDLE_EXCEPTION();
14662 		}
14663 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14664 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
14665 		zval_ptr_dtor_nogc(free_op2);
14666 		zval_ptr_dtor_nogc(free_op1);
14667 	}
14668 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14669 }
14670 
14671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14672 {
14673 	USE_OPLINE
14674 	zend_free_op free_op1;
14675 	zval *container;
14676 	zend_free_op free_op2;
14677 	zval *offset;
14678 
14679 	SAVE_OPLINE();
14680 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14681 
14682 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
14683 		zend_throw_error(NULL, "Using $this when not in object context");
14684 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14685 		HANDLE_EXCEPTION();
14686 	}
14687 
14688 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14689 
14690 	if (IS_TMP_VAR == IS_CONST ||
14691 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
14692 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
14693 			container = Z_REFVAL_P(container);
14694 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
14695 				goto fetch_obj_r_no_object;
14696 			}
14697 		} else {
14698 			goto fetch_obj_r_no_object;
14699 		}
14700 	}
14701 
14702 	/* here we are sure we are dealing with an object */
14703 	do {
14704 		zend_object *zobj = Z_OBJ_P(container);
14705 		zval *retval;
14706 
14707 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
14708 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
14709 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
14710 
14711 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
14712 				retval = OBJ_PROP(zobj, prop_offset);
14713 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
14714 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
14715 					break;
14716 				}
14717 			} else if (EXPECTED(zobj->properties != NULL)) {
14718 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
14719 				if (EXPECTED(retval)) {
14720 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
14721 					break;
14722 				}
14723 			}
14724 		}
14725 
14726 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
14727 fetch_obj_r_no_object:
14728 			zend_error(E_NOTICE, "Trying to get property of non-object");
14729 			ZVAL_NULL(EX_VAR(opline->result.var));
14730 		} else {
14731 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
14732 
14733 			if (retval != EX_VAR(opline->result.var)) {
14734 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
14735 			}
14736 		}
14737 	} while (0);
14738 
14739 	zval_ptr_dtor_nogc(free_op2);
14740 	zval_ptr_dtor_nogc(free_op1);
14741 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14742 }
14743 
14744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14745 {
14746 	USE_OPLINE
14747 	zval *container;
14748 
14749 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14750 		/* Behave like FETCH_OBJ_W */
14751 		zend_free_op free_op1, free_op2;
14752 		zval *property;
14753 
14754 		SAVE_OPLINE();
14755 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14756 		container = NULL;
14757 
14758 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
14759 			zend_throw_error(NULL, "Using $this when not in object context");
14760 			zval_ptr_dtor_nogc(free_op2);
14761 			HANDLE_EXCEPTION();
14762 		}
14763 		if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
14764 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
14765 			zval_ptr_dtor_nogc(free_op2);
14766 
14767 			HANDLE_EXCEPTION();
14768 		}
14769 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
14770 			zend_throw_error(NULL, "Cannot use string offset as an object");
14771 			zval_ptr_dtor_nogc(free_op2);
14772 			HANDLE_EXCEPTION();
14773 		}
14774 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
14775 		zval_ptr_dtor_nogc(free_op2);
14776 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14777 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
14778 		}
14779 
14780 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14781 	} else {
14782 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14783 	}
14784 }
14785 
14786 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14787 {
14788 	USE_OPLINE
14789 	zend_free_op free_op2;
14790 	zend_string **rope;
14791 	zval *var;
14792 
14793 	/* op1 and result are the same */
14794 	rope = (zend_string**)EX_VAR(opline->op1.var);
14795 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
14796 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14797 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14798 	} else {
14799 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14800 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14801 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
14802 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14803 			} else {
14804 				rope[opline->extended_value] = Z_STR_P(var);
14805 			}
14806 		} else {
14807 			SAVE_OPLINE();
14808 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14809 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14810 			}
14811 			rope[opline->extended_value] = _zval_get_string_func(var);
14812 			zval_ptr_dtor_nogc(free_op2);
14813 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14814 		}
14815 	}
14816 	ZEND_VM_NEXT_OPCODE();
14817 }
14818 
14819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14820 {
14821 	USE_OPLINE
14822 	zend_free_op free_op2;
14823 	zend_string **rope;
14824 	zval *var, *ret;
14825 	uint32_t i;
14826 	size_t len = 0;
14827 	char *target;
14828 
14829 	rope = (zend_string**)EX_VAR(opline->op1.var);
14830 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
14831 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14832 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14833 	} else {
14834 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14835 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14836 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
14837 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14838 			} else {
14839 				rope[opline->extended_value] = Z_STR_P(var);
14840 			}
14841 		} else {
14842 			SAVE_OPLINE();
14843 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14844 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14845 			}
14846 			rope[opline->extended_value] = _zval_get_string_func(var);
14847 			zval_ptr_dtor_nogc(free_op2);
14848 			if (UNEXPECTED(EG(exception))) {
14849 				for (i = 0; i <= opline->extended_value; i++) {
14850 					zend_string_release(rope[i]);
14851 				}
14852 				HANDLE_EXCEPTION();
14853 			}
14854 		}
14855 	}
14856 	for (i = 0; i <= opline->extended_value; i++) {
14857 		len += ZSTR_LEN(rope[i]);
14858 	}
14859 	ret = EX_VAR(opline->result.var);
14860 	ZVAL_STR(ret, zend_string_alloc(len, 0));
14861 	target = Z_STRVAL_P(ret);
14862 	for (i = 0; i <= opline->extended_value; i++) {
14863 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
14864 		target += ZSTR_LEN(rope[i]);
14865 		zend_string_release(rope[i]);
14866 	}
14867 	*target = '\0';
14868 
14869 	ZEND_VM_NEXT_OPCODE();
14870 }
14871 
14872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14873 {
14874 	USE_OPLINE
14875 	zend_free_op free_op1;
14876 	zval *expr_ptr, new_expr;
14877 
14878 	SAVE_OPLINE();
14879 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
14880 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
14881 		expr_ptr = NULL;
14882 		if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
14883 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
14884 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
14885 			HANDLE_EXCEPTION();
14886 		}
14887 		ZVAL_MAKE_REF(expr_ptr);
14888 		Z_ADDREF_P(expr_ptr);
14889 
14890 	} else {
14891 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14892 		if (IS_TMP_VAR == IS_TMP_VAR) {
14893 			/* pass */
14894 		} else if (IS_TMP_VAR == IS_CONST) {
14895 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
14896 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14897 				zval_copy_ctor_func(&new_expr);
14898 				expr_ptr = &new_expr;
14899 			}
14900 		} else if (IS_TMP_VAR == IS_CV) {
14901 			ZVAL_DEREF(expr_ptr);
14902 			if (Z_REFCOUNTED_P(expr_ptr)) {
14903 				Z_ADDREF_P(expr_ptr);
14904 			}
14905 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
14906 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
14907 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
14908 
14909 				expr_ptr = Z_REFVAL_P(expr_ptr);
14910 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
14911 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14912 					expr_ptr = &new_expr;
14913 					efree_size(ref, sizeof(zend_reference));
14914 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
14915 					Z_ADDREF_P(expr_ptr);
14916 				}
14917 			}
14918 		}
14919 	}
14920 
14921 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
14922 		zend_free_op free_op2;
14923 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14924 		zend_string *str;
14925 		zend_ulong hval;
14926 
14927 add_again:
14928 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
14929 			str = Z_STR_P(offset);
14930 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
14931 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
14932 					goto num_index;
14933 				}
14934 			}
14935 str_index:
14936 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
14937 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
14938 			hval = Z_LVAL_P(offset);
14939 num_index:
14940 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
14941 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
14942 			offset = Z_REFVAL_P(offset);
14943 			goto add_again;
14944 		} else if (Z_TYPE_P(offset) == IS_NULL) {
14945 			str = ZSTR_EMPTY_ALLOC();
14946 			goto str_index;
14947 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
14948 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
14949 			goto num_index;
14950 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
14951 			hval = 0;
14952 			goto num_index;
14953 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
14954 			hval = 1;
14955 			goto num_index;
14956 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
14957 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
14958 			str = ZSTR_EMPTY_ALLOC();
14959 			goto str_index;
14960 		} else {
14961 			zend_error(E_WARNING, "Illegal offset type");
14962 			zval_ptr_dtor(expr_ptr);
14963 		}
14964 		zval_ptr_dtor_nogc(free_op2);
14965 	} else {
14966 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
14967 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
14968 			zval_ptr_dtor(expr_ptr);
14969 		}
14970 	}
14971 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14972 }
14973 
14974 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14975 {
14976 	zval *array;
14977 	uint32_t size;
14978 	USE_OPLINE
14979 
14980 	array = EX_VAR(opline->result.var);
14981 	if (IS_TMP_VAR != IS_UNUSED) {
14982 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
14983 	} else {
14984 		size = 0;
14985 	}
14986 	ZVAL_NEW_ARR(array);
14987 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
14988 
14989 	if (IS_TMP_VAR != IS_UNUSED) {
14990 		/* Explicitly initialize array as not-packed if flag is set */
14991 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
14992 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
14993 		}
14994 	}
14995 
14996 	if (IS_TMP_VAR == IS_UNUSED) {
14997 		ZEND_VM_NEXT_OPCODE();
14998 #if 0 || (IS_TMP_VAR != IS_UNUSED)
14999 	} else {
15000 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15001 #endif
15002 	}
15003 }
15004 
15005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15006 {
15007 	USE_OPLINE
15008 	zend_free_op free_op1;
15009 	zval *var_ptr;
15010 
15011 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15012 
15013 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
15014 		SAVE_OPLINE();
15015 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
15016 		HANDLE_EXCEPTION();
15017 	}
15018 
15019 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15020 		fast_long_increment_function(var_ptr);
15021 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15022 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15023 		}
15024 		ZEND_VM_NEXT_OPCODE();
15025 	}
15026 
15027 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
15028 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15029 			ZVAL_NULL(EX_VAR(opline->result.var));
15030 		}
15031 		ZEND_VM_NEXT_OPCODE();
15032 	}
15033 
15034 	SAVE_OPLINE();
15035 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15036 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15037 	}
15038 	ZVAL_DEREF(var_ptr);
15039 	SEPARATE_ZVAL_NOREF(var_ptr);
15040 
15041 	increment_function(var_ptr);
15042 
15043 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15044 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15045 	}
15046 
15047 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15048 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15049 }
15050 
15051 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15052 {
15053 	USE_OPLINE
15054 	zend_free_op free_op1;
15055 	zval *var_ptr;
15056 
15057 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15058 
15059 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
15060 		SAVE_OPLINE();
15061 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
15062 		HANDLE_EXCEPTION();
15063 	}
15064 
15065 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15066 		fast_long_decrement_function(var_ptr);
15067 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15068 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15069 		}
15070 		ZEND_VM_NEXT_OPCODE();
15071 	}
15072 
15073 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
15074 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15075 			ZVAL_NULL(EX_VAR(opline->result.var));
15076 		}
15077 		ZEND_VM_NEXT_OPCODE();
15078 	}
15079 
15080 	SAVE_OPLINE();
15081 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15082 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15083 	}
15084 	ZVAL_DEREF(var_ptr);
15085 	SEPARATE_ZVAL_NOREF(var_ptr);
15086 
15087 	decrement_function(var_ptr);
15088 
15089 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
15090 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15091 	}
15092 
15093 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15094 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15095 }
15096 
15097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15098 {
15099 	USE_OPLINE
15100 	zend_free_op free_op1;
15101 	zval *var_ptr;
15102 
15103 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15104 
15105 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
15106 		SAVE_OPLINE();
15107 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
15108 		HANDLE_EXCEPTION();
15109 	}
15110 
15111 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15112 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15113 		fast_long_increment_function(var_ptr);
15114 		ZEND_VM_NEXT_OPCODE();
15115 	}
15116 
15117 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
15118 		ZVAL_NULL(EX_VAR(opline->result.var));
15119 		ZEND_VM_NEXT_OPCODE();
15120 	}
15121 
15122 	SAVE_OPLINE();
15123 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15124 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15125 	}
15126 	ZVAL_DEREF(var_ptr);
15127 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15128 	zval_opt_copy_ctor(var_ptr);
15129 
15130 	increment_function(var_ptr);
15131 
15132 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15133 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15134 }
15135 
15136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15137 {
15138 	USE_OPLINE
15139 	zend_free_op free_op1;
15140 	zval *var_ptr;
15141 
15142 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15143 
15144 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
15145 		SAVE_OPLINE();
15146 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
15147 		HANDLE_EXCEPTION();
15148 	}
15149 
15150 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15151 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15152 		fast_long_decrement_function(var_ptr);
15153 		ZEND_VM_NEXT_OPCODE();
15154 	}
15155 
15156 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
15157 		ZVAL_NULL(EX_VAR(opline->result.var));
15158 		ZEND_VM_NEXT_OPCODE();
15159 	}
15160 
15161 	SAVE_OPLINE();
15162 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15163 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15164 	}
15165 	ZVAL_DEREF(var_ptr);
15166 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15167 	zval_opt_copy_ctor(var_ptr);
15168 
15169 	decrement_function(var_ptr);
15170 
15171 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15173 }
15174 
15175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15176 {
15177 	USE_OPLINE
15178 	zval *retval_ptr;
15179 	zend_free_op free_op1;
15180 
15181 	retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15182 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
15183 		SAVE_OPLINE();
15184 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
15185 		if (EX(return_value)) {
15186 			ZVAL_NULL(EX(return_value));
15187 		}
15188 	} else if (!EX(return_value)) {
15189 		if (IS_VAR == IS_VAR || IS_VAR == IS_TMP_VAR ) {
15190 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
15191 				SAVE_OPLINE();
15192 				zval_dtor_func_for_ptr(Z_COUNTED_P(free_op1));
15193 			}
15194 		}
15195 	} else {
15196 		if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
15197 			ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
15198 			if (IS_VAR == IS_CONST) {
15199 				if (UNEXPECTED(Z_OPT_COPYABLE_P(EX(return_value)))) {
15200 					zval_copy_ctor_func(EX(return_value));
15201 				}
15202 			}
15203 		} else if (IS_VAR == IS_CV) {
15204 			ZVAL_DEREF(retval_ptr);
15205 			ZVAL_COPY(EX(return_value), retval_ptr);
15206 		} else /* if (IS_VAR == IS_VAR) */ {
15207 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
15208 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
15209 
15210 				retval_ptr = Z_REFVAL_P(retval_ptr);
15211 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
15212 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15213 					efree_size(ref, sizeof(zend_reference));
15214 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
15215 					Z_ADDREF_P(retval_ptr);
15216 				}
15217 			} else {
15218 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
15219 			}
15220 		}
15221 	}
15222 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15223 }
15224 
15225 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15226 {
15227 	USE_OPLINE
15228 	zval *retval_ptr;
15229 	zend_free_op free_op1;
15230 
15231 	SAVE_OPLINE();
15232 
15233 	do {
15234 		if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR ||
15235 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
15236 			/* Not supposed to happen, but we'll allow it */
15237 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
15238 
15239 			retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15240 			if (!EX(return_value)) {
15241 				if (IS_VAR == IS_TMP_VAR) {
15242 					zval_ptr_dtor_nogc(free_op1);
15243 				}
15244 			} else {
15245 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
15246 				Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
15247 				if (IS_VAR != IS_TMP_VAR) {
15248 					zval_opt_copy_ctor_no_imm(EX(return_value));
15249 				}
15250 			}
15251 			break;
15252 		}
15253 
15254 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15255 
15256 		if (IS_VAR == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
15257 			zend_throw_error(NULL, "Cannot return string offsets by reference");
15258 			HANDLE_EXCEPTION();
15259 		}
15260 
15261 		if (IS_VAR == IS_VAR) {
15262 			if (retval_ptr == &EG(uninitialized_zval) ||
15263 			    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
15264 			     !(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF))) {
15265 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
15266 				if (EX(return_value)) {
15267 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
15268 					Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
15269 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
15270 				}
15271 				break;
15272 			}
15273 		}
15274 
15275 		if (EX(return_value)) {
15276 			ZVAL_MAKE_REF(retval_ptr);
15277 			Z_ADDREF_P(retval_ptr);
15278 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
15279 			Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
15280 		}
15281 	} while (0);
15282 
15283 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15284 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15285 }
15286 
15287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15288 {
15289 	USE_OPLINE
15290 	zval *retval;
15291 	zend_free_op free_op1;
15292 
15293 	zend_generator *generator = zend_get_running_generator(execute_data);
15294 
15295 	SAVE_OPLINE();
15296 	retval = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15297 
15298 	/* Copy return value into generator->retval */
15299 	if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
15300 		ZVAL_COPY_VALUE(&generator->retval, retval);
15301 		if (IS_VAR == IS_CONST) {
15302 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->retval))) {
15303 				zval_copy_ctor_func(&generator->retval);
15304 			}
15305 		}
15306 	} else if (IS_VAR == IS_CV) {
15307 		ZVAL_DEREF(retval);
15308 		ZVAL_COPY(&generator->retval, retval);
15309 	} else /* if (IS_VAR == IS_VAR) */ {
15310 		if (UNEXPECTED(Z_ISREF_P(retval))) {
15311 			zend_refcounted *ref = Z_COUNTED_P(retval);
15312 
15313 			retval = Z_REFVAL_P(retval);
15314 			ZVAL_COPY_VALUE(&generator->retval, retval);
15315 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15316 				efree_size(ref, sizeof(zend_reference));
15317 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
15318 				Z_ADDREF_P(retval);
15319 			}
15320 		} else {
15321 			ZVAL_COPY_VALUE(&generator->retval, retval);
15322 		}
15323 	}
15324 
15325 	/* Close the generator to free up resources */
15326 	zend_generator_close(generator, 1);
15327 
15328 	/* Pass execution back to handling code */
15329 	ZEND_VM_RETURN();
15330 }
15331 
15332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15333 {
15334 	USE_OPLINE
15335 	zval *value;
15336 	zend_free_op free_op1;
15337 
15338 	SAVE_OPLINE();
15339 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15340 
15341 	do {
15342 		if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
15343 			if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
15344 				value = Z_REFVAL_P(value);
15345 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
15346 					break;
15347 				}
15348 			}
15349 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15350 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
15351 				if (UNEXPECTED(EG(exception) != NULL)) {
15352 					HANDLE_EXCEPTION();
15353 				}
15354 			}
15355 			zend_throw_error(NULL, "Can only throw objects");
15356 			zval_ptr_dtor_nogc(free_op1);
15357 			HANDLE_EXCEPTION();
15358 		}
15359 	} while (0);
15360 
15361 	zend_exception_save();
15362 	if (IS_VAR != IS_TMP_VAR) {
15363 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
15364 	}
15365 
15366 	zend_throw_exception_object(value);
15367 	zend_exception_restore();
15368 	zval_ptr_dtor_nogc(free_op1);
15369 	HANDLE_EXCEPTION();
15370 }
15371 
15372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15373 {
15374 	USE_OPLINE
15375 	zval *varptr, *arg;
15376 	zend_free_op free_op1;
15377 
15378 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15379 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
15380 		SAVE_OPLINE();
15381 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
15382 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15383 		ZVAL_NULL(arg);
15384 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15385 	}
15386 
15387 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15388 
15389 	if (IS_VAR == IS_CV) {
15390 		ZVAL_OPT_DEREF(varptr);
15391 		ZVAL_COPY(arg, varptr);
15392 	} else /* if (IS_VAR == IS_VAR) */ {
15393 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
15394 			zend_refcounted *ref = Z_COUNTED_P(varptr);
15395 
15396 			varptr = Z_REFVAL_P(varptr);
15397 			ZVAL_COPY_VALUE(arg, varptr);
15398 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15399 				efree_size(ref, sizeof(zend_reference));
15400 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
15401 				Z_ADDREF_P(arg);
15402 			}
15403 		} else {
15404 			ZVAL_COPY_VALUE(arg, varptr);
15405 		}
15406 	}
15407 
15408 	ZEND_VM_NEXT_OPCODE();
15409 }
15410 
15411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15412 {
15413 	USE_OPLINE
15414 	zend_free_op free_op1;
15415 	zval *varptr, *arg;
15416 
15417 	if (!(opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND)) {
15418 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
15419 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15420 		}
15421 	}
15422 
15423 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15424 
15425 	if (EXPECTED(Z_ISREF_P(varptr) ||
15426 	    ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
15427 	     (opline->extended_value & ZEND_ARG_SEND_SILENT) :
15428 	     ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num
15429 	    )))) {
15430 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15431 		ZVAL_COPY_VALUE(arg, varptr);
15432 
15433 		ZEND_VM_NEXT_OPCODE();
15434 	}
15435 
15436 	SAVE_OPLINE();
15437 	zend_error(E_NOTICE, "Only variables should be passed by reference");
15438 
15439 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15440 	ZVAL_COPY_VALUE(arg, varptr);
15441 
15442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15443 }
15444 
15445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15446 {
15447 	USE_OPLINE
15448 	zend_free_op free_op1;
15449 	zval *varptr, *arg;
15450 
15451 	SAVE_OPLINE();
15452 	varptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15453 
15454 	if (IS_VAR == IS_VAR && UNEXPECTED(varptr == NULL)) {
15455 		zend_throw_error(NULL, "Only variables can be passed by reference");
15456 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15457 		ZVAL_UNDEF(arg);
15458 		HANDLE_EXCEPTION();
15459 	}
15460 
15461 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15462 	if (IS_VAR == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
15463 		ZVAL_NEW_REF(arg, &EG(uninitialized_zval));
15464 		ZEND_VM_NEXT_OPCODE();
15465 	}
15466 
15467 	if (Z_ISREF_P(varptr)) {
15468 		Z_ADDREF_P(varptr);
15469 		ZVAL_COPY_VALUE(arg, varptr);
15470 	} else {
15471 		ZVAL_NEW_REF(arg, varptr);
15472 		Z_ADDREF_P(arg);
15473 		ZVAL_REF(varptr, Z_REF_P(arg));
15474 	}
15475 
15476 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15477 	ZEND_VM_NEXT_OPCODE();
15478 }
15479 
15480 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15481 {
15482 	USE_OPLINE
15483 	zval *varptr, *arg;
15484 	zend_free_op free_op1;
15485 	uint32_t arg_num = opline->op2.num;
15486 
15487 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
15488 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
15489 			goto send_var_by_ref;
15490 		}
15491 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
15492 send_var_by_ref:
15493 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15494 	}
15495 
15496 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15497 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
15498 		SAVE_OPLINE();
15499 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
15500 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15501 		ZVAL_NULL(arg);
15502 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15503 	}
15504 
15505 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15506 
15507 	if (IS_VAR == IS_CV) {
15508 		ZVAL_OPT_DEREF(varptr);
15509 		ZVAL_COPY(arg, varptr);
15510 	} else /* if (IS_VAR == IS_VAR) */ {
15511 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
15512 			zend_refcounted *ref = Z_COUNTED_P(varptr);
15513 
15514 			varptr = Z_REFVAL_P(varptr);
15515 			ZVAL_COPY_VALUE(arg, varptr);
15516 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15517 				efree_size(ref, sizeof(zend_reference));
15518 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
15519 				Z_ADDREF_P(arg);
15520 			}
15521 		} else {
15522 			ZVAL_COPY_VALUE(arg, varptr);
15523 		}
15524 	}
15525 
15526 	ZEND_VM_NEXT_OPCODE();
15527 }
15528 
15529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15530 {
15531 	USE_OPLINE
15532 	zval *arg, *param;
15533 	zend_free_op free_op1;
15534 
15535 	SAVE_OPLINE();
15536 	arg = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15537 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
15538 
15539 	if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
15540 		if (UNEXPECTED(!Z_ISREF_P(arg))) {
15541 			if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
15542 
15543 				zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
15544 					opline->op2.num,
15545 					EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
15546 					EX(call)->func->common.scope ? "::" : "",
15547 					ZSTR_VAL(EX(call)->func->common.function_name));
15548 
15549 				if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
15550 					OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
15551 				}
15552 				if (Z_OBJ(EX(call)->This)) {
15553 					OBJ_RELEASE(Z_OBJ(EX(call)->This));
15554 				}
15555 				ZVAL_UNDEF(param);
15556 				EX(call)->func = (zend_function*)&zend_pass_function;
15557 				EX(call)->called_scope = NULL;
15558 				Z_OBJ(EX(call)->This) = NULL;
15559 				ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
15560 
15561 				zval_ptr_dtor_nogc(free_op1);
15562 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15563 			}
15564 		}
15565 	} else {
15566 		if (Z_ISREF_P(arg) &&
15567 		    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
15568 			/* don't separate references for __call */
15569 			arg = Z_REFVAL_P(arg);
15570 		}
15571 	}
15572 	ZVAL_COPY(param, arg);
15573 
15574 	zval_ptr_dtor_nogc(free_op1);
15575 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15576 }
15577 
15578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15579 {
15580 	USE_OPLINE
15581 	zval object_zval;
15582 	zend_function *constructor;
15583 	zend_class_entry *ce;
15584 
15585 	SAVE_OPLINE();
15586 	if (IS_VAR == IS_CONST) {
15587 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
15588 		if (UNEXPECTED(ce == NULL)) {
15589 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
15590 			if (UNEXPECTED(ce == NULL)) {
15591 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15592 			}
15593 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
15594 		}
15595 	} else {
15596 		ce = Z_CE_P(EX_VAR(opline->op1.var));
15597 	}
15598 	if (UNEXPECTED(object_init_ex(&object_zval, ce) != SUCCESS)) {
15599 		HANDLE_EXCEPTION();
15600 	}
15601 	constructor = Z_OBJ_HT(object_zval)->get_constructor(Z_OBJ(object_zval));
15602 
15603 	if (constructor == NULL) {
15604 		if (EXPECTED(RETURN_VALUE_USED(opline))) {
15605 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), &object_zval);
15606 		} else {
15607 			OBJ_RELEASE(Z_OBJ(object_zval));
15608 		}
15609 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15610 	} else {
15611 		/* We are not handling overloaded classes right now */
15612 		zend_execute_data *call = zend_vm_stack_push_call_frame(
15613 				ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR |
15614 				(EXPECTED(RETURN_VALUE_USED(opline)) ? 0 : ZEND_CALL_CTOR_RESULT_UNUSED),
15615 			constructor,
15616 			opline->extended_value,
15617 			ce,
15618 			Z_OBJ(object_zval));
15619 		call->prev_execute_data = EX(call);
15620 		EX(call) = call;
15621 
15622 		if (EXPECTED(RETURN_VALUE_USED(opline))) {
15623 			ZVAL_COPY(EX_VAR(opline->result.var), &object_zval);
15624 		}
15625 
15626 		ZEND_VM_NEXT_OPCODE();
15627 	}
15628 }
15629 
15630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15631 {
15632 	USE_OPLINE
15633 	zend_free_op free_op1;
15634 	zval *expr;
15635 	zval *result = EX_VAR(opline->result.var);
15636 
15637 	SAVE_OPLINE();
15638 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15639 
15640 	switch (opline->extended_value) {
15641 		case IS_NULL:
15642 			/* This code is taken from convert_to_null. However, it does not seems very useful,
15643 			 * because a conversion to null always results in the same value. This could only
15644 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
15645 #if 0
15646 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
15647 				ZVAL_DEREF(expr);
15648 			}
15649 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
15650 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
15651 					break;
15652 				}
15653 			}
15654 #endif
15655 
15656 			ZVAL_NULL(result);
15657 			break;
15658 		case _IS_BOOL:
15659 			ZVAL_BOOL(result, zend_is_true(expr));
15660 			break;
15661 		case IS_LONG:
15662 			ZVAL_LONG(result, zval_get_long(expr));
15663 			break;
15664 		case IS_DOUBLE:
15665 			ZVAL_DOUBLE(result, zval_get_double(expr));
15666 			break;
15667 		case IS_STRING:
15668 			ZVAL_STR(result, zval_get_string(expr));
15669 			break;
15670 		default:
15671 			if (IS_VAR & (IS_VAR|IS_CV)) {
15672 				ZVAL_DEREF(expr);
15673 			}
15674 			/* If value is already of correct type, return it directly */
15675 			if (Z_TYPE_P(expr) == opline->extended_value) {
15676 				ZVAL_COPY_VALUE(result, expr);
15677 				if (IS_VAR == IS_CONST) {
15678 					if (UNEXPECTED(Z_OPT_COPYABLE_P(result))) {
15679 						zval_copy_ctor_func(result);
15680 					}
15681 				} else if (IS_VAR != IS_TMP_VAR) {
15682 					if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
15683 				}
15684 
15685 				zval_ptr_dtor_nogc(free_op1);
15686 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15687 			}
15688 
15689 			if (opline->extended_value == IS_ARRAY) {
15690 				if (Z_TYPE_P(expr) != IS_OBJECT) {
15691 					ZVAL_NEW_ARR(result);
15692 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
15693 					if (Z_TYPE_P(expr) != IS_NULL) {
15694 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
15695 						if (IS_VAR == IS_CONST) {
15696 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
15697 								zval_copy_ctor_func(expr);
15698 							}
15699 						} else {
15700 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
15701 						}
15702 					}
15703 				} else {
15704 					ZVAL_COPY_VALUE(result, expr);
15705 					Z_ADDREF_P(result);
15706 					convert_to_array(result);
15707 				}
15708 			} else {
15709 				if (Z_TYPE_P(expr) != IS_ARRAY) {
15710 					object_init(result);
15711 					if (Z_TYPE_P(expr) != IS_NULL) {
15712 						expr = zend_hash_str_add_new(Z_OBJPROP_P(result), "scalar", sizeof("scalar")-1, expr);
15713 						if (IS_VAR == IS_CONST) {
15714 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
15715 								zval_copy_ctor_func(expr);
15716 							}
15717 						} else {
15718 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
15719 						}
15720 					}
15721 				} else {
15722 					ZVAL_COPY(result, expr);
15723 					convert_to_object(result);
15724 				}
15725 			}
15726 	}
15727 
15728 	zval_ptr_dtor_nogc(free_op1);
15729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15730 }
15731 
15732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15733 {
15734 	USE_OPLINE
15735 	zend_free_op free_op1;
15736 	zval *array_ptr, *result;
15737 	HashTable *fe_ht;
15738 
15739 	SAVE_OPLINE();
15740 
15741 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
15742 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
15743 		result = EX_VAR(opline->result.var);
15744 		ZVAL_COPY_VALUE(result, array_ptr);
15745 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
15746 			Z_ADDREF_P(array_ptr);
15747 		}
15748 		Z_FE_POS_P(result) = 0;
15749 
15750 		zval_ptr_dtor_nogc(free_op1);
15751 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15752 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
15753 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
15754 			HashPosition pos = 0;
15755 			Bucket *p;
15756 
15757 			result = EX_VAR(opline->result.var);
15758 			ZVAL_COPY_VALUE(result, array_ptr);
15759 			if (IS_VAR != IS_TMP_VAR) {
15760 				Z_ADDREF_P(array_ptr);
15761 			}
15762 			fe_ht = Z_OBJPROP_P(array_ptr);
15763 			pos = 0;
15764 			p = fe_ht->arData;
15765 			while (1) {
15766 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
15767 					zval_ptr_dtor_nogc(free_op1);
15768 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15769 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15770 				}
15771 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15772 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
15773 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
15774 				    (UNEXPECTED(!p->key) ||
15775 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
15776 					break;
15777 				}
15778 				pos++;
15779 				p++;
15780 			}
15781 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
15782 
15783 			zval_ptr_dtor_nogc(free_op1);
15784 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15785 		} else {
15786 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
15787 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
15788 			zend_bool is_empty;
15789 
15790 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
15791 				zval_ptr_dtor_nogc(free_op1);
15792 				if (!EG(exception)) {
15793 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
15794 				}
15795 				zend_throw_exception_internal(NULL);
15796 				HANDLE_EXCEPTION();
15797 			}
15798 
15799 			iter->index = 0;
15800 			if (iter->funcs->rewind) {
15801 				iter->funcs->rewind(iter);
15802 				if (UNEXPECTED(EG(exception) != NULL)) {
15803 					OBJ_RELEASE(&iter->std);
15804 					zval_ptr_dtor_nogc(free_op1);
15805 					HANDLE_EXCEPTION();
15806 				}
15807 			}
15808 
15809 			is_empty = iter->funcs->valid(iter) != SUCCESS;
15810 
15811 			if (UNEXPECTED(EG(exception) != NULL)) {
15812 				OBJ_RELEASE(&iter->std);
15813 				zval_ptr_dtor_nogc(free_op1);
15814 				HANDLE_EXCEPTION();
15815 			}
15816 			iter->index = -1; /* will be set to 0 before using next handler */
15817 
15818 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
15819 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15820 
15821 			zval_ptr_dtor_nogc(free_op1);
15822 			if (is_empty) {
15823 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15824 			} else {
15825 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15826 			}
15827 		}
15828 	} else {
15829 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
15830 		ZVAL_UNDEF(EX_VAR(opline->result.var));
15831 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15832 		zval_ptr_dtor_nogc(free_op1);
15833 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15834 	}
15835 }
15836 
15837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15838 {
15839 	USE_OPLINE
15840 	zend_free_op free_op1;
15841 	zval *array_ptr, *array_ref;
15842 	HashTable *fe_ht;
15843 	HashPosition pos = 0;
15844 	Bucket *p;
15845 
15846 	SAVE_OPLINE();
15847 
15848 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
15849 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15850 		if (IS_VAR == IS_VAR && UNEXPECTED(array_ref == NULL)) {
15851 			zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
15852 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15853 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15854 			HANDLE_EXCEPTION();
15855 		}
15856 		if (Z_ISREF_P(array_ref)) {
15857 			array_ptr = Z_REFVAL_P(array_ref);
15858 		}
15859 	} else {
15860 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15861 	}
15862 
15863 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
15864 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
15865 			if (array_ptr == array_ref) {
15866 				ZVAL_NEW_REF(array_ref, array_ref);
15867 				array_ptr = Z_REFVAL_P(array_ref);
15868 			}
15869 			Z_ADDREF_P(array_ref);
15870 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
15871 		} else {
15872 			array_ref = EX_VAR(opline->result.var);
15873 			ZVAL_NEW_REF(array_ref, array_ptr);
15874 			array_ptr = Z_REFVAL_P(array_ref);
15875 		}
15876 		if (IS_VAR == IS_CONST) {
15877 			zval_copy_ctor_func(array_ptr);
15878 		} else {
15879 			SEPARATE_ARRAY(array_ptr);
15880 		}
15881 		fe_ht = Z_ARRVAL_P(array_ptr);
15882 		p = fe_ht->arData;
15883 		while (1) {
15884 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
15885 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15886 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15887 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15888 			}
15889 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15890 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
15891 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
15892 				break;
15893 			}
15894 			pos++;
15895 			p++;
15896 		}
15897 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
15898 
15899 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15900 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15901 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
15902 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
15903 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
15904 				if (array_ptr == array_ref) {
15905 					ZVAL_NEW_REF(array_ref, array_ref);
15906 					array_ptr = Z_REFVAL_P(array_ref);
15907 				}
15908 				Z_ADDREF_P(array_ref);
15909 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
15910 			} else {
15911 				array_ptr = EX_VAR(opline->result.var);
15912 				ZVAL_COPY_VALUE(array_ptr, array_ref);
15913 			}
15914 			fe_ht = Z_OBJPROP_P(array_ptr);
15915 			p = fe_ht->arData;
15916 			while (1) {
15917 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
15918 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15919 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15920 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15921 				}
15922 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15923 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
15924 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
15925 				    (UNEXPECTED(!p->key) ||
15926 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
15927 					break;
15928 				}
15929 				pos++;
15930 				p++;
15931 			}
15932 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
15933 
15934 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15935 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15936 		} else {
15937 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
15938 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
15939 			zend_bool is_empty;
15940 
15941 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
15942 				if (IS_VAR == IS_VAR) {
15943 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15944 				} else {
15945 					zval_ptr_dtor_nogc(free_op1);
15946 				}
15947 				if (!EG(exception)) {
15948 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
15949 				}
15950 				zend_throw_exception_internal(NULL);
15951 				HANDLE_EXCEPTION();
15952 			}
15953 
15954 			iter->index = 0;
15955 			if (iter->funcs->rewind) {
15956 				iter->funcs->rewind(iter);
15957 				if (UNEXPECTED(EG(exception) != NULL)) {
15958 					OBJ_RELEASE(&iter->std);
15959 					if (IS_VAR == IS_VAR) {
15960 						if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15961 					} else {
15962 						zval_ptr_dtor_nogc(free_op1);
15963 					}
15964 					HANDLE_EXCEPTION();
15965 				}
15966 			}
15967 
15968 			is_empty = iter->funcs->valid(iter) != SUCCESS;
15969 
15970 			if (UNEXPECTED(EG(exception) != NULL)) {
15971 				OBJ_RELEASE(&iter->std);
15972 				if (IS_VAR == IS_VAR) {
15973 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15974 				} else {
15975 					zval_ptr_dtor_nogc(free_op1);
15976 				}
15977 				HANDLE_EXCEPTION();
15978 			}
15979 			iter->index = -1; /* will be set to 0 before using next handler */
15980 
15981 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
15982 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15983 
15984 			if (IS_VAR == IS_VAR) {
15985 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15986 			} else {
15987 				zval_ptr_dtor_nogc(free_op1);
15988 			}
15989 			if (is_empty) {
15990 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
15991 			} else {
15992 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15993 			}
15994 		}
15995 	} else {
15996 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
15997 		ZVAL_UNDEF(EX_VAR(opline->result.var));
15998 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
15999 		if (IS_VAR == IS_VAR) {
16000 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16001 		} else {
16002 			zval_ptr_dtor_nogc(free_op1);
16003 		}
16004 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16005 	}
16006 }
16007 
16008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16009 {
16010 	USE_OPLINE
16011 	zval *array;
16012 	zval *value;
16013 	uint32_t value_type;
16014 	HashTable *fe_ht;
16015 	HashPosition pos;
16016 	Bucket *p;
16017 
16018 	array = EX_VAR(opline->op1.var);
16019 	SAVE_OPLINE();
16020 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
16021 		fe_ht = Z_ARRVAL_P(array);
16022 		pos = Z_FE_POS_P(array);
16023 		p = fe_ht->arData + pos;
16024 		while (1) {
16025 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16026 				/* reached end of iteration */
16027 				goto fe_fetch_r_exit;
16028 			}
16029 			value = &p->val;
16030 			value_type = Z_TYPE_INFO_P(value);
16031 			if (value_type == IS_UNDEF) {
16032 				pos++;
16033 				p++;
16034 				continue;
16035 			} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16036 				value = Z_INDIRECT_P(value);
16037 				value_type = Z_TYPE_INFO_P(value);
16038 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16039 					pos++;
16040 					p++;
16041 					continue;
16042 				}
16043 			}
16044 			break;
16045 		}
16046 		Z_FE_POS_P(array) = pos + 1;
16047 		if (opline->result_type == IS_TMP_VAR) {
16048 			if (!p->key) {
16049 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16050 			} else {
16051 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16052 			}
16053 		}
16054 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
16055 		zend_object_iterator *iter;
16056 
16057 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
16058 			/* plain object */
16059 
16060  			fe_ht = Z_OBJPROP_P(array);
16061 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
16062 			p = fe_ht->arData + pos;
16063 			while (1) {
16064 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16065 					/* reached end of iteration */
16066 					goto fe_fetch_r_exit;
16067 				}
16068 
16069 				value = &p->val;
16070 				value_type = Z_TYPE_INFO_P(value);
16071 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16072 					pos++;
16073 					p++;
16074 					continue;
16075 				} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16076 					value = Z_INDIRECT_P(value);
16077 					value_type = Z_TYPE_INFO_P(value);
16078 					if (UNEXPECTED(value_type == IS_UNDEF)) {
16079 						pos++;
16080 						p++;
16081 						continue;
16082 					}
16083 				}
16084 				if (UNEXPECTED(!p->key) ||
16085 				    EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
16086 					break;
16087 				}
16088 				pos++;
16089 				p++;
16090 			}
16091 			if (opline->result_type == IS_TMP_VAR) {
16092 				if (UNEXPECTED(!p->key)) {
16093 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16094 				} else if (ZSTR_VAL(p->key)[0]) {
16095 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16096 				} else {
16097 					const char *class_name, *prop_name;
16098 					size_t prop_name_len;
16099 					zend_unmangle_property_name_ex(
16100 						p->key, &class_name, &prop_name, &prop_name_len);
16101 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
16102 				}
16103 			}
16104 			while (1) {
16105 				pos++;
16106 				if (pos >= fe_ht->nNumUsed) {
16107 					pos = HT_INVALID_IDX;
16108 					break;
16109 				}
16110 				p++;
16111 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16112 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16113 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
16114 				    (UNEXPECTED(!p->key) ||
16115 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
16116 					break;
16117 				}
16118 			}
16119 			EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
16120 		} else {
16121 			if (EXPECTED(++iter->index > 0)) {
16122 				/* This could cause an endless loop if index becomes zero again.
16123 				 * In case that ever happens we need an additional flag. */
16124 				iter->funcs->move_forward(iter);
16125 				if (UNEXPECTED(EG(exception) != NULL)) {
16126 					zval_ptr_dtor(array);
16127 					HANDLE_EXCEPTION();
16128 				}
16129 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
16130 					/* reached end of iteration */
16131 					if (UNEXPECTED(EG(exception) != NULL)) {
16132 						zval_ptr_dtor(array);
16133 						HANDLE_EXCEPTION();
16134 					}
16135 					goto fe_fetch_r_exit;
16136 				}
16137 			}
16138 			value = iter->funcs->get_current_data(iter);
16139 			if (UNEXPECTED(EG(exception) != NULL)) {
16140 				zval_ptr_dtor(array);
16141 				HANDLE_EXCEPTION();
16142 			}
16143 			if (!value) {
16144 				/* failure in get_current_data */
16145 				goto fe_fetch_r_exit;
16146 			}
16147 			if (opline->result_type == IS_TMP_VAR) {
16148 				if (iter->funcs->get_current_key) {
16149 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
16150 					if (UNEXPECTED(EG(exception) != NULL)) {
16151 						zval_ptr_dtor(array);
16152 						HANDLE_EXCEPTION();
16153 					}
16154 				} else {
16155 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
16156 				}
16157 			}
16158 			value_type = Z_TYPE_INFO_P(value);
16159 		}
16160 	} else {
16161 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
16162 		if (UNEXPECTED(EG(exception))) {
16163 			HANDLE_EXCEPTION();
16164 		}
16165 fe_fetch_r_exit:
16166 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
16167 		ZEND_VM_CONTINUE();
16168 	}
16169 
16170 	if (EXPECTED(opline->op2_type == IS_CV)) {
16171 		zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
16172 		zend_assign_to_variable(variable_ptr, value, IS_CV);
16173 	} else {
16174 		zval *res = EX_VAR(opline->op2.var);
16175 		zend_refcounted *gc = Z_COUNTED_P(value);
16176 
16177 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
16178 		if (EXPECTED((value_type & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)) {
16179 			GC_REFCOUNT(gc)++;
16180 		}
16181 	}
16182 	ZEND_VM_NEXT_OPCODE();
16183 }
16184 
16185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16186 {
16187 	USE_OPLINE
16188 	zval *array;
16189 	zval *value;
16190 	uint32_t value_type;
16191 	HashTable *fe_ht;
16192 	HashPosition pos;
16193 	Bucket *p;
16194 
16195 	array = EX_VAR(opline->op1.var);
16196 	SAVE_OPLINE();
16197 
16198 	ZVAL_DEREF(array);
16199 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
16200 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
16201 		fe_ht = Z_ARRVAL_P(array);
16202 		p = fe_ht->arData + pos;
16203 		while (1) {
16204 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16205 				/* reached end of iteration */
16206 				goto fe_fetch_w_exit;
16207 			}
16208 			value = &p->val;
16209 			value_type = Z_TYPE_INFO_P(value);
16210 			if (UNEXPECTED(value_type == IS_UNDEF)) {
16211 				pos++;
16212 				p++;
16213 				continue;
16214 			} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16215 				value = Z_INDIRECT_P(value);
16216 				value_type = Z_TYPE_INFO_P(value);
16217 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16218 					pos++;
16219 					p++;
16220 					continue;
16221 				}
16222 			}
16223 			break;
16224 		}
16225 		if (opline->result_type == IS_TMP_VAR) {
16226 			if (!p->key) {
16227 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16228 			} else {
16229 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16230 			}
16231 		}
16232 		while (1) {
16233 			pos++;
16234 			if (pos >= fe_ht->nNumUsed) {
16235 				pos = HT_INVALID_IDX;
16236 				break;
16237 			}
16238 			p++;
16239 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16240 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16241 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
16242 				break;
16243 			}
16244 		}
16245 		EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
16246 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
16247 		zend_object_iterator *iter;
16248 
16249 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
16250 			/* plain object */
16251 
16252  			fe_ht = Z_OBJPROP_P(array);
16253 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
16254 			p = fe_ht->arData + pos;
16255 			while (1) {
16256 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16257 					/* reached end of iteration */
16258 					goto fe_fetch_w_exit;
16259 				}
16260 
16261 				value = &p->val;
16262 				value_type = Z_TYPE_INFO_P(value);
16263 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16264 					pos++;
16265 					p++;
16266 					continue;
16267 				} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16268 					value = Z_INDIRECT_P(value);
16269 					value_type = Z_TYPE_INFO_P(value);
16270 					if (UNEXPECTED(value_type == IS_UNDEF)) {
16271 						pos++;
16272 						p++;
16273 						continue;
16274 					}
16275 				}
16276 				if (UNEXPECTED(!p->key) ||
16277 				    EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
16278 					break;
16279 				}
16280 				pos++;
16281 				p++;
16282 			}
16283 			if (opline->result_type == IS_TMP_VAR) {
16284 				if (UNEXPECTED(!p->key)) {
16285 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16286 				} else if (ZSTR_VAL(p->key)[0]) {
16287 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16288 				} else {
16289 					const char *class_name, *prop_name;
16290 					size_t prop_name_len;
16291 					zend_unmangle_property_name_ex(
16292 						p->key, &class_name, &prop_name, &prop_name_len);
16293 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
16294 				}
16295 			}
16296 			while (1) {
16297 				pos++;
16298 				if (pos >= fe_ht->nNumUsed) {
16299 					pos = HT_INVALID_IDX;
16300 					break;
16301 				}
16302 				p++;
16303 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16304 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16305 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
16306 				    (UNEXPECTED(!p->key) ||
16307 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
16308 					break;
16309 				}
16310 			}
16311 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
16312 		} else {
16313 			if (++iter->index > 0) {
16314 				/* This could cause an endless loop if index becomes zero again.
16315 				 * In case that ever happens we need an additional flag. */
16316 				iter->funcs->move_forward(iter);
16317 				if (UNEXPECTED(EG(exception) != NULL)) {
16318 					zval_ptr_dtor(array);
16319 					HANDLE_EXCEPTION();
16320 				}
16321 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
16322 					/* reached end of iteration */
16323 					if (UNEXPECTED(EG(exception) != NULL)) {
16324 						zval_ptr_dtor(array);
16325 						HANDLE_EXCEPTION();
16326 					}
16327 					goto fe_fetch_w_exit;
16328 				}
16329 			}
16330 			value = iter->funcs->get_current_data(iter);
16331 			if (UNEXPECTED(EG(exception) != NULL)) {
16332 				zval_ptr_dtor(array);
16333 				HANDLE_EXCEPTION();
16334 			}
16335 			if (!value) {
16336 				/* failure in get_current_data */
16337 				goto fe_fetch_w_exit;
16338 			}
16339 			if (opline->result_type == IS_TMP_VAR) {
16340 				if (iter->funcs->get_current_key) {
16341 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
16342 					if (UNEXPECTED(EG(exception) != NULL)) {
16343 						zval_ptr_dtor(array);
16344 						HANDLE_EXCEPTION();
16345 					}
16346 				} else {
16347 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
16348 				}
16349 			}
16350 			value_type = Z_TYPE_INFO_P(value);
16351 		}
16352 	} else {
16353 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
16354 		if (UNEXPECTED(EG(exception))) {
16355 			HANDLE_EXCEPTION();
16356 		}
16357 fe_fetch_w_exit:
16358 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
16359 		ZEND_VM_CONTINUE();
16360 	}
16361 
16362 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
16363 		zend_refcounted *gc = Z_COUNTED_P(value);
16364 		zval *ref;
16365 		ZVAL_NEW_EMPTY_REF(value);
16366 		ref = Z_REFVAL_P(value);
16367 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
16368 	}
16369 	if (EXPECTED(opline->op2_type == IS_CV)) {
16370 		zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
16371 		if (EXPECTED(variable_ptr != value)) {
16372 			zend_reference *ref;
16373 
16374 			ref = Z_REF_P(value);
16375 			GC_REFCOUNT(ref)++;
16376 			zval_ptr_dtor(variable_ptr);
16377 			ZVAL_REF(variable_ptr, ref);
16378 		}
16379 	} else {
16380 		Z_ADDREF_P(value);
16381 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
16382 	}
16383 	ZEND_VM_NEXT_OPCODE();
16384 }
16385 
16386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16387 {
16388 	USE_OPLINE
16389 	zend_free_op free_op1;
16390 	zval *value;
16391 	zval *ref = NULL;
16392 
16393 	SAVE_OPLINE();
16394 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16395 
16396 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
16397 		if (IS_VAR == IS_VAR) {
16398 			ref = value;
16399 		}
16400 		value = Z_REFVAL_P(value);
16401 	}
16402 	if (i_zend_is_true(value)) {
16403 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
16404 		if (IS_VAR == IS_CONST) {
16405 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
16406 				zval_copy_ctor_func(EX_VAR(opline->result.var));
16407 			}
16408 		} else if (IS_VAR == IS_CV) {
16409 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
16410 		} else if (IS_VAR == IS_VAR && ref) {
16411 			zend_reference *r = Z_REF_P(ref);
16412 
16413 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
16414 				efree_size(r, sizeof(zend_reference));
16415 			} else if (Z_OPT_REFCOUNTED_P(value)) {
16416 				Z_ADDREF_P(value);
16417 			}
16418 		}
16419 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16420 	}
16421 
16422 	zval_ptr_dtor_nogc(free_op1);
16423 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16424 }
16425 
16426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16427 {
16428 	USE_OPLINE
16429 	zend_free_op free_op1;
16430 	zval *value;
16431 	zval *ref = NULL;
16432 
16433 	SAVE_OPLINE();
16434 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16435 
16436 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
16437 		if (IS_VAR == IS_VAR) {
16438 			ref = value;
16439 		}
16440 		value = Z_REFVAL_P(value);
16441 	}
16442 
16443 	if (Z_TYPE_P(value) > IS_NULL) {
16444 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
16445 		if (IS_VAR == IS_CONST) {
16446 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
16447 				zval_copy_ctor_func(EX_VAR(opline->result.var));
16448 			}
16449 		} else if (IS_VAR == IS_CV) {
16450 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
16451 		} else if (IS_VAR == IS_VAR && ref) {
16452 			zend_reference *r = Z_REF_P(ref);
16453 
16454 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
16455 				efree_size(r, sizeof(zend_reference));
16456 			} else if (Z_OPT_REFCOUNTED_P(value)) {
16457 				Z_ADDREF_P(value);
16458 			}
16459 		}
16460 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16461 	}
16462 
16463 	zval_ptr_dtor_nogc(free_op1);
16464 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16465 }
16466 
16467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16468 {
16469 	USE_OPLINE
16470 	zend_free_op free_op1;
16471 	zval *value;
16472 	zval *result = EX_VAR(opline->result.var);
16473 
16474 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16475 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
16476 		SAVE_OPLINE();
16477 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
16478 		ZVAL_NULL(result);
16479 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16480 	}
16481 
16482 	if (IS_VAR == IS_CV) {
16483 		ZVAL_DEREF(value);
16484 		ZVAL_COPY(result, value);
16485 	} else if (IS_VAR == IS_VAR) {
16486 		if (UNEXPECTED(Z_ISREF_P(value))) {
16487 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
16488 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
16489 				efree_size(Z_REF_P(value), sizeof(zend_reference));
16490 			} else if (Z_OPT_REFCOUNTED_P(result)) {
16491 				Z_ADDREF_P(result);
16492 			}
16493 		} else {
16494 			ZVAL_COPY_VALUE(result, value);
16495 		}
16496 	} else {
16497 		ZVAL_COPY_VALUE(result, value);
16498 		if (IS_VAR == IS_CONST) {
16499 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
16500 				zval_copy_ctor_func(result);
16501 			}
16502 		}
16503 	}
16504 	ZEND_VM_NEXT_OPCODE();
16505 }
16506 
16507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16508 {
16509 	USE_OPLINE
16510 
16511 	zend_generator *generator = zend_get_running_generator(execute_data);
16512 
16513 	zval *val;
16514 	zend_free_op free_op1;
16515 
16516 	SAVE_OPLINE();
16517 	val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16518 
16519 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
16520 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
16521 		zval_ptr_dtor_nogc(free_op1);
16522 		HANDLE_EXCEPTION();
16523 	}
16524 
16525 	if (Z_TYPE_P(val) == IS_ARRAY) {
16526 		ZVAL_COPY_VALUE(&generator->values, val);
16527 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
16528 			Z_ADDREF_P(val);
16529 		}
16530 		Z_FE_POS(generator->values) = 0;
16531 
16532 		zval_ptr_dtor_nogc(free_op1);
16533 	} else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
16534 		zend_class_entry *ce = Z_OBJCE_P(val);
16535 		if (ce == zend_ce_generator) {
16536 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
16537 
16538 			if (IS_VAR != IS_TMP_VAR) {
16539 				Z_ADDREF_P(val);
16540 			}
16541 			zval_ptr_dtor_nogc(free_op1);
16542 
16543 			if (Z_ISUNDEF(new_gen->retval)) {
16544 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
16545 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
16546 					zval_ptr_dtor(val);
16547 					HANDLE_EXCEPTION();
16548 				} else {
16549 					zend_generator_yield_from(generator, new_gen);
16550 				}
16551 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
16552 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
16553 				zval_ptr_dtor(val);
16554 				HANDLE_EXCEPTION();
16555 			} else {
16556 				if (RETURN_VALUE_USED(opline)) {
16557 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
16558 				}
16559 				ZEND_VM_NEXT_OPCODE();
16560 			}
16561 		} else {
16562 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
16563 			zval_ptr_dtor_nogc(free_op1);
16564 
16565 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
16566 				if (!EG(exception)) {
16567 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
16568 				}
16569 				HANDLE_EXCEPTION();
16570 			}
16571 
16572 			iter->index = 0;
16573 			if (iter->funcs->rewind) {
16574 				iter->funcs->rewind(iter);
16575 				if (UNEXPECTED(EG(exception) != NULL)) {
16576 					OBJ_RELEASE(&iter->std);
16577 					HANDLE_EXCEPTION();
16578 				}
16579 			}
16580 
16581 			ZVAL_OBJ(&generator->values, &iter->std);
16582 		}
16583 	} else {
16584 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
16585 		HANDLE_EXCEPTION();
16586 	}
16587 
16588 	/* This is the default return value
16589 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
16590 	if (RETURN_VALUE_USED(opline)) {
16591 		ZVAL_NULL(EX_VAR(opline->result.var));
16592 	}
16593 
16594 	/* This generator has no send target (though the generator we delegate to might have one) */
16595 	generator->send_target = NULL;
16596 
16597 	/* We increment to the next op, so we are at the correct position when the
16598 	 * generator is resumed. */
16599 	ZEND_VM_INC_OPCODE();
16600 
16601 	/* The GOTO VM uses a local opline variable. We need to set the opline
16602 	 * variable in execute_data so we don't resume at an old position. */
16603 	SAVE_OPLINE();
16604 
16605 	ZEND_VM_RETURN();
16606 }
16607 
16608 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16609 {
16610 	USE_OPLINE
16611 	zval *value;
16612 	int result = 0;
16613 	zend_free_op free_op1;
16614 
16615 	SAVE_OPLINE();
16616 	value = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16617 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
16618 		if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
16619 			zend_class_entry *ce = Z_OBJCE_P(value);
16620 
16621 			if (UNEXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
16622 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
16623 				result = 1;
16624 			}
16625 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
16626 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
16627 
16628 			if (EXPECTED(type_name != NULL)) {
16629 				result = 1;
16630 			}
16631 		} else {
16632 			result = 1;
16633 		}
16634 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
16635 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
16636 		result = 1;
16637 	}
16638 	zval_ptr_dtor_nogc(free_op1);
16639 	ZEND_VM_SMART_BRANCH(result, 1);
16640 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16641 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16642 }
16643 
16644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16645 {
16646 	USE_OPLINE
16647 	zend_free_op free_op1;
16648 	zval *op1, *op2;
16649 	int result;
16650 
16651 	SAVE_OPLINE();
16652 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16653 	op2 = EX_CONSTANT(opline->op2);
16654 	result = fast_is_identical_function(op1, op2);
16655 	zval_ptr_dtor_nogc(free_op1);
16656 
16657 	ZEND_VM_SMART_BRANCH(result, 1);
16658 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16659 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16660 }
16661 
16662 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16663 {
16664 	USE_OPLINE
16665 	zend_free_op free_op1;
16666 	zval *op1, *op2;
16667 	int result;
16668 
16669 	SAVE_OPLINE();
16670 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16671 	op2 = EX_CONSTANT(opline->op2);
16672 	result = fast_is_not_identical_function(op1, op2);
16673 	zval_ptr_dtor_nogc(free_op1);
16674 
16675 	ZEND_VM_SMART_BRANCH(result, 1);
16676 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16677 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16678 }
16679 
16680 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
16681 {
16682 	USE_OPLINE
16683 	zend_free_op free_op1, free_op_data1;
16684 	zval *object;
16685 	zval *property;
16686 	zval *value;
16687 	zval *zptr;
16688 
16689 	SAVE_OPLINE();
16690 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
16691 
16692 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
16693 		zend_throw_error(NULL, "Using $this when not in object context");
16694 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
16695 
16696 		HANDLE_EXCEPTION();
16697 	}
16698 
16699 	property = EX_CONSTANT(opline->op2);
16700 
16701 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
16702 		zend_throw_error(NULL, "Cannot use string offset as an object");
16703 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
16704 
16705 		HANDLE_EXCEPTION();
16706 	}
16707 
16708 	do {
16709 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
16710 
16711 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
16712 			ZVAL_DEREF(object);
16713 			if (UNEXPECTED(!make_real_object(object))) {
16714 				zend_error(E_WARNING, "Attempt to assign property of non-object");
16715 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16716 					ZVAL_NULL(EX_VAR(opline->result.var));
16717 				}
16718 				break;
16719 			}
16720 		}
16721 
16722 		/* here we are sure we are dealing with an object */
16723 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
16724 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
16725 			if (UNEXPECTED(zptr == &EG(error_zval))) {
16726 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16727 					ZVAL_NULL(EX_VAR(opline->result.var));
16728 				}
16729 			} else {
16730 				ZVAL_DEREF(zptr);
16731 				SEPARATE_ZVAL_NOREF(zptr);
16732 
16733 				binary_op(zptr, zptr, value);
16734 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16735 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
16736 				}
16737 			}
16738 		} else {
16739 			zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
16740 		}
16741 	} while (0);
16742 
16743 	FREE_OP(free_op_data1);
16744 
16745 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16746 	/* assign_obj has two opcodes! */
16747 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
16748 }
16749 
16750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
16751 {
16752 	USE_OPLINE
16753 	zend_free_op free_op1, free_op_data1;
16754 	zval *var_ptr, rv;
16755 	zval *value, *container, *dim;
16756 
16757 	SAVE_OPLINE();
16758 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
16759 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
16760 		zend_throw_error(NULL, "Using $this when not in object context");
16761 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
16762 
16763 		HANDLE_EXCEPTION();
16764 	}
16765 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
16766 		zend_throw_error(NULL, "Cannot use string offset as an array");
16767 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
16768 
16769 		HANDLE_EXCEPTION();
16770 	}
16771 
16772 	dim = EX_CONSTANT(opline->op2);
16773 
16774 	do {
16775 		if (IS_VAR == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
16776 			if (IS_VAR != IS_UNUSED) {
16777 				ZVAL_DEREF(container);
16778 			}
16779 			if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
16780 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
16781 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
16782 				break;
16783 			}
16784 		}
16785 
16786 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CONST);
16787 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
16788 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
16789 		var_ptr = Z_INDIRECT(rv);
16790 
16791 		if (UNEXPECTED(var_ptr == NULL)) {
16792 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
16793 
16794 			FREE_OP(free_op_data1);
16795 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16796 			HANDLE_EXCEPTION();
16797 		}
16798 
16799 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
16800 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16801 				ZVAL_NULL(EX_VAR(opline->result.var));
16802 			}
16803 		} else {
16804 			ZVAL_DEREF(var_ptr);
16805 			SEPARATE_ZVAL_NOREF(var_ptr);
16806 
16807 			binary_op(var_ptr, var_ptr, value);
16808 
16809 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16810 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
16811 			}
16812 		}
16813 	} while (0);
16814 
16815 	FREE_OP(free_op_data1);
16816 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16817 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
16818 }
16819 
16820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
16821 {
16822 	USE_OPLINE
16823 	zend_free_op free_op1;
16824 	zval *var_ptr;
16825 	zval *value;
16826 
16827 	SAVE_OPLINE();
16828 	value = EX_CONSTANT(opline->op2);
16829 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
16830 
16831 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
16832 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
16833 
16834 		HANDLE_EXCEPTION();
16835 	}
16836 
16837 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
16838 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16839 			ZVAL_NULL(EX_VAR(opline->result.var));
16840 		}
16841 	} else {
16842 		ZVAL_DEREF(var_ptr);
16843 		SEPARATE_ZVAL_NOREF(var_ptr);
16844 
16845 		binary_op(var_ptr, var_ptr, value);
16846 
16847 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
16848 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
16849 		}
16850 	}
16851 
16852 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16853 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16854 }
16855 
16856 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16857 {
16858 #if 0 || (IS_CONST != IS_UNUSED)
16859 	USE_OPLINE
16860 
16861 # if 0 || (IS_VAR != IS_UNUSED)
16862 	if (EXPECTED(opline->extended_value == 0)) {
16863 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16864 	}
16865 # endif
16866 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16867 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16868 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16869 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16870 	}
16871 #else
16872 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16873 #endif
16874 }
16875 
16876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16877 {
16878 #if 0 || (IS_CONST != IS_UNUSED)
16879 	USE_OPLINE
16880 
16881 # if 0 || (IS_VAR != IS_UNUSED)
16882 	if (EXPECTED(opline->extended_value == 0)) {
16883 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16884 	}
16885 # endif
16886 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16887 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16888 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16889 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16890 	}
16891 #else
16892 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16893 #endif
16894 }
16895 
16896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16897 {
16898 #if 0 || (IS_CONST != IS_UNUSED)
16899 	USE_OPLINE
16900 
16901 # if 0 || (IS_VAR != IS_UNUSED)
16902 	if (EXPECTED(opline->extended_value == 0)) {
16903 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16904 	}
16905 # endif
16906 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16907 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16908 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16909 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16910 	}
16911 #else
16912 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16913 #endif
16914 }
16915 
16916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16917 {
16918 #if 0 || (IS_CONST != IS_UNUSED)
16919 	USE_OPLINE
16920 
16921 # if 0 || (IS_VAR != IS_UNUSED)
16922 	if (EXPECTED(opline->extended_value == 0)) {
16923 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16924 	}
16925 # endif
16926 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16927 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16928 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16929 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16930 	}
16931 #else
16932 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16933 #endif
16934 }
16935 
16936 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16937 {
16938 #if 0 || (IS_CONST != IS_UNUSED)
16939 	USE_OPLINE
16940 
16941 # if 0 || (IS_VAR != IS_UNUSED)
16942 	if (EXPECTED(opline->extended_value == 0)) {
16943 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16944 	}
16945 # endif
16946 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16947 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16948 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16949 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16950 	}
16951 #else
16952 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16953 #endif
16954 }
16955 
16956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16957 {
16958 #if 0 || (IS_CONST != IS_UNUSED)
16959 	USE_OPLINE
16960 
16961 # if 0 || (IS_VAR != IS_UNUSED)
16962 	if (EXPECTED(opline->extended_value == 0)) {
16963 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16964 	}
16965 # endif
16966 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16967 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16968 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16969 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16970 	}
16971 #else
16972 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16973 #endif
16974 }
16975 
16976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16977 {
16978 #if 0 || (IS_CONST != IS_UNUSED)
16979 	USE_OPLINE
16980 
16981 # if 0 || (IS_VAR != IS_UNUSED)
16982 	if (EXPECTED(opline->extended_value == 0)) {
16983 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16984 	}
16985 # endif
16986 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
16987 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16988 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
16989 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16990 	}
16991 #else
16992 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16993 #endif
16994 }
16995 
16996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16997 {
16998 #if 0 || (IS_CONST != IS_UNUSED)
16999 	USE_OPLINE
17000 
17001 # if 0 || (IS_VAR != IS_UNUSED)
17002 	if (EXPECTED(opline->extended_value == 0)) {
17003 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17004 	}
17005 # endif
17006 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
17007 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17008 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
17009 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17010 	}
17011 #else
17012 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17013 #endif
17014 }
17015 
17016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17017 {
17018 #if 0 || (IS_CONST != IS_UNUSED)
17019 	USE_OPLINE
17020 
17021 # if 0 || (IS_VAR != IS_UNUSED)
17022 	if (EXPECTED(opline->extended_value == 0)) {
17023 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17024 	}
17025 # endif
17026 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
17027 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17028 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
17029 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17030 	}
17031 #else
17032 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17033 #endif
17034 }
17035 
17036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17037 {
17038 #if 0 || (IS_CONST != IS_UNUSED)
17039 	USE_OPLINE
17040 
17041 # if 0 || (IS_VAR != IS_UNUSED)
17042 	if (EXPECTED(opline->extended_value == 0)) {
17043 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17044 	}
17045 # endif
17046 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
17047 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17048 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
17049 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17050 	}
17051 #else
17052 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17053 #endif
17054 }
17055 
17056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17057 {
17058 #if 0 || (IS_CONST != IS_UNUSED)
17059 	USE_OPLINE
17060 
17061 # if 0 || (IS_VAR != IS_UNUSED)
17062 	if (EXPECTED(opline->extended_value == 0)) {
17063 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17064 	}
17065 # endif
17066 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
17067 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17068 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
17069 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17070 	}
17071 #else
17072 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17073 #endif
17074 }
17075 
17076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17077 {
17078 #if 0 || (IS_CONST != IS_UNUSED)
17079 	USE_OPLINE
17080 
17081 # if 0 || (IS_VAR != IS_UNUSED)
17082 	if (EXPECTED(opline->extended_value == 0)) {
17083 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17084 	}
17085 # endif
17086 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
17087 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17088 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
17089 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17090 	}
17091 #else
17092 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17093 #endif
17094 }
17095 
17096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
17097 {
17098 	USE_OPLINE
17099 	zend_free_op free_op1;
17100 	zval *object;
17101 	zval *property;
17102 	zval *zptr;
17103 
17104 	SAVE_OPLINE();
17105 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17106 
17107 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
17108 		zend_throw_error(NULL, "Using $this when not in object context");
17109 
17110 		HANDLE_EXCEPTION();
17111 	}
17112 
17113 	property = EX_CONSTANT(opline->op2);
17114 
17115 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
17116 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
17117 
17118 		HANDLE_EXCEPTION();
17119 	}
17120 
17121 	do {
17122 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
17123 			ZVAL_DEREF(object);
17124 			if (UNEXPECTED(!make_real_object(object))) {
17125 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17126 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17127 					ZVAL_NULL(EX_VAR(opline->result.var));
17128 				}
17129 				break;
17130 			}
17131 		}
17132 
17133 		/* here we are sure we are dealing with an object */
17134 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
17135 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
17136 			if (UNEXPECTED(zptr == &EG(error_zval))) {
17137 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17138 					ZVAL_NULL(EX_VAR(opline->result.var));
17139 				}
17140 			} else {
17141 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
17142 					if (inc) {
17143 						fast_long_increment_function(zptr);
17144 					} else {
17145 						fast_long_decrement_function(zptr);
17146 					}
17147 				} else {
17148 					ZVAL_DEREF(zptr);
17149 					SEPARATE_ZVAL_NOREF(zptr);
17150 
17151 					if (inc) {
17152 						increment_function(zptr);
17153 					} else {
17154 						decrement_function(zptr);
17155 					}
17156 				}
17157 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17158 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
17159 				}
17160 			}
17161 		} else {
17162 			zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
17163 		}
17164 	} while (0);
17165 
17166 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17167 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17168 }
17169 
17170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17171 {
17172 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17173 }
17174 
17175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17176 {
17177 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17178 }
17179 
17180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
17181 {
17182 	USE_OPLINE
17183 	zend_free_op free_op1;
17184 	zval *object;
17185 	zval *property;
17186 	zval *zptr;
17187 
17188 	SAVE_OPLINE();
17189 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17190 
17191 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
17192 		zend_throw_error(NULL, "Using $this when not in object context");
17193 
17194 		HANDLE_EXCEPTION();
17195 	}
17196 
17197 	property = EX_CONSTANT(opline->op2);
17198 
17199 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
17200 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
17201 
17202 		HANDLE_EXCEPTION();
17203 	}
17204 
17205 	do {
17206 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
17207 			ZVAL_DEREF(object);
17208 			if (UNEXPECTED(!make_real_object(object))) {
17209 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17210 				ZVAL_NULL(EX_VAR(opline->result.var));
17211 				break;
17212 			}
17213 		}
17214 
17215 		/* here we are sure we are dealing with an object */
17216 
17217 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
17218 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
17219 			if (UNEXPECTED(zptr == &EG(error_zval))) {
17220 				ZVAL_NULL(EX_VAR(opline->result.var));
17221 			} else {
17222 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
17223 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
17224 					if (inc) {
17225 						fast_long_increment_function(zptr);
17226 					} else {
17227 						fast_long_decrement_function(zptr);
17228 					}
17229 				} else {
17230 					ZVAL_DEREF(zptr);
17231 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
17232 					zval_opt_copy_ctor(zptr);
17233 					if (inc) {
17234 						increment_function(zptr);
17235 					} else {
17236 						decrement_function(zptr);
17237 					}
17238 				}
17239 			}
17240 		} else {
17241 			zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
17242 		}
17243 	} while (0);
17244 
17245 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17246 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17247 }
17248 
17249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17250 {
17251 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17252 }
17253 
17254 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17255 {
17256 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17257 }
17258 
17259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17260 {
17261 	USE_OPLINE
17262 	zend_free_op free_op1;
17263 	zval *container;
17264 
17265 	SAVE_OPLINE();
17266 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17267 
17268 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17269 		zend_throw_error(NULL, "Cannot use string offset as an array");
17270 		HANDLE_EXCEPTION();
17271 	}
17272 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
17273 
17274 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17275 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
17276 	}
17277 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17278 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17279 }
17280 
17281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17282 {
17283 	USE_OPLINE
17284 	zend_free_op free_op1;
17285 	zval *container;
17286 
17287 	SAVE_OPLINE();
17288 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17289 
17290 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17291 		zend_throw_error(NULL, "Cannot use string offset as an array");
17292 		HANDLE_EXCEPTION();
17293 	}
17294 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
17295 
17296 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17297 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
17298 	}
17299 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17300 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17301 }
17302 
17303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17304 {
17305 	USE_OPLINE
17306 	zval *container;
17307 	zend_free_op free_op1;
17308 
17309 	SAVE_OPLINE();
17310 
17311 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
17312         if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
17313             zend_throw_error(NULL, "Cannot use temporary expression in write context");
17314 
17315 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17316 			HANDLE_EXCEPTION();
17317         }
17318 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17319 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17320 			zend_throw_error(NULL, "Cannot use string offset as an array");
17321 
17322 			HANDLE_EXCEPTION();
17323 		}
17324 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
17325 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17326 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
17327 		}
17328 
17329 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17330 	} else {
17331 		if (IS_CONST == IS_UNUSED) {
17332 			zend_throw_error(NULL, "Cannot use [] for reading");
17333 
17334 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17335 			HANDLE_EXCEPTION();
17336 		}
17337 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17338 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
17339 
17340 		zval_ptr_dtor_nogc(free_op1);
17341 	}
17342 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17343 }
17344 
17345 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17346 {
17347 	USE_OPLINE
17348 	zend_free_op free_op1;
17349 	zval *container;
17350 
17351 	SAVE_OPLINE();
17352 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17353 
17354 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17355 		zend_throw_error(NULL, "Cannot use string offset as an array");
17356 
17357 		HANDLE_EXCEPTION();
17358 	}
17359 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
17360 
17361 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17362 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
17363 	}
17364 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17365 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17366 }
17367 
17368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17369 {
17370 	USE_OPLINE
17371 	zend_free_op free_op1;
17372 	zval *container;
17373 
17374 	zval *offset;
17375 
17376 	SAVE_OPLINE();
17377 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17378 
17379 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
17380 		zend_throw_error(NULL, "Using $this when not in object context");
17381 
17382 		HANDLE_EXCEPTION();
17383 	}
17384 
17385 	offset = EX_CONSTANT(opline->op2);
17386 
17387 	if (IS_VAR == IS_CONST ||
17388 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17389 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17390 			container = Z_REFVAL_P(container);
17391 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
17392 				goto fetch_obj_r_no_object;
17393 			}
17394 		} else {
17395 			goto fetch_obj_r_no_object;
17396 		}
17397 	}
17398 
17399 	/* here we are sure we are dealing with an object */
17400 	do {
17401 		zend_object *zobj = Z_OBJ_P(container);
17402 		zval *retval;
17403 
17404 		if (IS_CONST == IS_CONST &&
17405 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
17406 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
17407 
17408 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
17409 				retval = OBJ_PROP(zobj, prop_offset);
17410 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
17411 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
17412 					break;
17413 				}
17414 			} else if (EXPECTED(zobj->properties != NULL)) {
17415 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
17416 				if (EXPECTED(retval)) {
17417 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
17418 					break;
17419 				}
17420 			}
17421 		}
17422 
17423 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
17424 fetch_obj_r_no_object:
17425 			zend_error(E_NOTICE, "Trying to get property of non-object");
17426 			ZVAL_NULL(EX_VAR(opline->result.var));
17427 		} else {
17428 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
17429 
17430 			if (retval != EX_VAR(opline->result.var)) {
17431 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
17432 			}
17433 		}
17434 	} while (0);
17435 
17436 	zval_ptr_dtor_nogc(free_op1);
17437 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17438 }
17439 
17440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17441 {
17442 	USE_OPLINE
17443 	zend_free_op free_op1;
17444 	zval *property;
17445 	zval *container;
17446 
17447 	SAVE_OPLINE();
17448 	property = EX_CONSTANT(opline->op2);
17449 
17450 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17451 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
17452 		zend_throw_error(NULL, "Using $this when not in object context");
17453 
17454 		HANDLE_EXCEPTION();
17455 	}
17456 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17457 		zend_throw_error(NULL, "Cannot use string offset as an object");
17458 
17459 		HANDLE_EXCEPTION();
17460 	}
17461 
17462 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
17463 
17464 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17465 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
17466 	}
17467 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17468 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17469 }
17470 
17471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17472 {
17473 	USE_OPLINE
17474 	zend_free_op free_op1;
17475 	zval *property;
17476 	zval *container;
17477 
17478 	SAVE_OPLINE();
17479 	property = EX_CONSTANT(opline->op2);
17480 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17481 
17482 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
17483 		zend_throw_error(NULL, "Using $this when not in object context");
17484 
17485 		HANDLE_EXCEPTION();
17486 	}
17487 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17488 		zend_throw_error(NULL, "Cannot use string offset as an object");
17489 
17490 		HANDLE_EXCEPTION();
17491 	}
17492 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
17493 
17494 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17495 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
17496 	}
17497 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17498 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17499 }
17500 
17501 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17502 {
17503 	USE_OPLINE
17504 	zval *container;
17505 
17506 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
17507 		/* Behave like FETCH_OBJ_W */
17508 		zend_free_op free_op1;
17509 		zval *property;
17510 
17511 		SAVE_OPLINE();
17512 		property = EX_CONSTANT(opline->op2);
17513 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17514 
17515 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
17516 			zend_throw_error(NULL, "Using $this when not in object context");
17517 
17518 			HANDLE_EXCEPTION();
17519 		}
17520 		if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
17521 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
17522 
17523 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17524 			HANDLE_EXCEPTION();
17525 		}
17526 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17527 			zend_throw_error(NULL, "Cannot use string offset as an object");
17528 
17529 			HANDLE_EXCEPTION();
17530 		}
17531 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
17532 
17533 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17534 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
17535 		}
17536 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17537 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17538 	} else {
17539 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17540 	}
17541 }
17542 
17543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17544 {
17545 	USE_OPLINE
17546 	zend_free_op free_op1;
17547 	zval *container, *property;
17548 
17549 	SAVE_OPLINE();
17550 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17551 
17552 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
17553 		zend_throw_error(NULL, "Using $this when not in object context");
17554 
17555 		HANDLE_EXCEPTION();
17556 	}
17557 
17558 	property = EX_CONSTANT(opline->op2);
17559 
17560 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
17561 		zend_throw_error(NULL, "Cannot use string offset as an object");
17562 
17563 		HANDLE_EXCEPTION();
17564 	}
17565 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
17566 
17567 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
17568 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
17569 	}
17570 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17571 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17572 }
17573 
17574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17575 {
17576 	USE_OPLINE
17577 	zend_free_op free_op1;
17578 	zval *object;
17579 	zval *property_name;
17580 
17581 	SAVE_OPLINE();
17582 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17583 
17584 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
17585 		zend_throw_error(NULL, "Using $this when not in object context");
17586 
17587 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
17588 		HANDLE_EXCEPTION();
17589 	}
17590 
17591 	property_name = EX_CONSTANT(opline->op2);
17592 
17593 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
17594 		zend_throw_error(NULL, "Cannot use string offset as an array");
17595 
17596 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
17597 		HANDLE_EXCEPTION();
17598 	}
17599 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
17600 
17601 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17602 	/* assign_obj has two opcodes! */
17603 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
17604 }
17605 
17606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17607 {
17608 	USE_OPLINE
17609 	zend_free_op free_op1;
17610 	zval *object_ptr;
17611 	zend_free_op free_op_data1;
17612 	zval *value;
17613 	zval *variable_ptr;
17614 	zval *dim;
17615 
17616 	SAVE_OPLINE();
17617 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17618 
17619 	if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
17620 		zend_throw_error(NULL, "Cannot use string offset as an array");
17621 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
17622 
17623 		HANDLE_EXCEPTION();
17624 	}
17625 
17626 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
17627 try_assign_dim_array:
17628 		if (IS_CONST == IS_UNUSED) {
17629 			SEPARATE_ARRAY(object_ptr);
17630 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
17631 			if (UNEXPECTED(variable_ptr == NULL)) {
17632 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
17633 				variable_ptr = &EG(error_zval);
17634 			}
17635 		} else {
17636 			dim = EX_CONSTANT(opline->op2);
17637 			SEPARATE_ARRAY(object_ptr);
17638 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_CONST, BP_VAR_W);
17639 
17640 		}
17641 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17642 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
17643 			FREE_OP(free_op_data1);
17644 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17645 				ZVAL_NULL(EX_VAR(opline->result.var));
17646 			}
17647 		} else {
17648 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
17649 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17650 				ZVAL_COPY(EX_VAR(opline->result.var), value);
17651 			}
17652 		}
17653 	} else {
17654 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
17655 			object_ptr = Z_REFVAL_P(object_ptr);
17656 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
17657 				goto try_assign_dim_array;
17658 			}
17659 		}
17660 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
17661 
17662 			zval *property_name = EX_CONSTANT(opline->op2);
17663 
17664 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
17665 
17666 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
17667 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
17668 				if (IS_CONST == IS_UNUSED) {
17669 					zend_throw_error(NULL, "[] operator not supported for strings");
17670 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
17671 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17672 					HANDLE_EXCEPTION();
17673 				} else {
17674 					zend_long offset;
17675 
17676 					dim = EX_CONSTANT(opline->op2);
17677 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
17678 
17679 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17680 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
17681 					FREE_OP(free_op_data1);
17682 				}
17683 			} else {
17684 				zval_ptr_dtor_nogc(object_ptr);
17685 assign_dim_convert_to_array:
17686 				ZVAL_NEW_ARR(object_ptr);
17687 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
17688 				goto try_assign_dim_array;
17689 			}
17690 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
17691 			if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
17692 				goto assign_dim_clean;
17693 			}
17694 			goto assign_dim_convert_to_array;
17695 		} else {
17696 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
17697 assign_dim_clean:
17698 			dim = EX_CONSTANT(opline->op2);
17699 
17700 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17701 			FREE_OP(free_op_data1);
17702 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17703 				ZVAL_NULL(EX_VAR(opline->result.var));
17704 			}
17705 		}
17706 	}
17707 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17708 	/* assign_dim has two opcodes! */
17709 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
17710 }
17711 
17712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17713 {
17714 	USE_OPLINE
17715 	zend_free_op free_op1;
17716 	zval *value;
17717 	zval *variable_ptr;
17718 
17719 	SAVE_OPLINE();
17720 	value = EX_CONSTANT(opline->op2);
17721 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17722 
17723 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
17724 
17725 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17726 			ZVAL_NULL(EX_VAR(opline->result.var));
17727 		}
17728 	} else {
17729 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
17730 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17731 			ZVAL_COPY(EX_VAR(opline->result.var), value);
17732 		}
17733 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17734 		/* zend_assign_to_variable() always takes care of op2, never free it! */
17735 	}
17736 
17737 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17738 }
17739 
17740 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17741 {
17742 	USE_OPLINE
17743 	zval *function_name;
17744 	zend_class_entry *ce;
17745 	zend_object *object;
17746 	zend_function *fbc;
17747 	zend_execute_data *call;
17748 
17749 	SAVE_OPLINE();
17750 
17751 	if (IS_VAR == IS_CONST) {
17752 		/* no function found. try a static method in class */
17753 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
17754 		if (UNEXPECTED(ce == NULL)) {
17755 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
17756 			if (UNEXPECTED(ce == NULL)) {
17757 				if (UNEXPECTED(EG(exception) != NULL)) {
17758 					HANDLE_EXCEPTION();
17759 				}
17760 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
17761 				HANDLE_EXCEPTION();
17762 			}
17763 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
17764 		}
17765 	} else {
17766 		ce = Z_CE_P(EX_VAR(opline->op1.var));
17767 	}
17768 
17769 	if (IS_VAR == IS_CONST &&
17770 	    IS_CONST == IS_CONST &&
17771 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
17772 		/* nothing to do */
17773 	} else if (IS_VAR != IS_CONST &&
17774 	           IS_CONST == IS_CONST &&
17775 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
17776 		/* do nothing */
17777 	} else if (IS_CONST != IS_UNUSED) {
17778 
17779 
17780 		function_name = EX_CONSTANT(opline->op2);
17781 		if (IS_CONST != IS_CONST) {
17782 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
17783 				do {
17784 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
17785 						function_name = Z_REFVAL_P(function_name);
17786 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
17787 							break;
17788 						}
17789 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
17790 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
17791 						if (UNEXPECTED(EG(exception) != NULL)) {
17792 							HANDLE_EXCEPTION();
17793 						}
17794 					}
17795 					zend_throw_error(NULL, "Function name must be a string");
17796 
17797 					HANDLE_EXCEPTION();
17798 				} while (0);
17799  			}
17800 		}
17801 
17802 		if (ce->get_static_method) {
17803 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
17804 		} else {
17805 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
17806 		}
17807 		if (UNEXPECTED(fbc == NULL)) {
17808 			if (EXPECTED(!EG(exception))) {
17809 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
17810 			}
17811 
17812 			HANDLE_EXCEPTION();
17813 		}
17814 		if (IS_CONST == IS_CONST &&
17815 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
17816 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
17817 			if (IS_VAR == IS_CONST) {
17818 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
17819 			} else {
17820 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
17821 			}
17822 		}
17823 		if (IS_CONST != IS_CONST) {
17824 
17825 		}
17826 	} else {
17827 		if (UNEXPECTED(ce->constructor == NULL)) {
17828 			zend_throw_error(NULL, "Cannot call constructor");
17829 			HANDLE_EXCEPTION();
17830 		}
17831 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
17832 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
17833 			HANDLE_EXCEPTION();
17834 		}
17835 		fbc = ce->constructor;
17836 	}
17837 
17838 	object = NULL;
17839 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
17840 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
17841 			object = Z_OBJ(EX(This));
17842 			ce = object->ce;
17843 		} else {
17844 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
17845 				/* Allowed for PHP 4 compatibility. */
17846 				zend_error(
17847 					E_DEPRECATED,
17848 					"Non-static method %s::%s() should not be called statically",
17849 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
17850 				if (UNEXPECTED(EG(exception) != NULL)) {
17851 					HANDLE_EXCEPTION();
17852 				}
17853 			} else {
17854 				/* An internal function assumes $this is present and won't check that.
17855 				 * So PHP would crash by allowing the call. */
17856 				zend_throw_error(
17857 					zend_ce_error,
17858 					"Non-static method %s::%s() cannot be called statically",
17859 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
17860 				HANDLE_EXCEPTION();
17861 			}
17862 		}
17863 	}
17864 
17865 	if (IS_VAR != IS_CONST) {
17866 		/* previous opcode is ZEND_FETCH_CLASS */
17867 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
17868 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
17869 			ce = EX(called_scope);
17870 		}
17871 	}
17872 
17873 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
17874 		fbc, opline->extended_value, ce, object);
17875 	call->prev_execute_data = EX(call);
17876 	EX(call) = call;
17877 
17878 	ZEND_VM_NEXT_OPCODE();
17879 }
17880 
17881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17882 {
17883 	USE_OPLINE
17884 
17885 	SAVE_OPLINE();
17886 	if (IS_VAR == IS_UNUSED) {
17887 		zend_constant *c;
17888 
17889 		if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
17890 			c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
17891 		} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
17892 			if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
17893 				char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
17894 				if (!actual) {
17895 					ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(EX_CONSTANT(opline->op2)));
17896 				} else {
17897 					actual++;
17898 					ZVAL_STRINGL(EX_VAR(opline->result.var),
17899 							actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
17900 				}
17901 				/* non-qualified constant - allow text substitution */
17902 				zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
17903 						Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
17904 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17905 			} else {
17906 				zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
17907 				HANDLE_EXCEPTION();
17908 			}
17909 		} else {
17910 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), c);
17911 		}
17912 #ifdef ZTS
17913 		if (c->flags & CONST_PERSISTENT) {
17914 			ZVAL_DUP(EX_VAR(opline->result.var), &c->value);
17915 		} else {
17916 			ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
17917 		}
17918 #else
17919 		ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
17920 #endif
17921 	} else {
17922 		/* class constant */
17923 		zend_class_entry *ce;
17924 		zval *value;
17925 
17926 		do {
17927 			if (IS_VAR == IS_CONST) {
17928 				if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
17929 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
17930 					ZVAL_DEREF(value);
17931 #ifdef ZTS
17932 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
17933 #endif
17934 					break;
17935 				} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
17936 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
17937 				} else {
17938 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
17939 					if (UNEXPECTED(ce == NULL)) {
17940 						if (EXPECTED(!EG(exception))) {
17941 							zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
17942 						}
17943 						HANDLE_EXCEPTION();
17944 					}
17945 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
17946 				}
17947 			} else {
17948 				ce = Z_CE_P(EX_VAR(opline->op1.var));
17949 				if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
17950 					ZVAL_DEREF(value);
17951 					break;
17952 				}
17953 			}
17954 
17955 			if (EXPECTED((value = zend_hash_find(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
17956 				ZVAL_DEREF(value);
17957 				if (Z_CONSTANT_P(value)) {
17958 					EG(scope) = ce;
17959 					zval_update_constant_ex(value, 1, NULL);
17960 					EG(scope) = EX(func)->op_array.scope;
17961 					if (UNEXPECTED(EG(exception) != NULL)) {
17962 						HANDLE_EXCEPTION();
17963 					}
17964 				}
17965 				if (IS_VAR == IS_CONST) {
17966 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
17967 				} else {
17968 					CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
17969 				}
17970 			} else {
17971 				zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
17972 				HANDLE_EXCEPTION();
17973 			}
17974 		} while (0);
17975 #ifdef ZTS
17976 		if (ce->type == ZEND_INTERNAL_CLASS) {
17977 			ZVAL_DUP(EX_VAR(opline->result.var), value);
17978 		} else {
17979 			ZVAL_COPY(EX_VAR(opline->result.var), value);
17980 		}
17981 #else
17982 		ZVAL_COPY(EX_VAR(opline->result.var), value);
17983 #endif
17984 	}
17985 	ZEND_VM_NEXT_OPCODE();
17986 }
17987 
17988 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17989 {
17990 	USE_OPLINE
17991 	zend_free_op free_op1;
17992 	zval *expr_ptr, new_expr;
17993 
17994 	SAVE_OPLINE();
17995 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
17996 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
17997 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17998 		if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
17999 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
18000 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
18001 			HANDLE_EXCEPTION();
18002 		}
18003 		ZVAL_MAKE_REF(expr_ptr);
18004 		Z_ADDREF_P(expr_ptr);
18005 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18006 	} else {
18007 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18008 		if (IS_VAR == IS_TMP_VAR) {
18009 			/* pass */
18010 		} else if (IS_VAR == IS_CONST) {
18011 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
18012 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
18013 				zval_copy_ctor_func(&new_expr);
18014 				expr_ptr = &new_expr;
18015 			}
18016 		} else if (IS_VAR == IS_CV) {
18017 			ZVAL_DEREF(expr_ptr);
18018 			if (Z_REFCOUNTED_P(expr_ptr)) {
18019 				Z_ADDREF_P(expr_ptr);
18020 			}
18021 		} else /* if (IS_VAR == IS_VAR) */ {
18022 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
18023 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
18024 
18025 				expr_ptr = Z_REFVAL_P(expr_ptr);
18026 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
18027 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
18028 					expr_ptr = &new_expr;
18029 					efree_size(ref, sizeof(zend_reference));
18030 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
18031 					Z_ADDREF_P(expr_ptr);
18032 				}
18033 			}
18034 		}
18035 	}
18036 
18037 	if (IS_CONST != IS_UNUSED) {
18038 
18039 		zval *offset = EX_CONSTANT(opline->op2);
18040 		zend_string *str;
18041 		zend_ulong hval;
18042 
18043 add_again:
18044 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
18045 			str = Z_STR_P(offset);
18046 			if (IS_CONST != IS_CONST) {
18047 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
18048 					goto num_index;
18049 				}
18050 			}
18051 str_index:
18052 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
18053 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
18054 			hval = Z_LVAL_P(offset);
18055 num_index:
18056 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
18057 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
18058 			offset = Z_REFVAL_P(offset);
18059 			goto add_again;
18060 		} else if (Z_TYPE_P(offset) == IS_NULL) {
18061 			str = ZSTR_EMPTY_ALLOC();
18062 			goto str_index;
18063 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
18064 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
18065 			goto num_index;
18066 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
18067 			hval = 0;
18068 			goto num_index;
18069 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
18070 			hval = 1;
18071 			goto num_index;
18072 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
18073 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
18074 			str = ZSTR_EMPTY_ALLOC();
18075 			goto str_index;
18076 		} else {
18077 			zend_error(E_WARNING, "Illegal offset type");
18078 			zval_ptr_dtor(expr_ptr);
18079 		}
18080 
18081 	} else {
18082 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
18083 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
18084 			zval_ptr_dtor(expr_ptr);
18085 		}
18086 	}
18087 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18088 }
18089 
18090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18091 {
18092 	zval *array;
18093 	uint32_t size;
18094 	USE_OPLINE
18095 
18096 	array = EX_VAR(opline->result.var);
18097 	if (IS_VAR != IS_UNUSED) {
18098 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
18099 	} else {
18100 		size = 0;
18101 	}
18102 	ZVAL_NEW_ARR(array);
18103 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
18104 
18105 	if (IS_VAR != IS_UNUSED) {
18106 		/* Explicitly initialize array as not-packed if flag is set */
18107 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
18108 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
18109 		}
18110 	}
18111 
18112 	if (IS_VAR == IS_UNUSED) {
18113 		ZEND_VM_NEXT_OPCODE();
18114 #if 0 || (IS_VAR != IS_UNUSED)
18115 	} else {
18116 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18117 #endif
18118 	}
18119 }
18120 
18121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18122 {
18123 	USE_OPLINE
18124 	zend_free_op free_op1;
18125 	zval *container;
18126 	zval *offset;
18127 	zend_ulong hval;
18128 	zend_string *key;
18129 
18130 	SAVE_OPLINE();
18131 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18132 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
18133 		zend_throw_error(NULL, "Using $this when not in object context");
18134 
18135 		HANDLE_EXCEPTION();
18136 	}
18137 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
18138 		zend_throw_error(NULL, "Cannot unset string offsets");
18139 
18140 		HANDLE_EXCEPTION();
18141 	}
18142 	offset = EX_CONSTANT(opline->op2);
18143 
18144 	do {
18145 		if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18146 			HashTable *ht;
18147 
18148 unset_dim_array:
18149 			SEPARATE_ARRAY(container);
18150 			ht = Z_ARRVAL_P(container);
18151 offset_again:
18152 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
18153 				key = Z_STR_P(offset);
18154 				if (IS_CONST != IS_CONST) {
18155 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
18156 						goto num_index_dim;
18157 					}
18158 				}
18159 str_index_dim:
18160 				if (ht == &EG(symbol_table)) {
18161 					zend_delete_global_variable(key);
18162 				} else {
18163 					zend_hash_del(ht, key);
18164 				}
18165 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
18166 				hval = Z_LVAL_P(offset);
18167 num_index_dim:
18168 				zend_hash_index_del(ht, hval);
18169 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
18170 				offset = Z_REFVAL_P(offset);
18171 				goto offset_again;
18172 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
18173 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
18174 				goto num_index_dim;
18175 			} else if (Z_TYPE_P(offset) == IS_NULL) {
18176 				key = ZSTR_EMPTY_ALLOC();
18177 				goto str_index_dim;
18178 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
18179 				hval = 0;
18180 				goto num_index_dim;
18181 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
18182 				hval = 1;
18183 				goto num_index_dim;
18184 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
18185 				hval = Z_RES_HANDLE_P(offset);
18186 				goto num_index_dim;
18187 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
18188 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
18189 				key = ZSTR_EMPTY_ALLOC();
18190 				goto str_index_dim;
18191 			} else {
18192 				zend_error(E_WARNING, "Illegal offset type in unset");
18193 			}
18194 			break;
18195 		} else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
18196 			container = Z_REFVAL_P(container);
18197 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18198 				goto unset_dim_array;
18199 			}
18200 		}
18201 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
18202 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
18203 		}
18204 		if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18205 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
18206 				zend_throw_error(NULL, "Cannot use object as array");
18207 			} else {
18208 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
18209 			}
18210 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
18211 			zend_throw_error(NULL, "Cannot unset string offsets");
18212 		}
18213 	} while (0);
18214 
18215 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18216 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18217 }
18218 
18219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18220 {
18221 	USE_OPLINE
18222 	zend_free_op free_op1;
18223 	zval *container;
18224 	zval *offset;
18225 
18226 	SAVE_OPLINE();
18227 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18228 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
18229 		zend_throw_error(NULL, "Using $this when not in object context");
18230 
18231 		HANDLE_EXCEPTION();
18232 	}
18233 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
18234 		zend_throw_error(NULL, "Cannot unset string offsets");
18235 
18236 		HANDLE_EXCEPTION();
18237 	}
18238 	offset = EX_CONSTANT(opline->op2);
18239 
18240 	do {
18241 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
18242 			if (Z_ISREF_P(container)) {
18243 				container = Z_REFVAL_P(container);
18244 				if (Z_TYPE_P(container) != IS_OBJECT) {
18245 					break;
18246 				}
18247 			} else {
18248 				break;
18249 			}
18250 		}
18251 		if (Z_OBJ_HT_P(container)->unset_property) {
18252 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
18253 		} else {
18254 			zend_error(E_NOTICE, "Trying to unset property of non-object");
18255 		}
18256 	} while (0);
18257 
18258 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18259 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18260 }
18261 
18262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18263 {
18264 	USE_OPLINE
18265 
18266 	zend_generator *generator = zend_get_running_generator(execute_data);
18267 
18268 	SAVE_OPLINE();
18269 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
18270 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
18271 
18272 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18273 		HANDLE_EXCEPTION();
18274 	}
18275 
18276 	/* Destroy the previously yielded value */
18277 	zval_ptr_dtor(&generator->value);
18278 
18279 	/* Destroy the previously yielded key */
18280 	zval_ptr_dtor(&generator->key);
18281 
18282 	/* Set the new yielded value */
18283 	if (IS_VAR != IS_UNUSED) {
18284 		zend_free_op free_op1;
18285 
18286 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
18287 			/* Constants and temporary variables aren't yieldable by reference,
18288 			 * but we still allow them with a notice. */
18289 			if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
18290 				zval *value;
18291 
18292 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18293 
18294 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18295 				ZVAL_COPY_VALUE(&generator->value, value);
18296 				if (IS_VAR == IS_CONST) {
18297 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18298 						zval_copy_ctor_func(&generator->value);
18299 					}
18300 				}
18301 			} else {
18302 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18303 
18304 				if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
18305 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
18306 
18307 					HANDLE_EXCEPTION();
18308 				}
18309 
18310 				/* If a function call result is yielded and the function did
18311 				 * not return by reference we throw a notice. */
18312 				if (IS_VAR == IS_VAR &&
18313 				    (value_ptr == &EG(uninitialized_zval) ||
18314 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
18315 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
18316 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18317 				} else {
18318 					ZVAL_MAKE_REF(value_ptr);
18319 				}
18320 				ZVAL_COPY(&generator->value, value_ptr);
18321 
18322 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18323 			}
18324 		} else {
18325 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18326 
18327 			/* Consts, temporary variables and references need copying */
18328 			if (IS_VAR == IS_CONST) {
18329 				ZVAL_COPY_VALUE(&generator->value, value);
18330 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18331 					zval_copy_ctor_func(&generator->value);
18332 				}
18333 			} else if (IS_VAR == IS_TMP_VAR) {
18334 				ZVAL_COPY_VALUE(&generator->value, value);
18335             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
18336 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
18337 				zval_ptr_dtor_nogc(free_op1);
18338 			} else {
18339 				ZVAL_COPY_VALUE(&generator->value, value);
18340 				if (IS_VAR == IS_CV) {
18341 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
18342 				}
18343 			}
18344 		}
18345 	} else {
18346 		/* If no value was specified yield null */
18347 		ZVAL_NULL(&generator->value);
18348 	}
18349 
18350 	/* Set the new yielded key */
18351 	if (IS_CONST != IS_UNUSED) {
18352 
18353 		zval *key = EX_CONSTANT(opline->op2);
18354 
18355 		/* Consts, temporary variables and references need copying */
18356 		if (IS_CONST == IS_CONST) {
18357 			ZVAL_COPY_VALUE(&generator->key, key);
18358 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
18359 				zval_copy_ctor_func(&generator->key);
18360 			}
18361 		} else if (IS_CONST == IS_TMP_VAR) {
18362 			ZVAL_COPY_VALUE(&generator->key, key);
18363 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
18364 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
18365 
18366 		} else {
18367 			ZVAL_COPY_VALUE(&generator->key, key);
18368 			if (IS_CONST == IS_CV) {
18369 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
18370 			}
18371 		}
18372 
18373 		if (Z_TYPE(generator->key) == IS_LONG
18374 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
18375 		) {
18376 			generator->largest_used_integer_key = Z_LVAL(generator->key);
18377 		}
18378 	} else {
18379 		/* If no key was specified we use auto-increment keys */
18380 		generator->largest_used_integer_key++;
18381 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
18382 	}
18383 
18384 	if (RETURN_VALUE_USED(opline)) {
18385 		/* If the return value of yield is used set the send
18386 		 * target and initialize it to NULL */
18387 		generator->send_target = EX_VAR(opline->result.var);
18388 		ZVAL_NULL(generator->send_target);
18389 	} else {
18390 		generator->send_target = NULL;
18391 	}
18392 
18393 	/* We increment to the next op, so we are at the correct position when the
18394 	 * generator is resumed. */
18395 	ZEND_VM_INC_OPCODE();
18396 
18397 	/* The GOTO VM uses a local opline variable. We need to set the opline
18398 	 * variable in execute_data so we don't resume at an old position. */
18399 	SAVE_OPLINE();
18400 
18401 	ZEND_VM_RETURN();
18402 }
18403 
18404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18405 {
18406 	USE_OPLINE
18407 	zend_free_op free_op1, free_op2;
18408 	zval *op1, *op2;
18409 	int result;
18410 
18411 	SAVE_OPLINE();
18412 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
18413 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
18414 	result = fast_is_identical_function(op1, op2);
18415 	zval_ptr_dtor_nogc(free_op1);
18416 	zval_ptr_dtor_nogc(free_op2);
18417 	ZEND_VM_SMART_BRANCH(result, 1);
18418 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18420 }
18421 
18422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18423 {
18424 	USE_OPLINE
18425 	zend_free_op free_op1, free_op2;
18426 	zval *op1, *op2;
18427 	int result;
18428 
18429 	SAVE_OPLINE();
18430 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
18431 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
18432 	result = fast_is_not_identical_function(op1, op2);
18433 	zval_ptr_dtor_nogc(free_op1);
18434 	zval_ptr_dtor_nogc(free_op2);
18435 	ZEND_VM_SMART_BRANCH(result, 1);
18436 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18437 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18438 }
18439 
18440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18441 {
18442 	USE_OPLINE
18443 	zend_free_op free_op1, free_op2;
18444 	zval *value;
18445 	zval *variable_ptr;
18446 
18447 	SAVE_OPLINE();
18448 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
18449 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18450 
18451 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
18452 		zval_ptr_dtor_nogc(free_op2);
18453 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18454 			ZVAL_NULL(EX_VAR(opline->result.var));
18455 		}
18456 	} else {
18457 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
18458 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18459 			ZVAL_COPY(EX_VAR(opline->result.var), value);
18460 		}
18461 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18462 		/* zend_assign_to_variable() always takes care of op2, never free it! */
18463 	}
18464 
18465 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18466 }
18467 
18468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18469 {
18470 	USE_OPLINE
18471 
18472 	zend_generator *generator = zend_get_running_generator(execute_data);
18473 
18474 	SAVE_OPLINE();
18475 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
18476 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
18477 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18478 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18479 		HANDLE_EXCEPTION();
18480 	}
18481 
18482 	/* Destroy the previously yielded value */
18483 	zval_ptr_dtor(&generator->value);
18484 
18485 	/* Destroy the previously yielded key */
18486 	zval_ptr_dtor(&generator->key);
18487 
18488 	/* Set the new yielded value */
18489 	if (IS_VAR != IS_UNUSED) {
18490 		zend_free_op free_op1;
18491 
18492 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
18493 			/* Constants and temporary variables aren't yieldable by reference,
18494 			 * but we still allow them with a notice. */
18495 			if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
18496 				zval *value;
18497 
18498 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18499 
18500 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18501 				ZVAL_COPY_VALUE(&generator->value, value);
18502 				if (IS_VAR == IS_CONST) {
18503 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18504 						zval_copy_ctor_func(&generator->value);
18505 					}
18506 				}
18507 			} else {
18508 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18509 
18510 				if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
18511 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
18512 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18513 					HANDLE_EXCEPTION();
18514 				}
18515 
18516 				/* If a function call result is yielded and the function did
18517 				 * not return by reference we throw a notice. */
18518 				if (IS_VAR == IS_VAR &&
18519 				    (value_ptr == &EG(uninitialized_zval) ||
18520 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
18521 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
18522 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18523 				} else {
18524 					ZVAL_MAKE_REF(value_ptr);
18525 				}
18526 				ZVAL_COPY(&generator->value, value_ptr);
18527 
18528 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18529 			}
18530 		} else {
18531 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18532 
18533 			/* Consts, temporary variables and references need copying */
18534 			if (IS_VAR == IS_CONST) {
18535 				ZVAL_COPY_VALUE(&generator->value, value);
18536 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18537 					zval_copy_ctor_func(&generator->value);
18538 				}
18539 			} else if (IS_VAR == IS_TMP_VAR) {
18540 				ZVAL_COPY_VALUE(&generator->value, value);
18541             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
18542 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
18543 				zval_ptr_dtor_nogc(free_op1);
18544 			} else {
18545 				ZVAL_COPY_VALUE(&generator->value, value);
18546 				if (IS_VAR == IS_CV) {
18547 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
18548 				}
18549 			}
18550 		}
18551 	} else {
18552 		/* If no value was specified yield null */
18553 		ZVAL_NULL(&generator->value);
18554 	}
18555 
18556 	/* Set the new yielded key */
18557 	if (IS_TMP_VAR != IS_UNUSED) {
18558 		zend_free_op free_op2;
18559 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
18560 
18561 		/* Consts, temporary variables and references need copying */
18562 		if (IS_TMP_VAR == IS_CONST) {
18563 			ZVAL_COPY_VALUE(&generator->key, key);
18564 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
18565 				zval_copy_ctor_func(&generator->key);
18566 			}
18567 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
18568 			ZVAL_COPY_VALUE(&generator->key, key);
18569 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
18570 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
18571 
18572 		} else {
18573 			ZVAL_COPY_VALUE(&generator->key, key);
18574 			if (IS_TMP_VAR == IS_CV) {
18575 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
18576 			}
18577 		}
18578 
18579 		if (Z_TYPE(generator->key) == IS_LONG
18580 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
18581 		) {
18582 			generator->largest_used_integer_key = Z_LVAL(generator->key);
18583 		}
18584 	} else {
18585 		/* If no key was specified we use auto-increment keys */
18586 		generator->largest_used_integer_key++;
18587 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
18588 	}
18589 
18590 	if (RETURN_VALUE_USED(opline)) {
18591 		/* If the return value of yield is used set the send
18592 		 * target and initialize it to NULL */
18593 		generator->send_target = EX_VAR(opline->result.var);
18594 		ZVAL_NULL(generator->send_target);
18595 	} else {
18596 		generator->send_target = NULL;
18597 	}
18598 
18599 	/* We increment to the next op, so we are at the correct position when the
18600 	 * generator is resumed. */
18601 	ZEND_VM_INC_OPCODE();
18602 
18603 	/* The GOTO VM uses a local opline variable. We need to set the opline
18604 	 * variable in execute_data so we don't resume at an old position. */
18605 	SAVE_OPLINE();
18606 
18607 	ZEND_VM_RETURN();
18608 }
18609 
18610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18611 {
18612 	USE_OPLINE
18613 	zend_free_op free_op1, free_op2;
18614 	zval *op1, *op2;
18615 	int result;
18616 
18617 	SAVE_OPLINE();
18618 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
18619 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
18620 	result = fast_is_identical_function(op1, op2);
18621 	zval_ptr_dtor_nogc(free_op1);
18622 	zval_ptr_dtor_nogc(free_op2);
18623 	ZEND_VM_SMART_BRANCH(result, 1);
18624 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18625 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18626 }
18627 
18628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18629 {
18630 	USE_OPLINE
18631 	zend_free_op free_op1, free_op2;
18632 	zval *op1, *op2;
18633 	int result;
18634 
18635 	SAVE_OPLINE();
18636 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
18637 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
18638 	result = fast_is_not_identical_function(op1, op2);
18639 	zval_ptr_dtor_nogc(free_op1);
18640 	zval_ptr_dtor_nogc(free_op2);
18641 	ZEND_VM_SMART_BRANCH(result, 1);
18642 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18643 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18644 }
18645 
18646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18647 {
18648 	USE_OPLINE
18649 	zend_free_op free_op1, free_op2;
18650 	zval *value;
18651 	zval *variable_ptr;
18652 
18653 	SAVE_OPLINE();
18654 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
18655 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18656 
18657 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
18658 		zval_ptr_dtor_nogc(free_op2);
18659 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18660 			ZVAL_NULL(EX_VAR(opline->result.var));
18661 		}
18662 	} else {
18663 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
18664 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18665 			ZVAL_COPY(EX_VAR(opline->result.var), value);
18666 		}
18667 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18668 		/* zend_assign_to_variable() always takes care of op2, never free it! */
18669 	}
18670 
18671 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18672 }
18673 
18674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18675 {
18676 	USE_OPLINE
18677 	zend_free_op free_op1, free_op2;
18678 	zval *variable_ptr;
18679 	zval *value_ptr;
18680 
18681 	SAVE_OPLINE();
18682 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
18683 
18684 	if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
18685 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
18686 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18687 		HANDLE_EXCEPTION();
18688 	}
18689 	if (IS_VAR == IS_VAR &&
18690 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
18691 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
18692 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
18693 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18694 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
18695 		HANDLE_EXCEPTION();
18696 	}
18697 	if (IS_VAR == IS_VAR &&
18698 	    (value_ptr == &EG(uninitialized_zval) ||
18699 	     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
18700 	      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
18701 		if (!(free_op2 != NULL) && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
18702 			Z_TRY_ADDREF_P(value_ptr);
18703 		}
18704 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
18705 		if (UNEXPECTED(EG(exception) != NULL)) {
18706 			if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
18707 			HANDLE_EXCEPTION();
18708 		}
18709 		ZEND_VM_TAIL_CALL(ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18710 	}
18711 
18712 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18713 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
18714 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
18715 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
18716 		HANDLE_EXCEPTION();
18717 	}
18718 	if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
18719 	    (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
18720 		variable_ptr = &EG(uninitialized_zval);
18721 	} else {
18722 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
18723 	}
18724 
18725 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18726 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
18727 	}
18728 
18729 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18730 	if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
18731 
18732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18733 }
18734 
18735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18736 {
18737 	USE_OPLINE
18738 
18739 	zend_generator *generator = zend_get_running_generator(execute_data);
18740 
18741 	SAVE_OPLINE();
18742 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
18743 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
18744 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18745 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18746 		HANDLE_EXCEPTION();
18747 	}
18748 
18749 	/* Destroy the previously yielded value */
18750 	zval_ptr_dtor(&generator->value);
18751 
18752 	/* Destroy the previously yielded key */
18753 	zval_ptr_dtor(&generator->key);
18754 
18755 	/* Set the new yielded value */
18756 	if (IS_VAR != IS_UNUSED) {
18757 		zend_free_op free_op1;
18758 
18759 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
18760 			/* Constants and temporary variables aren't yieldable by reference,
18761 			 * but we still allow them with a notice. */
18762 			if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
18763 				zval *value;
18764 
18765 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18766 
18767 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18768 				ZVAL_COPY_VALUE(&generator->value, value);
18769 				if (IS_VAR == IS_CONST) {
18770 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18771 						zval_copy_ctor_func(&generator->value);
18772 					}
18773 				}
18774 			} else {
18775 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18776 
18777 				if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
18778 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
18779 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
18780 					HANDLE_EXCEPTION();
18781 				}
18782 
18783 				/* If a function call result is yielded and the function did
18784 				 * not return by reference we throw a notice. */
18785 				if (IS_VAR == IS_VAR &&
18786 				    (value_ptr == &EG(uninitialized_zval) ||
18787 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
18788 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
18789 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18790 				} else {
18791 					ZVAL_MAKE_REF(value_ptr);
18792 				}
18793 				ZVAL_COPY(&generator->value, value_ptr);
18794 
18795 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18796 			}
18797 		} else {
18798 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18799 
18800 			/* Consts, temporary variables and references need copying */
18801 			if (IS_VAR == IS_CONST) {
18802 				ZVAL_COPY_VALUE(&generator->value, value);
18803 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
18804 					zval_copy_ctor_func(&generator->value);
18805 				}
18806 			} else if (IS_VAR == IS_TMP_VAR) {
18807 				ZVAL_COPY_VALUE(&generator->value, value);
18808             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
18809 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
18810 				zval_ptr_dtor_nogc(free_op1);
18811 			} else {
18812 				ZVAL_COPY_VALUE(&generator->value, value);
18813 				if (IS_VAR == IS_CV) {
18814 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
18815 				}
18816 			}
18817 		}
18818 	} else {
18819 		/* If no value was specified yield null */
18820 		ZVAL_NULL(&generator->value);
18821 	}
18822 
18823 	/* Set the new yielded key */
18824 	if (IS_VAR != IS_UNUSED) {
18825 		zend_free_op free_op2;
18826 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
18827 
18828 		/* Consts, temporary variables and references need copying */
18829 		if (IS_VAR == IS_CONST) {
18830 			ZVAL_COPY_VALUE(&generator->key, key);
18831 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
18832 				zval_copy_ctor_func(&generator->key);
18833 			}
18834 		} else if (IS_VAR == IS_TMP_VAR) {
18835 			ZVAL_COPY_VALUE(&generator->key, key);
18836 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
18837 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
18838 			zval_ptr_dtor_nogc(free_op2);
18839 		} else {
18840 			ZVAL_COPY_VALUE(&generator->key, key);
18841 			if (IS_VAR == IS_CV) {
18842 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
18843 			}
18844 		}
18845 
18846 		if (Z_TYPE(generator->key) == IS_LONG
18847 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
18848 		) {
18849 			generator->largest_used_integer_key = Z_LVAL(generator->key);
18850 		}
18851 	} else {
18852 		/* If no key was specified we use auto-increment keys */
18853 		generator->largest_used_integer_key++;
18854 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
18855 	}
18856 
18857 	if (RETURN_VALUE_USED(opline)) {
18858 		/* If the return value of yield is used set the send
18859 		 * target and initialize it to NULL */
18860 		generator->send_target = EX_VAR(opline->result.var);
18861 		ZVAL_NULL(generator->send_target);
18862 	} else {
18863 		generator->send_target = NULL;
18864 	}
18865 
18866 	/* We increment to the next op, so we are at the correct position when the
18867 	 * generator is resumed. */
18868 	ZEND_VM_INC_OPCODE();
18869 
18870 	/* The GOTO VM uses a local opline variable. We need to set the opline
18871 	 * variable in execute_data so we don't resume at an old position. */
18872 	SAVE_OPLINE();
18873 
18874 	ZEND_VM_RETURN();
18875 }
18876 
18877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
18878 {
18879 	USE_OPLINE
18880 	zend_free_op free_op1, free_op_data1;
18881 	zval *var_ptr, rv;
18882 	zval *value, *container, *dim;
18883 
18884 	SAVE_OPLINE();
18885 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18886 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
18887 		zend_throw_error(NULL, "Using $this when not in object context");
18888 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
18889 
18890 		HANDLE_EXCEPTION();
18891 	}
18892 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
18893 		zend_throw_error(NULL, "Cannot use string offset as an array");
18894 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
18895 
18896 		HANDLE_EXCEPTION();
18897 	}
18898 
18899 	dim = NULL;
18900 
18901 	do {
18902 		if (IS_VAR == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
18903 			if (IS_VAR != IS_UNUSED) {
18904 				ZVAL_DEREF(container);
18905 			}
18906 			if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18907 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
18908 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
18909 				break;
18910 			}
18911 		}
18912 
18913 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_UNUSED);
18914 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
18915 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
18916 		var_ptr = Z_INDIRECT(rv);
18917 
18918 		if (UNEXPECTED(var_ptr == NULL)) {
18919 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
18920 
18921 			FREE_OP(free_op_data1);
18922 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18923 			HANDLE_EXCEPTION();
18924 		}
18925 
18926 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
18927 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18928 				ZVAL_NULL(EX_VAR(opline->result.var));
18929 			}
18930 		} else {
18931 			ZVAL_DEREF(var_ptr);
18932 			SEPARATE_ZVAL_NOREF(var_ptr);
18933 
18934 			binary_op(var_ptr, var_ptr, value);
18935 
18936 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18937 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
18938 			}
18939 		}
18940 	} while (0);
18941 
18942 	FREE_OP(free_op_data1);
18943 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18944 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
18945 }
18946 
18947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18948 {
18949 #if 0 || (IS_UNUSED != IS_UNUSED)
18950 	USE_OPLINE
18951 
18952 # if 0 || (IS_VAR != IS_UNUSED)
18953 	if (EXPECTED(opline->extended_value == 0)) {
18954 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18955 	}
18956 # endif
18957 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
18958 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18959 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
18960 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18961 	}
18962 #else
18963 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18964 #endif
18965 }
18966 
18967 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18968 {
18969 #if 0 || (IS_UNUSED != IS_UNUSED)
18970 	USE_OPLINE
18971 
18972 # if 0 || (IS_VAR != IS_UNUSED)
18973 	if (EXPECTED(opline->extended_value == 0)) {
18974 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18975 	}
18976 # endif
18977 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
18978 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18979 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
18980 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18981 	}
18982 #else
18983 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18984 #endif
18985 }
18986 
18987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18988 {
18989 #if 0 || (IS_UNUSED != IS_UNUSED)
18990 	USE_OPLINE
18991 
18992 # if 0 || (IS_VAR != IS_UNUSED)
18993 	if (EXPECTED(opline->extended_value == 0)) {
18994 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18995 	}
18996 # endif
18997 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
18998 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18999 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19000 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19001 	}
19002 #else
19003 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19004 #endif
19005 }
19006 
19007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19008 {
19009 #if 0 || (IS_UNUSED != IS_UNUSED)
19010 	USE_OPLINE
19011 
19012 # if 0 || (IS_VAR != IS_UNUSED)
19013 	if (EXPECTED(opline->extended_value == 0)) {
19014 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19015 	}
19016 # endif
19017 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19018 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19019 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19020 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19021 	}
19022 #else
19023 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19024 #endif
19025 }
19026 
19027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19028 {
19029 #if 0 || (IS_UNUSED != IS_UNUSED)
19030 	USE_OPLINE
19031 
19032 # if 0 || (IS_VAR != IS_UNUSED)
19033 	if (EXPECTED(opline->extended_value == 0)) {
19034 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19035 	}
19036 # endif
19037 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19038 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19039 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19040 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19041 	}
19042 #else
19043 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19044 #endif
19045 }
19046 
19047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19048 {
19049 #if 0 || (IS_UNUSED != IS_UNUSED)
19050 	USE_OPLINE
19051 
19052 # if 0 || (IS_VAR != IS_UNUSED)
19053 	if (EXPECTED(opline->extended_value == 0)) {
19054 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19055 	}
19056 # endif
19057 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19058 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19059 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19060 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19061 	}
19062 #else
19063 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19064 #endif
19065 }
19066 
19067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19068 {
19069 #if 0 || (IS_UNUSED != IS_UNUSED)
19070 	USE_OPLINE
19071 
19072 # if 0 || (IS_VAR != IS_UNUSED)
19073 	if (EXPECTED(opline->extended_value == 0)) {
19074 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19075 	}
19076 # endif
19077 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19078 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19079 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19080 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19081 	}
19082 #else
19083 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19084 #endif
19085 }
19086 
19087 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19088 {
19089 #if 0 || (IS_UNUSED != IS_UNUSED)
19090 	USE_OPLINE
19091 
19092 # if 0 || (IS_VAR != IS_UNUSED)
19093 	if (EXPECTED(opline->extended_value == 0)) {
19094 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19095 	}
19096 # endif
19097 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19098 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19099 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19100 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19101 	}
19102 #else
19103 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19104 #endif
19105 }
19106 
19107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19108 {
19109 #if 0 || (IS_UNUSED != IS_UNUSED)
19110 	USE_OPLINE
19111 
19112 # if 0 || (IS_VAR != IS_UNUSED)
19113 	if (EXPECTED(opline->extended_value == 0)) {
19114 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19115 	}
19116 # endif
19117 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19118 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19119 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19120 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19121 	}
19122 #else
19123 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19124 #endif
19125 }
19126 
19127 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19128 {
19129 #if 0 || (IS_UNUSED != IS_UNUSED)
19130 	USE_OPLINE
19131 
19132 # if 0 || (IS_VAR != IS_UNUSED)
19133 	if (EXPECTED(opline->extended_value == 0)) {
19134 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19135 	}
19136 # endif
19137 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19138 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19139 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19140 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19141 	}
19142 #else
19143 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19144 #endif
19145 }
19146 
19147 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19148 {
19149 #if 0 || (IS_UNUSED != IS_UNUSED)
19150 	USE_OPLINE
19151 
19152 # if 0 || (IS_VAR != IS_UNUSED)
19153 	if (EXPECTED(opline->extended_value == 0)) {
19154 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19155 	}
19156 # endif
19157 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19158 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19159 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19160 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19161 	}
19162 #else
19163 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19164 #endif
19165 }
19166 
19167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19168 {
19169 #if 0 || (IS_UNUSED != IS_UNUSED)
19170 	USE_OPLINE
19171 
19172 # if 0 || (IS_VAR != IS_UNUSED)
19173 	if (EXPECTED(opline->extended_value == 0)) {
19174 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19175 	}
19176 # endif
19177 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
19178 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19179 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
19180 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19181 	}
19182 #else
19183 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19184 #endif
19185 }
19186 
19187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19188 {
19189 	USE_OPLINE
19190 	zend_free_op free_op1;
19191 	zval *container;
19192 
19193 	SAVE_OPLINE();
19194 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19195 
19196 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
19197 		zend_throw_error(NULL, "Cannot use string offset as an array");
19198 		HANDLE_EXCEPTION();
19199 	}
19200 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
19201 
19202 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
19203 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
19204 	}
19205 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19206 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19207 }
19208 
19209 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19210 {
19211 	USE_OPLINE
19212 	zend_free_op free_op1;
19213 	zval *container;
19214 
19215 	SAVE_OPLINE();
19216 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19217 
19218 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
19219 		zend_throw_error(NULL, "Cannot use string offset as an array");
19220 		HANDLE_EXCEPTION();
19221 	}
19222 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
19223 
19224 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
19225 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
19226 	}
19227 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19228 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19229 }
19230 
19231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19232 {
19233 	USE_OPLINE
19234 	zval *container;
19235 	zend_free_op free_op1;
19236 
19237 	SAVE_OPLINE();
19238 
19239 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
19240         if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
19241             zend_throw_error(NULL, "Cannot use temporary expression in write context");
19242 
19243 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19244 			HANDLE_EXCEPTION();
19245         }
19246 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19247 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
19248 			zend_throw_error(NULL, "Cannot use string offset as an array");
19249 
19250 			HANDLE_EXCEPTION();
19251 		}
19252 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
19253 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
19254 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
19255 		}
19256 
19257 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19258 	} else {
19259 		if (IS_UNUSED == IS_UNUSED) {
19260 			zend_throw_error(NULL, "Cannot use [] for reading");
19261 
19262 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19263 			HANDLE_EXCEPTION();
19264 		}
19265 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
19266 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
19267 
19268 		zval_ptr_dtor_nogc(free_op1);
19269 	}
19270 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19271 }
19272 
19273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19274 {
19275 	USE_OPLINE
19276 	zend_free_op free_op1;
19277 	zval *object_ptr;
19278 	zend_free_op free_op_data1;
19279 	zval *value;
19280 	zval *variable_ptr;
19281 	zval *dim;
19282 
19283 	SAVE_OPLINE();
19284 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19285 
19286 	if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
19287 		zend_throw_error(NULL, "Cannot use string offset as an array");
19288 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19289 
19290 		HANDLE_EXCEPTION();
19291 	}
19292 
19293 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19294 try_assign_dim_array:
19295 		if (IS_UNUSED == IS_UNUSED) {
19296 			SEPARATE_ARRAY(object_ptr);
19297 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
19298 			if (UNEXPECTED(variable_ptr == NULL)) {
19299 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19300 				variable_ptr = &EG(error_zval);
19301 			}
19302 		} else {
19303 			dim = NULL;
19304 			SEPARATE_ARRAY(object_ptr);
19305 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_UNUSED, BP_VAR_W);
19306 
19307 		}
19308 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
19309 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
19310 			FREE_OP(free_op_data1);
19311 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19312 				ZVAL_NULL(EX_VAR(opline->result.var));
19313 			}
19314 		} else {
19315 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
19316 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19317 				ZVAL_COPY(EX_VAR(opline->result.var), value);
19318 			}
19319 		}
19320 	} else {
19321 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
19322 			object_ptr = Z_REFVAL_P(object_ptr);
19323 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19324 				goto try_assign_dim_array;
19325 			}
19326 		}
19327 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
19328 
19329 			zval *property_name = NULL;
19330 
19331 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
19332 
19333 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
19334 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
19335 				if (IS_UNUSED == IS_UNUSED) {
19336 					zend_throw_error(NULL, "[] operator not supported for strings");
19337 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19338 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19339 					HANDLE_EXCEPTION();
19340 				} else {
19341 					zend_long offset;
19342 
19343 					dim = NULL;
19344 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
19345 
19346 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
19347 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19348 					FREE_OP(free_op_data1);
19349 				}
19350 			} else {
19351 				zval_ptr_dtor_nogc(object_ptr);
19352 assign_dim_convert_to_array:
19353 				ZVAL_NEW_ARR(object_ptr);
19354 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
19355 				goto try_assign_dim_array;
19356 			}
19357 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
19358 			if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
19359 				goto assign_dim_clean;
19360 			}
19361 			goto assign_dim_convert_to_array;
19362 		} else {
19363 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
19364 assign_dim_clean:
19365 			dim = NULL;
19366 
19367 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
19368 			FREE_OP(free_op_data1);
19369 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19370 				ZVAL_NULL(EX_VAR(opline->result.var));
19371 			}
19372 		}
19373 	}
19374 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19375 	/* assign_dim has two opcodes! */
19376 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19377 }
19378 
19379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19380 {
19381 	USE_OPLINE
19382 	zval *function_name;
19383 	zend_class_entry *ce;
19384 	zend_object *object;
19385 	zend_function *fbc;
19386 	zend_execute_data *call;
19387 
19388 	SAVE_OPLINE();
19389 
19390 	if (IS_VAR == IS_CONST) {
19391 		/* no function found. try a static method in class */
19392 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
19393 		if (UNEXPECTED(ce == NULL)) {
19394 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
19395 			if (UNEXPECTED(ce == NULL)) {
19396 				if (UNEXPECTED(EG(exception) != NULL)) {
19397 					HANDLE_EXCEPTION();
19398 				}
19399 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
19400 				HANDLE_EXCEPTION();
19401 			}
19402 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
19403 		}
19404 	} else {
19405 		ce = Z_CE_P(EX_VAR(opline->op1.var));
19406 	}
19407 
19408 	if (IS_VAR == IS_CONST &&
19409 	    IS_UNUSED == IS_CONST &&
19410 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
19411 		/* nothing to do */
19412 	} else if (IS_VAR != IS_CONST &&
19413 	           IS_UNUSED == IS_CONST &&
19414 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
19415 		/* do nothing */
19416 	} else if (IS_UNUSED != IS_UNUSED) {
19417 
19418 
19419 		function_name = NULL;
19420 		if (IS_UNUSED != IS_CONST) {
19421 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
19422 				do {
19423 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
19424 						function_name = Z_REFVAL_P(function_name);
19425 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
19426 							break;
19427 						}
19428 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
19429 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
19430 						if (UNEXPECTED(EG(exception) != NULL)) {
19431 							HANDLE_EXCEPTION();
19432 						}
19433 					}
19434 					zend_throw_error(NULL, "Function name must be a string");
19435 
19436 					HANDLE_EXCEPTION();
19437 				} while (0);
19438  			}
19439 		}
19440 
19441 		if (ce->get_static_method) {
19442 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
19443 		} else {
19444 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
19445 		}
19446 		if (UNEXPECTED(fbc == NULL)) {
19447 			if (EXPECTED(!EG(exception))) {
19448 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
19449 			}
19450 
19451 			HANDLE_EXCEPTION();
19452 		}
19453 		if (IS_UNUSED == IS_CONST &&
19454 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
19455 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
19456 			if (IS_VAR == IS_CONST) {
19457 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
19458 			} else {
19459 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
19460 			}
19461 		}
19462 		if (IS_UNUSED != IS_CONST) {
19463 
19464 		}
19465 	} else {
19466 		if (UNEXPECTED(ce->constructor == NULL)) {
19467 			zend_throw_error(NULL, "Cannot call constructor");
19468 			HANDLE_EXCEPTION();
19469 		}
19470 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
19471 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
19472 			HANDLE_EXCEPTION();
19473 		}
19474 		fbc = ce->constructor;
19475 	}
19476 
19477 	object = NULL;
19478 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
19479 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
19480 			object = Z_OBJ(EX(This));
19481 			ce = object->ce;
19482 		} else {
19483 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
19484 				/* Allowed for PHP 4 compatibility. */
19485 				zend_error(
19486 					E_DEPRECATED,
19487 					"Non-static method %s::%s() should not be called statically",
19488 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
19489 				if (UNEXPECTED(EG(exception) != NULL)) {
19490 					HANDLE_EXCEPTION();
19491 				}
19492 			} else {
19493 				/* An internal function assumes $this is present and won't check that.
19494 				 * So PHP would crash by allowing the call. */
19495 				zend_throw_error(
19496 					zend_ce_error,
19497 					"Non-static method %s::%s() cannot be called statically",
19498 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
19499 				HANDLE_EXCEPTION();
19500 			}
19501 		}
19502 	}
19503 
19504 	if (IS_VAR != IS_CONST) {
19505 		/* previous opcode is ZEND_FETCH_CLASS */
19506 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
19507 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
19508 			ce = EX(called_scope);
19509 		}
19510 	}
19511 
19512 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
19513 		fbc, opline->extended_value, ce, object);
19514 	call->prev_execute_data = EX(call);
19515 	EX(call) = call;
19516 
19517 	ZEND_VM_NEXT_OPCODE();
19518 }
19519 
19520 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19521 {
19522 	USE_OPLINE
19523 
19524 	SAVE_OPLINE();
19525 	if (IS_VAR == IS_UNUSED) {
19526 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
19527 	} else {
19528 /* prevents "undefined variable opline" errors */
19529 #if 0 || (IS_VAR != IS_UNUSED)
19530 		zval *retval_ref, *retval_ptr;
19531 		zend_free_op free_op1;
19532 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
19533 
19534 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
19535 
19536 		if (IS_VAR == IS_CONST) {
19537 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
19538 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
19539 		} else if (IS_VAR == IS_VAR) {
19540 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
19541 				retval_ptr = Z_INDIRECT_P(retval_ptr);
19542 			}
19543 			ZVAL_DEREF(retval_ptr);
19544 		} else if (IS_VAR == IS_CV) {
19545 			ZVAL_DEREF(retval_ptr);
19546 		}
19547 
19548 		if (UNEXPECTED(!ret_info->class_name
19549 			&& ret_info->type_hint != IS_CALLABLE
19550 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
19551 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
19552 			&& retval_ref != retval_ptr)
19553 		) {
19554 			/* A cast might happen - unwrap the reference if this is a by-value return */
19555 			if (Z_REFCOUNT_P(retval_ref) == 1) {
19556 				ZVAL_UNREF(retval_ref);
19557 			} else {
19558 				Z_DELREF_P(retval_ref);
19559 				ZVAL_COPY(retval_ref, retval_ptr);
19560 			}
19561 			retval_ptr = retval_ref;
19562 		}
19563 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
19564 
19565 		if (UNEXPECTED(EG(exception) != NULL)) {
19566 			if (IS_VAR == IS_CONST) {
19567 				zval_ptr_dtor_nogc(retval_ptr);
19568 			} else {
19569 				zval_ptr_dtor_nogc(free_op1);
19570 			}
19571 		}
19572 #endif
19573 	}
19574 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19575 }
19576 
19577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19578 {
19579 	USE_OPLINE
19580 	zend_free_op free_op1;
19581 	zval *expr_ptr, new_expr;
19582 
19583 	SAVE_OPLINE();
19584 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
19585 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19586 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19587 		if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
19588 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
19589 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
19590 			HANDLE_EXCEPTION();
19591 		}
19592 		ZVAL_MAKE_REF(expr_ptr);
19593 		Z_ADDREF_P(expr_ptr);
19594 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19595 	} else {
19596 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
19597 		if (IS_VAR == IS_TMP_VAR) {
19598 			/* pass */
19599 		} else if (IS_VAR == IS_CONST) {
19600 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
19601 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19602 				zval_copy_ctor_func(&new_expr);
19603 				expr_ptr = &new_expr;
19604 			}
19605 		} else if (IS_VAR == IS_CV) {
19606 			ZVAL_DEREF(expr_ptr);
19607 			if (Z_REFCOUNTED_P(expr_ptr)) {
19608 				Z_ADDREF_P(expr_ptr);
19609 			}
19610 		} else /* if (IS_VAR == IS_VAR) */ {
19611 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19612 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19613 
19614 				expr_ptr = Z_REFVAL_P(expr_ptr);
19615 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
19616 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19617 					expr_ptr = &new_expr;
19618 					efree_size(ref, sizeof(zend_reference));
19619 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19620 					Z_ADDREF_P(expr_ptr);
19621 				}
19622 			}
19623 		}
19624 	}
19625 
19626 	if (IS_UNUSED != IS_UNUSED) {
19627 
19628 		zval *offset = NULL;
19629 		zend_string *str;
19630 		zend_ulong hval;
19631 
19632 add_again:
19633 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19634 			str = Z_STR_P(offset);
19635 			if (IS_UNUSED != IS_CONST) {
19636 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19637 					goto num_index;
19638 				}
19639 			}
19640 str_index:
19641 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19642 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19643 			hval = Z_LVAL_P(offset);
19644 num_index:
19645 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19646 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19647 			offset = Z_REFVAL_P(offset);
19648 			goto add_again;
19649 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19650 			str = ZSTR_EMPTY_ALLOC();
19651 			goto str_index;
19652 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19653 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
19654 			goto num_index;
19655 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19656 			hval = 0;
19657 			goto num_index;
19658 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19659 			hval = 1;
19660 			goto num_index;
19661 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19662 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
19663 			str = ZSTR_EMPTY_ALLOC();
19664 			goto str_index;
19665 		} else {
19666 			zend_error(E_WARNING, "Illegal offset type");
19667 			zval_ptr_dtor(expr_ptr);
19668 		}
19669 
19670 	} else {
19671 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19672 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19673 			zval_ptr_dtor(expr_ptr);
19674 		}
19675 	}
19676 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19677 }
19678 
19679 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19680 {
19681 	zval *array;
19682 	uint32_t size;
19683 	USE_OPLINE
19684 
19685 	array = EX_VAR(opline->result.var);
19686 	if (IS_VAR != IS_UNUSED) {
19687 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19688 	} else {
19689 		size = 0;
19690 	}
19691 	ZVAL_NEW_ARR(array);
19692 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
19693 
19694 	if (IS_VAR != IS_UNUSED) {
19695 		/* Explicitly initialize array as not-packed if flag is set */
19696 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19697 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
19698 		}
19699 	}
19700 
19701 	if (IS_VAR == IS_UNUSED) {
19702 		ZEND_VM_NEXT_OPCODE();
19703 #if 0 || (IS_VAR != IS_UNUSED)
19704 	} else {
19705 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19706 #endif
19707 	}
19708 }
19709 
19710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19711 {
19712 	USE_OPLINE
19713 	zval *var_ptr;
19714 
19715 	var_ptr = EX_VAR(opline->op1.var);
19716 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
19717 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
19718 			ZVAL_UNREF(var_ptr);
19719 		} else if (!(Z_VAR_FLAGS_P(var_ptr) & IS_VAR_RET_REF)) {
19720 			Z_DELREF_P(var_ptr);
19721 			ZVAL_COPY(var_ptr, Z_REFVAL_P(var_ptr));
19722 		}
19723 	}
19724 
19725 	ZEND_VM_NEXT_OPCODE();
19726 }
19727 
19728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19729 {
19730 	USE_OPLINE
19731 
19732 	zend_generator *generator = zend_get_running_generator(execute_data);
19733 
19734 	SAVE_OPLINE();
19735 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19736 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
19737 
19738 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19739 		HANDLE_EXCEPTION();
19740 	}
19741 
19742 	/* Destroy the previously yielded value */
19743 	zval_ptr_dtor(&generator->value);
19744 
19745 	/* Destroy the previously yielded key */
19746 	zval_ptr_dtor(&generator->key);
19747 
19748 	/* Set the new yielded value */
19749 	if (IS_VAR != IS_UNUSED) {
19750 		zend_free_op free_op1;
19751 
19752 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19753 			/* Constants and temporary variables aren't yieldable by reference,
19754 			 * but we still allow them with a notice. */
19755 			if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
19756 				zval *value;
19757 
19758 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19759 
19760 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
19761 				ZVAL_COPY_VALUE(&generator->value, value);
19762 				if (IS_VAR == IS_CONST) {
19763 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
19764 						zval_copy_ctor_func(&generator->value);
19765 					}
19766 				}
19767 			} else {
19768 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19769 
19770 				if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
19771 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
19772 
19773 					HANDLE_EXCEPTION();
19774 				}
19775 
19776 				/* If a function call result is yielded and the function did
19777 				 * not return by reference we throw a notice. */
19778 				if (IS_VAR == IS_VAR &&
19779 				    (value_ptr == &EG(uninitialized_zval) ||
19780 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
19781 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
19782 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19783 				} else {
19784 					ZVAL_MAKE_REF(value_ptr);
19785 				}
19786 				ZVAL_COPY(&generator->value, value_ptr);
19787 
19788 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19789 			}
19790 		} else {
19791 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
19792 
19793 			/* Consts, temporary variables and references need copying */
19794 			if (IS_VAR == IS_CONST) {
19795 				ZVAL_COPY_VALUE(&generator->value, value);
19796 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
19797 					zval_copy_ctor_func(&generator->value);
19798 				}
19799 			} else if (IS_VAR == IS_TMP_VAR) {
19800 				ZVAL_COPY_VALUE(&generator->value, value);
19801             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19802 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19803 				zval_ptr_dtor_nogc(free_op1);
19804 			} else {
19805 				ZVAL_COPY_VALUE(&generator->value, value);
19806 				if (IS_VAR == IS_CV) {
19807 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19808 				}
19809 			}
19810 		}
19811 	} else {
19812 		/* If no value was specified yield null */
19813 		ZVAL_NULL(&generator->value);
19814 	}
19815 
19816 	/* Set the new yielded key */
19817 	if (IS_UNUSED != IS_UNUSED) {
19818 
19819 		zval *key = NULL;
19820 
19821 		/* Consts, temporary variables and references need copying */
19822 		if (IS_UNUSED == IS_CONST) {
19823 			ZVAL_COPY_VALUE(&generator->key, key);
19824 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
19825 				zval_copy_ctor_func(&generator->key);
19826 			}
19827 		} else if (IS_UNUSED == IS_TMP_VAR) {
19828 			ZVAL_COPY_VALUE(&generator->key, key);
19829 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
19830 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
19831 
19832 		} else {
19833 			ZVAL_COPY_VALUE(&generator->key, key);
19834 			if (IS_UNUSED == IS_CV) {
19835 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
19836 			}
19837 		}
19838 
19839 		if (Z_TYPE(generator->key) == IS_LONG
19840 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19841 		) {
19842 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19843 		}
19844 	} else {
19845 		/* If no key was specified we use auto-increment keys */
19846 		generator->largest_used_integer_key++;
19847 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19848 	}
19849 
19850 	if (RETURN_VALUE_USED(opline)) {
19851 		/* If the return value of yield is used set the send
19852 		 * target and initialize it to NULL */
19853 		generator->send_target = EX_VAR(opline->result.var);
19854 		ZVAL_NULL(generator->send_target);
19855 	} else {
19856 		generator->send_target = NULL;
19857 	}
19858 
19859 	/* We increment to the next op, so we are at the correct position when the
19860 	 * generator is resumed. */
19861 	ZEND_VM_INC_OPCODE();
19862 
19863 	/* The GOTO VM uses a local opline variable. We need to set the opline
19864 	 * variable in execute_data so we don't resume at an old position. */
19865 	SAVE_OPLINE();
19866 
19867 	ZEND_VM_RETURN();
19868 }
19869 
19870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19871 {
19872 	USE_OPLINE
19873 	zend_free_op free_op1;
19874 	zval *op1, *op2;
19875 	int result;
19876 
19877 	SAVE_OPLINE();
19878 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
19879 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
19880 	result = fast_is_identical_function(op1, op2);
19881 	zval_ptr_dtor_nogc(free_op1);
19882 
19883 	ZEND_VM_SMART_BRANCH(result, 1);
19884 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
19885 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19886 }
19887 
19888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19889 {
19890 	USE_OPLINE
19891 	zend_free_op free_op1;
19892 	zval *op1, *op2;
19893 	int result;
19894 
19895 	SAVE_OPLINE();
19896 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
19897 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
19898 	result = fast_is_not_identical_function(op1, op2);
19899 	zval_ptr_dtor_nogc(free_op1);
19900 
19901 	ZEND_VM_SMART_BRANCH(result, 1);
19902 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
19903 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19904 }
19905 
19906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
19907 {
19908 	USE_OPLINE
19909 	zend_free_op free_op1, free_op_data1;
19910 	zval *object;
19911 	zval *property;
19912 	zval *value;
19913 	zval *zptr;
19914 
19915 	SAVE_OPLINE();
19916 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19917 
19918 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
19919 		zend_throw_error(NULL, "Using $this when not in object context");
19920 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19921 
19922 		HANDLE_EXCEPTION();
19923 	}
19924 
19925 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
19926 
19927 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
19928 		zend_throw_error(NULL, "Cannot use string offset as an object");
19929 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19930 
19931 		HANDLE_EXCEPTION();
19932 	}
19933 
19934 	do {
19935 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
19936 
19937 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
19938 			ZVAL_DEREF(object);
19939 			if (UNEXPECTED(!make_real_object(object))) {
19940 				zend_error(E_WARNING, "Attempt to assign property of non-object");
19941 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19942 					ZVAL_NULL(EX_VAR(opline->result.var));
19943 				}
19944 				break;
19945 			}
19946 		}
19947 
19948 		/* here we are sure we are dealing with an object */
19949 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
19950 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
19951 			if (UNEXPECTED(zptr == &EG(error_zval))) {
19952 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19953 					ZVAL_NULL(EX_VAR(opline->result.var));
19954 				}
19955 			} else {
19956 				ZVAL_DEREF(zptr);
19957 				SEPARATE_ZVAL_NOREF(zptr);
19958 
19959 				binary_op(zptr, zptr, value);
19960 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19961 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
19962 				}
19963 			}
19964 		} else {
19965 			zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19966 		}
19967 	} while (0);
19968 
19969 	FREE_OP(free_op_data1);
19970 
19971 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19972 	/* assign_obj has two opcodes! */
19973 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19974 }
19975 
19976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
19977 {
19978 	USE_OPLINE
19979 	zend_free_op free_op1, free_op_data1;
19980 	zval *var_ptr, rv;
19981 	zval *value, *container, *dim;
19982 
19983 	SAVE_OPLINE();
19984 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19985 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
19986 		zend_throw_error(NULL, "Using $this when not in object context");
19987 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19988 
19989 		HANDLE_EXCEPTION();
19990 	}
19991 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
19992 		zend_throw_error(NULL, "Cannot use string offset as an array");
19993 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
19994 
19995 		HANDLE_EXCEPTION();
19996 	}
19997 
19998 	dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
19999 
20000 	do {
20001 		if (IS_VAR == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
20002 			if (IS_VAR != IS_UNUSED) {
20003 				ZVAL_DEREF(container);
20004 			}
20005 			if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
20006 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20007 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
20008 				break;
20009 			}
20010 		}
20011 
20012 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CV);
20013 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20014 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
20015 		var_ptr = Z_INDIRECT(rv);
20016 
20017 		if (UNEXPECTED(var_ptr == NULL)) {
20018 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
20019 
20020 			FREE_OP(free_op_data1);
20021 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20022 			HANDLE_EXCEPTION();
20023 		}
20024 
20025 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
20026 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20027 				ZVAL_NULL(EX_VAR(opline->result.var));
20028 			}
20029 		} else {
20030 			ZVAL_DEREF(var_ptr);
20031 			SEPARATE_ZVAL_NOREF(var_ptr);
20032 
20033 			binary_op(var_ptr, var_ptr, value);
20034 
20035 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20036 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20037 			}
20038 		}
20039 	} while (0);
20040 
20041 	FREE_OP(free_op_data1);
20042 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20043 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
20044 }
20045 
20046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
20047 {
20048 	USE_OPLINE
20049 	zend_free_op free_op1;
20050 	zval *var_ptr;
20051 	zval *value;
20052 
20053 	SAVE_OPLINE();
20054 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20055 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20056 
20057 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
20058 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
20059 
20060 		HANDLE_EXCEPTION();
20061 	}
20062 
20063 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
20064 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20065 			ZVAL_NULL(EX_VAR(opline->result.var));
20066 		}
20067 	} else {
20068 		ZVAL_DEREF(var_ptr);
20069 		SEPARATE_ZVAL_NOREF(var_ptr);
20070 
20071 		binary_op(var_ptr, var_ptr, value);
20072 
20073 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20074 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20075 		}
20076 	}
20077 
20078 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20079 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20080 }
20081 
20082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20083 {
20084 #if 0 || (IS_CV != IS_UNUSED)
20085 	USE_OPLINE
20086 
20087 # if 0 || (IS_VAR != IS_UNUSED)
20088 	if (EXPECTED(opline->extended_value == 0)) {
20089 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20090 	}
20091 # endif
20092 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20093 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20094 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20095 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20096 	}
20097 #else
20098 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20099 #endif
20100 }
20101 
20102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20103 {
20104 #if 0 || (IS_CV != IS_UNUSED)
20105 	USE_OPLINE
20106 
20107 # if 0 || (IS_VAR != IS_UNUSED)
20108 	if (EXPECTED(opline->extended_value == 0)) {
20109 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20110 	}
20111 # endif
20112 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20113 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20114 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20115 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20116 	}
20117 #else
20118 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20119 #endif
20120 }
20121 
20122 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20123 {
20124 #if 0 || (IS_CV != IS_UNUSED)
20125 	USE_OPLINE
20126 
20127 # if 0 || (IS_VAR != IS_UNUSED)
20128 	if (EXPECTED(opline->extended_value == 0)) {
20129 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20130 	}
20131 # endif
20132 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20133 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20134 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20135 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20136 	}
20137 #else
20138 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20139 #endif
20140 }
20141 
20142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20143 {
20144 #if 0 || (IS_CV != IS_UNUSED)
20145 	USE_OPLINE
20146 
20147 # if 0 || (IS_VAR != IS_UNUSED)
20148 	if (EXPECTED(opline->extended_value == 0)) {
20149 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20150 	}
20151 # endif
20152 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20153 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20154 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20155 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20156 	}
20157 #else
20158 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20159 #endif
20160 }
20161 
20162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20163 {
20164 #if 0 || (IS_CV != IS_UNUSED)
20165 	USE_OPLINE
20166 
20167 # if 0 || (IS_VAR != IS_UNUSED)
20168 	if (EXPECTED(opline->extended_value == 0)) {
20169 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20170 	}
20171 # endif
20172 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20173 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20174 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20175 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20176 	}
20177 #else
20178 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20179 #endif
20180 }
20181 
20182 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20183 {
20184 #if 0 || (IS_CV != IS_UNUSED)
20185 	USE_OPLINE
20186 
20187 # if 0 || (IS_VAR != IS_UNUSED)
20188 	if (EXPECTED(opline->extended_value == 0)) {
20189 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20190 	}
20191 # endif
20192 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20193 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20194 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20195 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20196 	}
20197 #else
20198 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20199 #endif
20200 }
20201 
20202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20203 {
20204 #if 0 || (IS_CV != IS_UNUSED)
20205 	USE_OPLINE
20206 
20207 # if 0 || (IS_VAR != IS_UNUSED)
20208 	if (EXPECTED(opline->extended_value == 0)) {
20209 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20210 	}
20211 # endif
20212 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20213 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20214 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20215 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20216 	}
20217 #else
20218 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20219 #endif
20220 }
20221 
20222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20223 {
20224 #if 0 || (IS_CV != IS_UNUSED)
20225 	USE_OPLINE
20226 
20227 # if 0 || (IS_VAR != IS_UNUSED)
20228 	if (EXPECTED(opline->extended_value == 0)) {
20229 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20230 	}
20231 # endif
20232 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20233 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20234 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20235 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20236 	}
20237 #else
20238 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20239 #endif
20240 }
20241 
20242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20243 {
20244 #if 0 || (IS_CV != IS_UNUSED)
20245 	USE_OPLINE
20246 
20247 # if 0 || (IS_VAR != IS_UNUSED)
20248 	if (EXPECTED(opline->extended_value == 0)) {
20249 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20250 	}
20251 # endif
20252 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20253 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20254 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20255 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20256 	}
20257 #else
20258 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20259 #endif
20260 }
20261 
20262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20263 {
20264 #if 0 || (IS_CV != IS_UNUSED)
20265 	USE_OPLINE
20266 
20267 # if 0 || (IS_VAR != IS_UNUSED)
20268 	if (EXPECTED(opline->extended_value == 0)) {
20269 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20270 	}
20271 # endif
20272 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20273 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20274 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20275 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20276 	}
20277 #else
20278 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20279 #endif
20280 }
20281 
20282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20283 {
20284 #if 0 || (IS_CV != IS_UNUSED)
20285 	USE_OPLINE
20286 
20287 # if 0 || (IS_VAR != IS_UNUSED)
20288 	if (EXPECTED(opline->extended_value == 0)) {
20289 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20290 	}
20291 # endif
20292 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20293 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20294 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20295 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20296 	}
20297 #else
20298 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20299 #endif
20300 }
20301 
20302 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20303 {
20304 #if 0 || (IS_CV != IS_UNUSED)
20305 	USE_OPLINE
20306 
20307 # if 0 || (IS_VAR != IS_UNUSED)
20308 	if (EXPECTED(opline->extended_value == 0)) {
20309 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20310 	}
20311 # endif
20312 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
20313 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20314 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
20315 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20316 	}
20317 #else
20318 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20319 #endif
20320 }
20321 
20322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
20323 {
20324 	USE_OPLINE
20325 	zend_free_op free_op1;
20326 	zval *object;
20327 	zval *property;
20328 	zval *zptr;
20329 
20330 	SAVE_OPLINE();
20331 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20332 
20333 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
20334 		zend_throw_error(NULL, "Using $this when not in object context");
20335 
20336 		HANDLE_EXCEPTION();
20337 	}
20338 
20339 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20340 
20341 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
20342 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
20343 
20344 		HANDLE_EXCEPTION();
20345 	}
20346 
20347 	do {
20348 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
20349 			ZVAL_DEREF(object);
20350 			if (UNEXPECTED(!make_real_object(object))) {
20351 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20352 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20353 					ZVAL_NULL(EX_VAR(opline->result.var));
20354 				}
20355 				break;
20356 			}
20357 		}
20358 
20359 		/* here we are sure we are dealing with an object */
20360 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
20361 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
20362 			if (UNEXPECTED(zptr == &EG(error_zval))) {
20363 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20364 					ZVAL_NULL(EX_VAR(opline->result.var));
20365 				}
20366 			} else {
20367 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
20368 					if (inc) {
20369 						fast_long_increment_function(zptr);
20370 					} else {
20371 						fast_long_decrement_function(zptr);
20372 					}
20373 				} else {
20374 					ZVAL_DEREF(zptr);
20375 					SEPARATE_ZVAL_NOREF(zptr);
20376 
20377 					if (inc) {
20378 						increment_function(zptr);
20379 					} else {
20380 						decrement_function(zptr);
20381 					}
20382 				}
20383 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20384 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
20385 				}
20386 			}
20387 		} else {
20388 			zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
20389 		}
20390 	} while (0);
20391 
20392 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20393 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20394 }
20395 
20396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20397 {
20398 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20399 }
20400 
20401 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20402 {
20403 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20404 }
20405 
20406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
20407 {
20408 	USE_OPLINE
20409 	zend_free_op free_op1;
20410 	zval *object;
20411 	zval *property;
20412 	zval *zptr;
20413 
20414 	SAVE_OPLINE();
20415 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20416 
20417 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
20418 		zend_throw_error(NULL, "Using $this when not in object context");
20419 
20420 		HANDLE_EXCEPTION();
20421 	}
20422 
20423 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20424 
20425 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
20426 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
20427 
20428 		HANDLE_EXCEPTION();
20429 	}
20430 
20431 	do {
20432 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
20433 			ZVAL_DEREF(object);
20434 			if (UNEXPECTED(!make_real_object(object))) {
20435 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20436 				ZVAL_NULL(EX_VAR(opline->result.var));
20437 				break;
20438 			}
20439 		}
20440 
20441 		/* here we are sure we are dealing with an object */
20442 
20443 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
20444 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
20445 			if (UNEXPECTED(zptr == &EG(error_zval))) {
20446 				ZVAL_NULL(EX_VAR(opline->result.var));
20447 			} else {
20448 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
20449 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
20450 					if (inc) {
20451 						fast_long_increment_function(zptr);
20452 					} else {
20453 						fast_long_decrement_function(zptr);
20454 					}
20455 				} else {
20456 					ZVAL_DEREF(zptr);
20457 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
20458 					zval_opt_copy_ctor(zptr);
20459 					if (inc) {
20460 						increment_function(zptr);
20461 					} else {
20462 						decrement_function(zptr);
20463 					}
20464 				}
20465 			}
20466 		} else {
20467 			zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
20468 		}
20469 	} while (0);
20470 
20471 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20472 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20473 }
20474 
20475 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20476 {
20477 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20478 }
20479 
20480 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20481 {
20482 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20483 }
20484 
20485 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20486 {
20487 	USE_OPLINE
20488 	zend_free_op free_op1;
20489 	zval *container;
20490 
20491 	SAVE_OPLINE();
20492 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20493 
20494 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20495 		zend_throw_error(NULL, "Cannot use string offset as an array");
20496 		HANDLE_EXCEPTION();
20497 	}
20498 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
20499 
20500 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20501 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
20502 	}
20503 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20504 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20505 }
20506 
20507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20508 {
20509 	USE_OPLINE
20510 	zend_free_op free_op1;
20511 	zval *container;
20512 
20513 	SAVE_OPLINE();
20514 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20515 
20516 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20517 		zend_throw_error(NULL, "Cannot use string offset as an array");
20518 		HANDLE_EXCEPTION();
20519 	}
20520 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
20521 
20522 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20523 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
20524 	}
20525 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20527 }
20528 
20529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20530 {
20531 	USE_OPLINE
20532 	zval *container;
20533 	zend_free_op free_op1;
20534 
20535 	SAVE_OPLINE();
20536 
20537 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
20538         if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
20539             zend_throw_error(NULL, "Cannot use temporary expression in write context");
20540 
20541 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20542 			HANDLE_EXCEPTION();
20543         }
20544 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20545 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20546 			zend_throw_error(NULL, "Cannot use string offset as an array");
20547 
20548 			HANDLE_EXCEPTION();
20549 		}
20550 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
20551 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20552 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
20553 		}
20554 
20555 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20556 	} else {
20557 		if (IS_CV == IS_UNUSED) {
20558 			zend_throw_error(NULL, "Cannot use [] for reading");
20559 
20560 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20561 			HANDLE_EXCEPTION();
20562 		}
20563 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20564 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
20565 
20566 		zval_ptr_dtor_nogc(free_op1);
20567 	}
20568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20569 }
20570 
20571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20572 {
20573 	USE_OPLINE
20574 	zend_free_op free_op1;
20575 	zval *container;
20576 
20577 	SAVE_OPLINE();
20578 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20579 
20580 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20581 		zend_throw_error(NULL, "Cannot use string offset as an array");
20582 
20583 		HANDLE_EXCEPTION();
20584 	}
20585 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
20586 
20587 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20588 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
20589 	}
20590 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20591 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20592 }
20593 
20594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20595 {
20596 	USE_OPLINE
20597 	zend_free_op free_op1;
20598 	zval *container;
20599 
20600 	zval *offset;
20601 
20602 	SAVE_OPLINE();
20603 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20604 
20605 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
20606 		zend_throw_error(NULL, "Using $this when not in object context");
20607 
20608 		HANDLE_EXCEPTION();
20609 	}
20610 
20611 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20612 
20613 	if (IS_VAR == IS_CONST ||
20614 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
20615 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
20616 			container = Z_REFVAL_P(container);
20617 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
20618 				goto fetch_obj_r_no_object;
20619 			}
20620 		} else {
20621 			goto fetch_obj_r_no_object;
20622 		}
20623 	}
20624 
20625 	/* here we are sure we are dealing with an object */
20626 	do {
20627 		zend_object *zobj = Z_OBJ_P(container);
20628 		zval *retval;
20629 
20630 		if (IS_CV == IS_CONST &&
20631 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
20632 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
20633 
20634 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
20635 				retval = OBJ_PROP(zobj, prop_offset);
20636 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
20637 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
20638 					break;
20639 				}
20640 			} else if (EXPECTED(zobj->properties != NULL)) {
20641 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
20642 				if (EXPECTED(retval)) {
20643 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
20644 					break;
20645 				}
20646 			}
20647 		}
20648 
20649 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
20650 fetch_obj_r_no_object:
20651 			zend_error(E_NOTICE, "Trying to get property of non-object");
20652 			ZVAL_NULL(EX_VAR(opline->result.var));
20653 		} else {
20654 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
20655 
20656 			if (retval != EX_VAR(opline->result.var)) {
20657 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
20658 			}
20659 		}
20660 	} while (0);
20661 
20662 	zval_ptr_dtor_nogc(free_op1);
20663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20664 }
20665 
20666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20667 {
20668 	USE_OPLINE
20669 	zend_free_op free_op1;
20670 	zval *property;
20671 	zval *container;
20672 
20673 	SAVE_OPLINE();
20674 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20675 
20676 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20677 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
20678 		zend_throw_error(NULL, "Using $this when not in object context");
20679 
20680 		HANDLE_EXCEPTION();
20681 	}
20682 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20683 		zend_throw_error(NULL, "Cannot use string offset as an object");
20684 
20685 		HANDLE_EXCEPTION();
20686 	}
20687 
20688 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
20689 
20690 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20691 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
20692 	}
20693 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20694 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20695 }
20696 
20697 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20698 {
20699 	USE_OPLINE
20700 	zend_free_op free_op1;
20701 	zval *property;
20702 	zval *container;
20703 
20704 	SAVE_OPLINE();
20705 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20706 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20707 
20708 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
20709 		zend_throw_error(NULL, "Using $this when not in object context");
20710 
20711 		HANDLE_EXCEPTION();
20712 	}
20713 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20714 		zend_throw_error(NULL, "Cannot use string offset as an object");
20715 
20716 		HANDLE_EXCEPTION();
20717 	}
20718 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
20719 
20720 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20721 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
20722 	}
20723 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20724 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20725 }
20726 
20727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20728 {
20729 	USE_OPLINE
20730 	zval *container;
20731 
20732 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
20733 		/* Behave like FETCH_OBJ_W */
20734 		zend_free_op free_op1;
20735 		zval *property;
20736 
20737 		SAVE_OPLINE();
20738 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20739 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20740 
20741 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
20742 			zend_throw_error(NULL, "Using $this when not in object context");
20743 
20744 			HANDLE_EXCEPTION();
20745 		}
20746 		if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
20747 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
20748 
20749 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20750 			HANDLE_EXCEPTION();
20751 		}
20752 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20753 			zend_throw_error(NULL, "Cannot use string offset as an object");
20754 
20755 			HANDLE_EXCEPTION();
20756 		}
20757 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
20758 
20759 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20760 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
20761 		}
20762 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20763 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20764 	} else {
20765 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20766 	}
20767 }
20768 
20769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20770 {
20771 	USE_OPLINE
20772 	zend_free_op free_op1;
20773 	zval *container, *property;
20774 
20775 	SAVE_OPLINE();
20776 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20777 
20778 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
20779 		zend_throw_error(NULL, "Using $this when not in object context");
20780 
20781 		HANDLE_EXCEPTION();
20782 	}
20783 
20784 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20785 
20786 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
20787 		zend_throw_error(NULL, "Cannot use string offset as an object");
20788 
20789 		HANDLE_EXCEPTION();
20790 	}
20791 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
20792 
20793 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
20794 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
20795 	}
20796 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20797 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20798 }
20799 
20800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20801 {
20802 	USE_OPLINE
20803 	zend_free_op free_op1;
20804 	zval *object;
20805 	zval *property_name;
20806 
20807 	SAVE_OPLINE();
20808 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20809 
20810 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
20811 		zend_throw_error(NULL, "Using $this when not in object context");
20812 
20813 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
20814 		HANDLE_EXCEPTION();
20815 	}
20816 
20817 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20818 
20819 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
20820 		zend_throw_error(NULL, "Cannot use string offset as an array");
20821 
20822 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
20823 		HANDLE_EXCEPTION();
20824 	}
20825 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
20826 
20827 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20828 	/* assign_obj has two opcodes! */
20829 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
20830 }
20831 
20832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20833 {
20834 	USE_OPLINE
20835 	zend_free_op free_op1;
20836 	zval *object_ptr;
20837 	zend_free_op free_op_data1;
20838 	zval *value;
20839 	zval *variable_ptr;
20840 	zval *dim;
20841 
20842 	SAVE_OPLINE();
20843 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20844 
20845 	if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
20846 		zend_throw_error(NULL, "Cannot use string offset as an array");
20847 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
20848 
20849 		HANDLE_EXCEPTION();
20850 	}
20851 
20852 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
20853 try_assign_dim_array:
20854 		if (IS_CV == IS_UNUSED) {
20855 			SEPARATE_ARRAY(object_ptr);
20856 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
20857 			if (UNEXPECTED(variable_ptr == NULL)) {
20858 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
20859 				variable_ptr = &EG(error_zval);
20860 			}
20861 		} else {
20862 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20863 			SEPARATE_ARRAY(object_ptr);
20864 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_CV, BP_VAR_W);
20865 
20866 		}
20867 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20868 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
20869 			FREE_OP(free_op_data1);
20870 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20871 				ZVAL_NULL(EX_VAR(opline->result.var));
20872 			}
20873 		} else {
20874 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
20875 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20876 				ZVAL_COPY(EX_VAR(opline->result.var), value);
20877 			}
20878 		}
20879 	} else {
20880 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
20881 			object_ptr = Z_REFVAL_P(object_ptr);
20882 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
20883 				goto try_assign_dim_array;
20884 			}
20885 		}
20886 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
20887 
20888 			zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20889 
20890 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
20891 
20892 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
20893 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
20894 				if (IS_CV == IS_UNUSED) {
20895 					zend_throw_error(NULL, "[] operator not supported for strings");
20896 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
20897 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20898 					HANDLE_EXCEPTION();
20899 				} else {
20900 					zend_long offset;
20901 
20902 					dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20903 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
20904 
20905 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20906 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
20907 					FREE_OP(free_op_data1);
20908 				}
20909 			} else {
20910 				zval_ptr_dtor_nogc(object_ptr);
20911 assign_dim_convert_to_array:
20912 				ZVAL_NEW_ARR(object_ptr);
20913 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
20914 				goto try_assign_dim_array;
20915 			}
20916 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
20917 			if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
20918 				goto assign_dim_clean;
20919 			}
20920 			goto assign_dim_convert_to_array;
20921 		} else {
20922 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
20923 assign_dim_clean:
20924 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20925 
20926 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20927 			FREE_OP(free_op_data1);
20928 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20929 				ZVAL_NULL(EX_VAR(opline->result.var));
20930 			}
20931 		}
20932 	}
20933 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20934 	/* assign_dim has two opcodes! */
20935 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
20936 }
20937 
20938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20939 {
20940 	USE_OPLINE
20941 	zend_free_op free_op1;
20942 	zval *value;
20943 	zval *variable_ptr;
20944 
20945 	SAVE_OPLINE();
20946 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
20947 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20948 
20949 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
20950 
20951 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20952 			ZVAL_NULL(EX_VAR(opline->result.var));
20953 		}
20954 	} else {
20955 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
20956 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20957 			ZVAL_COPY(EX_VAR(opline->result.var), value);
20958 		}
20959 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20960 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20961 	}
20962 
20963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20964 }
20965 
20966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20967 {
20968 	USE_OPLINE
20969 	zend_free_op free_op1;
20970 	zval *variable_ptr;
20971 	zval *value_ptr;
20972 
20973 	SAVE_OPLINE();
20974 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
20975 
20976 	if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
20977 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
20978 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20979 		HANDLE_EXCEPTION();
20980 	}
20981 	if (IS_VAR == IS_VAR &&
20982 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
20983 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
20984 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
20985 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20986 
20987 		HANDLE_EXCEPTION();
20988 	}
20989 	if (IS_CV == IS_VAR &&
20990 	    (value_ptr == &EG(uninitialized_zval) ||
20991 	     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
20992 	      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
20993 		if (!0 && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
20994 			Z_TRY_ADDREF_P(value_ptr);
20995 		}
20996 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
20997 		if (UNEXPECTED(EG(exception) != NULL)) {
20998 
20999 			HANDLE_EXCEPTION();
21000 		}
21001 		ZEND_VM_TAIL_CALL(ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21002 	}
21003 
21004 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21005 	if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
21006 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
21007 
21008 		HANDLE_EXCEPTION();
21009 	}
21010 	if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
21011 	    (IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
21012 		variable_ptr = &EG(uninitialized_zval);
21013 	} else {
21014 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
21015 	}
21016 
21017 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21018 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
21019 	}
21020 
21021 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21022 
21023 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21024 }
21025 
21026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21027 {
21028 	USE_OPLINE
21029 	zval *function_name;
21030 	zend_class_entry *ce;
21031 	zend_object *object;
21032 	zend_function *fbc;
21033 	zend_execute_data *call;
21034 
21035 	SAVE_OPLINE();
21036 
21037 	if (IS_VAR == IS_CONST) {
21038 		/* no function found. try a static method in class */
21039 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
21040 		if (UNEXPECTED(ce == NULL)) {
21041 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
21042 			if (UNEXPECTED(ce == NULL)) {
21043 				if (UNEXPECTED(EG(exception) != NULL)) {
21044 					HANDLE_EXCEPTION();
21045 				}
21046 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
21047 				HANDLE_EXCEPTION();
21048 			}
21049 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
21050 		}
21051 	} else {
21052 		ce = Z_CE_P(EX_VAR(opline->op1.var));
21053 	}
21054 
21055 	if (IS_VAR == IS_CONST &&
21056 	    IS_CV == IS_CONST &&
21057 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
21058 		/* nothing to do */
21059 	} else if (IS_VAR != IS_CONST &&
21060 	           IS_CV == IS_CONST &&
21061 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
21062 		/* do nothing */
21063 	} else if (IS_CV != IS_UNUSED) {
21064 
21065 
21066 		function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
21067 		if (IS_CV != IS_CONST) {
21068 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
21069 				do {
21070 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
21071 						function_name = Z_REFVAL_P(function_name);
21072 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
21073 							break;
21074 						}
21075 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
21076 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
21077 						if (UNEXPECTED(EG(exception) != NULL)) {
21078 							HANDLE_EXCEPTION();
21079 						}
21080 					}
21081 					zend_throw_error(NULL, "Function name must be a string");
21082 
21083 					HANDLE_EXCEPTION();
21084 				} while (0);
21085  			}
21086 		}
21087 
21088 		if (ce->get_static_method) {
21089 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
21090 		} else {
21091 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
21092 		}
21093 		if (UNEXPECTED(fbc == NULL)) {
21094 			if (EXPECTED(!EG(exception))) {
21095 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
21096 			}
21097 
21098 			HANDLE_EXCEPTION();
21099 		}
21100 		if (IS_CV == IS_CONST &&
21101 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
21102 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
21103 			if (IS_VAR == IS_CONST) {
21104 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
21105 			} else {
21106 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
21107 			}
21108 		}
21109 		if (IS_CV != IS_CONST) {
21110 
21111 		}
21112 	} else {
21113 		if (UNEXPECTED(ce->constructor == NULL)) {
21114 			zend_throw_error(NULL, "Cannot call constructor");
21115 			HANDLE_EXCEPTION();
21116 		}
21117 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
21118 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
21119 			HANDLE_EXCEPTION();
21120 		}
21121 		fbc = ce->constructor;
21122 	}
21123 
21124 	object = NULL;
21125 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
21126 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
21127 			object = Z_OBJ(EX(This));
21128 			ce = object->ce;
21129 		} else {
21130 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
21131 				/* Allowed for PHP 4 compatibility. */
21132 				zend_error(
21133 					E_DEPRECATED,
21134 					"Non-static method %s::%s() should not be called statically",
21135 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
21136 				if (UNEXPECTED(EG(exception) != NULL)) {
21137 					HANDLE_EXCEPTION();
21138 				}
21139 			} else {
21140 				/* An internal function assumes $this is present and won't check that.
21141 				 * So PHP would crash by allowing the call. */
21142 				zend_throw_error(
21143 					zend_ce_error,
21144 					"Non-static method %s::%s() cannot be called statically",
21145 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
21146 				HANDLE_EXCEPTION();
21147 			}
21148 		}
21149 	}
21150 
21151 	if (IS_VAR != IS_CONST) {
21152 		/* previous opcode is ZEND_FETCH_CLASS */
21153 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
21154 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
21155 			ce = EX(called_scope);
21156 		}
21157 	}
21158 
21159 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
21160 		fbc, opline->extended_value, ce, object);
21161 	call->prev_execute_data = EX(call);
21162 	EX(call) = call;
21163 
21164 	ZEND_VM_NEXT_OPCODE();
21165 }
21166 
21167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21168 {
21169 	USE_OPLINE
21170 	zend_free_op free_op1;
21171 	zval *expr_ptr, new_expr;
21172 
21173 	SAVE_OPLINE();
21174 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
21175 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
21176 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21177 		if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
21178 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
21179 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
21180 			HANDLE_EXCEPTION();
21181 		}
21182 		ZVAL_MAKE_REF(expr_ptr);
21183 		Z_ADDREF_P(expr_ptr);
21184 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21185 	} else {
21186 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21187 		if (IS_VAR == IS_TMP_VAR) {
21188 			/* pass */
21189 		} else if (IS_VAR == IS_CONST) {
21190 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
21191 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21192 				zval_copy_ctor_func(&new_expr);
21193 				expr_ptr = &new_expr;
21194 			}
21195 		} else if (IS_VAR == IS_CV) {
21196 			ZVAL_DEREF(expr_ptr);
21197 			if (Z_REFCOUNTED_P(expr_ptr)) {
21198 				Z_ADDREF_P(expr_ptr);
21199 			}
21200 		} else /* if (IS_VAR == IS_VAR) */ {
21201 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
21202 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
21203 
21204 				expr_ptr = Z_REFVAL_P(expr_ptr);
21205 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
21206 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21207 					expr_ptr = &new_expr;
21208 					efree_size(ref, sizeof(zend_reference));
21209 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
21210 					Z_ADDREF_P(expr_ptr);
21211 				}
21212 			}
21213 		}
21214 	}
21215 
21216 	if (IS_CV != IS_UNUSED) {
21217 
21218 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
21219 		zend_string *str;
21220 		zend_ulong hval;
21221 
21222 add_again:
21223 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21224 			str = Z_STR_P(offset);
21225 			if (IS_CV != IS_CONST) {
21226 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21227 					goto num_index;
21228 				}
21229 			}
21230 str_index:
21231 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21232 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21233 			hval = Z_LVAL_P(offset);
21234 num_index:
21235 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21236 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21237 			offset = Z_REFVAL_P(offset);
21238 			goto add_again;
21239 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21240 			str = ZSTR_EMPTY_ALLOC();
21241 			goto str_index;
21242 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21243 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
21244 			goto num_index;
21245 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21246 			hval = 0;
21247 			goto num_index;
21248 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21249 			hval = 1;
21250 			goto num_index;
21251 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21252 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
21253 			str = ZSTR_EMPTY_ALLOC();
21254 			goto str_index;
21255 		} else {
21256 			zend_error(E_WARNING, "Illegal offset type");
21257 			zval_ptr_dtor(expr_ptr);
21258 		}
21259 
21260 	} else {
21261 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21262 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
21263 			zval_ptr_dtor(expr_ptr);
21264 		}
21265 	}
21266 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21267 }
21268 
21269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21270 {
21271 	zval *array;
21272 	uint32_t size;
21273 	USE_OPLINE
21274 
21275 	array = EX_VAR(opline->result.var);
21276 	if (IS_VAR != IS_UNUSED) {
21277 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21278 	} else {
21279 		size = 0;
21280 	}
21281 	ZVAL_NEW_ARR(array);
21282 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
21283 
21284 	if (IS_VAR != IS_UNUSED) {
21285 		/* Explicitly initialize array as not-packed if flag is set */
21286 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21287 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
21288 		}
21289 	}
21290 
21291 	if (IS_VAR == IS_UNUSED) {
21292 		ZEND_VM_NEXT_OPCODE();
21293 #if 0 || (IS_VAR != IS_UNUSED)
21294 	} else {
21295 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21296 #endif
21297 	}
21298 }
21299 
21300 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21301 {
21302 	USE_OPLINE
21303 	zend_free_op free_op1;
21304 	zval *container;
21305 	zval *offset;
21306 	zend_ulong hval;
21307 	zend_string *key;
21308 
21309 	SAVE_OPLINE();
21310 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21311 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
21312 		zend_throw_error(NULL, "Using $this when not in object context");
21313 
21314 		HANDLE_EXCEPTION();
21315 	}
21316 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
21317 		zend_throw_error(NULL, "Cannot unset string offsets");
21318 
21319 		HANDLE_EXCEPTION();
21320 	}
21321 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
21322 
21323 	do {
21324 		if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
21325 			HashTable *ht;
21326 
21327 unset_dim_array:
21328 			SEPARATE_ARRAY(container);
21329 			ht = Z_ARRVAL_P(container);
21330 offset_again:
21331 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21332 				key = Z_STR_P(offset);
21333 				if (IS_CV != IS_CONST) {
21334 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
21335 						goto num_index_dim;
21336 					}
21337 				}
21338 str_index_dim:
21339 				if (ht == &EG(symbol_table)) {
21340 					zend_delete_global_variable(key);
21341 				} else {
21342 					zend_hash_del(ht, key);
21343 				}
21344 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21345 				hval = Z_LVAL_P(offset);
21346 num_index_dim:
21347 				zend_hash_index_del(ht, hval);
21348 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21349 				offset = Z_REFVAL_P(offset);
21350 				goto offset_again;
21351 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21352 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
21353 				goto num_index_dim;
21354 			} else if (Z_TYPE_P(offset) == IS_NULL) {
21355 				key = ZSTR_EMPTY_ALLOC();
21356 				goto str_index_dim;
21357 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
21358 				hval = 0;
21359 				goto num_index_dim;
21360 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
21361 				hval = 1;
21362 				goto num_index_dim;
21363 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21364 				hval = Z_RES_HANDLE_P(offset);
21365 				goto num_index_dim;
21366 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21367 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
21368 				key = ZSTR_EMPTY_ALLOC();
21369 				goto str_index_dim;
21370 			} else {
21371 				zend_error(E_WARNING, "Illegal offset type in unset");
21372 			}
21373 			break;
21374 		} else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
21375 			container = Z_REFVAL_P(container);
21376 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
21377 				goto unset_dim_array;
21378 			}
21379 		}
21380 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
21381 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
21382 		}
21383 		if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
21384 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
21385 				zend_throw_error(NULL, "Cannot use object as array");
21386 			} else {
21387 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
21388 			}
21389 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
21390 			zend_throw_error(NULL, "Cannot unset string offsets");
21391 		}
21392 	} while (0);
21393 
21394 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21396 }
21397 
21398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21399 {
21400 	USE_OPLINE
21401 	zend_free_op free_op1;
21402 	zval *container;
21403 	zval *offset;
21404 
21405 	SAVE_OPLINE();
21406 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21407 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
21408 		zend_throw_error(NULL, "Using $this when not in object context");
21409 
21410 		HANDLE_EXCEPTION();
21411 	}
21412 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
21413 		zend_throw_error(NULL, "Cannot unset string offsets");
21414 
21415 		HANDLE_EXCEPTION();
21416 	}
21417 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
21418 
21419 	do {
21420 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
21421 			if (Z_ISREF_P(container)) {
21422 				container = Z_REFVAL_P(container);
21423 				if (Z_TYPE_P(container) != IS_OBJECT) {
21424 					break;
21425 				}
21426 			} else {
21427 				break;
21428 			}
21429 		}
21430 		if (Z_OBJ_HT_P(container)->unset_property) {
21431 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
21432 		} else {
21433 			zend_error(E_NOTICE, "Trying to unset property of non-object");
21434 		}
21435 	} while (0);
21436 
21437 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21438 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21439 }
21440 
21441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21442 {
21443 	USE_OPLINE
21444 
21445 	zend_generator *generator = zend_get_running_generator(execute_data);
21446 
21447 	SAVE_OPLINE();
21448 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21449 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
21450 
21451 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21452 		HANDLE_EXCEPTION();
21453 	}
21454 
21455 	/* Destroy the previously yielded value */
21456 	zval_ptr_dtor(&generator->value);
21457 
21458 	/* Destroy the previously yielded key */
21459 	zval_ptr_dtor(&generator->key);
21460 
21461 	/* Set the new yielded value */
21462 	if (IS_VAR != IS_UNUSED) {
21463 		zend_free_op free_op1;
21464 
21465 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21466 			/* Constants and temporary variables aren't yieldable by reference,
21467 			 * but we still allow them with a notice. */
21468 			if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
21469 				zval *value;
21470 
21471 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21472 
21473 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21474 				ZVAL_COPY_VALUE(&generator->value, value);
21475 				if (IS_VAR == IS_CONST) {
21476 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
21477 						zval_copy_ctor_func(&generator->value);
21478 					}
21479 				}
21480 			} else {
21481 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21482 
21483 				if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
21484 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
21485 
21486 					HANDLE_EXCEPTION();
21487 				}
21488 
21489 				/* If a function call result is yielded and the function did
21490 				 * not return by reference we throw a notice. */
21491 				if (IS_VAR == IS_VAR &&
21492 				    (value_ptr == &EG(uninitialized_zval) ||
21493 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
21494 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
21495 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21496 				} else {
21497 					ZVAL_MAKE_REF(value_ptr);
21498 				}
21499 				ZVAL_COPY(&generator->value, value_ptr);
21500 
21501 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21502 			}
21503 		} else {
21504 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21505 
21506 			/* Consts, temporary variables and references need copying */
21507 			if (IS_VAR == IS_CONST) {
21508 				ZVAL_COPY_VALUE(&generator->value, value);
21509 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
21510 					zval_copy_ctor_func(&generator->value);
21511 				}
21512 			} else if (IS_VAR == IS_TMP_VAR) {
21513 				ZVAL_COPY_VALUE(&generator->value, value);
21514             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21515 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21516 				zval_ptr_dtor_nogc(free_op1);
21517 			} else {
21518 				ZVAL_COPY_VALUE(&generator->value, value);
21519 				if (IS_VAR == IS_CV) {
21520 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21521 				}
21522 			}
21523 		}
21524 	} else {
21525 		/* If no value was specified yield null */
21526 		ZVAL_NULL(&generator->value);
21527 	}
21528 
21529 	/* Set the new yielded key */
21530 	if (IS_CV != IS_UNUSED) {
21531 
21532 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
21533 
21534 		/* Consts, temporary variables and references need copying */
21535 		if (IS_CV == IS_CONST) {
21536 			ZVAL_COPY_VALUE(&generator->key, key);
21537 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
21538 				zval_copy_ctor_func(&generator->key);
21539 			}
21540 		} else if (IS_CV == IS_TMP_VAR) {
21541 			ZVAL_COPY_VALUE(&generator->key, key);
21542 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
21543 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
21544 
21545 		} else {
21546 			ZVAL_COPY_VALUE(&generator->key, key);
21547 			if (IS_CV == IS_CV) {
21548 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
21549 			}
21550 		}
21551 
21552 		if (Z_TYPE(generator->key) == IS_LONG
21553 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21554 		) {
21555 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21556 		}
21557 	} else {
21558 		/* If no key was specified we use auto-increment keys */
21559 		generator->largest_used_integer_key++;
21560 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21561 	}
21562 
21563 	if (RETURN_VALUE_USED(opline)) {
21564 		/* If the return value of yield is used set the send
21565 		 * target and initialize it to NULL */
21566 		generator->send_target = EX_VAR(opline->result.var);
21567 		ZVAL_NULL(generator->send_target);
21568 	} else {
21569 		generator->send_target = NULL;
21570 	}
21571 
21572 	/* We increment to the next op, so we are at the correct position when the
21573 	 * generator is resumed. */
21574 	ZEND_VM_INC_OPCODE();
21575 
21576 	/* The GOTO VM uses a local opline variable. We need to set the opline
21577 	 * variable in execute_data so we don't resume at an old position. */
21578 	SAVE_OPLINE();
21579 
21580 	ZEND_VM_RETURN();
21581 }
21582 
21583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
21584 {
21585 	USE_OPLINE
21586 	zend_free_op free_op1, free_op2, free_op_data1;
21587 	zval *object;
21588 	zval *property;
21589 	zval *value;
21590 	zval *zptr;
21591 
21592 	SAVE_OPLINE();
21593 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21594 
21595 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
21596 		zend_throw_error(NULL, "Using $this when not in object context");
21597 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
21598 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21599 		HANDLE_EXCEPTION();
21600 	}
21601 
21602 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
21603 
21604 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
21605 		zend_throw_error(NULL, "Cannot use string offset as an object");
21606 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
21607 		zval_ptr_dtor_nogc(free_op2);
21608 		HANDLE_EXCEPTION();
21609 	}
21610 
21611 	do {
21612 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
21613 
21614 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
21615 			ZVAL_DEREF(object);
21616 			if (UNEXPECTED(!make_real_object(object))) {
21617 				zend_error(E_WARNING, "Attempt to assign property of non-object");
21618 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21619 					ZVAL_NULL(EX_VAR(opline->result.var));
21620 				}
21621 				break;
21622 			}
21623 		}
21624 
21625 		/* here we are sure we are dealing with an object */
21626 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
21627 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
21628 			if (UNEXPECTED(zptr == &EG(error_zval))) {
21629 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21630 					ZVAL_NULL(EX_VAR(opline->result.var));
21631 				}
21632 			} else {
21633 				ZVAL_DEREF(zptr);
21634 				SEPARATE_ZVAL_NOREF(zptr);
21635 
21636 				binary_op(zptr, zptr, value);
21637 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21638 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
21639 				}
21640 			}
21641 		} else {
21642 			zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
21643 		}
21644 	} while (0);
21645 
21646 	FREE_OP(free_op_data1);
21647 	zval_ptr_dtor_nogc(free_op2);
21648 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21649 	/* assign_obj has two opcodes! */
21650 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21651 }
21652 
21653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
21654 {
21655 	USE_OPLINE
21656 	zend_free_op free_op1, free_op2, free_op_data1;
21657 	zval *var_ptr, rv;
21658 	zval *value, *container, *dim;
21659 
21660 	SAVE_OPLINE();
21661 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21662 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
21663 		zend_throw_error(NULL, "Using $this when not in object context");
21664 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
21665 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21666 		HANDLE_EXCEPTION();
21667 	}
21668 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
21669 		zend_throw_error(NULL, "Cannot use string offset as an array");
21670 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
21671 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
21672 		HANDLE_EXCEPTION();
21673 	}
21674 
21675 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
21676 
21677 	do {
21678 		if (IS_VAR == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
21679 			if (IS_VAR != IS_UNUSED) {
21680 				ZVAL_DEREF(container);
21681 			}
21682 			if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
21683 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
21684 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
21685 				break;
21686 			}
21687 		}
21688 
21689 		zend_fetch_dimension_address_RW(&rv, container, dim, (IS_TMP_VAR|IS_VAR));
21690 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
21691 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
21692 		var_ptr = Z_INDIRECT(rv);
21693 
21694 		if (UNEXPECTED(var_ptr == NULL)) {
21695 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
21696 			zval_ptr_dtor_nogc(free_op2);
21697 			FREE_OP(free_op_data1);
21698 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21699 			HANDLE_EXCEPTION();
21700 		}
21701 
21702 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
21703 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21704 				ZVAL_NULL(EX_VAR(opline->result.var));
21705 			}
21706 		} else {
21707 			ZVAL_DEREF(var_ptr);
21708 			SEPARATE_ZVAL_NOREF(var_ptr);
21709 
21710 			binary_op(var_ptr, var_ptr, value);
21711 
21712 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21713 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21714 			}
21715 		}
21716 	} while (0);
21717 
21718 	zval_ptr_dtor_nogc(free_op2);
21719 	FREE_OP(free_op_data1);
21720 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21721 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21722 }
21723 
21724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
21725 {
21726 	USE_OPLINE
21727 	zend_free_op free_op1, free_op2;
21728 	zval *var_ptr;
21729 	zval *value;
21730 
21731 	SAVE_OPLINE();
21732 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
21733 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21734 
21735 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
21736 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
21737 		zval_ptr_dtor_nogc(free_op2);
21738 		HANDLE_EXCEPTION();
21739 	}
21740 
21741 	if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
21742 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21743 			ZVAL_NULL(EX_VAR(opline->result.var));
21744 		}
21745 	} else {
21746 		ZVAL_DEREF(var_ptr);
21747 		SEPARATE_ZVAL_NOREF(var_ptr);
21748 
21749 		binary_op(var_ptr, var_ptr, value);
21750 
21751 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21752 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21753 		}
21754 	}
21755 
21756 	zval_ptr_dtor_nogc(free_op2);
21757 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21758 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21759 }
21760 
21761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21762 {
21763 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21764 	USE_OPLINE
21765 
21766 # if 0 || (IS_VAR != IS_UNUSED)
21767 	if (EXPECTED(opline->extended_value == 0)) {
21768 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21769 	}
21770 # endif
21771 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21772 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21773 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21774 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21775 	}
21776 #else
21777 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21778 #endif
21779 }
21780 
21781 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21782 {
21783 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21784 	USE_OPLINE
21785 
21786 # if 0 || (IS_VAR != IS_UNUSED)
21787 	if (EXPECTED(opline->extended_value == 0)) {
21788 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21789 	}
21790 # endif
21791 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21792 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21793 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21794 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21795 	}
21796 #else
21797 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21798 #endif
21799 }
21800 
21801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21802 {
21803 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21804 	USE_OPLINE
21805 
21806 # if 0 || (IS_VAR != IS_UNUSED)
21807 	if (EXPECTED(opline->extended_value == 0)) {
21808 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21809 	}
21810 # endif
21811 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21812 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21813 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21814 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21815 	}
21816 #else
21817 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21818 #endif
21819 }
21820 
21821 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21822 {
21823 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21824 	USE_OPLINE
21825 
21826 # if 0 || (IS_VAR != IS_UNUSED)
21827 	if (EXPECTED(opline->extended_value == 0)) {
21828 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21829 	}
21830 # endif
21831 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21832 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21833 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21834 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21835 	}
21836 #else
21837 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21838 #endif
21839 }
21840 
21841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21842 {
21843 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21844 	USE_OPLINE
21845 
21846 # if 0 || (IS_VAR != IS_UNUSED)
21847 	if (EXPECTED(opline->extended_value == 0)) {
21848 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21849 	}
21850 # endif
21851 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21852 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21853 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21854 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21855 	}
21856 #else
21857 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21858 #endif
21859 }
21860 
21861 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21862 {
21863 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21864 	USE_OPLINE
21865 
21866 # if 0 || (IS_VAR != IS_UNUSED)
21867 	if (EXPECTED(opline->extended_value == 0)) {
21868 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21869 	}
21870 # endif
21871 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21872 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21873 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21874 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21875 	}
21876 #else
21877 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21878 #endif
21879 }
21880 
21881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21882 {
21883 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21884 	USE_OPLINE
21885 
21886 # if 0 || (IS_VAR != IS_UNUSED)
21887 	if (EXPECTED(opline->extended_value == 0)) {
21888 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21889 	}
21890 # endif
21891 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21892 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21893 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21894 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21895 	}
21896 #else
21897 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21898 #endif
21899 }
21900 
21901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21902 {
21903 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21904 	USE_OPLINE
21905 
21906 # if 0 || (IS_VAR != IS_UNUSED)
21907 	if (EXPECTED(opline->extended_value == 0)) {
21908 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21909 	}
21910 # endif
21911 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21912 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21913 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21914 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21915 	}
21916 #else
21917 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21918 #endif
21919 }
21920 
21921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21922 {
21923 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21924 	USE_OPLINE
21925 
21926 # if 0 || (IS_VAR != IS_UNUSED)
21927 	if (EXPECTED(opline->extended_value == 0)) {
21928 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21929 	}
21930 # endif
21931 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21932 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21933 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21934 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21935 	}
21936 #else
21937 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21938 #endif
21939 }
21940 
21941 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21942 {
21943 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21944 	USE_OPLINE
21945 
21946 # if 0 || (IS_VAR != IS_UNUSED)
21947 	if (EXPECTED(opline->extended_value == 0)) {
21948 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21949 	}
21950 # endif
21951 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21952 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21953 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21954 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21955 	}
21956 #else
21957 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21958 #endif
21959 }
21960 
21961 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21962 {
21963 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21964 	USE_OPLINE
21965 
21966 # if 0 || (IS_VAR != IS_UNUSED)
21967 	if (EXPECTED(opline->extended_value == 0)) {
21968 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21969 	}
21970 # endif
21971 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21972 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21973 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21974 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21975 	}
21976 #else
21977 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21978 #endif
21979 }
21980 
21981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21982 {
21983 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
21984 	USE_OPLINE
21985 
21986 # if 0 || (IS_VAR != IS_UNUSED)
21987 	if (EXPECTED(opline->extended_value == 0)) {
21988 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21989 	}
21990 # endif
21991 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
21992 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21993 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
21994 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21995 	}
21996 #else
21997 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21998 #endif
21999 }
22000 
22001 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
22002 {
22003 	USE_OPLINE
22004 	zend_free_op free_op1, free_op2;
22005 	zval *object;
22006 	zval *property;
22007 	zval *zptr;
22008 
22009 	SAVE_OPLINE();
22010 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22011 
22012 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
22013 		zend_throw_error(NULL, "Using $this when not in object context");
22014 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22015 		HANDLE_EXCEPTION();
22016 	}
22017 
22018 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22019 
22020 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
22021 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
22022 		zval_ptr_dtor_nogc(free_op2);
22023 		HANDLE_EXCEPTION();
22024 	}
22025 
22026 	do {
22027 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22028 			ZVAL_DEREF(object);
22029 			if (UNEXPECTED(!make_real_object(object))) {
22030 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22031 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22032 					ZVAL_NULL(EX_VAR(opline->result.var));
22033 				}
22034 				break;
22035 			}
22036 		}
22037 
22038 		/* here we are sure we are dealing with an object */
22039 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
22040 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
22041 			if (UNEXPECTED(zptr == &EG(error_zval))) {
22042 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22043 					ZVAL_NULL(EX_VAR(opline->result.var));
22044 				}
22045 			} else {
22046 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
22047 					if (inc) {
22048 						fast_long_increment_function(zptr);
22049 					} else {
22050 						fast_long_decrement_function(zptr);
22051 					}
22052 				} else {
22053 					ZVAL_DEREF(zptr);
22054 					SEPARATE_ZVAL_NOREF(zptr);
22055 
22056 					if (inc) {
22057 						increment_function(zptr);
22058 					} else {
22059 						decrement_function(zptr);
22060 					}
22061 				}
22062 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22063 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22064 				}
22065 			}
22066 		} else {
22067 			zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
22068 		}
22069 	} while (0);
22070 
22071 	zval_ptr_dtor_nogc(free_op2);
22072 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22073 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22074 }
22075 
22076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22077 {
22078 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22079 }
22080 
22081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22082 {
22083 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22084 }
22085 
22086 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
22087 {
22088 	USE_OPLINE
22089 	zend_free_op free_op1, free_op2;
22090 	zval *object;
22091 	zval *property;
22092 	zval *zptr;
22093 
22094 	SAVE_OPLINE();
22095 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22096 
22097 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
22098 		zend_throw_error(NULL, "Using $this when not in object context");
22099 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22100 		HANDLE_EXCEPTION();
22101 	}
22102 
22103 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22104 
22105 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
22106 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
22107 		zval_ptr_dtor_nogc(free_op2);
22108 		HANDLE_EXCEPTION();
22109 	}
22110 
22111 	do {
22112 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22113 			ZVAL_DEREF(object);
22114 			if (UNEXPECTED(!make_real_object(object))) {
22115 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22116 				ZVAL_NULL(EX_VAR(opline->result.var));
22117 				break;
22118 			}
22119 		}
22120 
22121 		/* here we are sure we are dealing with an object */
22122 
22123 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
22124 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
22125 			if (UNEXPECTED(zptr == &EG(error_zval))) {
22126 				ZVAL_NULL(EX_VAR(opline->result.var));
22127 			} else {
22128 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
22129 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
22130 					if (inc) {
22131 						fast_long_increment_function(zptr);
22132 					} else {
22133 						fast_long_decrement_function(zptr);
22134 					}
22135 				} else {
22136 					ZVAL_DEREF(zptr);
22137 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
22138 					zval_opt_copy_ctor(zptr);
22139 					if (inc) {
22140 						increment_function(zptr);
22141 					} else {
22142 						decrement_function(zptr);
22143 					}
22144 				}
22145 			}
22146 		} else {
22147 			zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
22148 		}
22149 	} while (0);
22150 
22151 	zval_ptr_dtor_nogc(free_op2);
22152 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22153 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22154 }
22155 
22156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22157 {
22158 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22159 }
22160 
22161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22162 {
22163 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22164 }
22165 
22166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22167 {
22168 	USE_OPLINE
22169 	zend_free_op free_op1, free_op2;
22170 	zval *container;
22171 
22172 	SAVE_OPLINE();
22173 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22174 
22175 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22176 		zend_throw_error(NULL, "Cannot use string offset as an array");
22177 		HANDLE_EXCEPTION();
22178 	}
22179 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
22180 	zval_ptr_dtor_nogc(free_op2);
22181 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22182 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
22183 	}
22184 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22185 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22186 }
22187 
22188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22189 {
22190 	USE_OPLINE
22191 	zend_free_op free_op1, free_op2;
22192 	zval *container;
22193 
22194 	SAVE_OPLINE();
22195 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22196 
22197 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22198 		zend_throw_error(NULL, "Cannot use string offset as an array");
22199 		HANDLE_EXCEPTION();
22200 	}
22201 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
22202 	zval_ptr_dtor_nogc(free_op2);
22203 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22204 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
22205 	}
22206 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22207 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22208 }
22209 
22210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22211 {
22212 	USE_OPLINE
22213 	zval *container;
22214 	zend_free_op free_op1, free_op2;
22215 
22216 	SAVE_OPLINE();
22217 
22218 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
22219         if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
22220             zend_throw_error(NULL, "Cannot use temporary expression in write context");
22221 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22222 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22223 			HANDLE_EXCEPTION();
22224         }
22225 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22226 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22227 			zend_throw_error(NULL, "Cannot use string offset as an array");
22228 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22229 			HANDLE_EXCEPTION();
22230 		}
22231 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
22232 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22233 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
22234 		}
22235 		zval_ptr_dtor_nogc(free_op2);
22236 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22237 	} else {
22238 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
22239 			zend_throw_error(NULL, "Cannot use [] for reading");
22240 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22241 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22242 			HANDLE_EXCEPTION();
22243 		}
22244 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
22245 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
22246 		zval_ptr_dtor_nogc(free_op2);
22247 		zval_ptr_dtor_nogc(free_op1);
22248 	}
22249 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22250 }
22251 
22252 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22253 {
22254 	USE_OPLINE
22255 	zend_free_op free_op1, free_op2;
22256 	zval *container;
22257 
22258 	SAVE_OPLINE();
22259 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22260 
22261 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22262 		zend_throw_error(NULL, "Cannot use string offset as an array");
22263 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22264 		HANDLE_EXCEPTION();
22265 	}
22266 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
22267 	zval_ptr_dtor_nogc(free_op2);
22268 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22269 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
22270 	}
22271 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22272 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22273 }
22274 
22275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22276 {
22277 	USE_OPLINE
22278 	zend_free_op free_op1;
22279 	zval *container;
22280 	zend_free_op free_op2;
22281 	zval *offset;
22282 
22283 	SAVE_OPLINE();
22284 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
22285 
22286 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22287 		zend_throw_error(NULL, "Using $this when not in object context");
22288 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22289 		HANDLE_EXCEPTION();
22290 	}
22291 
22292 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22293 
22294 	if (IS_VAR == IS_CONST ||
22295 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
22296 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
22297 			container = Z_REFVAL_P(container);
22298 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
22299 				goto fetch_obj_r_no_object;
22300 			}
22301 		} else {
22302 			goto fetch_obj_r_no_object;
22303 		}
22304 	}
22305 
22306 	/* here we are sure we are dealing with an object */
22307 	do {
22308 		zend_object *zobj = Z_OBJ_P(container);
22309 		zval *retval;
22310 
22311 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
22312 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
22313 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
22314 
22315 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
22316 				retval = OBJ_PROP(zobj, prop_offset);
22317 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
22318 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
22319 					break;
22320 				}
22321 			} else if (EXPECTED(zobj->properties != NULL)) {
22322 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
22323 				if (EXPECTED(retval)) {
22324 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
22325 					break;
22326 				}
22327 			}
22328 		}
22329 
22330 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
22331 fetch_obj_r_no_object:
22332 			zend_error(E_NOTICE, "Trying to get property of non-object");
22333 			ZVAL_NULL(EX_VAR(opline->result.var));
22334 		} else {
22335 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
22336 
22337 			if (retval != EX_VAR(opline->result.var)) {
22338 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
22339 			}
22340 		}
22341 	} while (0);
22342 
22343 	zval_ptr_dtor_nogc(free_op2);
22344 	zval_ptr_dtor_nogc(free_op1);
22345 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22346 }
22347 
22348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22349 {
22350 	USE_OPLINE
22351 	zend_free_op free_op1, free_op2;
22352 	zval *property;
22353 	zval *container;
22354 
22355 	SAVE_OPLINE();
22356 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22357 
22358 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22359 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22360 		zend_throw_error(NULL, "Using $this when not in object context");
22361 		zval_ptr_dtor_nogc(free_op2);
22362 		HANDLE_EXCEPTION();
22363 	}
22364 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22365 		zend_throw_error(NULL, "Cannot use string offset as an object");
22366 		zval_ptr_dtor_nogc(free_op2);
22367 		HANDLE_EXCEPTION();
22368 	}
22369 
22370 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
22371 	zval_ptr_dtor_nogc(free_op2);
22372 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22373 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
22374 	}
22375 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22376 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22377 }
22378 
22379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22380 {
22381 	USE_OPLINE
22382 	zend_free_op free_op1, free_op2;
22383 	zval *property;
22384 	zval *container;
22385 
22386 	SAVE_OPLINE();
22387 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22388 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22389 
22390 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22391 		zend_throw_error(NULL, "Using $this when not in object context");
22392 		zval_ptr_dtor_nogc(free_op2);
22393 		HANDLE_EXCEPTION();
22394 	}
22395 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22396 		zend_throw_error(NULL, "Cannot use string offset as an object");
22397 		zval_ptr_dtor_nogc(free_op2);
22398 		HANDLE_EXCEPTION();
22399 	}
22400 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
22401 	zval_ptr_dtor_nogc(free_op2);
22402 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22403 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
22404 	}
22405 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22406 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22407 }
22408 
22409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22410 {
22411 	USE_OPLINE
22412 	zval *container;
22413 
22414 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
22415 		/* Behave like FETCH_OBJ_W */
22416 		zend_free_op free_op1, free_op2;
22417 		zval *property;
22418 
22419 		SAVE_OPLINE();
22420 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22421 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22422 
22423 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22424 			zend_throw_error(NULL, "Using $this when not in object context");
22425 			zval_ptr_dtor_nogc(free_op2);
22426 			HANDLE_EXCEPTION();
22427 		}
22428 		if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
22429 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
22430 			zval_ptr_dtor_nogc(free_op2);
22431 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22432 			HANDLE_EXCEPTION();
22433 		}
22434 		if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22435 			zend_throw_error(NULL, "Cannot use string offset as an object");
22436 			zval_ptr_dtor_nogc(free_op2);
22437 			HANDLE_EXCEPTION();
22438 		}
22439 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
22440 		zval_ptr_dtor_nogc(free_op2);
22441 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22442 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
22443 		}
22444 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22445 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22446 	} else {
22447 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22448 	}
22449 }
22450 
22451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22452 {
22453 	USE_OPLINE
22454 	zend_free_op free_op1, free_op2;
22455 	zval *container, *property;
22456 
22457 	SAVE_OPLINE();
22458 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22459 
22460 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22461 		zend_throw_error(NULL, "Using $this when not in object context");
22462 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22463 		HANDLE_EXCEPTION();
22464 	}
22465 
22466 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22467 
22468 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22469 		zend_throw_error(NULL, "Cannot use string offset as an object");
22470 		zval_ptr_dtor_nogc(free_op2);
22471 		HANDLE_EXCEPTION();
22472 	}
22473 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
22474 	zval_ptr_dtor_nogc(free_op2);
22475 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
22476 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
22477 	}
22478 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22479 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22480 }
22481 
22482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22483 {
22484 	USE_OPLINE
22485 	zend_free_op free_op1, free_op2;
22486 	zval *object;
22487 	zval *property_name;
22488 
22489 	SAVE_OPLINE();
22490 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22491 
22492 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
22493 		zend_throw_error(NULL, "Using $this when not in object context");
22494 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22495 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22496 		HANDLE_EXCEPTION();
22497 	}
22498 
22499 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22500 
22501 	if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
22502 		zend_throw_error(NULL, "Cannot use string offset as an array");
22503 		zval_ptr_dtor_nogc(free_op2);
22504 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22505 		HANDLE_EXCEPTION();
22506 	}
22507 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
22508 	zval_ptr_dtor_nogc(free_op2);
22509 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22510 	/* assign_obj has two opcodes! */
22511 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22512 }
22513 
22514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22515 {
22516 	USE_OPLINE
22517 	zend_free_op free_op1;
22518 	zval *object_ptr;
22519 	zend_free_op free_op2, free_op_data1;
22520 	zval *value;
22521 	zval *variable_ptr;
22522 	zval *dim;
22523 
22524 	SAVE_OPLINE();
22525 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22526 
22527 	if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
22528 		zend_throw_error(NULL, "Cannot use string offset as an array");
22529 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22530 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22531 		HANDLE_EXCEPTION();
22532 	}
22533 
22534 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
22535 try_assign_dim_array:
22536 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
22537 			SEPARATE_ARRAY(object_ptr);
22538 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
22539 			if (UNEXPECTED(variable_ptr == NULL)) {
22540 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
22541 				variable_ptr = &EG(error_zval);
22542 			}
22543 		} else {
22544 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22545 			SEPARATE_ARRAY(object_ptr);
22546 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_W);
22547 			zval_ptr_dtor_nogc(free_op2);
22548 		}
22549 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22550 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
22551 			FREE_OP(free_op_data1);
22552 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22553 				ZVAL_NULL(EX_VAR(opline->result.var));
22554 			}
22555 		} else {
22556 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
22557 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22558 				ZVAL_COPY(EX_VAR(opline->result.var), value);
22559 			}
22560 		}
22561 	} else {
22562 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
22563 			object_ptr = Z_REFVAL_P(object_ptr);
22564 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
22565 				goto try_assign_dim_array;
22566 			}
22567 		}
22568 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
22569 			zend_free_op free_op2;
22570 			zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22571 
22572 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
22573 			zval_ptr_dtor_nogc(free_op2);
22574 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
22575 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
22576 				if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
22577 					zend_throw_error(NULL, "[] operator not supported for strings");
22578 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22579 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22580 					HANDLE_EXCEPTION();
22581 				} else {
22582 					zend_long offset;
22583 
22584 					dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22585 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
22586 					zval_ptr_dtor_nogc(free_op2);
22587 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22588 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
22589 					FREE_OP(free_op_data1);
22590 				}
22591 			} else {
22592 				zval_ptr_dtor_nogc(object_ptr);
22593 assign_dim_convert_to_array:
22594 				ZVAL_NEW_ARR(object_ptr);
22595 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
22596 				goto try_assign_dim_array;
22597 			}
22598 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
22599 			if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
22600 				goto assign_dim_clean;
22601 			}
22602 			goto assign_dim_convert_to_array;
22603 		} else {
22604 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
22605 assign_dim_clean:
22606 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22607 			zval_ptr_dtor_nogc(free_op2);
22608 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22609 			FREE_OP(free_op_data1);
22610 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22611 				ZVAL_NULL(EX_VAR(opline->result.var));
22612 			}
22613 		}
22614 	}
22615 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22616 	/* assign_dim has two opcodes! */
22617 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22618 }
22619 
22620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22621 {
22622 	USE_OPLINE
22623 	zval *function_name;
22624 	zend_class_entry *ce;
22625 	zend_object *object;
22626 	zend_function *fbc;
22627 	zend_execute_data *call;
22628 
22629 	SAVE_OPLINE();
22630 
22631 	if (IS_VAR == IS_CONST) {
22632 		/* no function found. try a static method in class */
22633 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
22634 		if (UNEXPECTED(ce == NULL)) {
22635 			ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT |  ZEND_FETCH_CLASS_EXCEPTION);
22636 			if (UNEXPECTED(ce == NULL)) {
22637 				if (UNEXPECTED(EG(exception) != NULL)) {
22638 					HANDLE_EXCEPTION();
22639 				}
22640 				zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
22641 				HANDLE_EXCEPTION();
22642 			}
22643 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
22644 		}
22645 	} else {
22646 		ce = Z_CE_P(EX_VAR(opline->op1.var));
22647 	}
22648 
22649 	if (IS_VAR == IS_CONST &&
22650 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
22651 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
22652 		/* nothing to do */
22653 	} else if (IS_VAR != IS_CONST &&
22654 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
22655 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
22656 		/* do nothing */
22657 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
22658 		zend_free_op free_op2;
22659 
22660 		function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22661 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
22662 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
22663 				do {
22664 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
22665 						function_name = Z_REFVAL_P(function_name);
22666 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
22667 							break;
22668 						}
22669 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
22670 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
22671 						if (UNEXPECTED(EG(exception) != NULL)) {
22672 							HANDLE_EXCEPTION();
22673 						}
22674 					}
22675 					zend_throw_error(NULL, "Function name must be a string");
22676 					zval_ptr_dtor_nogc(free_op2);
22677 					HANDLE_EXCEPTION();
22678 				} while (0);
22679  			}
22680 		}
22681 
22682 		if (ce->get_static_method) {
22683 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
22684 		} else {
22685 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
22686 		}
22687 		if (UNEXPECTED(fbc == NULL)) {
22688 			if (EXPECTED(!EG(exception))) {
22689 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
22690 			}
22691 			zval_ptr_dtor_nogc(free_op2);
22692 			HANDLE_EXCEPTION();
22693 		}
22694 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
22695 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
22696 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
22697 			if (IS_VAR == IS_CONST) {
22698 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
22699 			} else {
22700 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
22701 			}
22702 		}
22703 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
22704 			zval_ptr_dtor_nogc(free_op2);
22705 		}
22706 	} else {
22707 		if (UNEXPECTED(ce->constructor == NULL)) {
22708 			zend_throw_error(NULL, "Cannot call constructor");
22709 			HANDLE_EXCEPTION();
22710 		}
22711 		if (Z_OBJ(EX(This)) && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
22712 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
22713 			HANDLE_EXCEPTION();
22714 		}
22715 		fbc = ce->constructor;
22716 	}
22717 
22718 	object = NULL;
22719 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
22720 		if (Z_OBJ(EX(This)) && instanceof_function(Z_OBJCE(EX(This)), ce)) {
22721 			object = Z_OBJ(EX(This));
22722 			ce = object->ce;
22723 		} else {
22724 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
22725 				/* Allowed for PHP 4 compatibility. */
22726 				zend_error(
22727 					E_DEPRECATED,
22728 					"Non-static method %s::%s() should not be called statically",
22729 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
22730 				if (UNEXPECTED(EG(exception) != NULL)) {
22731 					HANDLE_EXCEPTION();
22732 				}
22733 			} else {
22734 				/* An internal function assumes $this is present and won't check that.
22735 				 * So PHP would crash by allowing the call. */
22736 				zend_throw_error(
22737 					zend_ce_error,
22738 					"Non-static method %s::%s() cannot be called statically",
22739 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
22740 				HANDLE_EXCEPTION();
22741 			}
22742 		}
22743 	}
22744 
22745 	if (IS_VAR != IS_CONST) {
22746 		/* previous opcode is ZEND_FETCH_CLASS */
22747 		if (((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
22748 		    ((opline-1)->extended_value & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
22749 			ce = EX(called_scope);
22750 		}
22751 	}
22752 
22753 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
22754 		fbc, opline->extended_value, ce, object);
22755 	call->prev_execute_data = EX(call);
22756 	EX(call) = call;
22757 
22758 	ZEND_VM_NEXT_OPCODE();
22759 }
22760 
22761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22762 {
22763 	USE_OPLINE
22764 	zend_free_op free_op1;
22765 	zval *expr_ptr, new_expr;
22766 
22767 	SAVE_OPLINE();
22768 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
22769 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
22770 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22771 		if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
22772 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
22773 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
22774 			HANDLE_EXCEPTION();
22775 		}
22776 		ZVAL_MAKE_REF(expr_ptr);
22777 		Z_ADDREF_P(expr_ptr);
22778 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22779 	} else {
22780 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
22781 		if (IS_VAR == IS_TMP_VAR) {
22782 			/* pass */
22783 		} else if (IS_VAR == IS_CONST) {
22784 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
22785 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
22786 				zval_copy_ctor_func(&new_expr);
22787 				expr_ptr = &new_expr;
22788 			}
22789 		} else if (IS_VAR == IS_CV) {
22790 			ZVAL_DEREF(expr_ptr);
22791 			if (Z_REFCOUNTED_P(expr_ptr)) {
22792 				Z_ADDREF_P(expr_ptr);
22793 			}
22794 		} else /* if (IS_VAR == IS_VAR) */ {
22795 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
22796 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
22797 
22798 				expr_ptr = Z_REFVAL_P(expr_ptr);
22799 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
22800 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
22801 					expr_ptr = &new_expr;
22802 					efree_size(ref, sizeof(zend_reference));
22803 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
22804 					Z_ADDREF_P(expr_ptr);
22805 				}
22806 			}
22807 		}
22808 	}
22809 
22810 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
22811 		zend_free_op free_op2;
22812 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22813 		zend_string *str;
22814 		zend_ulong hval;
22815 
22816 add_again:
22817 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
22818 			str = Z_STR_P(offset);
22819 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
22820 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
22821 					goto num_index;
22822 				}
22823 			}
22824 str_index:
22825 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
22826 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
22827 			hval = Z_LVAL_P(offset);
22828 num_index:
22829 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
22830 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
22831 			offset = Z_REFVAL_P(offset);
22832 			goto add_again;
22833 		} else if (Z_TYPE_P(offset) == IS_NULL) {
22834 			str = ZSTR_EMPTY_ALLOC();
22835 			goto str_index;
22836 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
22837 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
22838 			goto num_index;
22839 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
22840 			hval = 0;
22841 			goto num_index;
22842 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
22843 			hval = 1;
22844 			goto num_index;
22845 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
22846 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
22847 			str = ZSTR_EMPTY_ALLOC();
22848 			goto str_index;
22849 		} else {
22850 			zend_error(E_WARNING, "Illegal offset type");
22851 			zval_ptr_dtor(expr_ptr);
22852 		}
22853 		zval_ptr_dtor_nogc(free_op2);
22854 	} else {
22855 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
22856 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
22857 			zval_ptr_dtor(expr_ptr);
22858 		}
22859 	}
22860 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22861 }
22862 
22863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22864 {
22865 	zval *array;
22866 	uint32_t size;
22867 	USE_OPLINE
22868 
22869 	array = EX_VAR(opline->result.var);
22870 	if (IS_VAR != IS_UNUSED) {
22871 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
22872 	} else {
22873 		size = 0;
22874 	}
22875 	ZVAL_NEW_ARR(array);
22876 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
22877 
22878 	if (IS_VAR != IS_UNUSED) {
22879 		/* Explicitly initialize array as not-packed if flag is set */
22880 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
22881 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
22882 		}
22883 	}
22884 
22885 	if (IS_VAR == IS_UNUSED) {
22886 		ZEND_VM_NEXT_OPCODE();
22887 #if 0 || (IS_VAR != IS_UNUSED)
22888 	} else {
22889 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22890 #endif
22891 	}
22892 }
22893 
22894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22895 {
22896 	USE_OPLINE
22897 	zend_free_op free_op1, free_op2;
22898 	zval *container;
22899 	zval *offset;
22900 	zend_ulong hval;
22901 	zend_string *key;
22902 
22903 	SAVE_OPLINE();
22904 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22905 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
22906 		zend_throw_error(NULL, "Using $this when not in object context");
22907 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22908 		HANDLE_EXCEPTION();
22909 	}
22910 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
22911 		zend_throw_error(NULL, "Cannot unset string offsets");
22912 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
22913 		HANDLE_EXCEPTION();
22914 	}
22915 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
22916 
22917 	do {
22918 		if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22919 			HashTable *ht;
22920 
22921 unset_dim_array:
22922 			SEPARATE_ARRAY(container);
22923 			ht = Z_ARRVAL_P(container);
22924 offset_again:
22925 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
22926 				key = Z_STR_P(offset);
22927 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
22928 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
22929 						goto num_index_dim;
22930 					}
22931 				}
22932 str_index_dim:
22933 				if (ht == &EG(symbol_table)) {
22934 					zend_delete_global_variable(key);
22935 				} else {
22936 					zend_hash_del(ht, key);
22937 				}
22938 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
22939 				hval = Z_LVAL_P(offset);
22940 num_index_dim:
22941 				zend_hash_index_del(ht, hval);
22942 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
22943 				offset = Z_REFVAL_P(offset);
22944 				goto offset_again;
22945 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
22946 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
22947 				goto num_index_dim;
22948 			} else if (Z_TYPE_P(offset) == IS_NULL) {
22949 				key = ZSTR_EMPTY_ALLOC();
22950 				goto str_index_dim;
22951 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
22952 				hval = 0;
22953 				goto num_index_dim;
22954 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
22955 				hval = 1;
22956 				goto num_index_dim;
22957 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
22958 				hval = Z_RES_HANDLE_P(offset);
22959 				goto num_index_dim;
22960 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
22961 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
22962 				key = ZSTR_EMPTY_ALLOC();
22963 				goto str_index_dim;
22964 			} else {
22965 				zend_error(E_WARNING, "Illegal offset type in unset");
22966 			}
22967 			break;
22968 		} else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
22969 			container = Z_REFVAL_P(container);
22970 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22971 				goto unset_dim_array;
22972 			}
22973 		}
22974 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
22975 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
22976 		}
22977 		if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22978 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
22979 				zend_throw_error(NULL, "Cannot use object as array");
22980 			} else {
22981 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
22982 			}
22983 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
22984 			zend_throw_error(NULL, "Cannot unset string offsets");
22985 		}
22986 	} while (0);
22987 
22988 	zval_ptr_dtor_nogc(free_op2);
22989 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22990 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22991 }
22992 
22993 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22994 {
22995 	USE_OPLINE
22996 	zend_free_op free_op1, free_op2;
22997 	zval *container;
22998 	zval *offset;
22999 
23000 	SAVE_OPLINE();
23001 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23002 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23003 		zend_throw_error(NULL, "Using $this when not in object context");
23004 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
23005 		HANDLE_EXCEPTION();
23006 	}
23007 	if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
23008 		zend_throw_error(NULL, "Cannot unset string offsets");
23009 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
23010 		HANDLE_EXCEPTION();
23011 	}
23012 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
23013 
23014 	do {
23015 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
23016 			if (Z_ISREF_P(container)) {
23017 				container = Z_REFVAL_P(container);
23018 				if (Z_TYPE_P(container) != IS_OBJECT) {
23019 					break;
23020 				}
23021 			} else {
23022 				break;
23023 			}
23024 		}
23025 		if (Z_OBJ_HT_P(container)->unset_property) {
23026 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
23027 		} else {
23028 			zend_error(E_NOTICE, "Trying to unset property of non-object");
23029 		}
23030 	} while (0);
23031 
23032 	zval_ptr_dtor_nogc(free_op2);
23033 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23034 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23035 }
23036 
23037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23038 {
23039 	USE_OPLINE
23040 
23041 	zval *obj;
23042 	zend_class_entry *ce;
23043 	zend_function *clone;
23044 	zend_object_clone_obj_t clone_call;
23045 
23046 	SAVE_OPLINE();
23047 	obj = _get_obj_zval_ptr_unused(execute_data);
23048 
23049 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
23050 		zend_throw_error(NULL, "Using $this when not in object context");
23051 		HANDLE_EXCEPTION();
23052 	}
23053 
23054 	do {
23055 		if (IS_UNUSED == IS_CONST ||
23056 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
23057 		    if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
23058 		    	obj = Z_REFVAL_P(obj);
23059 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
23060 		    		break;
23061 				}
23062 			}
23063 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
23064 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
23065 				if (UNEXPECTED(EG(exception) != NULL)) {
23066 					HANDLE_EXCEPTION();
23067 				}
23068 			}
23069 			zend_throw_error(NULL, "__clone method called on non-object");
23070 
23071 			HANDLE_EXCEPTION();
23072 		}
23073 	} while (0);
23074 
23075 	ce = Z_OBJCE_P(obj);
23076 	clone = ce ? ce->clone : NULL;
23077 	clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
23078 	if (UNEXPECTED(clone_call == NULL)) {
23079 		if (ce) {
23080 			zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
23081 		} else {
23082 			zend_throw_error(NULL, "Trying to clone an uncloneable object");
23083 		}
23084 
23085 		HANDLE_EXCEPTION();
23086 	}
23087 
23088 	if (ce && clone) {
23089 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
23090 			/* Ensure that if we're calling a private function, we're allowed to do so.
23091 			 */
23092 			if (UNEXPECTED(ce != EG(scope))) {
23093 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
23094 
23095 				HANDLE_EXCEPTION();
23096 			}
23097 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
23098 			/* Ensure that if we're calling a protected function, we're allowed to do so.
23099 			 */
23100 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
23101 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
23102 
23103 				HANDLE_EXCEPTION();
23104 			}
23105 		}
23106 	}
23107 
23108 	if (EXPECTED(EG(exception) == NULL)) {
23109 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
23110 		if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
23111 			OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
23112 		}
23113 	}
23114 
23115 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23116 }
23117 
23118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23119 {
23120 	USE_OPLINE
23121 
23122 	SAVE_OPLINE();
23123 	if (IS_UNUSED != IS_UNUSED) {
23124 
23125 		zval *ptr = NULL;
23126 
23127 		do {
23128 			if (Z_TYPE_P(ptr) == IS_LONG) {
23129 				EG(exit_status) = Z_LVAL_P(ptr);
23130 			} else {
23131 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
23132 					ptr = Z_REFVAL_P(ptr);
23133 					if (Z_TYPE_P(ptr) == IS_LONG) {
23134 						EG(exit_status) = Z_LVAL_P(ptr);
23135 						break;
23136 					}
23137 				}
23138 				zend_print_variable(ptr);
23139 			}
23140 		} while (0);
23141 
23142 	}
23143 	zend_bailout();
23144 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
23145 }
23146 
23147 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
23148 {
23149 	USE_OPLINE
23150 	zend_free_op free_op_data1;
23151 	zval *object;
23152 	zval *property;
23153 	zval *value;
23154 	zval *zptr;
23155 
23156 	SAVE_OPLINE();
23157 	object = _get_obj_zval_ptr_unused(execute_data);
23158 
23159 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
23160 		zend_throw_error(NULL, "Using $this when not in object context");
23161 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23162 
23163 		HANDLE_EXCEPTION();
23164 	}
23165 
23166 	property = EX_CONSTANT(opline->op2);
23167 
23168 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
23169 		zend_throw_error(NULL, "Cannot use string offset as an object");
23170 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23171 
23172 		HANDLE_EXCEPTION();
23173 	}
23174 
23175 	do {
23176 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
23177 
23178 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23179 			ZVAL_DEREF(object);
23180 			if (UNEXPECTED(!make_real_object(object))) {
23181 				zend_error(E_WARNING, "Attempt to assign property of non-object");
23182 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23183 					ZVAL_NULL(EX_VAR(opline->result.var));
23184 				}
23185 				break;
23186 			}
23187 		}
23188 
23189 		/* here we are sure we are dealing with an object */
23190 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
23191 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
23192 			if (UNEXPECTED(zptr == &EG(error_zval))) {
23193 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23194 					ZVAL_NULL(EX_VAR(opline->result.var));
23195 				}
23196 			} else {
23197 				ZVAL_DEREF(zptr);
23198 				SEPARATE_ZVAL_NOREF(zptr);
23199 
23200 				binary_op(zptr, zptr, value);
23201 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23202 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
23203 				}
23204 			}
23205 		} else {
23206 			zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
23207 		}
23208 	} while (0);
23209 
23210 	FREE_OP(free_op_data1);
23211 
23212 
23213 	/* assign_obj has two opcodes! */
23214 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23215 }
23216 
23217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
23218 {
23219 	USE_OPLINE
23220 	zend_free_op free_op_data1;
23221 	zval *var_ptr, rv;
23222 	zval *value, *container, *dim;
23223 
23224 	SAVE_OPLINE();
23225 	container = _get_obj_zval_ptr_unused(execute_data);
23226 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23227 		zend_throw_error(NULL, "Using $this when not in object context");
23228 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23229 
23230 		HANDLE_EXCEPTION();
23231 	}
23232 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
23233 		zend_throw_error(NULL, "Cannot use string offset as an array");
23234 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23235 
23236 		HANDLE_EXCEPTION();
23237 	}
23238 
23239 	dim = EX_CONSTANT(opline->op2);
23240 
23241 	do {
23242 		if (IS_UNUSED == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
23243 			if (IS_UNUSED != IS_UNUSED) {
23244 				ZVAL_DEREF(container);
23245 			}
23246 			if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
23247 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
23248 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
23249 				break;
23250 			}
23251 		}
23252 
23253 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CONST);
23254 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
23255 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
23256 		var_ptr = Z_INDIRECT(rv);
23257 
23258 		if (UNEXPECTED(var_ptr == NULL)) {
23259 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
23260 
23261 			FREE_OP(free_op_data1);
23262 
23263 			HANDLE_EXCEPTION();
23264 		}
23265 
23266 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
23267 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23268 				ZVAL_NULL(EX_VAR(opline->result.var));
23269 			}
23270 		} else {
23271 			ZVAL_DEREF(var_ptr);
23272 			SEPARATE_ZVAL_NOREF(var_ptr);
23273 
23274 			binary_op(var_ptr, var_ptr, value);
23275 
23276 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23277 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
23278 			}
23279 		}
23280 	} while (0);
23281 
23282 	FREE_OP(free_op_data1);
23283 
23284 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23285 }
23286 
23287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23288 {
23289 #if 0 || (IS_CONST != IS_UNUSED)
23290 	USE_OPLINE
23291 
23292 # if 0 || (IS_UNUSED != IS_UNUSED)
23293 	if (EXPECTED(opline->extended_value == 0)) {
23294 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23295 	}
23296 # endif
23297 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23298 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23299 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23300 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23301 	}
23302 #else
23303 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23304 #endif
23305 }
23306 
23307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23308 {
23309 #if 0 || (IS_CONST != IS_UNUSED)
23310 	USE_OPLINE
23311 
23312 # if 0 || (IS_UNUSED != IS_UNUSED)
23313 	if (EXPECTED(opline->extended_value == 0)) {
23314 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23315 	}
23316 # endif
23317 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23318 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23319 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23320 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23321 	}
23322 #else
23323 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23324 #endif
23325 }
23326 
23327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23328 {
23329 #if 0 || (IS_CONST != IS_UNUSED)
23330 	USE_OPLINE
23331 
23332 # if 0 || (IS_UNUSED != IS_UNUSED)
23333 	if (EXPECTED(opline->extended_value == 0)) {
23334 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23335 	}
23336 # endif
23337 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23338 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23339 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23340 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23341 	}
23342 #else
23343 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23344 #endif
23345 }
23346 
23347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23348 {
23349 #if 0 || (IS_CONST != IS_UNUSED)
23350 	USE_OPLINE
23351 
23352 # if 0 || (IS_UNUSED != IS_UNUSED)
23353 	if (EXPECTED(opline->extended_value == 0)) {
23354 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23355 	}
23356 # endif
23357 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23358 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23359 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23360 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23361 	}
23362 #else
23363 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23364 #endif
23365 }
23366 
23367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23368 {
23369 #if 0 || (IS_CONST != IS_UNUSED)
23370 	USE_OPLINE
23371 
23372 # if 0 || (IS_UNUSED != IS_UNUSED)
23373 	if (EXPECTED(opline->extended_value == 0)) {
23374 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23375 	}
23376 # endif
23377 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23378 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23379 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23380 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23381 	}
23382 #else
23383 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23384 #endif
23385 }
23386 
23387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23388 {
23389 #if 0 || (IS_CONST != IS_UNUSED)
23390 	USE_OPLINE
23391 
23392 # if 0 || (IS_UNUSED != IS_UNUSED)
23393 	if (EXPECTED(opline->extended_value == 0)) {
23394 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23395 	}
23396 # endif
23397 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23398 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23399 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23400 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23401 	}
23402 #else
23403 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23404 #endif
23405 }
23406 
23407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23408 {
23409 #if 0 || (IS_CONST != IS_UNUSED)
23410 	USE_OPLINE
23411 
23412 # if 0 || (IS_UNUSED != IS_UNUSED)
23413 	if (EXPECTED(opline->extended_value == 0)) {
23414 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23415 	}
23416 # endif
23417 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23418 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23419 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23420 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23421 	}
23422 #else
23423 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23424 #endif
23425 }
23426 
23427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23428 {
23429 #if 0 || (IS_CONST != IS_UNUSED)
23430 	USE_OPLINE
23431 
23432 # if 0 || (IS_UNUSED != IS_UNUSED)
23433 	if (EXPECTED(opline->extended_value == 0)) {
23434 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23435 	}
23436 # endif
23437 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23438 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23439 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23440 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23441 	}
23442 #else
23443 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23444 #endif
23445 }
23446 
23447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23448 {
23449 #if 0 || (IS_CONST != IS_UNUSED)
23450 	USE_OPLINE
23451 
23452 # if 0 || (IS_UNUSED != IS_UNUSED)
23453 	if (EXPECTED(opline->extended_value == 0)) {
23454 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23455 	}
23456 # endif
23457 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23458 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23459 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23460 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23461 	}
23462 #else
23463 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23464 #endif
23465 }
23466 
23467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23468 {
23469 #if 0 || (IS_CONST != IS_UNUSED)
23470 	USE_OPLINE
23471 
23472 # if 0 || (IS_UNUSED != IS_UNUSED)
23473 	if (EXPECTED(opline->extended_value == 0)) {
23474 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23475 	}
23476 # endif
23477 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23478 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23479 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23480 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23481 	}
23482 #else
23483 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23484 #endif
23485 }
23486 
23487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23488 {
23489 #if 0 || (IS_CONST != IS_UNUSED)
23490 	USE_OPLINE
23491 
23492 # if 0 || (IS_UNUSED != IS_UNUSED)
23493 	if (EXPECTED(opline->extended_value == 0)) {
23494 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23495 	}
23496 # endif
23497 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23498 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23499 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23500 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23501 	}
23502 #else
23503 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23504 #endif
23505 }
23506 
23507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23508 {
23509 #if 0 || (IS_CONST != IS_UNUSED)
23510 	USE_OPLINE
23511 
23512 # if 0 || (IS_UNUSED != IS_UNUSED)
23513 	if (EXPECTED(opline->extended_value == 0)) {
23514 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23515 	}
23516 # endif
23517 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
23518 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23519 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
23520 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23521 	}
23522 #else
23523 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23524 #endif
23525 }
23526 
23527 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
23528 {
23529 	USE_OPLINE
23530 
23531 	zval *object;
23532 	zval *property;
23533 	zval *zptr;
23534 
23535 	SAVE_OPLINE();
23536 	object = _get_obj_zval_ptr_unused(execute_data);
23537 
23538 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
23539 		zend_throw_error(NULL, "Using $this when not in object context");
23540 
23541 		HANDLE_EXCEPTION();
23542 	}
23543 
23544 	property = EX_CONSTANT(opline->op2);
23545 
23546 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
23547 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
23548 
23549 		HANDLE_EXCEPTION();
23550 	}
23551 
23552 	do {
23553 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23554 			ZVAL_DEREF(object);
23555 			if (UNEXPECTED(!make_real_object(object))) {
23556 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23557 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23558 					ZVAL_NULL(EX_VAR(opline->result.var));
23559 				}
23560 				break;
23561 			}
23562 		}
23563 
23564 		/* here we are sure we are dealing with an object */
23565 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
23566 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
23567 			if (UNEXPECTED(zptr == &EG(error_zval))) {
23568 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23569 					ZVAL_NULL(EX_VAR(opline->result.var));
23570 				}
23571 			} else {
23572 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
23573 					if (inc) {
23574 						fast_long_increment_function(zptr);
23575 					} else {
23576 						fast_long_decrement_function(zptr);
23577 					}
23578 				} else {
23579 					ZVAL_DEREF(zptr);
23580 					SEPARATE_ZVAL_NOREF(zptr);
23581 
23582 					if (inc) {
23583 						increment_function(zptr);
23584 					} else {
23585 						decrement_function(zptr);
23586 					}
23587 				}
23588 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23589 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
23590 				}
23591 			}
23592 		} else {
23593 			zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
23594 		}
23595 	} while (0);
23596 
23597 
23598 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23599 }
23600 
23601 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23602 {
23603 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23604 }
23605 
23606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23607 {
23608 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23609 }
23610 
23611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
23612 {
23613 	USE_OPLINE
23614 
23615 	zval *object;
23616 	zval *property;
23617 	zval *zptr;
23618 
23619 	SAVE_OPLINE();
23620 	object = _get_obj_zval_ptr_unused(execute_data);
23621 
23622 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
23623 		zend_throw_error(NULL, "Using $this when not in object context");
23624 
23625 		HANDLE_EXCEPTION();
23626 	}
23627 
23628 	property = EX_CONSTANT(opline->op2);
23629 
23630 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
23631 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
23632 
23633 		HANDLE_EXCEPTION();
23634 	}
23635 
23636 	do {
23637 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23638 			ZVAL_DEREF(object);
23639 			if (UNEXPECTED(!make_real_object(object))) {
23640 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23641 				ZVAL_NULL(EX_VAR(opline->result.var));
23642 				break;
23643 			}
23644 		}
23645 
23646 		/* here we are sure we are dealing with an object */
23647 
23648 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
23649 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
23650 			if (UNEXPECTED(zptr == &EG(error_zval))) {
23651 				ZVAL_NULL(EX_VAR(opline->result.var));
23652 			} else {
23653 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
23654 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
23655 					if (inc) {
23656 						fast_long_increment_function(zptr);
23657 					} else {
23658 						fast_long_decrement_function(zptr);
23659 					}
23660 				} else {
23661 					ZVAL_DEREF(zptr);
23662 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
23663 					zval_opt_copy_ctor(zptr);
23664 					if (inc) {
23665 						increment_function(zptr);
23666 					} else {
23667 						decrement_function(zptr);
23668 					}
23669 				}
23670 			}
23671 		} else {
23672 			zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
23673 		}
23674 	} while (0);
23675 
23676 
23677 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23678 }
23679 
23680 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23681 {
23682 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23683 }
23684 
23685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23686 {
23687 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23688 }
23689 
23690 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23691 {
23692 	USE_OPLINE
23693 
23694 	zval *container;
23695 
23696 	zval *offset;
23697 
23698 	SAVE_OPLINE();
23699 	container = _get_obj_zval_ptr_unused(execute_data);
23700 
23701 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23702 		zend_throw_error(NULL, "Using $this when not in object context");
23703 
23704 		HANDLE_EXCEPTION();
23705 	}
23706 
23707 	offset = EX_CONSTANT(opline->op2);
23708 
23709 	if (IS_UNUSED == IS_CONST ||
23710 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
23711 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
23712 			container = Z_REFVAL_P(container);
23713 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
23714 				goto fetch_obj_r_no_object;
23715 			}
23716 		} else {
23717 			goto fetch_obj_r_no_object;
23718 		}
23719 	}
23720 
23721 	/* here we are sure we are dealing with an object */
23722 	do {
23723 		zend_object *zobj = Z_OBJ_P(container);
23724 		zval *retval;
23725 
23726 		if (IS_CONST == IS_CONST &&
23727 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
23728 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
23729 
23730 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23731 				retval = OBJ_PROP(zobj, prop_offset);
23732 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
23733 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
23734 					break;
23735 				}
23736 			} else if (EXPECTED(zobj->properties != NULL)) {
23737 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
23738 				if (EXPECTED(retval)) {
23739 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
23740 					break;
23741 				}
23742 			}
23743 		}
23744 
23745 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
23746 fetch_obj_r_no_object:
23747 			zend_error(E_NOTICE, "Trying to get property of non-object");
23748 			ZVAL_NULL(EX_VAR(opline->result.var));
23749 		} else {
23750 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
23751 
23752 			if (retval != EX_VAR(opline->result.var)) {
23753 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
23754 			}
23755 		}
23756 	} while (0);
23757 
23758 
23759 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23760 }
23761 
23762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23763 {
23764 	USE_OPLINE
23765 	zend_free_op free_op1;
23766 	zval *property;
23767 	zval *container;
23768 
23769 	SAVE_OPLINE();
23770 	property = EX_CONSTANT(opline->op2);
23771 
23772 	container = _get_obj_zval_ptr_unused(execute_data);
23773 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23774 		zend_throw_error(NULL, "Using $this when not in object context");
23775 
23776 		HANDLE_EXCEPTION();
23777 	}
23778 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
23779 		zend_throw_error(NULL, "Cannot use string offset as an object");
23780 
23781 		HANDLE_EXCEPTION();
23782 	}
23783 
23784 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
23785 
23786 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
23787 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
23788 	}
23789 
23790 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23791 }
23792 
23793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23794 {
23795 	USE_OPLINE
23796 	zend_free_op free_op1;
23797 	zval *property;
23798 	zval *container;
23799 
23800 	SAVE_OPLINE();
23801 	property = EX_CONSTANT(opline->op2);
23802 	container = _get_obj_zval_ptr_unused(execute_data);
23803 
23804 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23805 		zend_throw_error(NULL, "Using $this when not in object context");
23806 
23807 		HANDLE_EXCEPTION();
23808 	}
23809 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
23810 		zend_throw_error(NULL, "Cannot use string offset as an object");
23811 
23812 		HANDLE_EXCEPTION();
23813 	}
23814 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
23815 
23816 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
23817 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
23818 	}
23819 
23820 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23821 }
23822 
23823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23824 {
23825 	USE_OPLINE
23826 
23827 	zval *container;
23828 
23829 	zval *offset;
23830 
23831 	SAVE_OPLINE();
23832 	container = _get_obj_zval_ptr_unused(execute_data);
23833 
23834 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23835 		zend_throw_error(NULL, "Using $this when not in object context");
23836 
23837 		HANDLE_EXCEPTION();
23838 	}
23839 
23840 	offset  = EX_CONSTANT(opline->op2);
23841 
23842 	if (IS_UNUSED == IS_CONST ||
23843 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
23844 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
23845 			container = Z_REFVAL_P(container);
23846 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
23847 				goto fetch_obj_is_no_object;
23848 			}
23849 		} else {
23850 			goto fetch_obj_is_no_object;
23851 		}
23852 	}
23853 
23854 	/* here we are sure we are dealing with an object */
23855 	do {
23856 		zend_object *zobj = Z_OBJ_P(container);
23857 		zval *retval;
23858 
23859 		if (IS_CONST == IS_CONST &&
23860 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
23861 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
23862 
23863 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23864 				retval = OBJ_PROP(zobj, prop_offset);
23865 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
23866 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
23867 					break;
23868 				}
23869 			} else if (EXPECTED(zobj->properties != NULL)) {
23870 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
23871 				if (EXPECTED(retval)) {
23872 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
23873 					break;
23874 				}
23875 			}
23876 		}
23877 
23878 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
23879 fetch_obj_is_no_object:
23880 			ZVAL_NULL(EX_VAR(opline->result.var));
23881 		} else {
23882 
23883 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
23884 
23885 			if (retval != EX_VAR(opline->result.var)) {
23886 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
23887 			}
23888 		}
23889 	} while (0);
23890 
23891 
23892 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23893 }
23894 
23895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23896 {
23897 	USE_OPLINE
23898 	zval *container;
23899 
23900 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
23901 		/* Behave like FETCH_OBJ_W */
23902 		zend_free_op free_op1;
23903 		zval *property;
23904 
23905 		SAVE_OPLINE();
23906 		property = EX_CONSTANT(opline->op2);
23907 		container = _get_obj_zval_ptr_unused(execute_data);
23908 
23909 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23910 			zend_throw_error(NULL, "Using $this when not in object context");
23911 
23912 			HANDLE_EXCEPTION();
23913 		}
23914 		if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
23915 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
23916 
23917 
23918 			HANDLE_EXCEPTION();
23919 		}
23920 		if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
23921 			zend_throw_error(NULL, "Cannot use string offset as an object");
23922 
23923 			HANDLE_EXCEPTION();
23924 		}
23925 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
23926 
23927 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
23928 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
23929 		}
23930 
23931 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23932 	} else {
23933 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23934 	}
23935 }
23936 
23937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23938 {
23939 	USE_OPLINE
23940 	zend_free_op free_op1;
23941 	zval *container, *property;
23942 
23943 	SAVE_OPLINE();
23944 	container = _get_obj_zval_ptr_unused(execute_data);
23945 
23946 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
23947 		zend_throw_error(NULL, "Using $this when not in object context");
23948 
23949 		HANDLE_EXCEPTION();
23950 	}
23951 
23952 	property = EX_CONSTANT(opline->op2);
23953 
23954 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
23955 		zend_throw_error(NULL, "Cannot use string offset as an object");
23956 
23957 		HANDLE_EXCEPTION();
23958 	}
23959 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
23960 
23961 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
23962 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
23963 	}
23964 
23965 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23966 }
23967 
23968 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23969 {
23970 	USE_OPLINE
23971 
23972 	zval *object;
23973 	zval *property_name;
23974 
23975 	SAVE_OPLINE();
23976 	object = _get_obj_zval_ptr_unused(execute_data);
23977 
23978 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
23979 		zend_throw_error(NULL, "Using $this when not in object context");
23980 
23981 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23982 		HANDLE_EXCEPTION();
23983 	}
23984 
23985 	property_name = EX_CONSTANT(opline->op2);
23986 
23987 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
23988 		zend_throw_error(NULL, "Cannot use string offset as an array");
23989 
23990 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
23991 		HANDLE_EXCEPTION();
23992 	}
23993 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
23994 
23995 
23996 	/* assign_obj has two opcodes! */
23997 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23998 }
23999 
24000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24001 {
24002 	USE_OPLINE
24003 
24004 	zend_string **rope;
24005 	zval *var;
24006 
24007 	/* Compiler allocates the necessary number of zval slots to keep the rope */
24008 	rope = (zend_string**)EX_VAR(opline->result.var);
24009 	if (IS_CONST == IS_CONST) {
24010 		var = EX_CONSTANT(opline->op2);
24011 		rope[0] = zend_string_copy(Z_STR_P(var));
24012 	} else {
24013 		var = EX_CONSTANT(opline->op2);
24014 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
24015 			if (IS_CONST == IS_CV) {
24016 				rope[0] = zend_string_copy(Z_STR_P(var));
24017 			} else {
24018 				rope[0] = Z_STR_P(var);
24019 			}
24020 		} else {
24021 			SAVE_OPLINE();
24022 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
24023 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
24024 			}
24025 			rope[0] = _zval_get_string_func(var);
24026 
24027 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24028 		}
24029 	}
24030 	ZEND_VM_NEXT_OPCODE();
24031 }
24032 
24033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24034 {
24035 	USE_OPLINE
24036 	zval *function_name;
24037 
24038 	zval *object;
24039 	zend_function *fbc;
24040 	zend_class_entry *called_scope;
24041 	zend_object *obj;
24042 	zend_execute_data *call;
24043 	uint32_t call_info;
24044 
24045 	SAVE_OPLINE();
24046 
24047 	function_name = EX_CONSTANT(opline->op2);
24048 
24049 	if (IS_CONST != IS_CONST &&
24050 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
24051 		do {
24052 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
24053 				function_name = Z_REFVAL_P(function_name);
24054 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24055 					break;
24056 				}
24057 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
24058 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
24059 				if (UNEXPECTED(EG(exception) != NULL)) {
24060 					HANDLE_EXCEPTION();
24061 				}
24062 			}
24063 			zend_throw_error(NULL, "Method name must be a string");
24064 
24065 
24066 			HANDLE_EXCEPTION();
24067 		} while (0);
24068 	}
24069 
24070 	object = _get_obj_zval_ptr_unused(execute_data);
24071 
24072 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
24073 		zend_throw_error(NULL, "Using $this when not in object context");
24074 
24075 		HANDLE_EXCEPTION();
24076 	}
24077 
24078 	if (IS_UNUSED != IS_UNUSED) {
24079 		do {
24080 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24081 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
24082 					object = Z_REFVAL_P(object);
24083 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
24084 						break;
24085 					}
24086 				}
24087 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24088 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
24089 					if (UNEXPECTED(EG(exception) != NULL)) {
24090 
24091 						HANDLE_EXCEPTION();
24092 					}
24093 				}
24094 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
24095 
24096 
24097 				HANDLE_EXCEPTION();
24098 			}
24099 		} while (0);
24100 	}
24101 
24102 	obj = Z_OBJ_P(object);
24103 	called_scope = obj->ce;
24104 
24105 	if (IS_CONST != IS_CONST ||
24106 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
24107 	    zend_object *orig_obj = obj;
24108 
24109 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
24110 			zend_throw_error(NULL, "Object does not support method calls");
24111 
24112 
24113 			HANDLE_EXCEPTION();
24114 		}
24115 
24116 		/* First, locate the function. */
24117 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
24118 		if (UNEXPECTED(fbc == NULL)) {
24119 			if (EXPECTED(!EG(exception))) {
24120 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
24121 			}
24122 
24123 
24124 			HANDLE_EXCEPTION();
24125 		}
24126 		if (IS_CONST == IS_CONST &&
24127 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
24128 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
24129 		    EXPECTED(obj == orig_obj)) {
24130 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
24131 		}
24132 	}
24133 
24134 	call_info = ZEND_CALL_NESTED_FUNCTION;
24135 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
24136 		obj = NULL;
24137 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
24138 		/* CV may be changed indirectly (e.g. when it's a reference) */
24139 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
24140 		GC_REFCOUNT(obj)++; /* For $this pointer */
24141 	}
24142 
24143 
24144 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
24145 		HANDLE_EXCEPTION();
24146 	}
24147 
24148 	call = zend_vm_stack_push_call_frame(call_info,
24149 		fbc, opline->extended_value, called_scope, obj);
24150 	call->prev_execute_data = EX(call);
24151 	EX(call) = call;
24152 
24153 	ZEND_VM_NEXT_OPCODE();
24154 }
24155 
24156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24157 {
24158 	USE_OPLINE
24159 
24160 	SAVE_OPLINE();
24161 	if (IS_UNUSED == IS_UNUSED) {
24162 		zend_constant *c;
24163 
24164 		if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
24165 			c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
24166 		} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
24167 			if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
24168 				char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
24169 				if (!actual) {
24170 					ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(EX_CONSTANT(opline->op2)));
24171 				} else {
24172 					actual++;
24173 					ZVAL_STRINGL(EX_VAR(opline->result.var),
24174 							actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
24175 				}
24176 				/* non-qualified constant - allow text substitution */
24177 				zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
24178 						Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
24179 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24180 			} else {
24181 				zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
24182 				HANDLE_EXCEPTION();
24183 			}
24184 		} else {
24185 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), c);
24186 		}
24187 #ifdef ZTS
24188 		if (c->flags & CONST_PERSISTENT) {
24189 			ZVAL_DUP(EX_VAR(opline->result.var), &c->value);
24190 		} else {
24191 			ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
24192 		}
24193 #else
24194 		ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
24195 #endif
24196 	} else {
24197 		/* class constant */
24198 		zend_class_entry *ce;
24199 		zval *value;
24200 
24201 		do {
24202 			if (IS_UNUSED == IS_CONST) {
24203 				if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
24204 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
24205 					ZVAL_DEREF(value);
24206 #ifdef ZTS
24207 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
24208 #endif
24209 					break;
24210 				} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
24211 					ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
24212 				} else {
24213 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
24214 					if (UNEXPECTED(ce == NULL)) {
24215 						if (EXPECTED(!EG(exception))) {
24216 							zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op1)));
24217 						}
24218 						HANDLE_EXCEPTION();
24219 					}
24220 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
24221 				}
24222 			} else {
24223 				ce = Z_CE_P(EX_VAR(opline->op1.var));
24224 				if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
24225 					ZVAL_DEREF(value);
24226 					break;
24227 				}
24228 			}
24229 
24230 			if (EXPECTED((value = zend_hash_find(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
24231 				ZVAL_DEREF(value);
24232 				if (Z_CONSTANT_P(value)) {
24233 					EG(scope) = ce;
24234 					zval_update_constant_ex(value, 1, NULL);
24235 					EG(scope) = EX(func)->op_array.scope;
24236 					if (UNEXPECTED(EG(exception) != NULL)) {
24237 						HANDLE_EXCEPTION();
24238 					}
24239 				}
24240 				if (IS_UNUSED == IS_CONST) {
24241 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
24242 				} else {
24243 					CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
24244 				}
24245 			} else {
24246 				zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
24247 				HANDLE_EXCEPTION();
24248 			}
24249 		} while (0);
24250 #ifdef ZTS
24251 		if (ce->type == ZEND_INTERNAL_CLASS) {
24252 			ZVAL_DUP(EX_VAR(opline->result.var), value);
24253 		} else {
24254 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24255 		}
24256 #else
24257 		ZVAL_COPY(EX_VAR(opline->result.var), value);
24258 #endif
24259 	}
24260 	ZEND_VM_NEXT_OPCODE();
24261 }
24262 
24263 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24264 {
24265 	zval *array;
24266 	uint32_t size;
24267 	USE_OPLINE
24268 
24269 	array = EX_VAR(opline->result.var);
24270 	if (IS_UNUSED != IS_UNUSED) {
24271 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
24272 	} else {
24273 		size = 0;
24274 	}
24275 	ZVAL_NEW_ARR(array);
24276 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
24277 
24278 	if (IS_UNUSED != IS_UNUSED) {
24279 		/* Explicitly initialize array as not-packed if flag is set */
24280 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
24281 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
24282 		}
24283 	}
24284 
24285 	if (IS_UNUSED == IS_UNUSED) {
24286 		ZEND_VM_NEXT_OPCODE();
24287 #if 0 || (IS_UNUSED != IS_UNUSED)
24288 	} else {
24289 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24290 #endif
24291 	}
24292 }
24293 
24294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24295 {
24296 	USE_OPLINE
24297 
24298 	zval *container;
24299 	zval *offset;
24300 	zend_ulong hval;
24301 	zend_string *key;
24302 
24303 	SAVE_OPLINE();
24304 	container = _get_obj_zval_ptr_unused(execute_data);
24305 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
24306 		zend_throw_error(NULL, "Using $this when not in object context");
24307 
24308 		HANDLE_EXCEPTION();
24309 	}
24310 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
24311 		zend_throw_error(NULL, "Cannot unset string offsets");
24312 
24313 		HANDLE_EXCEPTION();
24314 	}
24315 	offset = EX_CONSTANT(opline->op2);
24316 
24317 	do {
24318 		if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24319 			HashTable *ht;
24320 
24321 unset_dim_array:
24322 			SEPARATE_ARRAY(container);
24323 			ht = Z_ARRVAL_P(container);
24324 offset_again:
24325 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24326 				key = Z_STR_P(offset);
24327 				if (IS_CONST != IS_CONST) {
24328 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
24329 						goto num_index_dim;
24330 					}
24331 				}
24332 str_index_dim:
24333 				if (ht == &EG(symbol_table)) {
24334 					zend_delete_global_variable(key);
24335 				} else {
24336 					zend_hash_del(ht, key);
24337 				}
24338 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24339 				hval = Z_LVAL_P(offset);
24340 num_index_dim:
24341 				zend_hash_index_del(ht, hval);
24342 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24343 				offset = Z_REFVAL_P(offset);
24344 				goto offset_again;
24345 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24346 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
24347 				goto num_index_dim;
24348 			} else if (Z_TYPE_P(offset) == IS_NULL) {
24349 				key = ZSTR_EMPTY_ALLOC();
24350 				goto str_index_dim;
24351 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
24352 				hval = 0;
24353 				goto num_index_dim;
24354 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
24355 				hval = 1;
24356 				goto num_index_dim;
24357 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24358 				hval = Z_RES_HANDLE_P(offset);
24359 				goto num_index_dim;
24360 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24361 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
24362 				key = ZSTR_EMPTY_ALLOC();
24363 				goto str_index_dim;
24364 			} else {
24365 				zend_error(E_WARNING, "Illegal offset type in unset");
24366 			}
24367 			break;
24368 		} else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
24369 			container = Z_REFVAL_P(container);
24370 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24371 				goto unset_dim_array;
24372 			}
24373 		}
24374 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
24375 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
24376 		}
24377 		if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24378 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
24379 				zend_throw_error(NULL, "Cannot use object as array");
24380 			} else {
24381 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
24382 			}
24383 		} else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
24384 			zend_throw_error(NULL, "Cannot unset string offsets");
24385 		}
24386 	} while (0);
24387 
24388 
24389 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24390 }
24391 
24392 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24393 {
24394 	USE_OPLINE
24395 
24396 	zval *container;
24397 	zval *offset;
24398 
24399 	SAVE_OPLINE();
24400 	container = _get_obj_zval_ptr_unused(execute_data);
24401 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
24402 		zend_throw_error(NULL, "Using $this when not in object context");
24403 
24404 		HANDLE_EXCEPTION();
24405 	}
24406 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
24407 		zend_throw_error(NULL, "Cannot unset string offsets");
24408 
24409 		HANDLE_EXCEPTION();
24410 	}
24411 	offset = EX_CONSTANT(opline->op2);
24412 
24413 	do {
24414 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
24415 			if (Z_ISREF_P(container)) {
24416 				container = Z_REFVAL_P(container);
24417 				if (Z_TYPE_P(container) != IS_OBJECT) {
24418 					break;
24419 				}
24420 			} else {
24421 				break;
24422 			}
24423 		}
24424 		if (Z_OBJ_HT_P(container)->unset_property) {
24425 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
24426 		} else {
24427 			zend_error(E_NOTICE, "Trying to unset property of non-object");
24428 		}
24429 	} while (0);
24430 
24431 
24432 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24433 }
24434 
24435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24436 {
24437 	USE_OPLINE
24438 
24439 	zval *container;
24440 	int result;
24441 	zend_ulong hval;
24442 	zval *offset;
24443 
24444 	SAVE_OPLINE();
24445 	container = _get_obj_zval_ptr_unused(execute_data);
24446 
24447 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
24448 		zend_throw_error(NULL, "Using $this when not in object context");
24449 
24450 		HANDLE_EXCEPTION();
24451 	}
24452 
24453 	offset = EX_CONSTANT(opline->op2);
24454 
24455 	if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24456 		HashTable *ht;
24457 		zval *value;
24458 		zend_string *str;
24459 
24460 isset_dim_obj_array:
24461 		ht = Z_ARRVAL_P(container);
24462 isset_again:
24463 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24464 			str = Z_STR_P(offset);
24465 			if (IS_CONST != IS_CONST) {
24466 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
24467 					goto num_index_prop;
24468 				}
24469 			}
24470 str_index_prop:
24471 			value = zend_hash_find_ind(ht, str);
24472 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24473 			hval = Z_LVAL_P(offset);
24474 num_index_prop:
24475 			value = zend_hash_index_find(ht, hval);
24476 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
24477 			offset = Z_REFVAL_P(offset);
24478 			goto isset_again;
24479 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24480 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
24481 			goto num_index_prop;
24482 		} else if (Z_TYPE_P(offset) == IS_NULL) {
24483 			str = ZSTR_EMPTY_ALLOC();
24484 			goto str_index_prop;
24485 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
24486 			hval = 0;
24487 			goto num_index_prop;
24488 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
24489 			hval = 1;
24490 			goto num_index_prop;
24491 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24492 			hval = Z_RES_HANDLE_P(offset);
24493 			goto num_index_prop;
24494 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24495 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
24496 			str = ZSTR_EMPTY_ALLOC();
24497 			goto str_index_prop;
24498 		} else {
24499 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
24500 			goto isset_not_found;
24501 		}
24502 
24503 		if (opline->extended_value & ZEND_ISSET) {
24504 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
24505 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
24506 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
24507 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
24508 			result = (value == NULL || !i_zend_is_true(value));
24509 		}
24510 		goto isset_dim_obj_exit;
24511 	} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
24512 		container = Z_REFVAL_P(container);
24513 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24514 			goto isset_dim_obj_array;
24515 		}
24516 	}
24517 
24518 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
24519 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
24520 	}
24521 
24522 	if (IS_UNUSED == IS_UNUSED ||
24523 	    (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
24524 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
24525 			result =
24526 				((opline->extended_value & ZEND_ISSET) == 0) ^
24527 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
24528 		} else {
24529 			zend_error(E_NOTICE, "Trying to check element of non-array");
24530 			goto isset_not_found;
24531 		}
24532 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
24533 		zend_long lval;
24534 
24535 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24536 			lval = Z_LVAL_P(offset);
24537 isset_str_offset:
24538 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
24539 				if (opline->extended_value & ZEND_ISSET) {
24540 					result = 1;
24541 				} else {
24542 					result = (Z_STRVAL_P(container)[lval] == '0');
24543 				}
24544 			} else {
24545 				goto isset_not_found;
24546 			}
24547 		} else {
24548 			if (IS_CONST & (IS_CV|IS_VAR)) {
24549 				ZVAL_DEREF(offset);
24550 			}
24551 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
24552 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
24553 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
24554 				lval = zval_get_long(offset);
24555 				goto isset_str_offset;
24556 			}
24557 			goto isset_not_found;
24558 		}
24559 	} else {
24560 isset_not_found:
24561 		result = ((opline->extended_value & ZEND_ISSET) == 0);
24562 	}
24563 
24564 isset_dim_obj_exit:
24565 
24566 
24567 	ZEND_VM_SMART_BRANCH(result, 1);
24568 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
24569 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24570 }
24571 
24572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24573 {
24574 	USE_OPLINE
24575 
24576 	zval *container;
24577 	int result;
24578 	zval *offset;
24579 
24580 	SAVE_OPLINE();
24581 	container = _get_obj_zval_ptr_unused(execute_data);
24582 
24583 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
24584 		zend_throw_error(NULL, "Using $this when not in object context");
24585 
24586 		HANDLE_EXCEPTION();
24587 	}
24588 
24589 	offset = EX_CONSTANT(opline->op2);
24590 
24591 	if (IS_UNUSED == IS_CONST ||
24592 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
24593 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
24594 			container = Z_REFVAL_P(container);
24595 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
24596 				goto isset_no_object;
24597 			}
24598 		} else {
24599 			goto isset_no_object;
24600 		}
24601 	}
24602 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
24603 		zend_error(E_NOTICE, "Trying to check property of non-object");
24604 isset_no_object:
24605 		result = ((opline->extended_value & ZEND_ISSET) == 0);
24606 	} else {
24607 		result =
24608 			((opline->extended_value & ZEND_ISSET) == 0) ^
24609 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
24610 	}
24611 
24612 
24613 	ZEND_VM_SMART_BRANCH(result, 1);
24614 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
24615 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24616 }
24617 
24618 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24619 {
24620 	USE_OPLINE
24621 
24622 	zend_generator *generator = zend_get_running_generator(execute_data);
24623 
24624 	SAVE_OPLINE();
24625 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24626 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
24627 
24628 
24629 		HANDLE_EXCEPTION();
24630 	}
24631 
24632 	/* Destroy the previously yielded value */
24633 	zval_ptr_dtor(&generator->value);
24634 
24635 	/* Destroy the previously yielded key */
24636 	zval_ptr_dtor(&generator->key);
24637 
24638 	/* Set the new yielded value */
24639 	if (IS_UNUSED != IS_UNUSED) {
24640 
24641 
24642 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24643 			/* Constants and temporary variables aren't yieldable by reference,
24644 			 * but we still allow them with a notice. */
24645 			if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
24646 				zval *value;
24647 
24648 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24649 
24650 				value = NULL;
24651 				ZVAL_COPY_VALUE(&generator->value, value);
24652 				if (IS_UNUSED == IS_CONST) {
24653 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24654 						zval_copy_ctor_func(&generator->value);
24655 					}
24656 				}
24657 			} else {
24658 				zval *value_ptr = NULL;
24659 
24660 				if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
24661 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
24662 
24663 					HANDLE_EXCEPTION();
24664 				}
24665 
24666 				/* If a function call result is yielded and the function did
24667 				 * not return by reference we throw a notice. */
24668 				if (IS_UNUSED == IS_VAR &&
24669 				    (value_ptr == &EG(uninitialized_zval) ||
24670 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
24671 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
24672 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24673 				} else {
24674 					ZVAL_MAKE_REF(value_ptr);
24675 				}
24676 				ZVAL_COPY(&generator->value, value_ptr);
24677 
24678 			}
24679 		} else {
24680 			zval *value = NULL;
24681 
24682 			/* Consts, temporary variables and references need copying */
24683 			if (IS_UNUSED == IS_CONST) {
24684 				ZVAL_COPY_VALUE(&generator->value, value);
24685 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24686 					zval_copy_ctor_func(&generator->value);
24687 				}
24688 			} else if (IS_UNUSED == IS_TMP_VAR) {
24689 				ZVAL_COPY_VALUE(&generator->value, value);
24690             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24691 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24692 
24693 			} else {
24694 				ZVAL_COPY_VALUE(&generator->value, value);
24695 				if (IS_UNUSED == IS_CV) {
24696 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24697 				}
24698 			}
24699 		}
24700 	} else {
24701 		/* If no value was specified yield null */
24702 		ZVAL_NULL(&generator->value);
24703 	}
24704 
24705 	/* Set the new yielded key */
24706 	if (IS_CONST != IS_UNUSED) {
24707 
24708 		zval *key = EX_CONSTANT(opline->op2);
24709 
24710 		/* Consts, temporary variables and references need copying */
24711 		if (IS_CONST == IS_CONST) {
24712 			ZVAL_COPY_VALUE(&generator->key, key);
24713 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
24714 				zval_copy_ctor_func(&generator->key);
24715 			}
24716 		} else if (IS_CONST == IS_TMP_VAR) {
24717 			ZVAL_COPY_VALUE(&generator->key, key);
24718 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
24719 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
24720 
24721 		} else {
24722 			ZVAL_COPY_VALUE(&generator->key, key);
24723 			if (IS_CONST == IS_CV) {
24724 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
24725 			}
24726 		}
24727 
24728 		if (Z_TYPE(generator->key) == IS_LONG
24729 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
24730 		) {
24731 			generator->largest_used_integer_key = Z_LVAL(generator->key);
24732 		}
24733 	} else {
24734 		/* If no key was specified we use auto-increment keys */
24735 		generator->largest_used_integer_key++;
24736 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
24737 	}
24738 
24739 	if (RETURN_VALUE_USED(opline)) {
24740 		/* If the return value of yield is used set the send
24741 		 * target and initialize it to NULL */
24742 		generator->send_target = EX_VAR(opline->result.var);
24743 		ZVAL_NULL(generator->send_target);
24744 	} else {
24745 		generator->send_target = NULL;
24746 	}
24747 
24748 	/* We increment to the next op, so we are at the correct position when the
24749 	 * generator is resumed. */
24750 	ZEND_VM_INC_OPCODE();
24751 
24752 	/* The GOTO VM uses a local opline variable. We need to set the opline
24753 	 * variable in execute_data so we don't resume at an old position. */
24754 	SAVE_OPLINE();
24755 
24756 	ZEND_VM_RETURN();
24757 }
24758 
24759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24760 {
24761 	USE_OPLINE
24762 
24763 	zend_generator *generator = zend_get_running_generator(execute_data);
24764 
24765 	SAVE_OPLINE();
24766 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24767 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
24768 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
24769 
24770 		HANDLE_EXCEPTION();
24771 	}
24772 
24773 	/* Destroy the previously yielded value */
24774 	zval_ptr_dtor(&generator->value);
24775 
24776 	/* Destroy the previously yielded key */
24777 	zval_ptr_dtor(&generator->key);
24778 
24779 	/* Set the new yielded value */
24780 	if (IS_UNUSED != IS_UNUSED) {
24781 
24782 
24783 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24784 			/* Constants and temporary variables aren't yieldable by reference,
24785 			 * but we still allow them with a notice. */
24786 			if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
24787 				zval *value;
24788 
24789 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24790 
24791 				value = NULL;
24792 				ZVAL_COPY_VALUE(&generator->value, value);
24793 				if (IS_UNUSED == IS_CONST) {
24794 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24795 						zval_copy_ctor_func(&generator->value);
24796 					}
24797 				}
24798 			} else {
24799 				zval *value_ptr = NULL;
24800 
24801 				if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
24802 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
24803 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
24804 					HANDLE_EXCEPTION();
24805 				}
24806 
24807 				/* If a function call result is yielded and the function did
24808 				 * not return by reference we throw a notice. */
24809 				if (IS_UNUSED == IS_VAR &&
24810 				    (value_ptr == &EG(uninitialized_zval) ||
24811 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
24812 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
24813 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24814 				} else {
24815 					ZVAL_MAKE_REF(value_ptr);
24816 				}
24817 				ZVAL_COPY(&generator->value, value_ptr);
24818 
24819 			}
24820 		} else {
24821 			zval *value = NULL;
24822 
24823 			/* Consts, temporary variables and references need copying */
24824 			if (IS_UNUSED == IS_CONST) {
24825 				ZVAL_COPY_VALUE(&generator->value, value);
24826 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24827 					zval_copy_ctor_func(&generator->value);
24828 				}
24829 			} else if (IS_UNUSED == IS_TMP_VAR) {
24830 				ZVAL_COPY_VALUE(&generator->value, value);
24831             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24832 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24833 
24834 			} else {
24835 				ZVAL_COPY_VALUE(&generator->value, value);
24836 				if (IS_UNUSED == IS_CV) {
24837 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24838 				}
24839 			}
24840 		}
24841 	} else {
24842 		/* If no value was specified yield null */
24843 		ZVAL_NULL(&generator->value);
24844 	}
24845 
24846 	/* Set the new yielded key */
24847 	if (IS_TMP_VAR != IS_UNUSED) {
24848 		zend_free_op free_op2;
24849 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
24850 
24851 		/* Consts, temporary variables and references need copying */
24852 		if (IS_TMP_VAR == IS_CONST) {
24853 			ZVAL_COPY_VALUE(&generator->key, key);
24854 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
24855 				zval_copy_ctor_func(&generator->key);
24856 			}
24857 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
24858 			ZVAL_COPY_VALUE(&generator->key, key);
24859 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
24860 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
24861 
24862 		} else {
24863 			ZVAL_COPY_VALUE(&generator->key, key);
24864 			if (IS_TMP_VAR == IS_CV) {
24865 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
24866 			}
24867 		}
24868 
24869 		if (Z_TYPE(generator->key) == IS_LONG
24870 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
24871 		) {
24872 			generator->largest_used_integer_key = Z_LVAL(generator->key);
24873 		}
24874 	} else {
24875 		/* If no key was specified we use auto-increment keys */
24876 		generator->largest_used_integer_key++;
24877 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
24878 	}
24879 
24880 	if (RETURN_VALUE_USED(opline)) {
24881 		/* If the return value of yield is used set the send
24882 		 * target and initialize it to NULL */
24883 		generator->send_target = EX_VAR(opline->result.var);
24884 		ZVAL_NULL(generator->send_target);
24885 	} else {
24886 		generator->send_target = NULL;
24887 	}
24888 
24889 	/* We increment to the next op, so we are at the correct position when the
24890 	 * generator is resumed. */
24891 	ZEND_VM_INC_OPCODE();
24892 
24893 	/* The GOTO VM uses a local opline variable. We need to set the opline
24894 	 * variable in execute_data so we don't resume at an old position. */
24895 	SAVE_OPLINE();
24896 
24897 	ZEND_VM_RETURN();
24898 }
24899 
24900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24901 {
24902 	USE_OPLINE
24903 
24904 	zend_generator *generator = zend_get_running_generator(execute_data);
24905 
24906 	SAVE_OPLINE();
24907 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24908 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
24909 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
24910 
24911 		HANDLE_EXCEPTION();
24912 	}
24913 
24914 	/* Destroy the previously yielded value */
24915 	zval_ptr_dtor(&generator->value);
24916 
24917 	/* Destroy the previously yielded key */
24918 	zval_ptr_dtor(&generator->key);
24919 
24920 	/* Set the new yielded value */
24921 	if (IS_UNUSED != IS_UNUSED) {
24922 
24923 
24924 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24925 			/* Constants and temporary variables aren't yieldable by reference,
24926 			 * but we still allow them with a notice. */
24927 			if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
24928 				zval *value;
24929 
24930 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24931 
24932 				value = NULL;
24933 				ZVAL_COPY_VALUE(&generator->value, value);
24934 				if (IS_UNUSED == IS_CONST) {
24935 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24936 						zval_copy_ctor_func(&generator->value);
24937 					}
24938 				}
24939 			} else {
24940 				zval *value_ptr = NULL;
24941 
24942 				if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
24943 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
24944 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
24945 					HANDLE_EXCEPTION();
24946 				}
24947 
24948 				/* If a function call result is yielded and the function did
24949 				 * not return by reference we throw a notice. */
24950 				if (IS_UNUSED == IS_VAR &&
24951 				    (value_ptr == &EG(uninitialized_zval) ||
24952 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
24953 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
24954 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24955 				} else {
24956 					ZVAL_MAKE_REF(value_ptr);
24957 				}
24958 				ZVAL_COPY(&generator->value, value_ptr);
24959 
24960 			}
24961 		} else {
24962 			zval *value = NULL;
24963 
24964 			/* Consts, temporary variables and references need copying */
24965 			if (IS_UNUSED == IS_CONST) {
24966 				ZVAL_COPY_VALUE(&generator->value, value);
24967 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
24968 					zval_copy_ctor_func(&generator->value);
24969 				}
24970 			} else if (IS_UNUSED == IS_TMP_VAR) {
24971 				ZVAL_COPY_VALUE(&generator->value, value);
24972             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24973 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24974 
24975 			} else {
24976 				ZVAL_COPY_VALUE(&generator->value, value);
24977 				if (IS_UNUSED == IS_CV) {
24978 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24979 				}
24980 			}
24981 		}
24982 	} else {
24983 		/* If no value was specified yield null */
24984 		ZVAL_NULL(&generator->value);
24985 	}
24986 
24987 	/* Set the new yielded key */
24988 	if (IS_VAR != IS_UNUSED) {
24989 		zend_free_op free_op2;
24990 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
24991 
24992 		/* Consts, temporary variables and references need copying */
24993 		if (IS_VAR == IS_CONST) {
24994 			ZVAL_COPY_VALUE(&generator->key, key);
24995 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
24996 				zval_copy_ctor_func(&generator->key);
24997 			}
24998 		} else if (IS_VAR == IS_TMP_VAR) {
24999 			ZVAL_COPY_VALUE(&generator->key, key);
25000 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
25001 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
25002 			zval_ptr_dtor_nogc(free_op2);
25003 		} else {
25004 			ZVAL_COPY_VALUE(&generator->key, key);
25005 			if (IS_VAR == IS_CV) {
25006 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
25007 			}
25008 		}
25009 
25010 		if (Z_TYPE(generator->key) == IS_LONG
25011 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
25012 		) {
25013 			generator->largest_used_integer_key = Z_LVAL(generator->key);
25014 		}
25015 	} else {
25016 		/* If no key was specified we use auto-increment keys */
25017 		generator->largest_used_integer_key++;
25018 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25019 	}
25020 
25021 	if (RETURN_VALUE_USED(opline)) {
25022 		/* If the return value of yield is used set the send
25023 		 * target and initialize it to NULL */
25024 		generator->send_target = EX_VAR(opline->result.var);
25025 		ZVAL_NULL(generator->send_target);
25026 	} else {
25027 		generator->send_target = NULL;
25028 	}
25029 
25030 	/* We increment to the next op, so we are at the correct position when the
25031 	 * generator is resumed. */
25032 	ZEND_VM_INC_OPCODE();
25033 
25034 	/* The GOTO VM uses a local opline variable. We need to set the opline
25035 	 * variable in execute_data so we don't resume at an old position. */
25036 	SAVE_OPLINE();
25037 
25038 	ZEND_VM_RETURN();
25039 }
25040 
25041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
25042 {
25043 	USE_OPLINE
25044 	zend_free_op free_op_data1;
25045 	zval *var_ptr, rv;
25046 	zval *value, *container, *dim;
25047 
25048 	SAVE_OPLINE();
25049 	container = _get_obj_zval_ptr_unused(execute_data);
25050 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
25051 		zend_throw_error(NULL, "Using $this when not in object context");
25052 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25053 
25054 		HANDLE_EXCEPTION();
25055 	}
25056 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
25057 		zend_throw_error(NULL, "Cannot use string offset as an array");
25058 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25059 
25060 		HANDLE_EXCEPTION();
25061 	}
25062 
25063 	dim = NULL;
25064 
25065 	do {
25066 		if (IS_UNUSED == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
25067 			if (IS_UNUSED != IS_UNUSED) {
25068 				ZVAL_DEREF(container);
25069 			}
25070 			if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25071 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25072 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
25073 				break;
25074 			}
25075 		}
25076 
25077 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_UNUSED);
25078 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25079 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
25080 		var_ptr = Z_INDIRECT(rv);
25081 
25082 		if (UNEXPECTED(var_ptr == NULL)) {
25083 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
25084 
25085 			FREE_OP(free_op_data1);
25086 
25087 			HANDLE_EXCEPTION();
25088 		}
25089 
25090 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
25091 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25092 				ZVAL_NULL(EX_VAR(opline->result.var));
25093 			}
25094 		} else {
25095 			ZVAL_DEREF(var_ptr);
25096 			SEPARATE_ZVAL_NOREF(var_ptr);
25097 
25098 			binary_op(var_ptr, var_ptr, value);
25099 
25100 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25101 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25102 			}
25103 		}
25104 	} while (0);
25105 
25106 	FREE_OP(free_op_data1);
25107 
25108 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25109 }
25110 
25111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25112 {
25113 #if 0 || (IS_UNUSED != IS_UNUSED)
25114 	USE_OPLINE
25115 
25116 # if 0 || (IS_UNUSED != IS_UNUSED)
25117 	if (EXPECTED(opline->extended_value == 0)) {
25118 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25119 	}
25120 # endif
25121 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25122 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25123 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25124 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25125 	}
25126 #else
25127 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25128 #endif
25129 }
25130 
25131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25132 {
25133 #if 0 || (IS_UNUSED != IS_UNUSED)
25134 	USE_OPLINE
25135 
25136 # if 0 || (IS_UNUSED != IS_UNUSED)
25137 	if (EXPECTED(opline->extended_value == 0)) {
25138 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25139 	}
25140 # endif
25141 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25142 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25143 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25144 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25145 	}
25146 #else
25147 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25148 #endif
25149 }
25150 
25151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25152 {
25153 #if 0 || (IS_UNUSED != IS_UNUSED)
25154 	USE_OPLINE
25155 
25156 # if 0 || (IS_UNUSED != IS_UNUSED)
25157 	if (EXPECTED(opline->extended_value == 0)) {
25158 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25159 	}
25160 # endif
25161 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25162 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25163 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25164 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25165 	}
25166 #else
25167 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25168 #endif
25169 }
25170 
25171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25172 {
25173 #if 0 || (IS_UNUSED != IS_UNUSED)
25174 	USE_OPLINE
25175 
25176 # if 0 || (IS_UNUSED != IS_UNUSED)
25177 	if (EXPECTED(opline->extended_value == 0)) {
25178 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25179 	}
25180 # endif
25181 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25182 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25183 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25184 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25185 	}
25186 #else
25187 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25188 #endif
25189 }
25190 
25191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25192 {
25193 #if 0 || (IS_UNUSED != IS_UNUSED)
25194 	USE_OPLINE
25195 
25196 # if 0 || (IS_UNUSED != IS_UNUSED)
25197 	if (EXPECTED(opline->extended_value == 0)) {
25198 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25199 	}
25200 # endif
25201 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25202 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25203 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25204 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25205 	}
25206 #else
25207 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25208 #endif
25209 }
25210 
25211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25212 {
25213 #if 0 || (IS_UNUSED != IS_UNUSED)
25214 	USE_OPLINE
25215 
25216 # if 0 || (IS_UNUSED != IS_UNUSED)
25217 	if (EXPECTED(opline->extended_value == 0)) {
25218 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25219 	}
25220 # endif
25221 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25222 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25223 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25224 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25225 	}
25226 #else
25227 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25228 #endif
25229 }
25230 
25231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25232 {
25233 #if 0 || (IS_UNUSED != IS_UNUSED)
25234 	USE_OPLINE
25235 
25236 # if 0 || (IS_UNUSED != IS_UNUSED)
25237 	if (EXPECTED(opline->extended_value == 0)) {
25238 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25239 	}
25240 # endif
25241 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25242 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25243 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25244 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25245 	}
25246 #else
25247 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25248 #endif
25249 }
25250 
25251 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25252 {
25253 #if 0 || (IS_UNUSED != IS_UNUSED)
25254 	USE_OPLINE
25255 
25256 # if 0 || (IS_UNUSED != IS_UNUSED)
25257 	if (EXPECTED(opline->extended_value == 0)) {
25258 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25259 	}
25260 # endif
25261 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25262 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25263 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25264 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25265 	}
25266 #else
25267 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25268 #endif
25269 }
25270 
25271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25272 {
25273 #if 0 || (IS_UNUSED != IS_UNUSED)
25274 	USE_OPLINE
25275 
25276 # if 0 || (IS_UNUSED != IS_UNUSED)
25277 	if (EXPECTED(opline->extended_value == 0)) {
25278 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25279 	}
25280 # endif
25281 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25282 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25283 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25284 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25285 	}
25286 #else
25287 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25288 #endif
25289 }
25290 
25291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25292 {
25293 #if 0 || (IS_UNUSED != IS_UNUSED)
25294 	USE_OPLINE
25295 
25296 # if 0 || (IS_UNUSED != IS_UNUSED)
25297 	if (EXPECTED(opline->extended_value == 0)) {
25298 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25299 	}
25300 # endif
25301 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25302 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25303 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25304 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25305 	}
25306 #else
25307 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25308 #endif
25309 }
25310 
25311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25312 {
25313 #if 0 || (IS_UNUSED != IS_UNUSED)
25314 	USE_OPLINE
25315 
25316 # if 0 || (IS_UNUSED != IS_UNUSED)
25317 	if (EXPECTED(opline->extended_value == 0)) {
25318 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25319 	}
25320 # endif
25321 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25322 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25323 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25324 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25325 	}
25326 #else
25327 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25328 #endif
25329 }
25330 
25331 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25332 {
25333 #if 0 || (IS_UNUSED != IS_UNUSED)
25334 	USE_OPLINE
25335 
25336 # if 0 || (IS_UNUSED != IS_UNUSED)
25337 	if (EXPECTED(opline->extended_value == 0)) {
25338 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25339 	}
25340 # endif
25341 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25342 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25343 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25344 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25345 	}
25346 #else
25347 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25348 #endif
25349 }
25350 
25351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25352 {
25353 	USE_OPLINE
25354 
25355 	SAVE_OPLINE();
25356 	if (IS_UNUSED == IS_UNUSED) {
25357 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
25358 	} else {
25359 /* prevents "undefined variable opline" errors */
25360 #if 0 || (IS_UNUSED != IS_UNUSED)
25361 		zval *retval_ref, *retval_ptr;
25362 
25363 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
25364 
25365 		retval_ref = retval_ptr = NULL;
25366 
25367 		if (IS_UNUSED == IS_CONST) {
25368 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
25369 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
25370 		} else if (IS_UNUSED == IS_VAR) {
25371 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
25372 				retval_ptr = Z_INDIRECT_P(retval_ptr);
25373 			}
25374 			ZVAL_DEREF(retval_ptr);
25375 		} else if (IS_UNUSED == IS_CV) {
25376 			ZVAL_DEREF(retval_ptr);
25377 		}
25378 
25379 		if (UNEXPECTED(!ret_info->class_name
25380 			&& ret_info->type_hint != IS_CALLABLE
25381 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
25382 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
25383 			&& retval_ref != retval_ptr)
25384 		) {
25385 			/* A cast might happen - unwrap the reference if this is a by-value return */
25386 			if (Z_REFCOUNT_P(retval_ref) == 1) {
25387 				ZVAL_UNREF(retval_ref);
25388 			} else {
25389 				Z_DELREF_P(retval_ref);
25390 				ZVAL_COPY(retval_ref, retval_ptr);
25391 			}
25392 			retval_ptr = retval_ref;
25393 		}
25394 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
25395 
25396 		if (UNEXPECTED(EG(exception) != NULL)) {
25397 			if (IS_UNUSED == IS_CONST) {
25398 				zval_ptr_dtor_nogc(retval_ptr);
25399 			} else {
25400 
25401 			}
25402 		}
25403 #endif
25404 	}
25405 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25406 }
25407 
25408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25409 {
25410 	zval *array;
25411 	uint32_t size;
25412 	USE_OPLINE
25413 
25414 	array = EX_VAR(opline->result.var);
25415 	if (IS_UNUSED != IS_UNUSED) {
25416 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
25417 	} else {
25418 		size = 0;
25419 	}
25420 	ZVAL_NEW_ARR(array);
25421 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
25422 
25423 	if (IS_UNUSED != IS_UNUSED) {
25424 		/* Explicitly initialize array as not-packed if flag is set */
25425 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
25426 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
25427 		}
25428 	}
25429 
25430 	if (IS_UNUSED == IS_UNUSED) {
25431 		ZEND_VM_NEXT_OPCODE();
25432 #if 0 || (IS_UNUSED != IS_UNUSED)
25433 	} else {
25434 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25435 #endif
25436 	}
25437 }
25438 
25439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25440 {
25441 	USE_OPLINE
25442 
25443 	zend_generator *generator = zend_get_running_generator(execute_data);
25444 
25445 	SAVE_OPLINE();
25446 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
25447 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
25448 
25449 
25450 		HANDLE_EXCEPTION();
25451 	}
25452 
25453 	/* Destroy the previously yielded value */
25454 	zval_ptr_dtor(&generator->value);
25455 
25456 	/* Destroy the previously yielded key */
25457 	zval_ptr_dtor(&generator->key);
25458 
25459 	/* Set the new yielded value */
25460 	if (IS_UNUSED != IS_UNUSED) {
25461 
25462 
25463 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
25464 			/* Constants and temporary variables aren't yieldable by reference,
25465 			 * but we still allow them with a notice. */
25466 			if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
25467 				zval *value;
25468 
25469 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25470 
25471 				value = NULL;
25472 				ZVAL_COPY_VALUE(&generator->value, value);
25473 				if (IS_UNUSED == IS_CONST) {
25474 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
25475 						zval_copy_ctor_func(&generator->value);
25476 					}
25477 				}
25478 			} else {
25479 				zval *value_ptr = NULL;
25480 
25481 				if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
25482 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
25483 
25484 					HANDLE_EXCEPTION();
25485 				}
25486 
25487 				/* If a function call result is yielded and the function did
25488 				 * not return by reference we throw a notice. */
25489 				if (IS_UNUSED == IS_VAR &&
25490 				    (value_ptr == &EG(uninitialized_zval) ||
25491 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
25492 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
25493 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25494 				} else {
25495 					ZVAL_MAKE_REF(value_ptr);
25496 				}
25497 				ZVAL_COPY(&generator->value, value_ptr);
25498 
25499 			}
25500 		} else {
25501 			zval *value = NULL;
25502 
25503 			/* Consts, temporary variables and references need copying */
25504 			if (IS_UNUSED == IS_CONST) {
25505 				ZVAL_COPY_VALUE(&generator->value, value);
25506 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
25507 					zval_copy_ctor_func(&generator->value);
25508 				}
25509 			} else if (IS_UNUSED == IS_TMP_VAR) {
25510 				ZVAL_COPY_VALUE(&generator->value, value);
25511             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
25512 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
25513 
25514 			} else {
25515 				ZVAL_COPY_VALUE(&generator->value, value);
25516 				if (IS_UNUSED == IS_CV) {
25517 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
25518 				}
25519 			}
25520 		}
25521 	} else {
25522 		/* If no value was specified yield null */
25523 		ZVAL_NULL(&generator->value);
25524 	}
25525 
25526 	/* Set the new yielded key */
25527 	if (IS_UNUSED != IS_UNUSED) {
25528 
25529 		zval *key = NULL;
25530 
25531 		/* Consts, temporary variables and references need copying */
25532 		if (IS_UNUSED == IS_CONST) {
25533 			ZVAL_COPY_VALUE(&generator->key, key);
25534 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
25535 				zval_copy_ctor_func(&generator->key);
25536 			}
25537 		} else if (IS_UNUSED == IS_TMP_VAR) {
25538 			ZVAL_COPY_VALUE(&generator->key, key);
25539 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
25540 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
25541 
25542 		} else {
25543 			ZVAL_COPY_VALUE(&generator->key, key);
25544 			if (IS_UNUSED == IS_CV) {
25545 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
25546 			}
25547 		}
25548 
25549 		if (Z_TYPE(generator->key) == IS_LONG
25550 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
25551 		) {
25552 			generator->largest_used_integer_key = Z_LVAL(generator->key);
25553 		}
25554 	} else {
25555 		/* If no key was specified we use auto-increment keys */
25556 		generator->largest_used_integer_key++;
25557 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25558 	}
25559 
25560 	if (RETURN_VALUE_USED(opline)) {
25561 		/* If the return value of yield is used set the send
25562 		 * target and initialize it to NULL */
25563 		generator->send_target = EX_VAR(opline->result.var);
25564 		ZVAL_NULL(generator->send_target);
25565 	} else {
25566 		generator->send_target = NULL;
25567 	}
25568 
25569 	/* We increment to the next op, so we are at the correct position when the
25570 	 * generator is resumed. */
25571 	ZEND_VM_INC_OPCODE();
25572 
25573 	/* The GOTO VM uses a local opline variable. We need to set the opline
25574 	 * variable in execute_data so we don't resume at an old position. */
25575 	SAVE_OPLINE();
25576 
25577 	ZEND_VM_RETURN();
25578 }
25579 
25580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
25581 {
25582 	USE_OPLINE
25583 	zend_free_op free_op_data1;
25584 	zval *object;
25585 	zval *property;
25586 	zval *value;
25587 	zval *zptr;
25588 
25589 	SAVE_OPLINE();
25590 	object = _get_obj_zval_ptr_unused(execute_data);
25591 
25592 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
25593 		zend_throw_error(NULL, "Using $this when not in object context");
25594 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25595 
25596 		HANDLE_EXCEPTION();
25597 	}
25598 
25599 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
25600 
25601 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
25602 		zend_throw_error(NULL, "Cannot use string offset as an object");
25603 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25604 
25605 		HANDLE_EXCEPTION();
25606 	}
25607 
25608 	do {
25609 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25610 
25611 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25612 			ZVAL_DEREF(object);
25613 			if (UNEXPECTED(!make_real_object(object))) {
25614 				zend_error(E_WARNING, "Attempt to assign property of non-object");
25615 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25616 					ZVAL_NULL(EX_VAR(opline->result.var));
25617 				}
25618 				break;
25619 			}
25620 		}
25621 
25622 		/* here we are sure we are dealing with an object */
25623 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
25624 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
25625 			if (UNEXPECTED(zptr == &EG(error_zval))) {
25626 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25627 					ZVAL_NULL(EX_VAR(opline->result.var));
25628 				}
25629 			} else {
25630 				ZVAL_DEREF(zptr);
25631 				SEPARATE_ZVAL_NOREF(zptr);
25632 
25633 				binary_op(zptr, zptr, value);
25634 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25635 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
25636 				}
25637 			}
25638 		} else {
25639 			zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
25640 		}
25641 	} while (0);
25642 
25643 	FREE_OP(free_op_data1);
25644 
25645 
25646 	/* assign_obj has two opcodes! */
25647 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25648 }
25649 
25650 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
25651 {
25652 	USE_OPLINE
25653 	zend_free_op free_op_data1;
25654 	zval *var_ptr, rv;
25655 	zval *value, *container, *dim;
25656 
25657 	SAVE_OPLINE();
25658 	container = _get_obj_zval_ptr_unused(execute_data);
25659 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
25660 		zend_throw_error(NULL, "Using $this when not in object context");
25661 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25662 
25663 		HANDLE_EXCEPTION();
25664 	}
25665 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
25666 		zend_throw_error(NULL, "Cannot use string offset as an array");
25667 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25668 
25669 		HANDLE_EXCEPTION();
25670 	}
25671 
25672 	dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
25673 
25674 	do {
25675 		if (IS_UNUSED == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
25676 			if (IS_UNUSED != IS_UNUSED) {
25677 				ZVAL_DEREF(container);
25678 			}
25679 			if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25680 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25681 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
25682 				break;
25683 			}
25684 		}
25685 
25686 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CV);
25687 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25688 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
25689 		var_ptr = Z_INDIRECT(rv);
25690 
25691 		if (UNEXPECTED(var_ptr == NULL)) {
25692 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
25693 
25694 			FREE_OP(free_op_data1);
25695 
25696 			HANDLE_EXCEPTION();
25697 		}
25698 
25699 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
25700 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25701 				ZVAL_NULL(EX_VAR(opline->result.var));
25702 			}
25703 		} else {
25704 			ZVAL_DEREF(var_ptr);
25705 			SEPARATE_ZVAL_NOREF(var_ptr);
25706 
25707 			binary_op(var_ptr, var_ptr, value);
25708 
25709 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25710 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25711 			}
25712 		}
25713 	} while (0);
25714 
25715 	FREE_OP(free_op_data1);
25716 
25717 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25718 }
25719 
25720 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25721 {
25722 #if 0 || (IS_CV != IS_UNUSED)
25723 	USE_OPLINE
25724 
25725 # if 0 || (IS_UNUSED != IS_UNUSED)
25726 	if (EXPECTED(opline->extended_value == 0)) {
25727 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25728 	}
25729 # endif
25730 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25731 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25732 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25733 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25734 	}
25735 #else
25736 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25737 #endif
25738 }
25739 
25740 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25741 {
25742 #if 0 || (IS_CV != IS_UNUSED)
25743 	USE_OPLINE
25744 
25745 # if 0 || (IS_UNUSED != IS_UNUSED)
25746 	if (EXPECTED(opline->extended_value == 0)) {
25747 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25748 	}
25749 # endif
25750 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25751 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25752 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25753 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25754 	}
25755 #else
25756 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25757 #endif
25758 }
25759 
25760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25761 {
25762 #if 0 || (IS_CV != IS_UNUSED)
25763 	USE_OPLINE
25764 
25765 # if 0 || (IS_UNUSED != IS_UNUSED)
25766 	if (EXPECTED(opline->extended_value == 0)) {
25767 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25768 	}
25769 # endif
25770 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25771 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25772 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25773 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25774 	}
25775 #else
25776 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25777 #endif
25778 }
25779 
25780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25781 {
25782 #if 0 || (IS_CV != IS_UNUSED)
25783 	USE_OPLINE
25784 
25785 # if 0 || (IS_UNUSED != IS_UNUSED)
25786 	if (EXPECTED(opline->extended_value == 0)) {
25787 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25788 	}
25789 # endif
25790 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25791 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25792 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25793 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25794 	}
25795 #else
25796 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25797 #endif
25798 }
25799 
25800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25801 {
25802 #if 0 || (IS_CV != IS_UNUSED)
25803 	USE_OPLINE
25804 
25805 # if 0 || (IS_UNUSED != IS_UNUSED)
25806 	if (EXPECTED(opline->extended_value == 0)) {
25807 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25808 	}
25809 # endif
25810 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25811 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25812 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25813 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25814 	}
25815 #else
25816 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25817 #endif
25818 }
25819 
25820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25821 {
25822 #if 0 || (IS_CV != IS_UNUSED)
25823 	USE_OPLINE
25824 
25825 # if 0 || (IS_UNUSED != IS_UNUSED)
25826 	if (EXPECTED(opline->extended_value == 0)) {
25827 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25828 	}
25829 # endif
25830 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25831 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25832 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25833 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25834 	}
25835 #else
25836 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25837 #endif
25838 }
25839 
25840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25841 {
25842 #if 0 || (IS_CV != IS_UNUSED)
25843 	USE_OPLINE
25844 
25845 # if 0 || (IS_UNUSED != IS_UNUSED)
25846 	if (EXPECTED(opline->extended_value == 0)) {
25847 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25848 	}
25849 # endif
25850 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25851 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25852 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25853 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25854 	}
25855 #else
25856 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25857 #endif
25858 }
25859 
25860 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25861 {
25862 #if 0 || (IS_CV != IS_UNUSED)
25863 	USE_OPLINE
25864 
25865 # if 0 || (IS_UNUSED != IS_UNUSED)
25866 	if (EXPECTED(opline->extended_value == 0)) {
25867 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25868 	}
25869 # endif
25870 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25871 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25872 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25873 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25874 	}
25875 #else
25876 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25877 #endif
25878 }
25879 
25880 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25881 {
25882 #if 0 || (IS_CV != IS_UNUSED)
25883 	USE_OPLINE
25884 
25885 # if 0 || (IS_UNUSED != IS_UNUSED)
25886 	if (EXPECTED(opline->extended_value == 0)) {
25887 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25888 	}
25889 # endif
25890 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25891 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25892 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25893 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25894 	}
25895 #else
25896 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25897 #endif
25898 }
25899 
25900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25901 {
25902 #if 0 || (IS_CV != IS_UNUSED)
25903 	USE_OPLINE
25904 
25905 # if 0 || (IS_UNUSED != IS_UNUSED)
25906 	if (EXPECTED(opline->extended_value == 0)) {
25907 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25908 	}
25909 # endif
25910 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25911 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25912 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25913 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25914 	}
25915 #else
25916 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25917 #endif
25918 }
25919 
25920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25921 {
25922 #if 0 || (IS_CV != IS_UNUSED)
25923 	USE_OPLINE
25924 
25925 # if 0 || (IS_UNUSED != IS_UNUSED)
25926 	if (EXPECTED(opline->extended_value == 0)) {
25927 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25928 	}
25929 # endif
25930 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25931 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25932 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25933 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25934 	}
25935 #else
25936 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25937 #endif
25938 }
25939 
25940 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25941 {
25942 #if 0 || (IS_CV != IS_UNUSED)
25943 	USE_OPLINE
25944 
25945 # if 0 || (IS_UNUSED != IS_UNUSED)
25946 	if (EXPECTED(opline->extended_value == 0)) {
25947 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25948 	}
25949 # endif
25950 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
25951 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25952 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
25953 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25954 	}
25955 #else
25956 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25957 #endif
25958 }
25959 
25960 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
25961 {
25962 	USE_OPLINE
25963 
25964 	zval *object;
25965 	zval *property;
25966 	zval *zptr;
25967 
25968 	SAVE_OPLINE();
25969 	object = _get_obj_zval_ptr_unused(execute_data);
25970 
25971 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
25972 		zend_throw_error(NULL, "Using $this when not in object context");
25973 
25974 		HANDLE_EXCEPTION();
25975 	}
25976 
25977 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
25978 
25979 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
25980 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
25981 
25982 		HANDLE_EXCEPTION();
25983 	}
25984 
25985 	do {
25986 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25987 			ZVAL_DEREF(object);
25988 			if (UNEXPECTED(!make_real_object(object))) {
25989 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
25990 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25991 					ZVAL_NULL(EX_VAR(opline->result.var));
25992 				}
25993 				break;
25994 			}
25995 		}
25996 
25997 		/* here we are sure we are dealing with an object */
25998 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
25999 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
26000 			if (UNEXPECTED(zptr == &EG(error_zval))) {
26001 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26002 					ZVAL_NULL(EX_VAR(opline->result.var));
26003 				}
26004 			} else {
26005 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
26006 					if (inc) {
26007 						fast_long_increment_function(zptr);
26008 					} else {
26009 						fast_long_decrement_function(zptr);
26010 					}
26011 				} else {
26012 					ZVAL_DEREF(zptr);
26013 					SEPARATE_ZVAL_NOREF(zptr);
26014 
26015 					if (inc) {
26016 						increment_function(zptr);
26017 					} else {
26018 						decrement_function(zptr);
26019 					}
26020 				}
26021 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26022 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
26023 				}
26024 			}
26025 		} else {
26026 			zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
26027 		}
26028 	} while (0);
26029 
26030 
26031 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26032 }
26033 
26034 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26035 {
26036 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26037 }
26038 
26039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26040 {
26041 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26042 }
26043 
26044 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
26045 {
26046 	USE_OPLINE
26047 
26048 	zval *object;
26049 	zval *property;
26050 	zval *zptr;
26051 
26052 	SAVE_OPLINE();
26053 	object = _get_obj_zval_ptr_unused(execute_data);
26054 
26055 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
26056 		zend_throw_error(NULL, "Using $this when not in object context");
26057 
26058 		HANDLE_EXCEPTION();
26059 	}
26060 
26061 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26062 
26063 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
26064 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
26065 
26066 		HANDLE_EXCEPTION();
26067 	}
26068 
26069 	do {
26070 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26071 			ZVAL_DEREF(object);
26072 			if (UNEXPECTED(!make_real_object(object))) {
26073 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
26074 				ZVAL_NULL(EX_VAR(opline->result.var));
26075 				break;
26076 			}
26077 		}
26078 
26079 		/* here we are sure we are dealing with an object */
26080 
26081 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
26082 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
26083 			if (UNEXPECTED(zptr == &EG(error_zval))) {
26084 				ZVAL_NULL(EX_VAR(opline->result.var));
26085 			} else {
26086 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
26087 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
26088 					if (inc) {
26089 						fast_long_increment_function(zptr);
26090 					} else {
26091 						fast_long_decrement_function(zptr);
26092 					}
26093 				} else {
26094 					ZVAL_DEREF(zptr);
26095 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
26096 					zval_opt_copy_ctor(zptr);
26097 					if (inc) {
26098 						increment_function(zptr);
26099 					} else {
26100 						decrement_function(zptr);
26101 					}
26102 				}
26103 			}
26104 		} else {
26105 			zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
26106 		}
26107 	} while (0);
26108 
26109 
26110 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26111 }
26112 
26113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26114 {
26115 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26116 }
26117 
26118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26119 {
26120 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26121 }
26122 
26123 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26124 {
26125 	USE_OPLINE
26126 
26127 	zval *container;
26128 
26129 	zval *offset;
26130 
26131 	SAVE_OPLINE();
26132 	container = _get_obj_zval_ptr_unused(execute_data);
26133 
26134 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26135 		zend_throw_error(NULL, "Using $this when not in object context");
26136 
26137 		HANDLE_EXCEPTION();
26138 	}
26139 
26140 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26141 
26142 	if (IS_UNUSED == IS_CONST ||
26143 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
26144 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
26145 			container = Z_REFVAL_P(container);
26146 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26147 				goto fetch_obj_r_no_object;
26148 			}
26149 		} else {
26150 			goto fetch_obj_r_no_object;
26151 		}
26152 	}
26153 
26154 	/* here we are sure we are dealing with an object */
26155 	do {
26156 		zend_object *zobj = Z_OBJ_P(container);
26157 		zval *retval;
26158 
26159 		if (IS_CV == IS_CONST &&
26160 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
26161 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
26162 
26163 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26164 				retval = OBJ_PROP(zobj, prop_offset);
26165 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
26166 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
26167 					break;
26168 				}
26169 			} else if (EXPECTED(zobj->properties != NULL)) {
26170 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
26171 				if (EXPECTED(retval)) {
26172 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
26173 					break;
26174 				}
26175 			}
26176 		}
26177 
26178 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
26179 fetch_obj_r_no_object:
26180 			zend_error(E_NOTICE, "Trying to get property of non-object");
26181 			ZVAL_NULL(EX_VAR(opline->result.var));
26182 		} else {
26183 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
26184 
26185 			if (retval != EX_VAR(opline->result.var)) {
26186 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
26187 			}
26188 		}
26189 	} while (0);
26190 
26191 
26192 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26193 }
26194 
26195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26196 {
26197 	USE_OPLINE
26198 	zend_free_op free_op1;
26199 	zval *property;
26200 	zval *container;
26201 
26202 	SAVE_OPLINE();
26203 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26204 
26205 	container = _get_obj_zval_ptr_unused(execute_data);
26206 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26207 		zend_throw_error(NULL, "Using $this when not in object context");
26208 
26209 		HANDLE_EXCEPTION();
26210 	}
26211 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26212 		zend_throw_error(NULL, "Cannot use string offset as an object");
26213 
26214 		HANDLE_EXCEPTION();
26215 	}
26216 
26217 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
26218 
26219 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
26220 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
26221 	}
26222 
26223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26224 }
26225 
26226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26227 {
26228 	USE_OPLINE
26229 	zend_free_op free_op1;
26230 	zval *property;
26231 	zval *container;
26232 
26233 	SAVE_OPLINE();
26234 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26235 	container = _get_obj_zval_ptr_unused(execute_data);
26236 
26237 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26238 		zend_throw_error(NULL, "Using $this when not in object context");
26239 
26240 		HANDLE_EXCEPTION();
26241 	}
26242 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26243 		zend_throw_error(NULL, "Cannot use string offset as an object");
26244 
26245 		HANDLE_EXCEPTION();
26246 	}
26247 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
26248 
26249 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
26250 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
26251 	}
26252 
26253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26254 }
26255 
26256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26257 {
26258 	USE_OPLINE
26259 
26260 	zval *container;
26261 
26262 	zval *offset;
26263 
26264 	SAVE_OPLINE();
26265 	container = _get_obj_zval_ptr_unused(execute_data);
26266 
26267 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26268 		zend_throw_error(NULL, "Using $this when not in object context");
26269 
26270 		HANDLE_EXCEPTION();
26271 	}
26272 
26273 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26274 
26275 	if (IS_UNUSED == IS_CONST ||
26276 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
26277 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
26278 			container = Z_REFVAL_P(container);
26279 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26280 				goto fetch_obj_is_no_object;
26281 			}
26282 		} else {
26283 			goto fetch_obj_is_no_object;
26284 		}
26285 	}
26286 
26287 	/* here we are sure we are dealing with an object */
26288 	do {
26289 		zend_object *zobj = Z_OBJ_P(container);
26290 		zval *retval;
26291 
26292 		if (IS_CV == IS_CONST &&
26293 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
26294 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
26295 
26296 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26297 				retval = OBJ_PROP(zobj, prop_offset);
26298 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
26299 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
26300 					break;
26301 				}
26302 			} else if (EXPECTED(zobj->properties != NULL)) {
26303 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
26304 				if (EXPECTED(retval)) {
26305 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
26306 					break;
26307 				}
26308 			}
26309 		}
26310 
26311 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
26312 fetch_obj_is_no_object:
26313 			ZVAL_NULL(EX_VAR(opline->result.var));
26314 		} else {
26315 
26316 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
26317 
26318 			if (retval != EX_VAR(opline->result.var)) {
26319 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
26320 			}
26321 		}
26322 	} while (0);
26323 
26324 
26325 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26326 }
26327 
26328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26329 {
26330 	USE_OPLINE
26331 	zval *container;
26332 
26333 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
26334 		/* Behave like FETCH_OBJ_W */
26335 		zend_free_op free_op1;
26336 		zval *property;
26337 
26338 		SAVE_OPLINE();
26339 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26340 		container = _get_obj_zval_ptr_unused(execute_data);
26341 
26342 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26343 			zend_throw_error(NULL, "Using $this when not in object context");
26344 
26345 			HANDLE_EXCEPTION();
26346 		}
26347 		if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
26348 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
26349 
26350 
26351 			HANDLE_EXCEPTION();
26352 		}
26353 		if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26354 			zend_throw_error(NULL, "Cannot use string offset as an object");
26355 
26356 			HANDLE_EXCEPTION();
26357 		}
26358 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
26359 
26360 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
26361 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
26362 		}
26363 
26364 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26365 	} else {
26366 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26367 	}
26368 }
26369 
26370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26371 {
26372 	USE_OPLINE
26373 	zend_free_op free_op1;
26374 	zval *container, *property;
26375 
26376 	SAVE_OPLINE();
26377 	container = _get_obj_zval_ptr_unused(execute_data);
26378 
26379 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26380 		zend_throw_error(NULL, "Using $this when not in object context");
26381 
26382 		HANDLE_EXCEPTION();
26383 	}
26384 
26385 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26386 
26387 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26388 		zend_throw_error(NULL, "Cannot use string offset as an object");
26389 
26390 		HANDLE_EXCEPTION();
26391 	}
26392 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
26393 
26394 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
26395 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
26396 	}
26397 
26398 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26399 }
26400 
26401 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26402 {
26403 	USE_OPLINE
26404 
26405 	zval *object;
26406 	zval *property_name;
26407 
26408 	SAVE_OPLINE();
26409 	object = _get_obj_zval_ptr_unused(execute_data);
26410 
26411 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
26412 		zend_throw_error(NULL, "Using $this when not in object context");
26413 
26414 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
26415 		HANDLE_EXCEPTION();
26416 	}
26417 
26418 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26419 
26420 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
26421 		zend_throw_error(NULL, "Cannot use string offset as an array");
26422 
26423 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
26424 		HANDLE_EXCEPTION();
26425 	}
26426 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
26427 
26428 
26429 	/* assign_obj has two opcodes! */
26430 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26431 }
26432 
26433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26434 {
26435 	USE_OPLINE
26436 
26437 	zend_string **rope;
26438 	zval *var;
26439 
26440 	/* Compiler allocates the necessary number of zval slots to keep the rope */
26441 	rope = (zend_string**)EX_VAR(opline->result.var);
26442 	if (IS_CV == IS_CONST) {
26443 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26444 		rope[0] = zend_string_copy(Z_STR_P(var));
26445 	} else {
26446 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
26447 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
26448 			if (IS_CV == IS_CV) {
26449 				rope[0] = zend_string_copy(Z_STR_P(var));
26450 			} else {
26451 				rope[0] = Z_STR_P(var);
26452 			}
26453 		} else {
26454 			SAVE_OPLINE();
26455 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
26456 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
26457 			}
26458 			rope[0] = _zval_get_string_func(var);
26459 
26460 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26461 		}
26462 	}
26463 	ZEND_VM_NEXT_OPCODE();
26464 }
26465 
26466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26467 {
26468 	USE_OPLINE
26469 	zval *function_name;
26470 
26471 	zval *object;
26472 	zend_function *fbc;
26473 	zend_class_entry *called_scope;
26474 	zend_object *obj;
26475 	zend_execute_data *call;
26476 	uint32_t call_info;
26477 
26478 	SAVE_OPLINE();
26479 
26480 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
26481 
26482 	if (IS_CV != IS_CONST &&
26483 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
26484 		do {
26485 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
26486 				function_name = Z_REFVAL_P(function_name);
26487 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
26488 					break;
26489 				}
26490 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
26491 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
26492 				if (UNEXPECTED(EG(exception) != NULL)) {
26493 					HANDLE_EXCEPTION();
26494 				}
26495 			}
26496 			zend_throw_error(NULL, "Method name must be a string");
26497 
26498 
26499 			HANDLE_EXCEPTION();
26500 		} while (0);
26501 	}
26502 
26503 	object = _get_obj_zval_ptr_unused(execute_data);
26504 
26505 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
26506 		zend_throw_error(NULL, "Using $this when not in object context");
26507 
26508 		HANDLE_EXCEPTION();
26509 	}
26510 
26511 	if (IS_UNUSED != IS_UNUSED) {
26512 		do {
26513 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26514 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
26515 					object = Z_REFVAL_P(object);
26516 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
26517 						break;
26518 					}
26519 				}
26520 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26521 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
26522 					if (UNEXPECTED(EG(exception) != NULL)) {
26523 
26524 						HANDLE_EXCEPTION();
26525 					}
26526 				}
26527 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
26528 
26529 
26530 				HANDLE_EXCEPTION();
26531 			}
26532 		} while (0);
26533 	}
26534 
26535 	obj = Z_OBJ_P(object);
26536 	called_scope = obj->ce;
26537 
26538 	if (IS_CV != IS_CONST ||
26539 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
26540 	    zend_object *orig_obj = obj;
26541 
26542 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
26543 			zend_throw_error(NULL, "Object does not support method calls");
26544 
26545 
26546 			HANDLE_EXCEPTION();
26547 		}
26548 
26549 		/* First, locate the function. */
26550 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
26551 		if (UNEXPECTED(fbc == NULL)) {
26552 			if (EXPECTED(!EG(exception))) {
26553 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
26554 			}
26555 
26556 
26557 			HANDLE_EXCEPTION();
26558 		}
26559 		if (IS_CV == IS_CONST &&
26560 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
26561 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
26562 		    EXPECTED(obj == orig_obj)) {
26563 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
26564 		}
26565 	}
26566 
26567 	call_info = ZEND_CALL_NESTED_FUNCTION;
26568 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
26569 		obj = NULL;
26570 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
26571 		/* CV may be changed indirectly (e.g. when it's a reference) */
26572 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
26573 		GC_REFCOUNT(obj)++; /* For $this pointer */
26574 	}
26575 
26576 
26577 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
26578 		HANDLE_EXCEPTION();
26579 	}
26580 
26581 	call = zend_vm_stack_push_call_frame(call_info,
26582 		fbc, opline->extended_value, called_scope, obj);
26583 	call->prev_execute_data = EX(call);
26584 	EX(call) = call;
26585 
26586 	ZEND_VM_NEXT_OPCODE();
26587 }
26588 
26589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26590 {
26591 	zval *array;
26592 	uint32_t size;
26593 	USE_OPLINE
26594 
26595 	array = EX_VAR(opline->result.var);
26596 	if (IS_UNUSED != IS_UNUSED) {
26597 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
26598 	} else {
26599 		size = 0;
26600 	}
26601 	ZVAL_NEW_ARR(array);
26602 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
26603 
26604 	if (IS_UNUSED != IS_UNUSED) {
26605 		/* Explicitly initialize array as not-packed if flag is set */
26606 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
26607 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
26608 		}
26609 	}
26610 
26611 	if (IS_UNUSED == IS_UNUSED) {
26612 		ZEND_VM_NEXT_OPCODE();
26613 #if 0 || (IS_UNUSED != IS_UNUSED)
26614 	} else {
26615 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26616 #endif
26617 	}
26618 }
26619 
26620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26621 {
26622 	USE_OPLINE
26623 
26624 	zval *container;
26625 	zval *offset;
26626 	zend_ulong hval;
26627 	zend_string *key;
26628 
26629 	SAVE_OPLINE();
26630 	container = _get_obj_zval_ptr_unused(execute_data);
26631 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26632 		zend_throw_error(NULL, "Using $this when not in object context");
26633 
26634 		HANDLE_EXCEPTION();
26635 	}
26636 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26637 		zend_throw_error(NULL, "Cannot unset string offsets");
26638 
26639 		HANDLE_EXCEPTION();
26640 	}
26641 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
26642 
26643 	do {
26644 		if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26645 			HashTable *ht;
26646 
26647 unset_dim_array:
26648 			SEPARATE_ARRAY(container);
26649 			ht = Z_ARRVAL_P(container);
26650 offset_again:
26651 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26652 				key = Z_STR_P(offset);
26653 				if (IS_CV != IS_CONST) {
26654 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
26655 						goto num_index_dim;
26656 					}
26657 				}
26658 str_index_dim:
26659 				if (ht == &EG(symbol_table)) {
26660 					zend_delete_global_variable(key);
26661 				} else {
26662 					zend_hash_del(ht, key);
26663 				}
26664 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26665 				hval = Z_LVAL_P(offset);
26666 num_index_dim:
26667 				zend_hash_index_del(ht, hval);
26668 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
26669 				offset = Z_REFVAL_P(offset);
26670 				goto offset_again;
26671 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26672 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
26673 				goto num_index_dim;
26674 			} else if (Z_TYPE_P(offset) == IS_NULL) {
26675 				key = ZSTR_EMPTY_ALLOC();
26676 				goto str_index_dim;
26677 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
26678 				hval = 0;
26679 				goto num_index_dim;
26680 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
26681 				hval = 1;
26682 				goto num_index_dim;
26683 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26684 				hval = Z_RES_HANDLE_P(offset);
26685 				goto num_index_dim;
26686 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26687 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
26688 				key = ZSTR_EMPTY_ALLOC();
26689 				goto str_index_dim;
26690 			} else {
26691 				zend_error(E_WARNING, "Illegal offset type in unset");
26692 			}
26693 			break;
26694 		} else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
26695 			container = Z_REFVAL_P(container);
26696 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26697 				goto unset_dim_array;
26698 			}
26699 		}
26700 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
26701 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
26702 		}
26703 		if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
26704 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
26705 				zend_throw_error(NULL, "Cannot use object as array");
26706 			} else {
26707 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
26708 			}
26709 		} else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
26710 			zend_throw_error(NULL, "Cannot unset string offsets");
26711 		}
26712 	} while (0);
26713 
26714 
26715 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26716 }
26717 
26718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26719 {
26720 	USE_OPLINE
26721 
26722 	zval *container;
26723 	zval *offset;
26724 
26725 	SAVE_OPLINE();
26726 	container = _get_obj_zval_ptr_unused(execute_data);
26727 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26728 		zend_throw_error(NULL, "Using $this when not in object context");
26729 
26730 		HANDLE_EXCEPTION();
26731 	}
26732 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
26733 		zend_throw_error(NULL, "Cannot unset string offsets");
26734 
26735 		HANDLE_EXCEPTION();
26736 	}
26737 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26738 
26739 	do {
26740 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26741 			if (Z_ISREF_P(container)) {
26742 				container = Z_REFVAL_P(container);
26743 				if (Z_TYPE_P(container) != IS_OBJECT) {
26744 					break;
26745 				}
26746 			} else {
26747 				break;
26748 			}
26749 		}
26750 		if (Z_OBJ_HT_P(container)->unset_property) {
26751 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
26752 		} else {
26753 			zend_error(E_NOTICE, "Trying to unset property of non-object");
26754 		}
26755 	} while (0);
26756 
26757 
26758 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26759 }
26760 
26761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26762 {
26763 	USE_OPLINE
26764 
26765 	zval *container;
26766 	int result;
26767 	zend_ulong hval;
26768 	zval *offset;
26769 
26770 	SAVE_OPLINE();
26771 	container = _get_obj_zval_ptr_unused(execute_data);
26772 
26773 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26774 		zend_throw_error(NULL, "Using $this when not in object context");
26775 
26776 		HANDLE_EXCEPTION();
26777 	}
26778 
26779 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
26780 
26781 	if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26782 		HashTable *ht;
26783 		zval *value;
26784 		zend_string *str;
26785 
26786 isset_dim_obj_array:
26787 		ht = Z_ARRVAL_P(container);
26788 isset_again:
26789 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26790 			str = Z_STR_P(offset);
26791 			if (IS_CV != IS_CONST) {
26792 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
26793 					goto num_index_prop;
26794 				}
26795 			}
26796 str_index_prop:
26797 			value = zend_hash_find_ind(ht, str);
26798 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26799 			hval = Z_LVAL_P(offset);
26800 num_index_prop:
26801 			value = zend_hash_index_find(ht, hval);
26802 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
26803 			offset = Z_REFVAL_P(offset);
26804 			goto isset_again;
26805 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26806 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
26807 			goto num_index_prop;
26808 		} else if (Z_TYPE_P(offset) == IS_NULL) {
26809 			str = ZSTR_EMPTY_ALLOC();
26810 			goto str_index_prop;
26811 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
26812 			hval = 0;
26813 			goto num_index_prop;
26814 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
26815 			hval = 1;
26816 			goto num_index_prop;
26817 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26818 			hval = Z_RES_HANDLE_P(offset);
26819 			goto num_index_prop;
26820 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26821 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
26822 			str = ZSTR_EMPTY_ALLOC();
26823 			goto str_index_prop;
26824 		} else {
26825 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
26826 			goto isset_not_found;
26827 		}
26828 
26829 		if (opline->extended_value & ZEND_ISSET) {
26830 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
26831 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
26832 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
26833 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
26834 			result = (value == NULL || !i_zend_is_true(value));
26835 		}
26836 		goto isset_dim_obj_exit;
26837 	} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
26838 		container = Z_REFVAL_P(container);
26839 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26840 			goto isset_dim_obj_array;
26841 		}
26842 	}
26843 
26844 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
26845 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
26846 	}
26847 
26848 	if (IS_UNUSED == IS_UNUSED ||
26849 	    (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
26850 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
26851 			result =
26852 				((opline->extended_value & ZEND_ISSET) == 0) ^
26853 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
26854 		} else {
26855 			zend_error(E_NOTICE, "Trying to check element of non-array");
26856 			goto isset_not_found;
26857 		}
26858 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
26859 		zend_long lval;
26860 
26861 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26862 			lval = Z_LVAL_P(offset);
26863 isset_str_offset:
26864 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
26865 				if (opline->extended_value & ZEND_ISSET) {
26866 					result = 1;
26867 				} else {
26868 					result = (Z_STRVAL_P(container)[lval] == '0');
26869 				}
26870 			} else {
26871 				goto isset_not_found;
26872 			}
26873 		} else {
26874 			if (IS_CV & (IS_CV|IS_VAR)) {
26875 				ZVAL_DEREF(offset);
26876 			}
26877 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
26878 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
26879 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
26880 				lval = zval_get_long(offset);
26881 				goto isset_str_offset;
26882 			}
26883 			goto isset_not_found;
26884 		}
26885 	} else {
26886 isset_not_found:
26887 		result = ((opline->extended_value & ZEND_ISSET) == 0);
26888 	}
26889 
26890 isset_dim_obj_exit:
26891 
26892 
26893 	ZEND_VM_SMART_BRANCH(result, 1);
26894 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26895 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26896 }
26897 
26898 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26899 {
26900 	USE_OPLINE
26901 
26902 	zval *container;
26903 	int result;
26904 	zval *offset;
26905 
26906 	SAVE_OPLINE();
26907 	container = _get_obj_zval_ptr_unused(execute_data);
26908 
26909 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
26910 		zend_throw_error(NULL, "Using $this when not in object context");
26911 
26912 		HANDLE_EXCEPTION();
26913 	}
26914 
26915 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
26916 
26917 	if (IS_UNUSED == IS_CONST ||
26918 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
26919 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
26920 			container = Z_REFVAL_P(container);
26921 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26922 				goto isset_no_object;
26923 			}
26924 		} else {
26925 			goto isset_no_object;
26926 		}
26927 	}
26928 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
26929 		zend_error(E_NOTICE, "Trying to check property of non-object");
26930 isset_no_object:
26931 		result = ((opline->extended_value & ZEND_ISSET) == 0);
26932 	} else {
26933 		result =
26934 			((opline->extended_value & ZEND_ISSET) == 0) ^
26935 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
26936 	}
26937 
26938 
26939 	ZEND_VM_SMART_BRANCH(result, 1);
26940 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26941 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26942 }
26943 
26944 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26945 {
26946 	USE_OPLINE
26947 
26948 	zend_generator *generator = zend_get_running_generator(execute_data);
26949 
26950 	SAVE_OPLINE();
26951 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
26952 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
26953 
26954 
26955 		HANDLE_EXCEPTION();
26956 	}
26957 
26958 	/* Destroy the previously yielded value */
26959 	zval_ptr_dtor(&generator->value);
26960 
26961 	/* Destroy the previously yielded key */
26962 	zval_ptr_dtor(&generator->key);
26963 
26964 	/* Set the new yielded value */
26965 	if (IS_UNUSED != IS_UNUSED) {
26966 
26967 
26968 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
26969 			/* Constants and temporary variables aren't yieldable by reference,
26970 			 * but we still allow them with a notice. */
26971 			if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
26972 				zval *value;
26973 
26974 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26975 
26976 				value = NULL;
26977 				ZVAL_COPY_VALUE(&generator->value, value);
26978 				if (IS_UNUSED == IS_CONST) {
26979 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
26980 						zval_copy_ctor_func(&generator->value);
26981 					}
26982 				}
26983 			} else {
26984 				zval *value_ptr = NULL;
26985 
26986 				if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
26987 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
26988 
26989 					HANDLE_EXCEPTION();
26990 				}
26991 
26992 				/* If a function call result is yielded and the function did
26993 				 * not return by reference we throw a notice. */
26994 				if (IS_UNUSED == IS_VAR &&
26995 				    (value_ptr == &EG(uninitialized_zval) ||
26996 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
26997 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
26998 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26999 				} else {
27000 					ZVAL_MAKE_REF(value_ptr);
27001 				}
27002 				ZVAL_COPY(&generator->value, value_ptr);
27003 
27004 			}
27005 		} else {
27006 			zval *value = NULL;
27007 
27008 			/* Consts, temporary variables and references need copying */
27009 			if (IS_UNUSED == IS_CONST) {
27010 				ZVAL_COPY_VALUE(&generator->value, value);
27011 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
27012 					zval_copy_ctor_func(&generator->value);
27013 				}
27014 			} else if (IS_UNUSED == IS_TMP_VAR) {
27015 				ZVAL_COPY_VALUE(&generator->value, value);
27016             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
27017 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
27018 
27019 			} else {
27020 				ZVAL_COPY_VALUE(&generator->value, value);
27021 				if (IS_UNUSED == IS_CV) {
27022 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
27023 				}
27024 			}
27025 		}
27026 	} else {
27027 		/* If no value was specified yield null */
27028 		ZVAL_NULL(&generator->value);
27029 	}
27030 
27031 	/* Set the new yielded key */
27032 	if (IS_CV != IS_UNUSED) {
27033 
27034 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
27035 
27036 		/* Consts, temporary variables and references need copying */
27037 		if (IS_CV == IS_CONST) {
27038 			ZVAL_COPY_VALUE(&generator->key, key);
27039 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
27040 				zval_copy_ctor_func(&generator->key);
27041 			}
27042 		} else if (IS_CV == IS_TMP_VAR) {
27043 			ZVAL_COPY_VALUE(&generator->key, key);
27044 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
27045 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
27046 
27047 		} else {
27048 			ZVAL_COPY_VALUE(&generator->key, key);
27049 			if (IS_CV == IS_CV) {
27050 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
27051 			}
27052 		}
27053 
27054 		if (Z_TYPE(generator->key) == IS_LONG
27055 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
27056 		) {
27057 			generator->largest_used_integer_key = Z_LVAL(generator->key);
27058 		}
27059 	} else {
27060 		/* If no key was specified we use auto-increment keys */
27061 		generator->largest_used_integer_key++;
27062 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
27063 	}
27064 
27065 	if (RETURN_VALUE_USED(opline)) {
27066 		/* If the return value of yield is used set the send
27067 		 * target and initialize it to NULL */
27068 		generator->send_target = EX_VAR(opline->result.var);
27069 		ZVAL_NULL(generator->send_target);
27070 	} else {
27071 		generator->send_target = NULL;
27072 	}
27073 
27074 	/* We increment to the next op, so we are at the correct position when the
27075 	 * generator is resumed. */
27076 	ZEND_VM_INC_OPCODE();
27077 
27078 	/* The GOTO VM uses a local opline variable. We need to set the opline
27079 	 * variable in execute_data so we don't resume at an old position. */
27080 	SAVE_OPLINE();
27081 
27082 	ZEND_VM_RETURN();
27083 }
27084 
27085 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
27086 {
27087 	USE_OPLINE
27088 	zend_free_op free_op2, free_op_data1;
27089 	zval *object;
27090 	zval *property;
27091 	zval *value;
27092 	zval *zptr;
27093 
27094 	SAVE_OPLINE();
27095 	object = _get_obj_zval_ptr_unused(execute_data);
27096 
27097 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
27098 		zend_throw_error(NULL, "Using $this when not in object context");
27099 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27100 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27101 		HANDLE_EXCEPTION();
27102 	}
27103 
27104 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27105 
27106 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
27107 		zend_throw_error(NULL, "Cannot use string offset as an object");
27108 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27109 		zval_ptr_dtor_nogc(free_op2);
27110 		HANDLE_EXCEPTION();
27111 	}
27112 
27113 	do {
27114 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
27115 
27116 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
27117 			ZVAL_DEREF(object);
27118 			if (UNEXPECTED(!make_real_object(object))) {
27119 				zend_error(E_WARNING, "Attempt to assign property of non-object");
27120 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27121 					ZVAL_NULL(EX_VAR(opline->result.var));
27122 				}
27123 				break;
27124 			}
27125 		}
27126 
27127 		/* here we are sure we are dealing with an object */
27128 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
27129 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
27130 			if (UNEXPECTED(zptr == &EG(error_zval))) {
27131 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27132 					ZVAL_NULL(EX_VAR(opline->result.var));
27133 				}
27134 			} else {
27135 				ZVAL_DEREF(zptr);
27136 				SEPARATE_ZVAL_NOREF(zptr);
27137 
27138 				binary_op(zptr, zptr, value);
27139 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27140 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
27141 				}
27142 			}
27143 		} else {
27144 			zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27145 		}
27146 	} while (0);
27147 
27148 	FREE_OP(free_op_data1);
27149 	zval_ptr_dtor_nogc(free_op2);
27150 
27151 	/* assign_obj has two opcodes! */
27152 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27153 }
27154 
27155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
27156 {
27157 	USE_OPLINE
27158 	zend_free_op free_op2, free_op_data1;
27159 	zval *var_ptr, rv;
27160 	zval *value, *container, *dim;
27161 
27162 	SAVE_OPLINE();
27163 	container = _get_obj_zval_ptr_unused(execute_data);
27164 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27165 		zend_throw_error(NULL, "Using $this when not in object context");
27166 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27167 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27168 		HANDLE_EXCEPTION();
27169 	}
27170 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
27171 		zend_throw_error(NULL, "Cannot use string offset as an array");
27172 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27173 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27174 		HANDLE_EXCEPTION();
27175 	}
27176 
27177 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27178 
27179 	do {
27180 		if (IS_UNUSED == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
27181 			if (IS_UNUSED != IS_UNUSED) {
27182 				ZVAL_DEREF(container);
27183 			}
27184 			if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27185 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
27186 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
27187 				break;
27188 			}
27189 		}
27190 
27191 		zend_fetch_dimension_address_RW(&rv, container, dim, (IS_TMP_VAR|IS_VAR));
27192 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
27193 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
27194 		var_ptr = Z_INDIRECT(rv);
27195 
27196 		if (UNEXPECTED(var_ptr == NULL)) {
27197 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
27198 			zval_ptr_dtor_nogc(free_op2);
27199 			FREE_OP(free_op_data1);
27200 
27201 			HANDLE_EXCEPTION();
27202 		}
27203 
27204 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
27205 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27206 				ZVAL_NULL(EX_VAR(opline->result.var));
27207 			}
27208 		} else {
27209 			ZVAL_DEREF(var_ptr);
27210 			SEPARATE_ZVAL_NOREF(var_ptr);
27211 
27212 			binary_op(var_ptr, var_ptr, value);
27213 
27214 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27215 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
27216 			}
27217 		}
27218 	} while (0);
27219 
27220 	zval_ptr_dtor_nogc(free_op2);
27221 	FREE_OP(free_op_data1);
27222 
27223 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27224 }
27225 
27226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27227 {
27228 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27229 	USE_OPLINE
27230 
27231 # if 0 || (IS_UNUSED != IS_UNUSED)
27232 	if (EXPECTED(opline->extended_value == 0)) {
27233 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27234 	}
27235 # endif
27236 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27237 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27238 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27239 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27240 	}
27241 #else
27242 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27243 #endif
27244 }
27245 
27246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27247 {
27248 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27249 	USE_OPLINE
27250 
27251 # if 0 || (IS_UNUSED != IS_UNUSED)
27252 	if (EXPECTED(opline->extended_value == 0)) {
27253 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27254 	}
27255 # endif
27256 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27257 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27258 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27259 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27260 	}
27261 #else
27262 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27263 #endif
27264 }
27265 
27266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27267 {
27268 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27269 	USE_OPLINE
27270 
27271 # if 0 || (IS_UNUSED != IS_UNUSED)
27272 	if (EXPECTED(opline->extended_value == 0)) {
27273 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27274 	}
27275 # endif
27276 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27277 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27278 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27279 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27280 	}
27281 #else
27282 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27283 #endif
27284 }
27285 
27286 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27287 {
27288 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27289 	USE_OPLINE
27290 
27291 # if 0 || (IS_UNUSED != IS_UNUSED)
27292 	if (EXPECTED(opline->extended_value == 0)) {
27293 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27294 	}
27295 # endif
27296 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27297 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27298 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27299 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27300 	}
27301 #else
27302 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27303 #endif
27304 }
27305 
27306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27307 {
27308 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27309 	USE_OPLINE
27310 
27311 # if 0 || (IS_UNUSED != IS_UNUSED)
27312 	if (EXPECTED(opline->extended_value == 0)) {
27313 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27314 	}
27315 # endif
27316 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27317 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27318 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27319 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27320 	}
27321 #else
27322 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27323 #endif
27324 }
27325 
27326 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27327 {
27328 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27329 	USE_OPLINE
27330 
27331 # if 0 || (IS_UNUSED != IS_UNUSED)
27332 	if (EXPECTED(opline->extended_value == 0)) {
27333 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27334 	}
27335 # endif
27336 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27337 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27338 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27339 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27340 	}
27341 #else
27342 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27343 #endif
27344 }
27345 
27346 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27347 {
27348 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27349 	USE_OPLINE
27350 
27351 # if 0 || (IS_UNUSED != IS_UNUSED)
27352 	if (EXPECTED(opline->extended_value == 0)) {
27353 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27354 	}
27355 # endif
27356 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27357 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27358 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27359 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27360 	}
27361 #else
27362 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27363 #endif
27364 }
27365 
27366 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27367 {
27368 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27369 	USE_OPLINE
27370 
27371 # if 0 || (IS_UNUSED != IS_UNUSED)
27372 	if (EXPECTED(opline->extended_value == 0)) {
27373 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27374 	}
27375 # endif
27376 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27377 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27378 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27379 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27380 	}
27381 #else
27382 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27383 #endif
27384 }
27385 
27386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27387 {
27388 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27389 	USE_OPLINE
27390 
27391 # if 0 || (IS_UNUSED != IS_UNUSED)
27392 	if (EXPECTED(opline->extended_value == 0)) {
27393 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27394 	}
27395 # endif
27396 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27397 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27398 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27399 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27400 	}
27401 #else
27402 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27403 #endif
27404 }
27405 
27406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27407 {
27408 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27409 	USE_OPLINE
27410 
27411 # if 0 || (IS_UNUSED != IS_UNUSED)
27412 	if (EXPECTED(opline->extended_value == 0)) {
27413 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27414 	}
27415 # endif
27416 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27417 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27418 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27419 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27420 	}
27421 #else
27422 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27423 #endif
27424 }
27425 
27426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27427 {
27428 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27429 	USE_OPLINE
27430 
27431 # if 0 || (IS_UNUSED != IS_UNUSED)
27432 	if (EXPECTED(opline->extended_value == 0)) {
27433 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27434 	}
27435 # endif
27436 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27437 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27438 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27439 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27440 	}
27441 #else
27442 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27443 #endif
27444 }
27445 
27446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27447 {
27448 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
27449 	USE_OPLINE
27450 
27451 # if 0 || (IS_UNUSED != IS_UNUSED)
27452 	if (EXPECTED(opline->extended_value == 0)) {
27453 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27454 	}
27455 # endif
27456 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
27457 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27458 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
27459 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27460 	}
27461 #else
27462 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27463 #endif
27464 }
27465 
27466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
27467 {
27468 	USE_OPLINE
27469 	zend_free_op free_op2;
27470 	zval *object;
27471 	zval *property;
27472 	zval *zptr;
27473 
27474 	SAVE_OPLINE();
27475 	object = _get_obj_zval_ptr_unused(execute_data);
27476 
27477 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
27478 		zend_throw_error(NULL, "Using $this when not in object context");
27479 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27480 		HANDLE_EXCEPTION();
27481 	}
27482 
27483 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27484 
27485 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
27486 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
27487 		zval_ptr_dtor_nogc(free_op2);
27488 		HANDLE_EXCEPTION();
27489 	}
27490 
27491 	do {
27492 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
27493 			ZVAL_DEREF(object);
27494 			if (UNEXPECTED(!make_real_object(object))) {
27495 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
27496 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27497 					ZVAL_NULL(EX_VAR(opline->result.var));
27498 				}
27499 				break;
27500 			}
27501 		}
27502 
27503 		/* here we are sure we are dealing with an object */
27504 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
27505 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
27506 			if (UNEXPECTED(zptr == &EG(error_zval))) {
27507 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27508 					ZVAL_NULL(EX_VAR(opline->result.var));
27509 				}
27510 			} else {
27511 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
27512 					if (inc) {
27513 						fast_long_increment_function(zptr);
27514 					} else {
27515 						fast_long_decrement_function(zptr);
27516 					}
27517 				} else {
27518 					ZVAL_DEREF(zptr);
27519 					SEPARATE_ZVAL_NOREF(zptr);
27520 
27521 					if (inc) {
27522 						increment_function(zptr);
27523 					} else {
27524 						decrement_function(zptr);
27525 					}
27526 				}
27527 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27528 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
27529 				}
27530 			}
27531 		} else {
27532 			zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27533 		}
27534 	} while (0);
27535 
27536 	zval_ptr_dtor_nogc(free_op2);
27537 
27538 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27539 }
27540 
27541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27542 {
27543 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27544 }
27545 
27546 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27547 {
27548 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27549 }
27550 
27551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
27552 {
27553 	USE_OPLINE
27554 	zend_free_op free_op2;
27555 	zval *object;
27556 	zval *property;
27557 	zval *zptr;
27558 
27559 	SAVE_OPLINE();
27560 	object = _get_obj_zval_ptr_unused(execute_data);
27561 
27562 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
27563 		zend_throw_error(NULL, "Using $this when not in object context");
27564 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27565 		HANDLE_EXCEPTION();
27566 	}
27567 
27568 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27569 
27570 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
27571 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
27572 		zval_ptr_dtor_nogc(free_op2);
27573 		HANDLE_EXCEPTION();
27574 	}
27575 
27576 	do {
27577 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
27578 			ZVAL_DEREF(object);
27579 			if (UNEXPECTED(!make_real_object(object))) {
27580 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
27581 				ZVAL_NULL(EX_VAR(opline->result.var));
27582 				break;
27583 			}
27584 		}
27585 
27586 		/* here we are sure we are dealing with an object */
27587 
27588 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
27589 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
27590 			if (UNEXPECTED(zptr == &EG(error_zval))) {
27591 				ZVAL_NULL(EX_VAR(opline->result.var));
27592 			} else {
27593 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
27594 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
27595 					if (inc) {
27596 						fast_long_increment_function(zptr);
27597 					} else {
27598 						fast_long_decrement_function(zptr);
27599 					}
27600 				} else {
27601 					ZVAL_DEREF(zptr);
27602 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
27603 					zval_opt_copy_ctor(zptr);
27604 					if (inc) {
27605 						increment_function(zptr);
27606 					} else {
27607 						decrement_function(zptr);
27608 					}
27609 				}
27610 			}
27611 		} else {
27612 			zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
27613 		}
27614 	} while (0);
27615 
27616 	zval_ptr_dtor_nogc(free_op2);
27617 
27618 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27619 }
27620 
27621 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27622 {
27623 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27624 }
27625 
27626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27627 {
27628 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27629 }
27630 
27631 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27632 {
27633 	USE_OPLINE
27634 
27635 	zval *container;
27636 	zend_free_op free_op2;
27637 	zval *offset;
27638 
27639 	SAVE_OPLINE();
27640 	container = _get_obj_zval_ptr_unused(execute_data);
27641 
27642 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27643 		zend_throw_error(NULL, "Using $this when not in object context");
27644 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27645 		HANDLE_EXCEPTION();
27646 	}
27647 
27648 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27649 
27650 	if (IS_UNUSED == IS_CONST ||
27651 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
27652 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
27653 			container = Z_REFVAL_P(container);
27654 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
27655 				goto fetch_obj_r_no_object;
27656 			}
27657 		} else {
27658 			goto fetch_obj_r_no_object;
27659 		}
27660 	}
27661 
27662 	/* here we are sure we are dealing with an object */
27663 	do {
27664 		zend_object *zobj = Z_OBJ_P(container);
27665 		zval *retval;
27666 
27667 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27668 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
27669 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
27670 
27671 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
27672 				retval = OBJ_PROP(zobj, prop_offset);
27673 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
27674 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
27675 					break;
27676 				}
27677 			} else if (EXPECTED(zobj->properties != NULL)) {
27678 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
27679 				if (EXPECTED(retval)) {
27680 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
27681 					break;
27682 				}
27683 			}
27684 		}
27685 
27686 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
27687 fetch_obj_r_no_object:
27688 			zend_error(E_NOTICE, "Trying to get property of non-object");
27689 			ZVAL_NULL(EX_VAR(opline->result.var));
27690 		} else {
27691 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
27692 
27693 			if (retval != EX_VAR(opline->result.var)) {
27694 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
27695 			}
27696 		}
27697 	} while (0);
27698 
27699 	zval_ptr_dtor_nogc(free_op2);
27700 
27701 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27702 }
27703 
27704 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27705 {
27706 	USE_OPLINE
27707 	zend_free_op free_op1, free_op2;
27708 	zval *property;
27709 	zval *container;
27710 
27711 	SAVE_OPLINE();
27712 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27713 
27714 	container = _get_obj_zval_ptr_unused(execute_data);
27715 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27716 		zend_throw_error(NULL, "Using $this when not in object context");
27717 		zval_ptr_dtor_nogc(free_op2);
27718 		HANDLE_EXCEPTION();
27719 	}
27720 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
27721 		zend_throw_error(NULL, "Cannot use string offset as an object");
27722 		zval_ptr_dtor_nogc(free_op2);
27723 		HANDLE_EXCEPTION();
27724 	}
27725 
27726 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
27727 	zval_ptr_dtor_nogc(free_op2);
27728 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
27729 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
27730 	}
27731 
27732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27733 }
27734 
27735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27736 {
27737 	USE_OPLINE
27738 	zend_free_op free_op1, free_op2;
27739 	zval *property;
27740 	zval *container;
27741 
27742 	SAVE_OPLINE();
27743 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27744 	container = _get_obj_zval_ptr_unused(execute_data);
27745 
27746 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27747 		zend_throw_error(NULL, "Using $this when not in object context");
27748 		zval_ptr_dtor_nogc(free_op2);
27749 		HANDLE_EXCEPTION();
27750 	}
27751 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
27752 		zend_throw_error(NULL, "Cannot use string offset as an object");
27753 		zval_ptr_dtor_nogc(free_op2);
27754 		HANDLE_EXCEPTION();
27755 	}
27756 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
27757 	zval_ptr_dtor_nogc(free_op2);
27758 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
27759 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
27760 	}
27761 
27762 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27763 }
27764 
27765 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27766 {
27767 	USE_OPLINE
27768 
27769 	zval *container;
27770 	zend_free_op free_op2;
27771 	zval *offset;
27772 
27773 	SAVE_OPLINE();
27774 	container = _get_obj_zval_ptr_unused(execute_data);
27775 
27776 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27777 		zend_throw_error(NULL, "Using $this when not in object context");
27778 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27779 		HANDLE_EXCEPTION();
27780 	}
27781 
27782 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27783 
27784 	if (IS_UNUSED == IS_CONST ||
27785 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
27786 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
27787 			container = Z_REFVAL_P(container);
27788 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
27789 				goto fetch_obj_is_no_object;
27790 			}
27791 		} else {
27792 			goto fetch_obj_is_no_object;
27793 		}
27794 	}
27795 
27796 	/* here we are sure we are dealing with an object */
27797 	do {
27798 		zend_object *zobj = Z_OBJ_P(container);
27799 		zval *retval;
27800 
27801 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27802 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
27803 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
27804 
27805 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
27806 				retval = OBJ_PROP(zobj, prop_offset);
27807 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
27808 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
27809 					break;
27810 				}
27811 			} else if (EXPECTED(zobj->properties != NULL)) {
27812 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
27813 				if (EXPECTED(retval)) {
27814 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
27815 					break;
27816 				}
27817 			}
27818 		}
27819 
27820 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
27821 fetch_obj_is_no_object:
27822 			ZVAL_NULL(EX_VAR(opline->result.var));
27823 		} else {
27824 
27825 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
27826 
27827 			if (retval != EX_VAR(opline->result.var)) {
27828 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
27829 			}
27830 		}
27831 	} while (0);
27832 
27833 	zval_ptr_dtor_nogc(free_op2);
27834 
27835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27836 }
27837 
27838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27839 {
27840 	USE_OPLINE
27841 	zval *container;
27842 
27843 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
27844 		/* Behave like FETCH_OBJ_W */
27845 		zend_free_op free_op1, free_op2;
27846 		zval *property;
27847 
27848 		SAVE_OPLINE();
27849 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27850 		container = _get_obj_zval_ptr_unused(execute_data);
27851 
27852 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27853 			zend_throw_error(NULL, "Using $this when not in object context");
27854 			zval_ptr_dtor_nogc(free_op2);
27855 			HANDLE_EXCEPTION();
27856 		}
27857 		if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
27858 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
27859 			zval_ptr_dtor_nogc(free_op2);
27860 
27861 			HANDLE_EXCEPTION();
27862 		}
27863 		if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
27864 			zend_throw_error(NULL, "Cannot use string offset as an object");
27865 			zval_ptr_dtor_nogc(free_op2);
27866 			HANDLE_EXCEPTION();
27867 		}
27868 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
27869 		zval_ptr_dtor_nogc(free_op2);
27870 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
27871 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
27872 		}
27873 
27874 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27875 	} else {
27876 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27877 	}
27878 }
27879 
27880 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27881 {
27882 	USE_OPLINE
27883 	zend_free_op free_op1, free_op2;
27884 	zval *container, *property;
27885 
27886 	SAVE_OPLINE();
27887 	container = _get_obj_zval_ptr_unused(execute_data);
27888 
27889 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
27890 		zend_throw_error(NULL, "Using $this when not in object context");
27891 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27892 		HANDLE_EXCEPTION();
27893 	}
27894 
27895 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27896 
27897 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
27898 		zend_throw_error(NULL, "Cannot use string offset as an object");
27899 		zval_ptr_dtor_nogc(free_op2);
27900 		HANDLE_EXCEPTION();
27901 	}
27902 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
27903 	zval_ptr_dtor_nogc(free_op2);
27904 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
27905 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
27906 	}
27907 
27908 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27909 }
27910 
27911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27912 {
27913 	USE_OPLINE
27914 	zend_free_op free_op2;
27915 	zval *object;
27916 	zval *property_name;
27917 
27918 	SAVE_OPLINE();
27919 	object = _get_obj_zval_ptr_unused(execute_data);
27920 
27921 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
27922 		zend_throw_error(NULL, "Using $this when not in object context");
27923 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27924 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27925 		HANDLE_EXCEPTION();
27926 	}
27927 
27928 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27929 
27930 	if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
27931 		zend_throw_error(NULL, "Cannot use string offset as an array");
27932 		zval_ptr_dtor_nogc(free_op2);
27933 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
27934 		HANDLE_EXCEPTION();
27935 	}
27936 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
27937 	zval_ptr_dtor_nogc(free_op2);
27938 
27939 	/* assign_obj has two opcodes! */
27940 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27941 }
27942 
27943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27944 {
27945 	USE_OPLINE
27946 	zend_free_op free_op2;
27947 	zend_string **rope;
27948 	zval *var;
27949 
27950 	/* Compiler allocates the necessary number of zval slots to keep the rope */
27951 	rope = (zend_string**)EX_VAR(opline->result.var);
27952 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27953 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27954 		rope[0] = zend_string_copy(Z_STR_P(var));
27955 	} else {
27956 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27957 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
27958 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
27959 				rope[0] = zend_string_copy(Z_STR_P(var));
27960 			} else {
27961 				rope[0] = Z_STR_P(var);
27962 			}
27963 		} else {
27964 			SAVE_OPLINE();
27965 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
27966 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
27967 			}
27968 			rope[0] = _zval_get_string_func(var);
27969 			zval_ptr_dtor_nogc(free_op2);
27970 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27971 		}
27972 	}
27973 	ZEND_VM_NEXT_OPCODE();
27974 }
27975 
27976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27977 {
27978 	USE_OPLINE
27979 	zval *function_name;
27980 	zend_free_op free_op2;
27981 	zval *object;
27982 	zend_function *fbc;
27983 	zend_class_entry *called_scope;
27984 	zend_object *obj;
27985 	zend_execute_data *call;
27986 	uint32_t call_info;
27987 
27988 	SAVE_OPLINE();
27989 
27990 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27991 
27992 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
27993 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27994 		do {
27995 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
27996 				function_name = Z_REFVAL_P(function_name);
27997 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27998 					break;
27999 				}
28000 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
28001 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
28002 				if (UNEXPECTED(EG(exception) != NULL)) {
28003 					HANDLE_EXCEPTION();
28004 				}
28005 			}
28006 			zend_throw_error(NULL, "Method name must be a string");
28007 			zval_ptr_dtor_nogc(free_op2);
28008 
28009 			HANDLE_EXCEPTION();
28010 		} while (0);
28011 	}
28012 
28013 	object = _get_obj_zval_ptr_unused(execute_data);
28014 
28015 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
28016 		zend_throw_error(NULL, "Using $this when not in object context");
28017 		zval_ptr_dtor_nogc(free_op2);
28018 		HANDLE_EXCEPTION();
28019 	}
28020 
28021 	if (IS_UNUSED != IS_UNUSED) {
28022 		do {
28023 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28024 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
28025 					object = Z_REFVAL_P(object);
28026 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
28027 						break;
28028 					}
28029 				}
28030 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28031 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
28032 					if (UNEXPECTED(EG(exception) != NULL)) {
28033 						zval_ptr_dtor_nogc(free_op2);
28034 						HANDLE_EXCEPTION();
28035 					}
28036 				}
28037 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
28038 				zval_ptr_dtor_nogc(free_op2);
28039 
28040 				HANDLE_EXCEPTION();
28041 			}
28042 		} while (0);
28043 	}
28044 
28045 	obj = Z_OBJ_P(object);
28046 	called_scope = obj->ce;
28047 
28048 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
28049 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
28050 	    zend_object *orig_obj = obj;
28051 
28052 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
28053 			zend_throw_error(NULL, "Object does not support method calls");
28054 			zval_ptr_dtor_nogc(free_op2);
28055 
28056 			HANDLE_EXCEPTION();
28057 		}
28058 
28059 		/* First, locate the function. */
28060 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
28061 		if (UNEXPECTED(fbc == NULL)) {
28062 			if (EXPECTED(!EG(exception))) {
28063 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
28064 			}
28065 			zval_ptr_dtor_nogc(free_op2);
28066 
28067 			HANDLE_EXCEPTION();
28068 		}
28069 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
28070 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
28071 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
28072 		    EXPECTED(obj == orig_obj)) {
28073 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
28074 		}
28075 	}
28076 
28077 	call_info = ZEND_CALL_NESTED_FUNCTION;
28078 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
28079 		obj = NULL;
28080 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
28081 		/* CV may be changed indirectly (e.g. when it's a reference) */
28082 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
28083 		GC_REFCOUNT(obj)++; /* For $this pointer */
28084 	}
28085 
28086 	zval_ptr_dtor_nogc(free_op2);
28087 
28088 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
28089 		HANDLE_EXCEPTION();
28090 	}
28091 
28092 	call = zend_vm_stack_push_call_frame(call_info,
28093 		fbc, opline->extended_value, called_scope, obj);
28094 	call->prev_execute_data = EX(call);
28095 	EX(call) = call;
28096 
28097 	ZEND_VM_NEXT_OPCODE();
28098 }
28099 
28100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28101 {
28102 	zval *array;
28103 	uint32_t size;
28104 	USE_OPLINE
28105 
28106 	array = EX_VAR(opline->result.var);
28107 	if (IS_UNUSED != IS_UNUSED) {
28108 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
28109 	} else {
28110 		size = 0;
28111 	}
28112 	ZVAL_NEW_ARR(array);
28113 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
28114 
28115 	if (IS_UNUSED != IS_UNUSED) {
28116 		/* Explicitly initialize array as not-packed if flag is set */
28117 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
28118 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
28119 		}
28120 	}
28121 
28122 	if (IS_UNUSED == IS_UNUSED) {
28123 		ZEND_VM_NEXT_OPCODE();
28124 #if 0 || (IS_UNUSED != IS_UNUSED)
28125 	} else {
28126 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28127 #endif
28128 	}
28129 }
28130 
28131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28132 {
28133 	USE_OPLINE
28134 	zend_free_op free_op2;
28135 	zval *container;
28136 	zval *offset;
28137 	zend_ulong hval;
28138 	zend_string *key;
28139 
28140 	SAVE_OPLINE();
28141 	container = _get_obj_zval_ptr_unused(execute_data);
28142 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
28143 		zend_throw_error(NULL, "Using $this when not in object context");
28144 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28145 		HANDLE_EXCEPTION();
28146 	}
28147 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
28148 		zend_throw_error(NULL, "Cannot unset string offsets");
28149 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28150 		HANDLE_EXCEPTION();
28151 	}
28152 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
28153 
28154 	do {
28155 		if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28156 			HashTable *ht;
28157 
28158 unset_dim_array:
28159 			SEPARATE_ARRAY(container);
28160 			ht = Z_ARRVAL_P(container);
28161 offset_again:
28162 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
28163 				key = Z_STR_P(offset);
28164 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
28165 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
28166 						goto num_index_dim;
28167 					}
28168 				}
28169 str_index_dim:
28170 				if (ht == &EG(symbol_table)) {
28171 					zend_delete_global_variable(key);
28172 				} else {
28173 					zend_hash_del(ht, key);
28174 				}
28175 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
28176 				hval = Z_LVAL_P(offset);
28177 num_index_dim:
28178 				zend_hash_index_del(ht, hval);
28179 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
28180 				offset = Z_REFVAL_P(offset);
28181 				goto offset_again;
28182 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
28183 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
28184 				goto num_index_dim;
28185 			} else if (Z_TYPE_P(offset) == IS_NULL) {
28186 				key = ZSTR_EMPTY_ALLOC();
28187 				goto str_index_dim;
28188 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
28189 				hval = 0;
28190 				goto num_index_dim;
28191 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
28192 				hval = 1;
28193 				goto num_index_dim;
28194 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
28195 				hval = Z_RES_HANDLE_P(offset);
28196 				goto num_index_dim;
28197 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
28198 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
28199 				key = ZSTR_EMPTY_ALLOC();
28200 				goto str_index_dim;
28201 			} else {
28202 				zend_error(E_WARNING, "Illegal offset type in unset");
28203 			}
28204 			break;
28205 		} else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
28206 			container = Z_REFVAL_P(container);
28207 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28208 				goto unset_dim_array;
28209 			}
28210 		}
28211 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
28212 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
28213 		}
28214 		if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28215 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
28216 				zend_throw_error(NULL, "Cannot use object as array");
28217 			} else {
28218 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
28219 			}
28220 		} else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
28221 			zend_throw_error(NULL, "Cannot unset string offsets");
28222 		}
28223 	} while (0);
28224 
28225 	zval_ptr_dtor_nogc(free_op2);
28226 
28227 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28228 }
28229 
28230 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28231 {
28232 	USE_OPLINE
28233 	zend_free_op free_op2;
28234 	zval *container;
28235 	zval *offset;
28236 
28237 	SAVE_OPLINE();
28238 	container = _get_obj_zval_ptr_unused(execute_data);
28239 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
28240 		zend_throw_error(NULL, "Using $this when not in object context");
28241 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28242 		HANDLE_EXCEPTION();
28243 	}
28244 	if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
28245 		zend_throw_error(NULL, "Cannot unset string offsets");
28246 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28247 		HANDLE_EXCEPTION();
28248 	}
28249 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
28250 
28251 	do {
28252 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
28253 			if (Z_ISREF_P(container)) {
28254 				container = Z_REFVAL_P(container);
28255 				if (Z_TYPE_P(container) != IS_OBJECT) {
28256 					break;
28257 				}
28258 			} else {
28259 				break;
28260 			}
28261 		}
28262 		if (Z_OBJ_HT_P(container)->unset_property) {
28263 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
28264 		} else {
28265 			zend_error(E_NOTICE, "Trying to unset property of non-object");
28266 		}
28267 	} while (0);
28268 
28269 	zval_ptr_dtor_nogc(free_op2);
28270 
28271 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28272 }
28273 
28274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28275 {
28276 	USE_OPLINE
28277 	zend_free_op free_op2;
28278 	zval *container;
28279 	int result;
28280 	zend_ulong hval;
28281 	zval *offset;
28282 
28283 	SAVE_OPLINE();
28284 	container = _get_obj_zval_ptr_unused(execute_data);
28285 
28286 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
28287 		zend_throw_error(NULL, "Using $this when not in object context");
28288 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28289 		HANDLE_EXCEPTION();
28290 	}
28291 
28292 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
28293 
28294 	if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28295 		HashTable *ht;
28296 		zval *value;
28297 		zend_string *str;
28298 
28299 isset_dim_obj_array:
28300 		ht = Z_ARRVAL_P(container);
28301 isset_again:
28302 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
28303 			str = Z_STR_P(offset);
28304 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
28305 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
28306 					goto num_index_prop;
28307 				}
28308 			}
28309 str_index_prop:
28310 			value = zend_hash_find_ind(ht, str);
28311 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
28312 			hval = Z_LVAL_P(offset);
28313 num_index_prop:
28314 			value = zend_hash_index_find(ht, hval);
28315 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
28316 			offset = Z_REFVAL_P(offset);
28317 			goto isset_again;
28318 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
28319 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
28320 			goto num_index_prop;
28321 		} else if (Z_TYPE_P(offset) == IS_NULL) {
28322 			str = ZSTR_EMPTY_ALLOC();
28323 			goto str_index_prop;
28324 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
28325 			hval = 0;
28326 			goto num_index_prop;
28327 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
28328 			hval = 1;
28329 			goto num_index_prop;
28330 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
28331 			hval = Z_RES_HANDLE_P(offset);
28332 			goto num_index_prop;
28333 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
28334 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
28335 			str = ZSTR_EMPTY_ALLOC();
28336 			goto str_index_prop;
28337 		} else {
28338 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
28339 			goto isset_not_found;
28340 		}
28341 
28342 		if (opline->extended_value & ZEND_ISSET) {
28343 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
28344 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
28345 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
28346 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
28347 			result = (value == NULL || !i_zend_is_true(value));
28348 		}
28349 		goto isset_dim_obj_exit;
28350 	} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
28351 		container = Z_REFVAL_P(container);
28352 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28353 			goto isset_dim_obj_array;
28354 		}
28355 	}
28356 
28357 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
28358 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
28359 	}
28360 
28361 	if (IS_UNUSED == IS_UNUSED ||
28362 	    (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
28363 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
28364 			result =
28365 				((opline->extended_value & ZEND_ISSET) == 0) ^
28366 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
28367 		} else {
28368 			zend_error(E_NOTICE, "Trying to check element of non-array");
28369 			goto isset_not_found;
28370 		}
28371 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
28372 		zend_long lval;
28373 
28374 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
28375 			lval = Z_LVAL_P(offset);
28376 isset_str_offset:
28377 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
28378 				if (opline->extended_value & ZEND_ISSET) {
28379 					result = 1;
28380 				} else {
28381 					result = (Z_STRVAL_P(container)[lval] == '0');
28382 				}
28383 			} else {
28384 				goto isset_not_found;
28385 			}
28386 		} else {
28387 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
28388 				ZVAL_DEREF(offset);
28389 			}
28390 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
28391 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
28392 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
28393 				lval = zval_get_long(offset);
28394 				goto isset_str_offset;
28395 			}
28396 			goto isset_not_found;
28397 		}
28398 	} else {
28399 isset_not_found:
28400 		result = ((opline->extended_value & ZEND_ISSET) == 0);
28401 	}
28402 
28403 isset_dim_obj_exit:
28404 	zval_ptr_dtor_nogc(free_op2);
28405 
28406 	ZEND_VM_SMART_BRANCH(result, 1);
28407 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
28408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28409 }
28410 
28411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28412 {
28413 	USE_OPLINE
28414 	zend_free_op free_op2;
28415 	zval *container;
28416 	int result;
28417 	zval *offset;
28418 
28419 	SAVE_OPLINE();
28420 	container = _get_obj_zval_ptr_unused(execute_data);
28421 
28422 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
28423 		zend_throw_error(NULL, "Using $this when not in object context");
28424 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28425 		HANDLE_EXCEPTION();
28426 	}
28427 
28428 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
28429 
28430 	if (IS_UNUSED == IS_CONST ||
28431 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
28432 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
28433 			container = Z_REFVAL_P(container);
28434 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
28435 				goto isset_no_object;
28436 			}
28437 		} else {
28438 			goto isset_no_object;
28439 		}
28440 	}
28441 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
28442 		zend_error(E_NOTICE, "Trying to check property of non-object");
28443 isset_no_object:
28444 		result = ((opline->extended_value & ZEND_ISSET) == 0);
28445 	} else {
28446 		result =
28447 			((opline->extended_value & ZEND_ISSET) == 0) ^
28448 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
28449 	}
28450 
28451 	zval_ptr_dtor_nogc(free_op2);
28452 
28453 	ZEND_VM_SMART_BRANCH(result, 1);
28454 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
28455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28456 }
28457 
28458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28459 {
28460 	USE_OPLINE
28461 
28462 
28463 	SAVE_OPLINE();
28464 	bitwise_not_function(EX_VAR(opline->result.var),
28465 		_get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var));
28466 
28467 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28468 }
28469 
28470 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28471 {
28472 	USE_OPLINE
28473 	zval *val;
28474 
28475 
28476 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28477 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
28478 		ZVAL_FALSE(EX_VAR(opline->result.var));
28479 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28480 		ZVAL_TRUE(EX_VAR(opline->result.var));
28481 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28482 			SAVE_OPLINE();
28483 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
28484 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28485 		}
28486 	} else {
28487 		SAVE_OPLINE();
28488 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
28489 
28490 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28491 	}
28492 	ZEND_VM_NEXT_OPCODE();
28493 }
28494 
28495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28496 {
28497 	USE_OPLINE
28498 
28499 	zval *var_ptr;
28500 
28501 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
28502 
28503 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
28504 		SAVE_OPLINE();
28505 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
28506 		HANDLE_EXCEPTION();
28507 	}
28508 
28509 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
28510 		fast_long_increment_function(var_ptr);
28511 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28512 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28513 		}
28514 		ZEND_VM_NEXT_OPCODE();
28515 	}
28516 
28517 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
28518 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28519 			ZVAL_NULL(EX_VAR(opline->result.var));
28520 		}
28521 		ZEND_VM_NEXT_OPCODE();
28522 	}
28523 
28524 	SAVE_OPLINE();
28525 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
28526 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
28527 	}
28528 	ZVAL_DEREF(var_ptr);
28529 	SEPARATE_ZVAL_NOREF(var_ptr);
28530 
28531 	increment_function(var_ptr);
28532 
28533 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28534 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28535 	}
28536 
28537 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28538 }
28539 
28540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28541 {
28542 	USE_OPLINE
28543 
28544 	zval *var_ptr;
28545 
28546 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
28547 
28548 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
28549 		SAVE_OPLINE();
28550 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
28551 		HANDLE_EXCEPTION();
28552 	}
28553 
28554 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
28555 		fast_long_decrement_function(var_ptr);
28556 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28557 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28558 		}
28559 		ZEND_VM_NEXT_OPCODE();
28560 	}
28561 
28562 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
28563 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28564 			ZVAL_NULL(EX_VAR(opline->result.var));
28565 		}
28566 		ZEND_VM_NEXT_OPCODE();
28567 	}
28568 
28569 	SAVE_OPLINE();
28570 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
28571 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
28572 	}
28573 	ZVAL_DEREF(var_ptr);
28574 	SEPARATE_ZVAL_NOREF(var_ptr);
28575 
28576 	decrement_function(var_ptr);
28577 
28578 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28579 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28580 	}
28581 
28582 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28583 }
28584 
28585 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28586 {
28587 	USE_OPLINE
28588 
28589 	zval *var_ptr;
28590 
28591 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
28592 
28593 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
28594 		SAVE_OPLINE();
28595 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
28596 		HANDLE_EXCEPTION();
28597 	}
28598 
28599 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
28600 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28601 		fast_long_increment_function(var_ptr);
28602 		ZEND_VM_NEXT_OPCODE();
28603 	}
28604 
28605 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
28606 		ZVAL_NULL(EX_VAR(opline->result.var));
28607 		ZEND_VM_NEXT_OPCODE();
28608 	}
28609 
28610 	SAVE_OPLINE();
28611 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
28612 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
28613 	}
28614 	ZVAL_DEREF(var_ptr);
28615 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28616 	zval_opt_copy_ctor(var_ptr);
28617 
28618 	increment_function(var_ptr);
28619 
28620 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28621 }
28622 
28623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28624 {
28625 	USE_OPLINE
28626 
28627 	zval *var_ptr;
28628 
28629 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
28630 
28631 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
28632 		SAVE_OPLINE();
28633 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
28634 		HANDLE_EXCEPTION();
28635 	}
28636 
28637 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
28638 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28639 		fast_long_decrement_function(var_ptr);
28640 		ZEND_VM_NEXT_OPCODE();
28641 	}
28642 
28643 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
28644 		ZVAL_NULL(EX_VAR(opline->result.var));
28645 		ZEND_VM_NEXT_OPCODE();
28646 	}
28647 
28648 	SAVE_OPLINE();
28649 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
28650 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
28651 	}
28652 	ZVAL_DEREF(var_ptr);
28653 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
28654 	zval_opt_copy_ctor(var_ptr);
28655 
28656 	decrement_function(var_ptr);
28657 
28658 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28659 }
28660 
28661 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28662 {
28663 	USE_OPLINE
28664 
28665 	zval *z;
28666 
28667 	SAVE_OPLINE();
28668 	z = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28669 
28670 	if (Z_TYPE_P(z) == IS_STRING) {
28671 		zend_string *str = Z_STR_P(z);
28672 
28673 		if (ZSTR_LEN(str) != 0) {
28674 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
28675 		}
28676 	} else {
28677 		zend_string *str = _zval_get_string_func(z);
28678 
28679 		if (ZSTR_LEN(str) != 0) {
28680 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
28681 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
28682 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
28683 		}
28684 		zend_string_release(str);
28685 	}
28686 
28687 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28688 }
28689 
28690 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28691 {
28692 	USE_OPLINE
28693 
28694 	zval *val;
28695 
28696 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28697 
28698 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
28699 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
28700 		ZEND_VM_CONTINUE();
28701 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28702 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28703 			SAVE_OPLINE();
28704 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
28705 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
28706 		} else {
28707 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
28708 			ZEND_VM_CONTINUE();
28709 		}
28710 	}
28711 
28712 	SAVE_OPLINE();
28713 	if (i_zend_is_true(val)) {
28714 		opline++;
28715 	} else {
28716 		opline = OP_JMP_ADDR(opline, opline->op2);
28717 	}
28718 
28719 	if (UNEXPECTED(EG(exception) != NULL)) {
28720 		HANDLE_EXCEPTION();
28721 	}
28722 	ZEND_VM_JMP(opline);
28723 }
28724 
28725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28726 {
28727 	USE_OPLINE
28728 
28729 	zval *val;
28730 
28731 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28732 
28733 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
28734 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
28735 		ZEND_VM_CONTINUE();
28736 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28737 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28738 			SAVE_OPLINE();
28739 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
28740 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28741 		} else {
28742 			ZEND_VM_NEXT_OPCODE();
28743 		}
28744 	}
28745 
28746 	SAVE_OPLINE();
28747 	if (i_zend_is_true(val)) {
28748 		opline = OP_JMP_ADDR(opline, opline->op2);
28749 	} else {
28750 		opline++;
28751 	}
28752 
28753 	if (UNEXPECTED(EG(exception) != NULL)) {
28754 		HANDLE_EXCEPTION();
28755 	}
28756 	ZEND_VM_JMP(opline);
28757 }
28758 
28759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28760 {
28761 	USE_OPLINE
28762 
28763 	zval *val;
28764 
28765 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28766 
28767 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
28768 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
28769 		ZEND_VM_CONTINUE();
28770 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28771 		if (IS_CV == IS_CV) {
28772 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28773 				SAVE_OPLINE();
28774 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
28775 			}
28776 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
28777 		} else {
28778 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
28779 			ZEND_VM_CONTINUE();
28780 		}
28781 	}
28782 
28783 	SAVE_OPLINE();
28784 	if (i_zend_is_true(val)) {
28785 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
28786 	} else {
28787 		opline = OP_JMP_ADDR(opline, opline->op2);
28788 	}
28789 
28790 	if (UNEXPECTED(EG(exception) != NULL)) {
28791 		HANDLE_EXCEPTION();
28792 	}
28793 	ZEND_VM_JMP(opline);
28794 }
28795 
28796 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28797 {
28798 	USE_OPLINE
28799 
28800 	zval *val;
28801 	int ret;
28802 
28803 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28804 
28805 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
28806 		ZVAL_TRUE(EX_VAR(opline->result.var));
28807 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
28808 		ZEND_VM_CONTINUE();
28809 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28810 		ZVAL_FALSE(EX_VAR(opline->result.var));
28811 		if (IS_CV == IS_CV) {
28812 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28813 				SAVE_OPLINE();
28814 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
28815 			}
28816 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
28817 		} else {
28818 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
28819 			ZEND_VM_CONTINUE();
28820 		}
28821 	}
28822 
28823 	SAVE_OPLINE();
28824 	ret = i_zend_is_true(val);
28825 
28826 	if (ret) {
28827 		ZVAL_TRUE(EX_VAR(opline->result.var));
28828 		opline++;
28829 	} else {
28830 		ZVAL_FALSE(EX_VAR(opline->result.var));
28831 		opline = OP_JMP_ADDR(opline, opline->op2);
28832 	}
28833 	if (UNEXPECTED(EG(exception) != NULL)) {
28834 		HANDLE_EXCEPTION();
28835 	}
28836 	ZEND_VM_JMP(opline);
28837 }
28838 
28839 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28840 {
28841 	USE_OPLINE
28842 
28843 	zval *val;
28844 	int ret;
28845 
28846 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28847 
28848 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
28849 		ZVAL_TRUE(EX_VAR(opline->result.var));
28850 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
28851 		ZEND_VM_CONTINUE();
28852 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
28853 		ZVAL_FALSE(EX_VAR(opline->result.var));
28854 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
28855 			SAVE_OPLINE();
28856 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
28857 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28858 		} else {
28859 			ZEND_VM_NEXT_OPCODE();
28860 		}
28861 	}
28862 
28863 	SAVE_OPLINE();
28864 	ret = i_zend_is_true(val);
28865 
28866 	if (ret) {
28867 		ZVAL_TRUE(EX_VAR(opline->result.var));
28868 		opline = OP_JMP_ADDR(opline, opline->op2);
28869 	} else {
28870 		ZVAL_FALSE(EX_VAR(opline->result.var));
28871 		opline++;
28872 	}
28873 	if (UNEXPECTED(EG(exception) != NULL)) {
28874 		HANDLE_EXCEPTION();
28875 	}
28876 	ZEND_VM_JMP(opline);
28877 }
28878 
28879 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28880 {
28881 	USE_OPLINE
28882 	zval *retval_ptr;
28883 	zend_free_op free_op1;
28884 
28885 	retval_ptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
28886 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
28887 		SAVE_OPLINE();
28888 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
28889 		if (EX(return_value)) {
28890 			ZVAL_NULL(EX(return_value));
28891 		}
28892 	} else if (!EX(return_value)) {
28893 		if (IS_CV == IS_VAR || IS_CV == IS_TMP_VAR ) {
28894 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
28895 				SAVE_OPLINE();
28896 				zval_dtor_func_for_ptr(Z_COUNTED_P(free_op1));
28897 			}
28898 		}
28899 	} else {
28900 		if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
28901 			ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
28902 			if (IS_CV == IS_CONST) {
28903 				if (UNEXPECTED(Z_OPT_COPYABLE_P(EX(return_value)))) {
28904 					zval_copy_ctor_func(EX(return_value));
28905 				}
28906 			}
28907 		} else if (IS_CV == IS_CV) {
28908 			ZVAL_DEREF(retval_ptr);
28909 			ZVAL_COPY(EX(return_value), retval_ptr);
28910 		} else /* if (IS_CV == IS_VAR) */ {
28911 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
28912 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
28913 
28914 				retval_ptr = Z_REFVAL_P(retval_ptr);
28915 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
28916 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
28917 					efree_size(ref, sizeof(zend_reference));
28918 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
28919 					Z_ADDREF_P(retval_ptr);
28920 				}
28921 			} else {
28922 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
28923 			}
28924 		}
28925 	}
28926 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28927 }
28928 
28929 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28930 {
28931 	USE_OPLINE
28932 	zval *retval_ptr;
28933 
28934 
28935 	SAVE_OPLINE();
28936 
28937 	do {
28938 		if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR ||
28939 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
28940 			/* Not supposed to happen, but we'll allow it */
28941 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
28942 
28943 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
28944 			if (!EX(return_value)) {
28945 				if (IS_CV == IS_TMP_VAR) {
28946 
28947 				}
28948 			} else {
28949 				ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
28950 				Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
28951 				if (IS_CV != IS_TMP_VAR) {
28952 					zval_opt_copy_ctor_no_imm(EX(return_value));
28953 				}
28954 			}
28955 			break;
28956 		}
28957 
28958 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
28959 
28960 		if (IS_CV == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
28961 			zend_throw_error(NULL, "Cannot return string offsets by reference");
28962 			HANDLE_EXCEPTION();
28963 		}
28964 
28965 		if (IS_CV == IS_VAR) {
28966 			if (retval_ptr == &EG(uninitialized_zval) ||
28967 			    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
28968 			     !(Z_VAR_FLAGS_P(retval_ptr) & IS_VAR_RET_REF))) {
28969 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
28970 				if (EX(return_value)) {
28971 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
28972 					Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
28973 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
28974 				}
28975 				break;
28976 			}
28977 		}
28978 
28979 		if (EX(return_value)) {
28980 			ZVAL_MAKE_REF(retval_ptr);
28981 			Z_ADDREF_P(retval_ptr);
28982 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
28983 			Z_VAR_FLAGS_P(EX(return_value)) = IS_VAR_RET_REF;
28984 		}
28985 	} while (0);
28986 
28987 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28988 }
28989 
28990 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28991 {
28992 	USE_OPLINE
28993 	zval *retval;
28994 
28995 
28996 	zend_generator *generator = zend_get_running_generator(execute_data);
28997 
28998 	SAVE_OPLINE();
28999 	retval = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29000 
29001 	/* Copy return value into generator->retval */
29002 	if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
29003 		ZVAL_COPY_VALUE(&generator->retval, retval);
29004 		if (IS_CV == IS_CONST) {
29005 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->retval))) {
29006 				zval_copy_ctor_func(&generator->retval);
29007 			}
29008 		}
29009 	} else if (IS_CV == IS_CV) {
29010 		ZVAL_DEREF(retval);
29011 		ZVAL_COPY(&generator->retval, retval);
29012 	} else /* if (IS_CV == IS_VAR) */ {
29013 		if (UNEXPECTED(Z_ISREF_P(retval))) {
29014 			zend_refcounted *ref = Z_COUNTED_P(retval);
29015 
29016 			retval = Z_REFVAL_P(retval);
29017 			ZVAL_COPY_VALUE(&generator->retval, retval);
29018 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
29019 				efree_size(ref, sizeof(zend_reference));
29020 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
29021 				Z_ADDREF_P(retval);
29022 			}
29023 		} else {
29024 			ZVAL_COPY_VALUE(&generator->retval, retval);
29025 		}
29026 	}
29027 
29028 	/* Close the generator to free up resources */
29029 	zend_generator_close(generator, 1);
29030 
29031 	/* Pass execution back to handling code */
29032 	ZEND_VM_RETURN();
29033 }
29034 
29035 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29036 {
29037 	USE_OPLINE
29038 	zval *value;
29039 
29040 
29041 	SAVE_OPLINE();
29042 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29043 
29044 	do {
29045 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
29046 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
29047 				value = Z_REFVAL_P(value);
29048 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
29049 					break;
29050 				}
29051 			}
29052 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
29053 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
29054 				if (UNEXPECTED(EG(exception) != NULL)) {
29055 					HANDLE_EXCEPTION();
29056 				}
29057 			}
29058 			zend_throw_error(NULL, "Can only throw objects");
29059 
29060 			HANDLE_EXCEPTION();
29061 		}
29062 	} while (0);
29063 
29064 	zend_exception_save();
29065 	if (IS_CV != IS_TMP_VAR) {
29066 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
29067 	}
29068 
29069 	zend_throw_exception_object(value);
29070 	zend_exception_restore();
29071 
29072 	HANDLE_EXCEPTION();
29073 }
29074 
29075 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29076 {
29077 	USE_OPLINE
29078 	zval *varptr, *arg;
29079 
29080 
29081 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29082 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29083 		SAVE_OPLINE();
29084 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
29085 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29086 		ZVAL_NULL(arg);
29087 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29088 	}
29089 
29090 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29091 
29092 	if (IS_CV == IS_CV) {
29093 		ZVAL_OPT_DEREF(varptr);
29094 		ZVAL_COPY(arg, varptr);
29095 	} else /* if (IS_CV == IS_VAR) */ {
29096 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29097 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29098 
29099 			varptr = Z_REFVAL_P(varptr);
29100 			ZVAL_COPY_VALUE(arg, varptr);
29101 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
29102 				efree_size(ref, sizeof(zend_reference));
29103 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29104 				Z_ADDREF_P(arg);
29105 			}
29106 		} else {
29107 			ZVAL_COPY_VALUE(arg, varptr);
29108 		}
29109 	}
29110 
29111 	ZEND_VM_NEXT_OPCODE();
29112 }
29113 
29114 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29115 {
29116 	USE_OPLINE
29117 
29118 	zval *varptr, *arg;
29119 
29120 	SAVE_OPLINE();
29121 	varptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
29122 
29123 	if (IS_CV == IS_VAR && UNEXPECTED(varptr == NULL)) {
29124 		zend_throw_error(NULL, "Only variables can be passed by reference");
29125 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29126 		ZVAL_UNDEF(arg);
29127 		HANDLE_EXCEPTION();
29128 	}
29129 
29130 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29131 	if (IS_CV == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
29132 		ZVAL_NEW_REF(arg, &EG(uninitialized_zval));
29133 		ZEND_VM_NEXT_OPCODE();
29134 	}
29135 
29136 	if (Z_ISREF_P(varptr)) {
29137 		Z_ADDREF_P(varptr);
29138 		ZVAL_COPY_VALUE(arg, varptr);
29139 	} else {
29140 		ZVAL_NEW_REF(arg, varptr);
29141 		Z_ADDREF_P(arg);
29142 		ZVAL_REF(varptr, Z_REF_P(arg));
29143 	}
29144 
29145 	ZEND_VM_NEXT_OPCODE();
29146 }
29147 
29148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29149 {
29150 	USE_OPLINE
29151 	zval *varptr, *arg;
29152 
29153 	uint32_t arg_num = opline->op2.num;
29154 
29155 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
29156 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29157 			goto send_var_by_ref;
29158 		}
29159 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29160 send_var_by_ref:
29161 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29162 	}
29163 
29164 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29165 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29166 		SAVE_OPLINE();
29167 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
29168 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29169 		ZVAL_NULL(arg);
29170 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29171 	}
29172 
29173 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29174 
29175 	if (IS_CV == IS_CV) {
29176 		ZVAL_OPT_DEREF(varptr);
29177 		ZVAL_COPY(arg, varptr);
29178 	} else /* if (IS_CV == IS_VAR) */ {
29179 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29180 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29181 
29182 			varptr = Z_REFVAL_P(varptr);
29183 			ZVAL_COPY_VALUE(arg, varptr);
29184 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
29185 				efree_size(ref, sizeof(zend_reference));
29186 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29187 				Z_ADDREF_P(arg);
29188 			}
29189 		} else {
29190 			ZVAL_COPY_VALUE(arg, varptr);
29191 		}
29192 	}
29193 
29194 	ZEND_VM_NEXT_OPCODE();
29195 }
29196 
29197 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29198 {
29199 	USE_OPLINE
29200 	zval *arg, *param;
29201 
29202 
29203 	SAVE_OPLINE();
29204 	arg = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29205 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
29206 
29207 	if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
29208 		if (UNEXPECTED(!Z_ISREF_P(arg))) {
29209 			if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, opline->op2.num)) {
29210 
29211 				zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
29212 					opline->op2.num,
29213 					EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
29214 					EX(call)->func->common.scope ? "::" : "",
29215 					ZSTR_VAL(EX(call)->func->common.function_name));
29216 
29217 				if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
29218 					OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
29219 				}
29220 				if (Z_OBJ(EX(call)->This)) {
29221 					OBJ_RELEASE(Z_OBJ(EX(call)->This));
29222 				}
29223 				ZVAL_UNDEF(param);
29224 				EX(call)->func = (zend_function*)&zend_pass_function;
29225 				EX(call)->called_scope = NULL;
29226 				Z_OBJ(EX(call)->This) = NULL;
29227 				ZEND_SET_CALL_INFO(EX(call), ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
29228 
29229 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29230 			}
29231 		}
29232 	} else {
29233 		if (Z_ISREF_P(arg) &&
29234 		    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
29235 			/* don't separate references for __call */
29236 			arg = Z_REFVAL_P(arg);
29237 		}
29238 	}
29239 	ZVAL_COPY(param, arg);
29240 
29241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29242 }
29243 
29244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29245 {
29246 	USE_OPLINE
29247 	zval *val;
29248 
29249 
29250 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29251 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
29252 		ZVAL_TRUE(EX_VAR(opline->result.var));
29253 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
29254 		ZVAL_FALSE(EX_VAR(opline->result.var));
29255 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
29256 			SAVE_OPLINE();
29257 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
29258 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29259 		}
29260 	} else {
29261 		SAVE_OPLINE();
29262 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
29263 
29264 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29265 	}
29266 	ZEND_VM_NEXT_OPCODE();
29267 }
29268 
29269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29270 {
29271 	USE_OPLINE
29272 
29273 	zval *obj;
29274 	zend_class_entry *ce;
29275 	zend_function *clone;
29276 	zend_object_clone_obj_t clone_call;
29277 
29278 	SAVE_OPLINE();
29279 	obj = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29280 
29281 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
29282 		zend_throw_error(NULL, "Using $this when not in object context");
29283 		HANDLE_EXCEPTION();
29284 	}
29285 
29286 	do {
29287 		if (IS_CV == IS_CONST ||
29288 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
29289 		    if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
29290 		    	obj = Z_REFVAL_P(obj);
29291 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
29292 		    		break;
29293 				}
29294 			}
29295 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
29296 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
29297 				if (UNEXPECTED(EG(exception) != NULL)) {
29298 					HANDLE_EXCEPTION();
29299 				}
29300 			}
29301 			zend_throw_error(NULL, "__clone method called on non-object");
29302 
29303 			HANDLE_EXCEPTION();
29304 		}
29305 	} while (0);
29306 
29307 	ce = Z_OBJCE_P(obj);
29308 	clone = ce ? ce->clone : NULL;
29309 	clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
29310 	if (UNEXPECTED(clone_call == NULL)) {
29311 		if (ce) {
29312 			zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
29313 		} else {
29314 			zend_throw_error(NULL, "Trying to clone an uncloneable object");
29315 		}
29316 
29317 		HANDLE_EXCEPTION();
29318 	}
29319 
29320 	if (ce && clone) {
29321 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
29322 			/* Ensure that if we're calling a private function, we're allowed to do so.
29323 			 */
29324 			if (UNEXPECTED(ce != EG(scope))) {
29325 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
29326 
29327 				HANDLE_EXCEPTION();
29328 			}
29329 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
29330 			/* Ensure that if we're calling a protected function, we're allowed to do so.
29331 			 */
29332 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
29333 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
29334 
29335 				HANDLE_EXCEPTION();
29336 			}
29337 		}
29338 	}
29339 
29340 	if (EXPECTED(EG(exception) == NULL)) {
29341 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
29342 		if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
29343 			OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
29344 		}
29345 	}
29346 
29347 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29348 }
29349 
29350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29351 {
29352 	USE_OPLINE
29353 
29354 	zval *expr;
29355 	zval *result = EX_VAR(opline->result.var);
29356 
29357 	SAVE_OPLINE();
29358 	expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29359 
29360 	switch (opline->extended_value) {
29361 		case IS_NULL:
29362 			/* This code is taken from convert_to_null. However, it does not seems very useful,
29363 			 * because a conversion to null always results in the same value. This could only
29364 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
29365 #if 0
29366 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
29367 				ZVAL_DEREF(expr);
29368 			}
29369 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
29370 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
29371 					break;
29372 				}
29373 			}
29374 #endif
29375 
29376 			ZVAL_NULL(result);
29377 			break;
29378 		case _IS_BOOL:
29379 			ZVAL_BOOL(result, zend_is_true(expr));
29380 			break;
29381 		case IS_LONG:
29382 			ZVAL_LONG(result, zval_get_long(expr));
29383 			break;
29384 		case IS_DOUBLE:
29385 			ZVAL_DOUBLE(result, zval_get_double(expr));
29386 			break;
29387 		case IS_STRING:
29388 			ZVAL_STR(result, zval_get_string(expr));
29389 			break;
29390 		default:
29391 			if (IS_CV & (IS_VAR|IS_CV)) {
29392 				ZVAL_DEREF(expr);
29393 			}
29394 			/* If value is already of correct type, return it directly */
29395 			if (Z_TYPE_P(expr) == opline->extended_value) {
29396 				ZVAL_COPY_VALUE(result, expr);
29397 				if (IS_CV == IS_CONST) {
29398 					if (UNEXPECTED(Z_OPT_COPYABLE_P(result))) {
29399 						zval_copy_ctor_func(result);
29400 					}
29401 				} else if (IS_CV != IS_TMP_VAR) {
29402 					if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
29403 				}
29404 
29405 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29406 			}
29407 
29408 			if (opline->extended_value == IS_ARRAY) {
29409 				if (Z_TYPE_P(expr) != IS_OBJECT) {
29410 					ZVAL_NEW_ARR(result);
29411 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
29412 					if (Z_TYPE_P(expr) != IS_NULL) {
29413 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
29414 						if (IS_CV == IS_CONST) {
29415 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
29416 								zval_copy_ctor_func(expr);
29417 							}
29418 						} else {
29419 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
29420 						}
29421 					}
29422 				} else {
29423 					ZVAL_COPY_VALUE(result, expr);
29424 					Z_ADDREF_P(result);
29425 					convert_to_array(result);
29426 				}
29427 			} else {
29428 				if (Z_TYPE_P(expr) != IS_ARRAY) {
29429 					object_init(result);
29430 					if (Z_TYPE_P(expr) != IS_NULL) {
29431 						expr = zend_hash_str_add_new(Z_OBJPROP_P(result), "scalar", sizeof("scalar")-1, expr);
29432 						if (IS_CV == IS_CONST) {
29433 							if (UNEXPECTED(Z_OPT_COPYABLE_P(expr))) {
29434 								zval_copy_ctor_func(expr);
29435 							}
29436 						} else {
29437 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
29438 						}
29439 					}
29440 				} else {
29441 					ZVAL_COPY(result, expr);
29442 					convert_to_object(result);
29443 				}
29444 			}
29445 	}
29446 
29447 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29448 }
29449 
29450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29451 {
29452 	USE_OPLINE
29453 	zend_op_array *new_op_array=NULL;
29454 
29455 	zval *inc_filename;
29456 	zval tmp_inc_filename;
29457 	zend_bool failure_retval=0;
29458 
29459 	SAVE_OPLINE();
29460 	inc_filename = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29461 
29462 	ZVAL_UNDEF(&tmp_inc_filename);
29463 	if (Z_TYPE_P(inc_filename) != IS_STRING) {
29464 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
29465 			inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
29466 		}
29467 		ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
29468 		inc_filename = &tmp_inc_filename;
29469 	}
29470 
29471 	if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
29472 		if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
29473 			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
29474 		} else {
29475 			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
29476 		}
29477 	} else {
29478 		switch (opline->extended_value) {
29479 			case ZEND_INCLUDE_ONCE:
29480 			case ZEND_REQUIRE_ONCE: {
29481 					zend_file_handle file_handle;
29482 					zend_string *resolved_path;
29483 
29484 					resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), (int)Z_STRLEN_P(inc_filename));
29485 					if (resolved_path) {
29486 						failure_retval = zend_hash_exists(&EG(included_files), resolved_path);
29487 					} else {
29488 						resolved_path = zend_string_copy(Z_STR_P(inc_filename));
29489 					}
29490 
29491 					if (failure_retval) {
29492 						/* do nothing, file already included */
29493 					} else if (SUCCESS == zend_stream_open(ZSTR_VAL(resolved_path), &file_handle)) {
29494 
29495 						if (!file_handle.opened_path) {
29496 							file_handle.opened_path = zend_string_copy(resolved_path);
29497 						}
29498 
29499 						if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path)) {
29500 							new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE));
29501 							zend_destroy_file_handle(&file_handle);
29502 						} else {
29503 							zend_file_handle_dtor(&file_handle);
29504 							failure_retval=1;
29505 						}
29506 					} else {
29507 						if (opline->extended_value == ZEND_INCLUDE_ONCE) {
29508 							zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
29509 						} else {
29510 							zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
29511 						}
29512 					}
29513 					zend_string_release(resolved_path);
29514 				}
29515 				break;
29516 			case ZEND_INCLUDE:
29517 			case ZEND_REQUIRE:
29518 				new_op_array = compile_filename(opline->extended_value, inc_filename);
29519 				break;
29520 			case ZEND_EVAL: {
29521 					char *eval_desc = zend_make_compiled_string_description("eval()'d code");
29522 
29523 					new_op_array = zend_compile_string(inc_filename, eval_desc);
29524 					efree(eval_desc);
29525 				}
29526 				break;
29527 			EMPTY_SWITCH_DEFAULT_CASE()
29528 		}
29529 	}
29530 	if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
29531 		zend_string_release(Z_STR(tmp_inc_filename));
29532 	}
29533 
29534 	if (UNEXPECTED(EG(exception) != NULL)) {
29535 		if (new_op_array != NULL) {
29536 			destroy_op_array(new_op_array);
29537 			efree_size(new_op_array, sizeof(zend_op_array));
29538 		}
29539 		HANDLE_EXCEPTION();
29540 	} else if (EXPECTED(new_op_array != NULL)) {
29541 		zval *return_value = NULL;
29542 		zend_execute_data *call;
29543 
29544 		if (RETURN_VALUE_USED(opline)) {
29545 			return_value = EX_VAR(opline->result.var);
29546 		}
29547 
29548 		new_op_array->scope = EG(scope);
29549 
29550 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE,
29551 			(zend_function*)new_op_array, 0, EX(called_scope), Z_OBJ(EX(This)));
29552 
29553 		if (EX(symbol_table)) {
29554 			call->symbol_table = EX(symbol_table);
29555 		} else {
29556 			call->symbol_table = zend_rebuild_symbol_table();
29557 		}
29558 
29559 		call->prev_execute_data = execute_data;
29560 	    i_init_code_execute_data(call, new_op_array, return_value);
29561 		if (EXPECTED(zend_execute_ex == execute_ex)) {
29562 			ZEND_VM_ENTER();
29563 		} else {
29564 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
29565 			zend_execute_ex(call);
29566 			zend_vm_stack_free_call_frame(call);
29567 		}
29568 
29569 		destroy_op_array(new_op_array);
29570 		efree_size(new_op_array, sizeof(zend_op_array));
29571 		if (UNEXPECTED(EG(exception) != NULL)) {
29572 			zend_throw_exception_internal(NULL);
29573 			HANDLE_EXCEPTION();
29574 		}
29575 
29576 	} else if (RETURN_VALUE_USED(opline)) {
29577 		ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
29578 	}
29579 	ZEND_VM_INTERRUPT_CHECK();
29580 	ZEND_VM_NEXT_OPCODE();
29581 }
29582 
29583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29584 {
29585 	USE_OPLINE
29586 
29587 	zval *array_ptr, *result;
29588 	HashTable *fe_ht;
29589 
29590 	SAVE_OPLINE();
29591 
29592 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
29593 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
29594 		result = EX_VAR(opline->result.var);
29595 		ZVAL_COPY_VALUE(result, array_ptr);
29596 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
29597 			Z_ADDREF_P(array_ptr);
29598 		}
29599 		Z_FE_POS_P(result) = 0;
29600 
29601 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29602 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
29603 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
29604 			HashPosition pos = 0;
29605 			Bucket *p;
29606 
29607 			result = EX_VAR(opline->result.var);
29608 			ZVAL_COPY_VALUE(result, array_ptr);
29609 			if (IS_CV != IS_TMP_VAR) {
29610 				Z_ADDREF_P(array_ptr);
29611 			}
29612 			fe_ht = Z_OBJPROP_P(array_ptr);
29613 			pos = 0;
29614 			p = fe_ht->arData;
29615 			while (1) {
29616 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
29617 
29618 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29619 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29620 				}
29621 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
29622 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
29623 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
29624 				    (UNEXPECTED(!p->key) ||
29625 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
29626 					break;
29627 				}
29628 				pos++;
29629 				p++;
29630 			}
29631 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
29632 
29633 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29634 		} else {
29635 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
29636 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
29637 			zend_bool is_empty;
29638 
29639 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
29640 
29641 				if (!EG(exception)) {
29642 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
29643 				}
29644 				zend_throw_exception_internal(NULL);
29645 				HANDLE_EXCEPTION();
29646 			}
29647 
29648 			iter->index = 0;
29649 			if (iter->funcs->rewind) {
29650 				iter->funcs->rewind(iter);
29651 				if (UNEXPECTED(EG(exception) != NULL)) {
29652 					OBJ_RELEASE(&iter->std);
29653 
29654 					HANDLE_EXCEPTION();
29655 				}
29656 			}
29657 
29658 			is_empty = iter->funcs->valid(iter) != SUCCESS;
29659 
29660 			if (UNEXPECTED(EG(exception) != NULL)) {
29661 				OBJ_RELEASE(&iter->std);
29662 
29663 				HANDLE_EXCEPTION();
29664 			}
29665 			iter->index = -1; /* will be set to 0 before using next handler */
29666 
29667 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
29668 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29669 
29670 			if (is_empty) {
29671 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29672 			} else {
29673 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29674 			}
29675 		}
29676 	} else {
29677 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
29678 		ZVAL_UNDEF(EX_VAR(opline->result.var));
29679 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29680 
29681 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29682 	}
29683 }
29684 
29685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29686 {
29687 	USE_OPLINE
29688 
29689 	zval *array_ptr, *array_ref;
29690 	HashTable *fe_ht;
29691 	HashPosition pos = 0;
29692 	Bucket *p;
29693 
29694 	SAVE_OPLINE();
29695 
29696 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
29697 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29698 		if (IS_CV == IS_VAR && UNEXPECTED(array_ref == NULL)) {
29699 			zend_throw_error(NULL, "Cannot iterate on string offsets by reference");
29700 			ZVAL_UNDEF(EX_VAR(opline->result.var));
29701 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29702 			HANDLE_EXCEPTION();
29703 		}
29704 		if (Z_ISREF_P(array_ref)) {
29705 			array_ptr = Z_REFVAL_P(array_ref);
29706 		}
29707 	} else {
29708 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29709 	}
29710 
29711 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
29712 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
29713 			if (array_ptr == array_ref) {
29714 				ZVAL_NEW_REF(array_ref, array_ref);
29715 				array_ptr = Z_REFVAL_P(array_ref);
29716 			}
29717 			Z_ADDREF_P(array_ref);
29718 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
29719 		} else {
29720 			array_ref = EX_VAR(opline->result.var);
29721 			ZVAL_NEW_REF(array_ref, array_ptr);
29722 			array_ptr = Z_REFVAL_P(array_ref);
29723 		}
29724 		if (IS_CV == IS_CONST) {
29725 			zval_copy_ctor_func(array_ptr);
29726 		} else {
29727 			SEPARATE_ARRAY(array_ptr);
29728 		}
29729 		fe_ht = Z_ARRVAL_P(array_ptr);
29730 		p = fe_ht->arData;
29731 		while (1) {
29732 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
29733 
29734 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29735 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29736 			}
29737 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
29738 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
29739 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
29740 				break;
29741 			}
29742 			pos++;
29743 			p++;
29744 		}
29745 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
29746 
29747 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29748 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
29749 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
29750 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
29751 				if (array_ptr == array_ref) {
29752 					ZVAL_NEW_REF(array_ref, array_ref);
29753 					array_ptr = Z_REFVAL_P(array_ref);
29754 				}
29755 				Z_ADDREF_P(array_ref);
29756 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
29757 			} else {
29758 				array_ptr = EX_VAR(opline->result.var);
29759 				ZVAL_COPY_VALUE(array_ptr, array_ref);
29760 			}
29761 			fe_ht = Z_OBJPROP_P(array_ptr);
29762 			p = fe_ht->arData;
29763 			while (1) {
29764 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
29765 
29766 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29767 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29768 				}
29769 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
29770 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
29771 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
29772 				    (UNEXPECTED(!p->key) ||
29773 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
29774 					break;
29775 				}
29776 				pos++;
29777 				p++;
29778 			}
29779 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
29780 
29781 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29782 		} else {
29783 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
29784 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
29785 			zend_bool is_empty;
29786 
29787 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
29788 				if (IS_CV == IS_VAR) {
29789 
29790 				} else {
29791 
29792 				}
29793 				if (!EG(exception)) {
29794 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
29795 				}
29796 				zend_throw_exception_internal(NULL);
29797 				HANDLE_EXCEPTION();
29798 			}
29799 
29800 			iter->index = 0;
29801 			if (iter->funcs->rewind) {
29802 				iter->funcs->rewind(iter);
29803 				if (UNEXPECTED(EG(exception) != NULL)) {
29804 					OBJ_RELEASE(&iter->std);
29805 					if (IS_CV == IS_VAR) {
29806 
29807 					} else {
29808 
29809 					}
29810 					HANDLE_EXCEPTION();
29811 				}
29812 			}
29813 
29814 			is_empty = iter->funcs->valid(iter) != SUCCESS;
29815 
29816 			if (UNEXPECTED(EG(exception) != NULL)) {
29817 				OBJ_RELEASE(&iter->std);
29818 				if (IS_CV == IS_VAR) {
29819 
29820 				} else {
29821 
29822 				}
29823 				HANDLE_EXCEPTION();
29824 			}
29825 			iter->index = -1; /* will be set to 0 before using next handler */
29826 
29827 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
29828 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29829 
29830 			if (IS_CV == IS_VAR) {
29831 
29832 			} else {
29833 
29834 			}
29835 			if (is_empty) {
29836 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29837 			} else {
29838 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29839 			}
29840 		}
29841 	} else {
29842 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
29843 		ZVAL_UNDEF(EX_VAR(opline->result.var));
29844 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
29845 		if (IS_CV == IS_VAR) {
29846 
29847 		} else {
29848 
29849 		}
29850 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29851 	}
29852 }
29853 
29854 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29855 {
29856 	USE_OPLINE
29857 
29858 	SAVE_OPLINE();
29859 	if (IS_CV != IS_UNUSED) {
29860 
29861 		zval *ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29862 
29863 		do {
29864 			if (Z_TYPE_P(ptr) == IS_LONG) {
29865 				EG(exit_status) = Z_LVAL_P(ptr);
29866 			} else {
29867 				if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
29868 					ptr = Z_REFVAL_P(ptr);
29869 					if (Z_TYPE_P(ptr) == IS_LONG) {
29870 						EG(exit_status) = Z_LVAL_P(ptr);
29871 						break;
29872 					}
29873 				}
29874 				zend_print_variable(ptr);
29875 			}
29876 		} while (0);
29877 
29878 	}
29879 	zend_bailout();
29880 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
29881 }
29882 
29883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29884 {
29885 	USE_OPLINE
29886 
29887 	zval *value;
29888 	zval *ref = NULL;
29889 
29890 	SAVE_OPLINE();
29891 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
29892 
29893 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
29894 		if (IS_CV == IS_VAR) {
29895 			ref = value;
29896 		}
29897 		value = Z_REFVAL_P(value);
29898 	}
29899 	if (i_zend_is_true(value)) {
29900 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
29901 		if (IS_CV == IS_CONST) {
29902 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
29903 				zval_copy_ctor_func(EX_VAR(opline->result.var));
29904 			}
29905 		} else if (IS_CV == IS_CV) {
29906 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
29907 		} else if (IS_CV == IS_VAR && ref) {
29908 			zend_reference *r = Z_REF_P(ref);
29909 
29910 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
29911 				efree_size(r, sizeof(zend_reference));
29912 			} else if (Z_OPT_REFCOUNTED_P(value)) {
29913 				Z_ADDREF_P(value);
29914 			}
29915 		}
29916 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29917 	}
29918 
29919 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29920 }
29921 
29922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29923 {
29924 	USE_OPLINE
29925 
29926 	zval *value;
29927 	zval *ref = NULL;
29928 
29929 	SAVE_OPLINE();
29930 	value = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
29931 
29932 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
29933 		if (IS_CV == IS_VAR) {
29934 			ref = value;
29935 		}
29936 		value = Z_REFVAL_P(value);
29937 	}
29938 
29939 	if (Z_TYPE_P(value) > IS_NULL) {
29940 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
29941 		if (IS_CV == IS_CONST) {
29942 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
29943 				zval_copy_ctor_func(EX_VAR(opline->result.var));
29944 			}
29945 		} else if (IS_CV == IS_CV) {
29946 			if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
29947 		} else if (IS_CV == IS_VAR && ref) {
29948 			zend_reference *r = Z_REF_P(ref);
29949 
29950 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
29951 				efree_size(r, sizeof(zend_reference));
29952 			} else if (Z_OPT_REFCOUNTED_P(value)) {
29953 				Z_ADDREF_P(value);
29954 			}
29955 		}
29956 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
29957 	}
29958 
29959 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29960 }
29961 
29962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29963 {
29964 	USE_OPLINE
29965 
29966 	zval *value;
29967 	zval *result = EX_VAR(opline->result.var);
29968 
29969 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
29970 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
29971 		SAVE_OPLINE();
29972 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
29973 		ZVAL_NULL(result);
29974 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29975 	}
29976 
29977 	if (IS_CV == IS_CV) {
29978 		ZVAL_DEREF(value);
29979 		ZVAL_COPY(result, value);
29980 	} else if (IS_CV == IS_VAR) {
29981 		if (UNEXPECTED(Z_ISREF_P(value))) {
29982 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
29983 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
29984 				efree_size(Z_REF_P(value), sizeof(zend_reference));
29985 			} else if (Z_OPT_REFCOUNTED_P(result)) {
29986 				Z_ADDREF_P(result);
29987 			}
29988 		} else {
29989 			ZVAL_COPY_VALUE(result, value);
29990 		}
29991 	} else {
29992 		ZVAL_COPY_VALUE(result, value);
29993 		if (IS_CV == IS_CONST) {
29994 			if (UNEXPECTED(Z_OPT_COPYABLE_P(value))) {
29995 				zval_copy_ctor_func(result);
29996 			}
29997 		}
29998 	}
29999 	ZEND_VM_NEXT_OPCODE();
30000 }
30001 
30002 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30003 {
30004 	USE_OPLINE
30005 
30006 	zend_generator *generator = zend_get_running_generator(execute_data);
30007 
30008 	zval *val;
30009 
30010 
30011 	SAVE_OPLINE();
30012 	val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
30013 
30014 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30015 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
30016 
30017 		HANDLE_EXCEPTION();
30018 	}
30019 
30020 	if (Z_TYPE_P(val) == IS_ARRAY) {
30021 		ZVAL_COPY_VALUE(&generator->values, val);
30022 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
30023 			Z_ADDREF_P(val);
30024 		}
30025 		Z_FE_POS(generator->values) = 0;
30026 
30027 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
30028 		zend_class_entry *ce = Z_OBJCE_P(val);
30029 		if (ce == zend_ce_generator) {
30030 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
30031 
30032 			if (IS_CV != IS_TMP_VAR) {
30033 				Z_ADDREF_P(val);
30034 			}
30035 
30036 			if (Z_ISUNDEF(new_gen->retval)) {
30037 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
30038 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
30039 					zval_ptr_dtor(val);
30040 					HANDLE_EXCEPTION();
30041 				} else {
30042 					zend_generator_yield_from(generator, new_gen);
30043 				}
30044 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
30045 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
30046 				zval_ptr_dtor(val);
30047 				HANDLE_EXCEPTION();
30048 			} else {
30049 				if (RETURN_VALUE_USED(opline)) {
30050 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
30051 				}
30052 				ZEND_VM_NEXT_OPCODE();
30053 			}
30054 		} else {
30055 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
30056 
30057 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
30058 				if (!EG(exception)) {
30059 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
30060 				}
30061 				HANDLE_EXCEPTION();
30062 			}
30063 
30064 			iter->index = 0;
30065 			if (iter->funcs->rewind) {
30066 				iter->funcs->rewind(iter);
30067 				if (UNEXPECTED(EG(exception) != NULL)) {
30068 					OBJ_RELEASE(&iter->std);
30069 					HANDLE_EXCEPTION();
30070 				}
30071 			}
30072 
30073 			ZVAL_OBJ(&generator->values, &iter->std);
30074 		}
30075 	} else {
30076 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables", 0);
30077 		HANDLE_EXCEPTION();
30078 	}
30079 
30080 	/* This is the default return value
30081 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
30082 	if (RETURN_VALUE_USED(opline)) {
30083 		ZVAL_NULL(EX_VAR(opline->result.var));
30084 	}
30085 
30086 	/* This generator has no send target (though the generator we delegate to might have one) */
30087 	generator->send_target = NULL;
30088 
30089 	/* We increment to the next op, so we are at the correct position when the
30090 	 * generator is resumed. */
30091 	ZEND_VM_INC_OPCODE();
30092 
30093 	/* The GOTO VM uses a local opline variable. We need to set the opline
30094 	 * variable in execute_data so we don't resume at an old position. */
30095 	SAVE_OPLINE();
30096 
30097 	ZEND_VM_RETURN();
30098 }
30099 
30100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30101 {
30102 	USE_OPLINE
30103 	zval *value;
30104 
30105 
30106 	SAVE_OPLINE();
30107 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30108 try_strlen:
30109 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
30110 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
30111 	} else {
30112 		zend_bool strict;
30113 
30114 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
30115 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
30116 		}
30117 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
30118 			value = Z_REFVAL_P(value);
30119 			goto try_strlen;
30120 		}
30121 		strict = EX_USES_STRICT_TYPES();
30122 		do {
30123 			if (EXPECTED(!strict)) {
30124 				zend_string *str;
30125 				zval tmp;
30126 
30127 				ZVAL_COPY(&tmp, value);
30128 				if (zend_parse_arg_str_weak(&tmp, &str)) {
30129 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
30130 					zval_ptr_dtor(&tmp);
30131 					break;
30132 				}
30133 				zval_ptr_dtor(&tmp);
30134 			}
30135 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
30136 			ZVAL_NULL(EX_VAR(opline->result.var));
30137 		} while (0);
30138 	}
30139 
30140 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30141 }
30142 
30143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30144 {
30145 	USE_OPLINE
30146 	zval *value;
30147 	int result = 0;
30148 
30149 
30150 	SAVE_OPLINE();
30151 	value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
30152 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
30153 		if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
30154 			zend_class_entry *ce = Z_OBJCE_P(value);
30155 
30156 			if (UNEXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
30157 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
30158 				result = 1;
30159 			}
30160 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
30161 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
30162 
30163 			if (EXPECTED(type_name != NULL)) {
30164 				result = 1;
30165 			}
30166 		} else {
30167 			result = 1;
30168 		}
30169 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
30170 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
30171 		result = 1;
30172 	}
30173 
30174 	ZEND_VM_SMART_BRANCH(result, 1);
30175 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
30176 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30177 }
30178 
30179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30180 {
30181 	USE_OPLINE
30182 
30183 	zval *op1, *op2, *result;
30184 
30185 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30186 	op2 = EX_CONSTANT(opline->op2);
30187 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30188 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30189 			result = EX_VAR(opline->result.var);
30190 			fast_long_add_function(result, op1, op2);
30191 			ZEND_VM_NEXT_OPCODE();
30192 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30193 			result = EX_VAR(opline->result.var);
30194 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
30195 			ZEND_VM_NEXT_OPCODE();
30196 		}
30197 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
30198 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30199 			result = EX_VAR(opline->result.var);
30200 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
30201 			ZEND_VM_NEXT_OPCODE();
30202 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30203 			result = EX_VAR(opline->result.var);
30204 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
30205 			ZEND_VM_NEXT_OPCODE();
30206 		}
30207 	}
30208 
30209 	SAVE_OPLINE();
30210 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30211 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30212 	}
30213 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30214 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30215 	}
30216 	add_function(EX_VAR(opline->result.var), op1, op2);
30217 
30218 
30219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30220 }
30221 
30222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30223 {
30224 	USE_OPLINE
30225 
30226 	zval *op1, *op2, *result;
30227 
30228 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30229 	op2 = EX_CONSTANT(opline->op2);
30230 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30231 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30232 			result = EX_VAR(opline->result.var);
30233 			fast_long_sub_function(result, op1, op2);
30234 			ZEND_VM_NEXT_OPCODE();
30235 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30236 			result = EX_VAR(opline->result.var);
30237 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
30238 			ZEND_VM_NEXT_OPCODE();
30239 		}
30240 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
30241 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30242 			result = EX_VAR(opline->result.var);
30243 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
30244 			ZEND_VM_NEXT_OPCODE();
30245 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30246 			result = EX_VAR(opline->result.var);
30247 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
30248 			ZEND_VM_NEXT_OPCODE();
30249 		}
30250 	}
30251 
30252 	SAVE_OPLINE();
30253 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30254 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30255 	}
30256 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30257 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30258 	}
30259 	sub_function(EX_VAR(opline->result.var), op1, op2);
30260 
30261 
30262 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30263 }
30264 
30265 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30266 {
30267 	USE_OPLINE
30268 
30269 	zval *op1, *op2, *result;
30270 
30271 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30272 	op2 = EX_CONSTANT(opline->op2);
30273 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30274 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30275 			zend_long overflow;
30276 
30277 			result = EX_VAR(opline->result.var);
30278 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
30279 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
30280 			ZEND_VM_NEXT_OPCODE();
30281 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30282 			result = EX_VAR(opline->result.var);
30283 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
30284 			ZEND_VM_NEXT_OPCODE();
30285 		}
30286 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
30287 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30288 			result = EX_VAR(opline->result.var);
30289 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
30290 			ZEND_VM_NEXT_OPCODE();
30291 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30292 			result = EX_VAR(opline->result.var);
30293 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
30294 			ZEND_VM_NEXT_OPCODE();
30295 		}
30296 	}
30297 
30298 	SAVE_OPLINE();
30299 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30300 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30301 	}
30302 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30303 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30304 	}
30305 	mul_function(EX_VAR(opline->result.var), op1, op2);
30306 
30307 
30308 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30309 }
30310 
30311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30312 {
30313 	USE_OPLINE
30314 
30315 	zval *op1, *op2;
30316 
30317 	SAVE_OPLINE();
30318 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30319 	op2 = EX_CONSTANT(opline->op2);
30320 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
30321 
30322 
30323 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30324 }
30325 
30326 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30327 {
30328 	USE_OPLINE
30329 
30330 	zval *op1, *op2, *result;
30331 
30332 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30333 	op2 = EX_CONSTANT(opline->op2);
30334 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30335 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30336 			result = EX_VAR(opline->result.var);
30337 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
30338 				SAVE_OPLINE();
30339 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
30340 				HANDLE_EXCEPTION();
30341 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
30342 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
30343 				ZVAL_LONG(result, 0);
30344 			} else {
30345 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
30346 			}
30347 			ZEND_VM_NEXT_OPCODE();
30348 		}
30349 	}
30350 
30351 	SAVE_OPLINE();
30352 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30353 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30354 	}
30355 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30356 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30357 	}
30358 	mod_function(EX_VAR(opline->result.var), op1, op2);
30359 
30360 
30361 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30362 }
30363 
30364 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30365 {
30366 	USE_OPLINE
30367 
30368 	zval *op1, *op2;
30369 
30370 	SAVE_OPLINE();
30371 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30372 	op2 = EX_CONSTANT(opline->op2);
30373 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
30374 
30375 
30376 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30377 }
30378 
30379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30380 {
30381 	USE_OPLINE
30382 
30383 	zval *op1, *op2;
30384 
30385 	SAVE_OPLINE();
30386 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30387 	op2 = EX_CONSTANT(opline->op2);
30388 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
30389 
30390 
30391 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30392 }
30393 
30394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30395 {
30396 	USE_OPLINE
30397 
30398 	zval *op1, *op2;
30399 
30400 	SAVE_OPLINE();
30401 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30402 	op2 = EX_CONSTANT(opline->op2);
30403 	pow_function(EX_VAR(opline->result.var), op1, op2);
30404 
30405 
30406 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30407 }
30408 
30409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30410 {
30411 	USE_OPLINE
30412 
30413 	zval *op1, *op2;
30414 
30415 	SAVE_OPLINE();
30416 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30417 	op2 = EX_CONSTANT(opline->op2);
30418 
30419 	do {
30420 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
30421 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
30422 			zend_string *op1_str = Z_STR_P(op1);
30423 			zend_string *op2_str = Z_STR_P(op2);
30424 			zend_string *str;
30425 
30426 			if (IS_CV != IS_CONST) {
30427 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
30428 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
30429 
30430 					break;
30431 				}
30432 			}
30433 			if (IS_CONST != IS_CONST) {
30434 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
30435 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
30436 
30437 					break;
30438 				}
30439 			}
30440 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
30441 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
30442 			    size_t len = ZSTR_LEN(op1_str);
30443 
30444 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
30445 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
30446 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
30447 				break;
30448 			} else {
30449 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
30450 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
30451 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
30452 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
30453 			}
30454 		} else {
30455 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
30456 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30457 			}
30458 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
30459 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30460 			}
30461 			concat_function(EX_VAR(opline->result.var), op1, op2);
30462 		}
30463 
30464 	} while (0);
30465 
30466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30467 }
30468 
30469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30470 {
30471 	USE_OPLINE
30472 
30473 	zval *op1, *op2;
30474 	int result;
30475 
30476 	SAVE_OPLINE();
30477 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
30478 	op2 = EX_CONSTANT(opline->op2);
30479 	result = fast_is_identical_function(op1, op2);
30480 
30481 
30482 	ZEND_VM_SMART_BRANCH(result, 1);
30483 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
30484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30485 }
30486 
30487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30488 {
30489 	USE_OPLINE
30490 
30491 	zval *op1, *op2;
30492 	int result;
30493 
30494 	SAVE_OPLINE();
30495 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
30496 	op2 = EX_CONSTANT(opline->op2);
30497 	result = fast_is_not_identical_function(op1, op2);
30498 
30499 
30500 	ZEND_VM_SMART_BRANCH(result, 1);
30501 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
30502 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30503 }
30504 
30505 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30506 {
30507 	USE_OPLINE
30508 
30509 	zval *op1, *op2, *result;
30510 
30511 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30512 	op2 = EX_CONSTANT(opline->op2);
30513 	do {
30514 		int result;
30515 
30516 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
30517 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
30518 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
30519 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
30520 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
30521 			} else {
30522 				break;
30523 			}
30524 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
30525 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
30526 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
30527 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
30528 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
30529 			} else {
30530 				break;
30531 			}
30532 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
30533 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
30534 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
30535 					result = 1;
30536 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
30537 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
30538 						result = 0;
30539 					} else {
30540 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
30541 					}
30542 				} else {
30543 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
30544 				}
30545 
30546 
30547 			} else {
30548 				break;
30549 			}
30550 		} else {
30551 			break;
30552 		}
30553 		ZEND_VM_SMART_BRANCH(result, 0);
30554 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
30555 		ZEND_VM_NEXT_OPCODE();
30556 	} while (0);
30557 
30558 	SAVE_OPLINE();
30559 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
30560 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30561 	}
30562 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
30563 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30564 	}
30565 	result = EX_VAR(opline->result.var);
30566 	compare_function(result, op1, op2);
30567 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
30568 
30569 
30570 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30571 }
30572 
30573 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30574 {
30575 	USE_OPLINE
30576 
30577 	zval *op1, *op2, *result;
30578 
30579 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30580 	op2 = EX_CONSTANT(opline->op2);
30581 	do {
30582 		int result;
30583 
30584 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
30585 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
30586 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
30587 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
30588 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
30589 			} else {
30590 				break;
30591 			}
30592 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
30593 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
30594 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
30595 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
30596 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
30597 			} else {
30598 				break;
30599 			}
30600 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
30601 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
30602 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
30603 					result = 0;
30604 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
30605 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
30606 						result = 1;
30607 					} else {
30608 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
30609 					}
30610 				} else {
30611 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
30612 				}
30613 
30614 
30615 			} else {
30616 				break;
30617 			}
30618 		} else {
30619 			break;
30620 		}
30621 		ZEND_VM_SMART_BRANCH(result, 0);
30622 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
30623 		ZEND_VM_NEXT_OPCODE();
30624 	} while (0);
30625 
30626 	SAVE_OPLINE();
30627 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
30628 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30629 	}
30630 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
30631 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30632 	}
30633 	result = EX_VAR(opline->result.var);
30634 	compare_function(result, op1, op2);
30635 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
30636 
30637 
30638 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30639 }
30640 
30641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30642 {
30643 	USE_OPLINE
30644 
30645 	zval *op1, *op2, *result;
30646 
30647 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30648 	op2 = EX_CONSTANT(opline->op2);
30649 	do {
30650 		int result;
30651 
30652 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30653 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30654 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
30655 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30656 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
30657 			} else {
30658 				break;
30659 			}
30660 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
30661 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30662 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
30663 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30664 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
30665 			} else {
30666 				break;
30667 			}
30668 		} else {
30669 			break;
30670 		}
30671 		ZEND_VM_SMART_BRANCH(result, 0);
30672 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
30673 		ZEND_VM_NEXT_OPCODE();
30674 	} while (0);
30675 
30676 	SAVE_OPLINE();
30677 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30678 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30679 	}
30680 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30681 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30682 	}
30683 	result = EX_VAR(opline->result.var);
30684 	compare_function(result, op1, op2);
30685 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
30686 
30687 
30688 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30689 }
30690 
30691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30692 {
30693 	USE_OPLINE
30694 
30695 	zval *op1, *op2, *result;
30696 
30697 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
30698 	op2 = EX_CONSTANT(opline->op2);
30699 	do {
30700 		int result;
30701 
30702 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
30703 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30704 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
30705 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30706 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
30707 			} else {
30708 				break;
30709 			}
30710 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
30711 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
30712 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
30713 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
30714 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
30715 			} else {
30716 				break;
30717 			}
30718 		} else {
30719 			break;
30720 		}
30721 		ZEND_VM_SMART_BRANCH(result, 0);
30722 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
30723 		ZEND_VM_NEXT_OPCODE();
30724 	} while (0);
30725 
30726 	SAVE_OPLINE();
30727 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
30728 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
30729 	}
30730 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
30731 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
30732 	}
30733 	result = EX_VAR(opline->result.var);
30734 	compare_function(result, op1, op2);
30735 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
30736 
30737 
30738 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30739 }
30740 
30741 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30742 {
30743 	USE_OPLINE
30744 
30745 	zval *op1, *op2;
30746 
30747 	SAVE_OPLINE();
30748 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30749 	op2 = EX_CONSTANT(opline->op2);
30750 	compare_function(EX_VAR(opline->result.var), op1, op2);
30751 
30752 
30753 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30754 }
30755 
30756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30757 {
30758 	USE_OPLINE
30759 
30760 	zval *op1, *op2;
30761 
30762 	SAVE_OPLINE();
30763 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30764 	op2 = EX_CONSTANT(opline->op2);
30765 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
30766 
30767 
30768 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30769 }
30770 
30771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30772 {
30773 	USE_OPLINE
30774 
30775 	zval *op1, *op2;
30776 
30777 	SAVE_OPLINE();
30778 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30779 	op2 = EX_CONSTANT(opline->op2);
30780 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
30781 
30782 
30783 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30784 }
30785 
30786 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30787 {
30788 	USE_OPLINE
30789 
30790 	zval *op1, *op2;
30791 
30792 	SAVE_OPLINE();
30793 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30794 	op2 = EX_CONSTANT(opline->op2);
30795 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
30796 
30797 
30798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30799 }
30800 
30801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30802 {
30803 	USE_OPLINE
30804 
30805 	zval *op1, *op2;
30806 
30807 	SAVE_OPLINE();
30808 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
30809 	op2 = EX_CONSTANT(opline->op2);
30810 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
30811 
30812 
30813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30814 }
30815 
30816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
30817 {
30818 	USE_OPLINE
30819 	zend_free_op free_op_data1;
30820 	zval *object;
30821 	zval *property;
30822 	zval *value;
30823 	zval *zptr;
30824 
30825 	SAVE_OPLINE();
30826 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
30827 
30828 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
30829 		zend_throw_error(NULL, "Using $this when not in object context");
30830 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
30831 
30832 		HANDLE_EXCEPTION();
30833 	}
30834 
30835 	property = EX_CONSTANT(opline->op2);
30836 
30837 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
30838 		zend_throw_error(NULL, "Cannot use string offset as an object");
30839 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
30840 
30841 		HANDLE_EXCEPTION();
30842 	}
30843 
30844 	do {
30845 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
30846 
30847 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30848 			ZVAL_DEREF(object);
30849 			if (UNEXPECTED(!make_real_object(object))) {
30850 				zend_error(E_WARNING, "Attempt to assign property of non-object");
30851 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30852 					ZVAL_NULL(EX_VAR(opline->result.var));
30853 				}
30854 				break;
30855 			}
30856 		}
30857 
30858 		/* here we are sure we are dealing with an object */
30859 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
30860 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
30861 			if (UNEXPECTED(zptr == &EG(error_zval))) {
30862 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30863 					ZVAL_NULL(EX_VAR(opline->result.var));
30864 				}
30865 			} else {
30866 				ZVAL_DEREF(zptr);
30867 				SEPARATE_ZVAL_NOREF(zptr);
30868 
30869 				binary_op(zptr, zptr, value);
30870 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30871 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
30872 				}
30873 			}
30874 		} else {
30875 			zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
30876 		}
30877 	} while (0);
30878 
30879 	FREE_OP(free_op_data1);
30880 
30881 
30882 	/* assign_obj has two opcodes! */
30883 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30884 }
30885 
30886 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
30887 {
30888 	USE_OPLINE
30889 	zend_free_op free_op_data1;
30890 	zval *var_ptr, rv;
30891 	zval *value, *container, *dim;
30892 
30893 	SAVE_OPLINE();
30894 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
30895 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
30896 		zend_throw_error(NULL, "Using $this when not in object context");
30897 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
30898 
30899 		HANDLE_EXCEPTION();
30900 	}
30901 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
30902 		zend_throw_error(NULL, "Cannot use string offset as an array");
30903 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
30904 
30905 		HANDLE_EXCEPTION();
30906 	}
30907 
30908 	dim = EX_CONSTANT(opline->op2);
30909 
30910 	do {
30911 		if (IS_CV == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
30912 			if (IS_CV != IS_UNUSED) {
30913 				ZVAL_DEREF(container);
30914 			}
30915 			if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30916 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
30917 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
30918 				break;
30919 			}
30920 		}
30921 
30922 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CONST);
30923 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
30924 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
30925 		var_ptr = Z_INDIRECT(rv);
30926 
30927 		if (UNEXPECTED(var_ptr == NULL)) {
30928 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
30929 
30930 			FREE_OP(free_op_data1);
30931 
30932 			HANDLE_EXCEPTION();
30933 		}
30934 
30935 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
30936 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30937 				ZVAL_NULL(EX_VAR(opline->result.var));
30938 			}
30939 		} else {
30940 			ZVAL_DEREF(var_ptr);
30941 			SEPARATE_ZVAL_NOREF(var_ptr);
30942 
30943 			binary_op(var_ptr, var_ptr, value);
30944 
30945 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30946 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30947 			}
30948 		}
30949 	} while (0);
30950 
30951 	FREE_OP(free_op_data1);
30952 
30953 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30954 }
30955 
30956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
30957 {
30958 	USE_OPLINE
30959 
30960 	zval *var_ptr;
30961 	zval *value;
30962 
30963 	SAVE_OPLINE();
30964 	value = EX_CONSTANT(opline->op2);
30965 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
30966 
30967 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
30968 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
30969 
30970 		HANDLE_EXCEPTION();
30971 	}
30972 
30973 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
30974 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30975 			ZVAL_NULL(EX_VAR(opline->result.var));
30976 		}
30977 	} else {
30978 		ZVAL_DEREF(var_ptr);
30979 		SEPARATE_ZVAL_NOREF(var_ptr);
30980 
30981 		binary_op(var_ptr, var_ptr, value);
30982 
30983 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30984 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30985 		}
30986 	}
30987 
30988 
30989 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30990 }
30991 
30992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30993 {
30994 #if 0 || (IS_CONST != IS_UNUSED)
30995 	USE_OPLINE
30996 
30997 # if 0 || (IS_CV != IS_UNUSED)
30998 	if (EXPECTED(opline->extended_value == 0)) {
30999 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31000 	}
31001 # endif
31002 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31003 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31004 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31005 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31006 	}
31007 #else
31008 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31009 #endif
31010 }
31011 
31012 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31013 {
31014 #if 0 || (IS_CONST != IS_UNUSED)
31015 	USE_OPLINE
31016 
31017 # if 0 || (IS_CV != IS_UNUSED)
31018 	if (EXPECTED(opline->extended_value == 0)) {
31019 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31020 	}
31021 # endif
31022 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31023 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31024 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31025 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31026 	}
31027 #else
31028 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31029 #endif
31030 }
31031 
31032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31033 {
31034 #if 0 || (IS_CONST != IS_UNUSED)
31035 	USE_OPLINE
31036 
31037 # if 0 || (IS_CV != IS_UNUSED)
31038 	if (EXPECTED(opline->extended_value == 0)) {
31039 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31040 	}
31041 # endif
31042 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31043 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31044 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31045 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31046 	}
31047 #else
31048 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31049 #endif
31050 }
31051 
31052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31053 {
31054 #if 0 || (IS_CONST != IS_UNUSED)
31055 	USE_OPLINE
31056 
31057 # if 0 || (IS_CV != IS_UNUSED)
31058 	if (EXPECTED(opline->extended_value == 0)) {
31059 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31060 	}
31061 # endif
31062 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31063 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31064 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31065 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31066 	}
31067 #else
31068 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31069 #endif
31070 }
31071 
31072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31073 {
31074 #if 0 || (IS_CONST != IS_UNUSED)
31075 	USE_OPLINE
31076 
31077 # if 0 || (IS_CV != IS_UNUSED)
31078 	if (EXPECTED(opline->extended_value == 0)) {
31079 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31080 	}
31081 # endif
31082 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31083 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31084 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31085 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31086 	}
31087 #else
31088 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31089 #endif
31090 }
31091 
31092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31093 {
31094 #if 0 || (IS_CONST != IS_UNUSED)
31095 	USE_OPLINE
31096 
31097 # if 0 || (IS_CV != IS_UNUSED)
31098 	if (EXPECTED(opline->extended_value == 0)) {
31099 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31100 	}
31101 # endif
31102 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31103 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31104 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31105 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31106 	}
31107 #else
31108 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31109 #endif
31110 }
31111 
31112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31113 {
31114 #if 0 || (IS_CONST != IS_UNUSED)
31115 	USE_OPLINE
31116 
31117 # if 0 || (IS_CV != IS_UNUSED)
31118 	if (EXPECTED(opline->extended_value == 0)) {
31119 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31120 	}
31121 # endif
31122 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31123 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31124 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31125 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31126 	}
31127 #else
31128 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31129 #endif
31130 }
31131 
31132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31133 {
31134 #if 0 || (IS_CONST != IS_UNUSED)
31135 	USE_OPLINE
31136 
31137 # if 0 || (IS_CV != IS_UNUSED)
31138 	if (EXPECTED(opline->extended_value == 0)) {
31139 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31140 	}
31141 # endif
31142 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31143 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31144 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31145 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31146 	}
31147 #else
31148 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31149 #endif
31150 }
31151 
31152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31153 {
31154 #if 0 || (IS_CONST != IS_UNUSED)
31155 	USE_OPLINE
31156 
31157 # if 0 || (IS_CV != IS_UNUSED)
31158 	if (EXPECTED(opline->extended_value == 0)) {
31159 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31160 	}
31161 # endif
31162 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31163 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31164 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31165 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31166 	}
31167 #else
31168 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31169 #endif
31170 }
31171 
31172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31173 {
31174 #if 0 || (IS_CONST != IS_UNUSED)
31175 	USE_OPLINE
31176 
31177 # if 0 || (IS_CV != IS_UNUSED)
31178 	if (EXPECTED(opline->extended_value == 0)) {
31179 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31180 	}
31181 # endif
31182 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31183 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31184 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31185 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31186 	}
31187 #else
31188 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31189 #endif
31190 }
31191 
31192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31193 {
31194 #if 0 || (IS_CONST != IS_UNUSED)
31195 	USE_OPLINE
31196 
31197 # if 0 || (IS_CV != IS_UNUSED)
31198 	if (EXPECTED(opline->extended_value == 0)) {
31199 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31200 	}
31201 # endif
31202 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31203 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31204 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31205 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31206 	}
31207 #else
31208 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31209 #endif
31210 }
31211 
31212 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31213 {
31214 #if 0 || (IS_CONST != IS_UNUSED)
31215 	USE_OPLINE
31216 
31217 # if 0 || (IS_CV != IS_UNUSED)
31218 	if (EXPECTED(opline->extended_value == 0)) {
31219 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31220 	}
31221 # endif
31222 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
31223 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31224 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
31225 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31226 	}
31227 #else
31228 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31229 #endif
31230 }
31231 
31232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
31233 {
31234 	USE_OPLINE
31235 
31236 	zval *object;
31237 	zval *property;
31238 	zval *zptr;
31239 
31240 	SAVE_OPLINE();
31241 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
31242 
31243 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
31244 		zend_throw_error(NULL, "Using $this when not in object context");
31245 
31246 		HANDLE_EXCEPTION();
31247 	}
31248 
31249 	property = EX_CONSTANT(opline->op2);
31250 
31251 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
31252 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
31253 
31254 		HANDLE_EXCEPTION();
31255 	}
31256 
31257 	do {
31258 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31259 			ZVAL_DEREF(object);
31260 			if (UNEXPECTED(!make_real_object(object))) {
31261 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
31262 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31263 					ZVAL_NULL(EX_VAR(opline->result.var));
31264 				}
31265 				break;
31266 			}
31267 		}
31268 
31269 		/* here we are sure we are dealing with an object */
31270 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
31271 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
31272 			if (UNEXPECTED(zptr == &EG(error_zval))) {
31273 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31274 					ZVAL_NULL(EX_VAR(opline->result.var));
31275 				}
31276 			} else {
31277 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
31278 					if (inc) {
31279 						fast_long_increment_function(zptr);
31280 					} else {
31281 						fast_long_decrement_function(zptr);
31282 					}
31283 				} else {
31284 					ZVAL_DEREF(zptr);
31285 					SEPARATE_ZVAL_NOREF(zptr);
31286 
31287 					if (inc) {
31288 						increment_function(zptr);
31289 					} else {
31290 						decrement_function(zptr);
31291 					}
31292 				}
31293 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31294 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
31295 				}
31296 			}
31297 		} else {
31298 			zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
31299 		}
31300 	} while (0);
31301 
31302 
31303 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31304 }
31305 
31306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31307 {
31308 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31309 }
31310 
31311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31312 {
31313 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31314 }
31315 
31316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
31317 {
31318 	USE_OPLINE
31319 
31320 	zval *object;
31321 	zval *property;
31322 	zval *zptr;
31323 
31324 	SAVE_OPLINE();
31325 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
31326 
31327 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
31328 		zend_throw_error(NULL, "Using $this when not in object context");
31329 
31330 		HANDLE_EXCEPTION();
31331 	}
31332 
31333 	property = EX_CONSTANT(opline->op2);
31334 
31335 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
31336 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
31337 
31338 		HANDLE_EXCEPTION();
31339 	}
31340 
31341 	do {
31342 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31343 			ZVAL_DEREF(object);
31344 			if (UNEXPECTED(!make_real_object(object))) {
31345 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
31346 				ZVAL_NULL(EX_VAR(opline->result.var));
31347 				break;
31348 			}
31349 		}
31350 
31351 		/* here we are sure we are dealing with an object */
31352 
31353 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
31354 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
31355 			if (UNEXPECTED(zptr == &EG(error_zval))) {
31356 				ZVAL_NULL(EX_VAR(opline->result.var));
31357 			} else {
31358 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
31359 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
31360 					if (inc) {
31361 						fast_long_increment_function(zptr);
31362 					} else {
31363 						fast_long_decrement_function(zptr);
31364 					}
31365 				} else {
31366 					ZVAL_DEREF(zptr);
31367 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
31368 					zval_opt_copy_ctor(zptr);
31369 					if (inc) {
31370 						increment_function(zptr);
31371 					} else {
31372 						decrement_function(zptr);
31373 					}
31374 				}
31375 			}
31376 		} else {
31377 			zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
31378 		}
31379 	} while (0);
31380 
31381 
31382 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31383 }
31384 
31385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31386 {
31387 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31388 }
31389 
31390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31391 {
31392 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31393 }
31394 
31395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
31396 {
31397 	USE_OPLINE
31398 
31399 	zval *varname;
31400 	zval *retval;
31401 	zend_string *name;
31402 	HashTable *target_symbol_table;
31403 
31404 	SAVE_OPLINE();
31405 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
31406 
31407  	if (IS_CV == IS_CONST) {
31408 		name = Z_STR_P(varname);
31409 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
31410 		name = Z_STR_P(varname);
31411 		zend_string_addref(name);
31412 	} else {
31413 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
31414 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
31415 		}
31416 		name = zval_get_string(varname);
31417 	}
31418 
31419 	if (IS_CONST != IS_UNUSED) {
31420 		zend_class_entry *ce;
31421 
31422 		if (IS_CONST == IS_CONST) {
31423 			if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
31424 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
31425 
31426 				/* check if static properties were destoyed */
31427 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
31428 					if (type == BP_VAR_IS) {
31429 						retval = &EG(uninitialized_zval);
31430 					} else {
31431 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
31432 
31433 						HANDLE_EXCEPTION();
31434 					}
31435 				}
31436 
31437 				goto fetch_var_return;
31438 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
31439 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
31440 				if (UNEXPECTED(ce == NULL)) {
31441 					if (IS_CV != IS_CONST) {
31442 						zend_string_release(name);
31443 					}
31444 
31445 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31446 				}
31447 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
31448 			}
31449 		} else {
31450 			ce = Z_CE_P(EX_VAR(opline->op2.var));
31451 			if (IS_CV == IS_CONST &&
31452 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
31453 
31454 				/* check if static properties were destoyed */
31455 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
31456 					if (type == BP_VAR_IS) {
31457 						retval = &EG(uninitialized_zval);
31458 					} else {
31459 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
31460 
31461 						HANDLE_EXCEPTION();
31462 					}
31463 				}
31464 
31465 				goto fetch_var_return;
31466 			}
31467 		}
31468 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
31469 		if (UNEXPECTED(EG(exception))) {
31470 			if (IS_CV != IS_CONST) {
31471 				zend_string_release(name);
31472 			}
31473 
31474 			HANDLE_EXCEPTION();
31475 		}
31476 		if (EXPECTED(retval)) {
31477 			if (IS_CV == IS_CONST) {
31478 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
31479 			}
31480 		} else {
31481 			retval = &EG(uninitialized_zval);
31482 		}
31483 
31484 	} else {
31485 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
31486 		retval = zend_hash_find(target_symbol_table, name);
31487 		if (retval == NULL) {
31488 			switch (type) {
31489 				case BP_VAR_R:
31490 				case BP_VAR_UNSET:
31491 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
31492 					/* break missing intentionally */
31493 				case BP_VAR_IS:
31494 					retval = &EG(uninitialized_zval);
31495 					break;
31496 				case BP_VAR_RW:
31497 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
31498 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
31499 					break;
31500 				case BP_VAR_W:
31501 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
31502 					break;
31503 				EMPTY_SWITCH_DEFAULT_CASE()
31504 			}
31505 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
31506 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
31507 			retval = Z_INDIRECT_P(retval);
31508 			if (Z_TYPE_P(retval) == IS_UNDEF) {
31509 				switch (type) {
31510 					case BP_VAR_R:
31511 					case BP_VAR_UNSET:
31512 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
31513 						/* break missing intentionally */
31514 					case BP_VAR_IS:
31515 						retval = &EG(uninitialized_zval);
31516 						break;
31517 					case BP_VAR_RW:
31518 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
31519 						/* break missing intentionally */
31520 					case BP_VAR_W:
31521 						ZVAL_NULL(retval);
31522 						break;
31523 					EMPTY_SWITCH_DEFAULT_CASE()
31524 				}
31525 			}
31526 		}
31527 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
31528 			if (Z_CONSTANT_P(retval)) {
31529 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
31530 
31531 					HANDLE_EXCEPTION();
31532 				}
31533 			}
31534 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
31535 
31536 		}
31537 	}
31538 
31539 	if (IS_CV != IS_CONST) {
31540 		zend_string_release(name);
31541 	}
31542 
31543 fetch_var_return:
31544 	ZEND_ASSERT(retval != NULL);
31545 	if (type == BP_VAR_R || type == BP_VAR_IS) {
31546 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
31547 			ZVAL_UNREF(retval);
31548 		}
31549 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
31550 	} else {
31551 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
31552 	}
31553 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31554 }
31555 
31556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31557 {
31558 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31559 }
31560 
31561 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31562 {
31563 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31564 }
31565 
31566 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31567 {
31568 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31569 }
31570 
31571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31572 {
31573 	USE_OPLINE
31574 
31575 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
31576 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31577 	} else {
31578 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31579 	}
31580 }
31581 
31582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31583 {
31584 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31585 }
31586 
31587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31588 {
31589 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31590 }
31591 
31592 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31593 {
31594 	USE_OPLINE
31595 
31596 	zval *container;
31597 
31598 	SAVE_OPLINE();
31599 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
31600 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31601 
31602 
31603 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31604 }
31605 
31606 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31607 {
31608 	USE_OPLINE
31609 	zend_free_op free_op1;
31610 	zval *container;
31611 
31612 	SAVE_OPLINE();
31613 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
31614 
31615 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31616 		zend_throw_error(NULL, "Cannot use string offset as an array");
31617 		HANDLE_EXCEPTION();
31618 	}
31619 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31620 
31621 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31622 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
31623 	}
31624 
31625 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31626 }
31627 
31628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31629 {
31630 	USE_OPLINE
31631 	zend_free_op free_op1;
31632 	zval *container;
31633 
31634 	SAVE_OPLINE();
31635 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
31636 
31637 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31638 		zend_throw_error(NULL, "Cannot use string offset as an array");
31639 		HANDLE_EXCEPTION();
31640 	}
31641 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31642 
31643 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31644 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
31645 	}
31646 
31647 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31648 }
31649 
31650 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31651 {
31652 	USE_OPLINE
31653 
31654 	zval *container;
31655 
31656 	SAVE_OPLINE();
31657 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
31658 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31659 
31660 
31661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31662 }
31663 
31664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31665 {
31666 	USE_OPLINE
31667 	zval *container;
31668 	zend_free_op free_op1;
31669 
31670 	SAVE_OPLINE();
31671 
31672 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
31673         if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
31674             zend_throw_error(NULL, "Cannot use temporary expression in write context");
31675 
31676 
31677 			HANDLE_EXCEPTION();
31678         }
31679 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
31680 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31681 			zend_throw_error(NULL, "Cannot use string offset as an array");
31682 
31683 			HANDLE_EXCEPTION();
31684 		}
31685 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31686 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31687 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
31688 		}
31689 
31690 
31691 	} else {
31692 		if (IS_CONST == IS_UNUSED) {
31693 			zend_throw_error(NULL, "Cannot use [] for reading");
31694 
31695 
31696 			HANDLE_EXCEPTION();
31697 		}
31698 		container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
31699 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31700 
31701 
31702 	}
31703 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31704 }
31705 
31706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31707 {
31708 	USE_OPLINE
31709 	zend_free_op free_op1;
31710 	zval *container;
31711 
31712 	SAVE_OPLINE();
31713 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
31714 
31715 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31716 		zend_throw_error(NULL, "Cannot use string offset as an array");
31717 
31718 		HANDLE_EXCEPTION();
31719 	}
31720 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
31721 
31722 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31723 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
31724 	}
31725 
31726 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31727 }
31728 
31729 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31730 {
31731 	USE_OPLINE
31732 
31733 	zval *container;
31734 
31735 	zval *offset;
31736 
31737 	SAVE_OPLINE();
31738 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
31739 
31740 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31741 		zend_throw_error(NULL, "Using $this when not in object context");
31742 
31743 		HANDLE_EXCEPTION();
31744 	}
31745 
31746 	offset = EX_CONSTANT(opline->op2);
31747 
31748 	if (IS_CV == IS_CONST ||
31749 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31750 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31751 			container = Z_REFVAL_P(container);
31752 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31753 				goto fetch_obj_r_no_object;
31754 			}
31755 		} else {
31756 			goto fetch_obj_r_no_object;
31757 		}
31758 	}
31759 
31760 	/* here we are sure we are dealing with an object */
31761 	do {
31762 		zend_object *zobj = Z_OBJ_P(container);
31763 		zval *retval;
31764 
31765 		if (IS_CONST == IS_CONST &&
31766 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
31767 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
31768 
31769 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31770 				retval = OBJ_PROP(zobj, prop_offset);
31771 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
31772 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31773 					break;
31774 				}
31775 			} else if (EXPECTED(zobj->properties != NULL)) {
31776 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
31777 				if (EXPECTED(retval)) {
31778 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31779 					break;
31780 				}
31781 			}
31782 		}
31783 
31784 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
31785 fetch_obj_r_no_object:
31786 			zend_error(E_NOTICE, "Trying to get property of non-object");
31787 			ZVAL_NULL(EX_VAR(opline->result.var));
31788 		} else {
31789 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
31790 
31791 			if (retval != EX_VAR(opline->result.var)) {
31792 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
31793 			}
31794 		}
31795 	} while (0);
31796 
31797 
31798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31799 }
31800 
31801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31802 {
31803 	USE_OPLINE
31804 	zend_free_op free_op1;
31805 	zval *property;
31806 	zval *container;
31807 
31808 	SAVE_OPLINE();
31809 	property = EX_CONSTANT(opline->op2);
31810 
31811 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
31812 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31813 		zend_throw_error(NULL, "Using $this when not in object context");
31814 
31815 		HANDLE_EXCEPTION();
31816 	}
31817 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31818 		zend_throw_error(NULL, "Cannot use string offset as an object");
31819 
31820 		HANDLE_EXCEPTION();
31821 	}
31822 
31823 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
31824 
31825 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31826 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
31827 	}
31828 
31829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31830 }
31831 
31832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31833 {
31834 	USE_OPLINE
31835 	zend_free_op free_op1;
31836 	zval *property;
31837 	zval *container;
31838 
31839 	SAVE_OPLINE();
31840 	property = EX_CONSTANT(opline->op2);
31841 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
31842 
31843 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31844 		zend_throw_error(NULL, "Using $this when not in object context");
31845 
31846 		HANDLE_EXCEPTION();
31847 	}
31848 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31849 		zend_throw_error(NULL, "Cannot use string offset as an object");
31850 
31851 		HANDLE_EXCEPTION();
31852 	}
31853 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
31854 
31855 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31856 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
31857 	}
31858 
31859 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31860 }
31861 
31862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31863 {
31864 	USE_OPLINE
31865 
31866 	zval *container;
31867 
31868 	zval *offset;
31869 
31870 	SAVE_OPLINE();
31871 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
31872 
31873 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31874 		zend_throw_error(NULL, "Using $this when not in object context");
31875 
31876 		HANDLE_EXCEPTION();
31877 	}
31878 
31879 	offset  = EX_CONSTANT(opline->op2);
31880 
31881 	if (IS_CV == IS_CONST ||
31882 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31883 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31884 			container = Z_REFVAL_P(container);
31885 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31886 				goto fetch_obj_is_no_object;
31887 			}
31888 		} else {
31889 			goto fetch_obj_is_no_object;
31890 		}
31891 	}
31892 
31893 	/* here we are sure we are dealing with an object */
31894 	do {
31895 		zend_object *zobj = Z_OBJ_P(container);
31896 		zval *retval;
31897 
31898 		if (IS_CONST == IS_CONST &&
31899 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
31900 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
31901 
31902 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31903 				retval = OBJ_PROP(zobj, prop_offset);
31904 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
31905 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31906 					break;
31907 				}
31908 			} else if (EXPECTED(zobj->properties != NULL)) {
31909 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
31910 				if (EXPECTED(retval)) {
31911 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31912 					break;
31913 				}
31914 			}
31915 		}
31916 
31917 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
31918 fetch_obj_is_no_object:
31919 			ZVAL_NULL(EX_VAR(opline->result.var));
31920 		} else {
31921 
31922 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
31923 
31924 			if (retval != EX_VAR(opline->result.var)) {
31925 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
31926 			}
31927 		}
31928 	} while (0);
31929 
31930 
31931 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31932 }
31933 
31934 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31935 {
31936 	USE_OPLINE
31937 	zval *container;
31938 
31939 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
31940 		/* Behave like FETCH_OBJ_W */
31941 		zend_free_op free_op1;
31942 		zval *property;
31943 
31944 		SAVE_OPLINE();
31945 		property = EX_CONSTANT(opline->op2);
31946 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
31947 
31948 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31949 			zend_throw_error(NULL, "Using $this when not in object context");
31950 
31951 			HANDLE_EXCEPTION();
31952 		}
31953 		if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
31954 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
31955 
31956 
31957 			HANDLE_EXCEPTION();
31958 		}
31959 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31960 			zend_throw_error(NULL, "Cannot use string offset as an object");
31961 
31962 			HANDLE_EXCEPTION();
31963 		}
31964 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
31965 
31966 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
31967 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
31968 		}
31969 
31970 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31971 	} else {
31972 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31973 	}
31974 }
31975 
31976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31977 {
31978 	USE_OPLINE
31979 	zend_free_op free_op1;
31980 	zval *container, *property;
31981 
31982 	SAVE_OPLINE();
31983 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
31984 
31985 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
31986 		zend_throw_error(NULL, "Using $this when not in object context");
31987 
31988 		HANDLE_EXCEPTION();
31989 	}
31990 
31991 	property = EX_CONSTANT(opline->op2);
31992 
31993 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
31994 		zend_throw_error(NULL, "Cannot use string offset as an object");
31995 
31996 		HANDLE_EXCEPTION();
31997 	}
31998 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
31999 
32000 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
32001 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
32002 	}
32003 
32004 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32005 }
32006 
32007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32008 {
32009 	USE_OPLINE
32010 
32011 	zval *container;
32012 
32013 	SAVE_OPLINE();
32014 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
32015 
32016 try_fetch_list:
32017 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32018 		zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
32019 
32020 		if (UNEXPECTED(value == NULL)) {
32021 			zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
32022 			ZVAL_NULL(EX_VAR(opline->result.var));
32023 		} else {
32024 			ZVAL_COPY(EX_VAR(opline->result.var), value);
32025 		}
32026 	} else if (IS_CV != IS_CONST &&
32027 	           UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
32028 	           EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
32029 		zval *result = EX_VAR(opline->result.var);
32030 		zval *retval = Z_OBJ_HT_P(container)->read_dimension(container, EX_CONSTANT(opline->op2), BP_VAR_R, result);
32031 
32032 		if (retval) {
32033 			if (result != retval) {
32034 				ZVAL_COPY(result, retval);
32035 			}
32036 		} else {
32037 			ZVAL_NULL(result);
32038 		}
32039 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(container) == IS_REFERENCE) {
32040 		container = Z_REFVAL_P(container);
32041 		goto try_fetch_list;
32042 	} else {
32043 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32044 			GET_OP1_UNDEF_CV(container, BP_VAR_R);
32045 		}
32046 		ZVAL_NULL(EX_VAR(opline->result.var));
32047 	}
32048 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32049 }
32050 
32051 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32052 {
32053 	USE_OPLINE
32054 
32055 	zval *object;
32056 	zval *property_name;
32057 
32058 	SAVE_OPLINE();
32059 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
32060 
32061 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
32062 		zend_throw_error(NULL, "Using $this when not in object context");
32063 
32064 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
32065 		HANDLE_EXCEPTION();
32066 	}
32067 
32068 	property_name = EX_CONSTANT(opline->op2);
32069 
32070 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
32071 		zend_throw_error(NULL, "Cannot use string offset as an array");
32072 
32073 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
32074 		HANDLE_EXCEPTION();
32075 	}
32076 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
32077 
32078 
32079 	/* assign_obj has two opcodes! */
32080 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32081 }
32082 
32083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32084 {
32085 	USE_OPLINE
32086 
32087 	zval *object_ptr;
32088 	zend_free_op free_op_data1;
32089 	zval *value;
32090 	zval *variable_ptr;
32091 	zval *dim;
32092 
32093 	SAVE_OPLINE();
32094 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
32095 
32096 	if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
32097 		zend_throw_error(NULL, "Cannot use string offset as an array");
32098 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
32099 
32100 		HANDLE_EXCEPTION();
32101 	}
32102 
32103 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
32104 try_assign_dim_array:
32105 		if (IS_CONST == IS_UNUSED) {
32106 			SEPARATE_ARRAY(object_ptr);
32107 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
32108 			if (UNEXPECTED(variable_ptr == NULL)) {
32109 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
32110 				variable_ptr = &EG(error_zval);
32111 			}
32112 		} else {
32113 			dim = EX_CONSTANT(opline->op2);
32114 			SEPARATE_ARRAY(object_ptr);
32115 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_CONST, BP_VAR_W);
32116 
32117 		}
32118 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
32119 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
32120 			FREE_OP(free_op_data1);
32121 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32122 				ZVAL_NULL(EX_VAR(opline->result.var));
32123 			}
32124 		} else {
32125 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
32126 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32127 				ZVAL_COPY(EX_VAR(opline->result.var), value);
32128 			}
32129 		}
32130 	} else {
32131 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
32132 			object_ptr = Z_REFVAL_P(object_ptr);
32133 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
32134 				goto try_assign_dim_array;
32135 			}
32136 		}
32137 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
32138 
32139 			zval *property_name = EX_CONSTANT(opline->op2);
32140 
32141 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
32142 
32143 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
32144 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
32145 				if (IS_CONST == IS_UNUSED) {
32146 					zend_throw_error(NULL, "[] operator not supported for strings");
32147 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
32148 
32149 					HANDLE_EXCEPTION();
32150 				} else {
32151 					zend_long offset;
32152 
32153 					dim = EX_CONSTANT(opline->op2);
32154 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
32155 
32156 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
32157 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
32158 					FREE_OP(free_op_data1);
32159 				}
32160 			} else {
32161 				zval_ptr_dtor_nogc(object_ptr);
32162 assign_dim_convert_to_array:
32163 				ZVAL_NEW_ARR(object_ptr);
32164 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
32165 				goto try_assign_dim_array;
32166 			}
32167 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
32168 			if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
32169 				goto assign_dim_clean;
32170 			}
32171 			goto assign_dim_convert_to_array;
32172 		} else {
32173 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
32174 assign_dim_clean:
32175 			dim = EX_CONSTANT(opline->op2);
32176 
32177 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
32178 			FREE_OP(free_op_data1);
32179 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32180 				ZVAL_NULL(EX_VAR(opline->result.var));
32181 			}
32182 		}
32183 	}
32184 
32185 	/* assign_dim has two opcodes! */
32186 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32187 }
32188 
32189 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32190 {
32191 	USE_OPLINE
32192 
32193 	zval *value;
32194 	zval *variable_ptr;
32195 
32196 	SAVE_OPLINE();
32197 	value = EX_CONSTANT(opline->op2);
32198 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
32199 
32200 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
32201 
32202 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32203 			ZVAL_NULL(EX_VAR(opline->result.var));
32204 		}
32205 	} else {
32206 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
32207 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32208 			ZVAL_COPY(EX_VAR(opline->result.var), value);
32209 		}
32210 
32211 		/* zend_assign_to_variable() always takes care of op2, never free it! */
32212 	}
32213 
32214 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32215 }
32216 
32217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32218 {
32219 	USE_OPLINE
32220 
32221 	zval *op1, *op2;
32222 	zend_string *op1_str, *op2_str, *str;
32223 
32224 	SAVE_OPLINE();
32225 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
32226 	if (IS_CV == IS_CONST) {
32227 		op1_str = Z_STR_P(op1);
32228 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
32229 		op1_str = zend_string_copy(Z_STR_P(op1));
32230 	} else {
32231 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
32232 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
32233 		}
32234 		op1_str = _zval_get_string_func(op1);
32235 	}
32236 	op2 = EX_CONSTANT(opline->op2);
32237 	if (IS_CONST == IS_CONST) {
32238 		op2_str = Z_STR_P(op2);
32239 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
32240 		op2_str = zend_string_copy(Z_STR_P(op2));
32241 	} else {
32242 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
32243 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
32244 		}
32245 		op2_str = _zval_get_string_func(op2);
32246 	}
32247 	do {
32248 		if (IS_CV != IS_CONST) {
32249 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
32250 				if (IS_CONST == IS_CONST) {
32251 					zend_string_addref(op2_str);
32252 				}
32253 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
32254 				zend_string_release(op1_str);
32255 				break;
32256 			}
32257 		}
32258 		if (IS_CONST != IS_CONST) {
32259 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
32260 				if (IS_CV == IS_CONST) {
32261 					zend_string_addref(op1_str);
32262 				}
32263 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
32264 				zend_string_release(op2_str);
32265 				break;
32266 			}
32267 		}
32268 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
32269 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
32270 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
32271 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
32272 		if (IS_CV != IS_CONST) {
32273 			zend_string_release(op1_str);
32274 		}
32275 		if (IS_CONST != IS_CONST) {
32276 			zend_string_release(op2_str);
32277 		}
32278 	} while (0);
32279 
32280 
32281 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32282 }
32283 
32284 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32285 {
32286 	USE_OPLINE
32287 	zval *function_name;
32288 
32289 	zval *object;
32290 	zend_function *fbc;
32291 	zend_class_entry *called_scope;
32292 	zend_object *obj;
32293 	zend_execute_data *call;
32294 	uint32_t call_info;
32295 
32296 	SAVE_OPLINE();
32297 
32298 	function_name = EX_CONSTANT(opline->op2);
32299 
32300 	if (IS_CONST != IS_CONST &&
32301 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32302 		do {
32303 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
32304 				function_name = Z_REFVAL_P(function_name);
32305 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32306 					break;
32307 				}
32308 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32309 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
32310 				if (UNEXPECTED(EG(exception) != NULL)) {
32311 					HANDLE_EXCEPTION();
32312 				}
32313 			}
32314 			zend_throw_error(NULL, "Method name must be a string");
32315 
32316 
32317 			HANDLE_EXCEPTION();
32318 		} while (0);
32319 	}
32320 
32321 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
32322 
32323 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
32324 		zend_throw_error(NULL, "Using $this when not in object context");
32325 
32326 		HANDLE_EXCEPTION();
32327 	}
32328 
32329 	if (IS_CV != IS_UNUSED) {
32330 		do {
32331 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32332 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
32333 					object = Z_REFVAL_P(object);
32334 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
32335 						break;
32336 					}
32337 				}
32338 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32339 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
32340 					if (UNEXPECTED(EG(exception) != NULL)) {
32341 
32342 						HANDLE_EXCEPTION();
32343 					}
32344 				}
32345 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
32346 
32347 
32348 				HANDLE_EXCEPTION();
32349 			}
32350 		} while (0);
32351 	}
32352 
32353 	obj = Z_OBJ_P(object);
32354 	called_scope = obj->ce;
32355 
32356 	if (IS_CONST != IS_CONST ||
32357 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
32358 	    zend_object *orig_obj = obj;
32359 
32360 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
32361 			zend_throw_error(NULL, "Object does not support method calls");
32362 
32363 
32364 			HANDLE_EXCEPTION();
32365 		}
32366 
32367 		/* First, locate the function. */
32368 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
32369 		if (UNEXPECTED(fbc == NULL)) {
32370 			if (EXPECTED(!EG(exception))) {
32371 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
32372 			}
32373 
32374 
32375 			HANDLE_EXCEPTION();
32376 		}
32377 		if (IS_CONST == IS_CONST &&
32378 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
32379 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
32380 		    EXPECTED(obj == orig_obj)) {
32381 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
32382 		}
32383 	}
32384 
32385 	call_info = ZEND_CALL_NESTED_FUNCTION;
32386 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
32387 		obj = NULL;
32388 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
32389 		/* CV may be changed indirectly (e.g. when it's a reference) */
32390 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
32391 		GC_REFCOUNT(obj)++; /* For $this pointer */
32392 	}
32393 
32394 
32395 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
32396 		HANDLE_EXCEPTION();
32397 	}
32398 
32399 	call = zend_vm_stack_push_call_frame(call_info,
32400 		fbc, opline->extended_value, called_scope, obj);
32401 	call->prev_execute_data = EX(call);
32402 	EX(call) = call;
32403 
32404 	ZEND_VM_NEXT_OPCODE();
32405 }
32406 
32407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32408 {
32409 	USE_OPLINE
32410 
32411 	zval *op1, *op2, *result;
32412 
32413 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
32414 	op2 = EX_CONSTANT(opline->op2);
32415 	do {
32416 		int result;
32417 
32418 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
32419 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
32420 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
32421 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
32422 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
32423 			} else {
32424 				break;
32425 			}
32426 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
32427 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
32428 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
32429 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
32430 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
32431 			} else {
32432 				break;
32433 			}
32434 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
32435 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
32436 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
32437 					result = 1;
32438 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
32439 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
32440 						result = 0;
32441 					} else {
32442 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
32443 					}
32444 				} else {
32445 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
32446 				}
32447 
32448 			} else {
32449 				break;
32450 			}
32451 		} else {
32452 			break;
32453 		}
32454 		ZEND_VM_SMART_BRANCH(result, 0);
32455 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
32456 		ZEND_VM_NEXT_OPCODE();
32457 	} while (0);
32458 
32459 	SAVE_OPLINE();
32460 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
32461 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
32462 	} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
32463 		/* Don't keep lock on reference, lock the value instead */
32464 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
32465 			ZVAL_UNREF(op1);
32466 		} else {
32467 			Z_DELREF_P(op1);
32468 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
32469 		}
32470 	}
32471 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
32472 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
32473 	}
32474 	result = EX_VAR(opline->result.var);
32475 	compare_function(result, op1, op2);
32476 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
32477 
32478 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32479 }
32480 
32481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32482 {
32483 	USE_OPLINE
32484 
32485 	zval *expr_ptr, new_expr;
32486 
32487 	SAVE_OPLINE();
32488 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
32489 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
32490 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
32491 		if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
32492 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
32493 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
32494 			HANDLE_EXCEPTION();
32495 		}
32496 		ZVAL_MAKE_REF(expr_ptr);
32497 		Z_ADDREF_P(expr_ptr);
32498 
32499 	} else {
32500 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
32501 		if (IS_CV == IS_TMP_VAR) {
32502 			/* pass */
32503 		} else if (IS_CV == IS_CONST) {
32504 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
32505 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
32506 				zval_copy_ctor_func(&new_expr);
32507 				expr_ptr = &new_expr;
32508 			}
32509 		} else if (IS_CV == IS_CV) {
32510 			ZVAL_DEREF(expr_ptr);
32511 			if (Z_REFCOUNTED_P(expr_ptr)) {
32512 				Z_ADDREF_P(expr_ptr);
32513 			}
32514 		} else /* if (IS_CV == IS_VAR) */ {
32515 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
32516 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
32517 
32518 				expr_ptr = Z_REFVAL_P(expr_ptr);
32519 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
32520 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
32521 					expr_ptr = &new_expr;
32522 					efree_size(ref, sizeof(zend_reference));
32523 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
32524 					Z_ADDREF_P(expr_ptr);
32525 				}
32526 			}
32527 		}
32528 	}
32529 
32530 	if (IS_CONST != IS_UNUSED) {
32531 
32532 		zval *offset = EX_CONSTANT(opline->op2);
32533 		zend_string *str;
32534 		zend_ulong hval;
32535 
32536 add_again:
32537 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32538 			str = Z_STR_P(offset);
32539 			if (IS_CONST != IS_CONST) {
32540 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
32541 					goto num_index;
32542 				}
32543 			}
32544 str_index:
32545 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
32546 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32547 			hval = Z_LVAL_P(offset);
32548 num_index:
32549 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
32550 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32551 			offset = Z_REFVAL_P(offset);
32552 			goto add_again;
32553 		} else if (Z_TYPE_P(offset) == IS_NULL) {
32554 			str = ZSTR_EMPTY_ALLOC();
32555 			goto str_index;
32556 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32557 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
32558 			goto num_index;
32559 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
32560 			hval = 0;
32561 			goto num_index;
32562 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
32563 			hval = 1;
32564 			goto num_index;
32565 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32566 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
32567 			str = ZSTR_EMPTY_ALLOC();
32568 			goto str_index;
32569 		} else {
32570 			zend_error(E_WARNING, "Illegal offset type");
32571 			zval_ptr_dtor(expr_ptr);
32572 		}
32573 
32574 	} else {
32575 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
32576 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
32577 			zval_ptr_dtor(expr_ptr);
32578 		}
32579 	}
32580 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32581 }
32582 
32583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32584 {
32585 	zval *array;
32586 	uint32_t size;
32587 	USE_OPLINE
32588 
32589 	array = EX_VAR(opline->result.var);
32590 	if (IS_CV != IS_UNUSED) {
32591 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
32592 	} else {
32593 		size = 0;
32594 	}
32595 	ZVAL_NEW_ARR(array);
32596 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
32597 
32598 	if (IS_CV != IS_UNUSED) {
32599 		/* Explicitly initialize array as not-packed if flag is set */
32600 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
32601 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
32602 		}
32603 	}
32604 
32605 	if (IS_CV == IS_UNUSED) {
32606 		ZEND_VM_NEXT_OPCODE();
32607 #if 0 || (IS_CV != IS_UNUSED)
32608 	} else {
32609 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32610 #endif
32611 	}
32612 }
32613 
32614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32615 {
32616 	USE_OPLINE
32617 	zval tmp, *varname;
32618 	HashTable *target_symbol_table;
32619 
32620 
32621 	SAVE_OPLINE();
32622 	if (IS_CV == IS_CV &&
32623 	    IS_CONST == IS_UNUSED &&
32624 	    (opline->extended_value & ZEND_QUICK_SET)) {
32625 		zval *var = EX_VAR(opline->op1.var);
32626 
32627 		if (Z_REFCOUNTED_P(var)) {
32628 			zend_refcounted *garbage = Z_COUNTED_P(var);
32629 
32630 			if (!--GC_REFCOUNT(garbage)) {
32631 				ZVAL_UNDEF(var);
32632 				zval_dtor_func_for_ptr(garbage);
32633 			} else {
32634 				zval *z = var;
32635 				ZVAL_DEREF(z);
32636 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
32637 					ZVAL_UNDEF(var);
32638 					gc_possible_root(Z_COUNTED_P(z));
32639 				} else {
32640 					ZVAL_UNDEF(var);
32641 				}
32642 			}
32643 		} else {
32644 			ZVAL_UNDEF(var);
32645 		}
32646 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32647 	}
32648 
32649 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
32650 
32651 	ZVAL_UNDEF(&tmp);
32652 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
32653 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
32654 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
32655 		}
32656 		ZVAL_STR(&tmp, zval_get_string(varname));
32657 		varname = &tmp;
32658 	}
32659 
32660 	if (IS_CONST != IS_UNUSED) {
32661 		zend_class_entry *ce;
32662 
32663 		if (IS_CONST == IS_CONST) {
32664 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
32665 			if (UNEXPECTED(ce == NULL)) {
32666 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
32667 				if (UNEXPECTED(ce == NULL)) {
32668 					if (EXPECTED(!EG(exception))) {
32669 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
32670 					}
32671 					if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
32672 						zend_string_release(Z_STR(tmp));
32673 					}
32674 
32675 					HANDLE_EXCEPTION();
32676 				}
32677 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
32678 			}
32679 		} else {
32680 			ce = Z_CE_P(EX_VAR(opline->op2.var));
32681 		}
32682 		zend_std_unset_static_property(ce, Z_STR_P(varname));
32683 	} else {
32684 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
32685 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
32686 	}
32687 
32688 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
32689 		zend_string_release(Z_STR(tmp));
32690 	}
32691 
32692 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32693 }
32694 
32695 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32696 {
32697 	USE_OPLINE
32698 
32699 	zval *container;
32700 	zval *offset;
32701 	zend_ulong hval;
32702 	zend_string *key;
32703 
32704 	SAVE_OPLINE();
32705 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
32706 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
32707 		zend_throw_error(NULL, "Using $this when not in object context");
32708 
32709 		HANDLE_EXCEPTION();
32710 	}
32711 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
32712 		zend_throw_error(NULL, "Cannot unset string offsets");
32713 
32714 		HANDLE_EXCEPTION();
32715 	}
32716 	offset = EX_CONSTANT(opline->op2);
32717 
32718 	do {
32719 		if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32720 			HashTable *ht;
32721 
32722 unset_dim_array:
32723 			SEPARATE_ARRAY(container);
32724 			ht = Z_ARRVAL_P(container);
32725 offset_again:
32726 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32727 				key = Z_STR_P(offset);
32728 				if (IS_CONST != IS_CONST) {
32729 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
32730 						goto num_index_dim;
32731 					}
32732 				}
32733 str_index_dim:
32734 				if (ht == &EG(symbol_table)) {
32735 					zend_delete_global_variable(key);
32736 				} else {
32737 					zend_hash_del(ht, key);
32738 				}
32739 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32740 				hval = Z_LVAL_P(offset);
32741 num_index_dim:
32742 				zend_hash_index_del(ht, hval);
32743 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32744 				offset = Z_REFVAL_P(offset);
32745 				goto offset_again;
32746 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32747 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
32748 				goto num_index_dim;
32749 			} else if (Z_TYPE_P(offset) == IS_NULL) {
32750 				key = ZSTR_EMPTY_ALLOC();
32751 				goto str_index_dim;
32752 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
32753 				hval = 0;
32754 				goto num_index_dim;
32755 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
32756 				hval = 1;
32757 				goto num_index_dim;
32758 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32759 				hval = Z_RES_HANDLE_P(offset);
32760 				goto num_index_dim;
32761 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32762 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
32763 				key = ZSTR_EMPTY_ALLOC();
32764 				goto str_index_dim;
32765 			} else {
32766 				zend_error(E_WARNING, "Illegal offset type in unset");
32767 			}
32768 			break;
32769 		} else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
32770 			container = Z_REFVAL_P(container);
32771 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32772 				goto unset_dim_array;
32773 			}
32774 		}
32775 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
32776 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
32777 		}
32778 		if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32779 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
32780 				zend_throw_error(NULL, "Cannot use object as array");
32781 			} else {
32782 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
32783 			}
32784 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
32785 			zend_throw_error(NULL, "Cannot unset string offsets");
32786 		}
32787 	} while (0);
32788 
32789 
32790 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32791 }
32792 
32793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32794 {
32795 	USE_OPLINE
32796 
32797 	zval *container;
32798 	zval *offset;
32799 
32800 	SAVE_OPLINE();
32801 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
32802 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
32803 		zend_throw_error(NULL, "Using $this when not in object context");
32804 
32805 		HANDLE_EXCEPTION();
32806 	}
32807 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
32808 		zend_throw_error(NULL, "Cannot unset string offsets");
32809 
32810 		HANDLE_EXCEPTION();
32811 	}
32812 	offset = EX_CONSTANT(opline->op2);
32813 
32814 	do {
32815 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32816 			if (Z_ISREF_P(container)) {
32817 				container = Z_REFVAL_P(container);
32818 				if (Z_TYPE_P(container) != IS_OBJECT) {
32819 					break;
32820 				}
32821 			} else {
32822 				break;
32823 			}
32824 		}
32825 		if (Z_OBJ_HT_P(container)->unset_property) {
32826 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
32827 		} else {
32828 			zend_error(E_NOTICE, "Trying to unset property of non-object");
32829 		}
32830 	} while (0);
32831 
32832 
32833 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32834 }
32835 
32836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32837 {
32838 	USE_OPLINE
32839 	zval *value;
32840 	int result;
32841 
32842 	if (IS_CV == IS_CV &&
32843 	    IS_CONST == IS_UNUSED &&
32844 	    (opline->extended_value & ZEND_QUICK_SET)) {
32845 		value = EX_VAR(opline->op1.var);
32846 		if (opline->extended_value & ZEND_ISSET) {
32847 			result =
32848 				Z_TYPE_P(value) > IS_NULL &&
32849 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
32850 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
32851 			SAVE_OPLINE();
32852 			result = !i_zend_is_true(value);
32853 			if (UNEXPECTED(EG(exception))) {
32854 				HANDLE_EXCEPTION();
32855 			}
32856 		}
32857 		ZEND_VM_SMART_BRANCH(result, 0);
32858 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
32859 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
32860 		ZEND_VM_CONTINUE();
32861 	} else {
32862 
32863 		zval tmp, *varname;
32864 
32865 		SAVE_OPLINE();
32866 		varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
32867 		ZVAL_UNDEF(&tmp);
32868 		if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
32869 			ZVAL_STR(&tmp, zval_get_string(varname));
32870 			varname = &tmp;
32871 		}
32872 
32873 		if (IS_CONST != IS_UNUSED) {
32874 			zend_class_entry *ce;
32875 
32876 			if (IS_CONST == IS_CONST) {
32877 				if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
32878 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
32879 
32880 					/* check if static properties were destoyed */
32881 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
32882 						value = NULL;
32883 					}
32884 
32885 					goto is_var_return;
32886 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
32887 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
32888 					if (UNEXPECTED(ce == NULL)) {
32889 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32890 					}
32891 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
32892 				}
32893 			} else {
32894 				ce = Z_CE_P(EX_VAR(opline->op2.var));
32895 				if (IS_CV == IS_CONST &&
32896 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
32897 
32898 					/* check if static properties were destoyed */
32899 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
32900 						value = NULL;
32901 					}
32902 
32903 					goto is_var_return;
32904 				}
32905 			}
32906 
32907 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
32908 
32909 			if (IS_CV == IS_CONST && value) {
32910 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
32911 			}
32912 		} else {
32913 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
32914 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
32915 		}
32916 
32917 		if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
32918 			zend_string_release(Z_STR(tmp));
32919 		}
32920 
32921 is_var_return:
32922 		if (opline->extended_value & ZEND_ISSET) {
32923 			result = value && Z_TYPE_P(value) > IS_NULL &&
32924 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
32925 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
32926 			result = !value || !i_zend_is_true(value);
32927 		}
32928 
32929 		ZEND_VM_SMART_BRANCH(result, 1);
32930 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
32931 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32932 	}
32933 }
32934 
32935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32936 {
32937 	USE_OPLINE
32938 
32939 	zval *container;
32940 	int result;
32941 	zend_ulong hval;
32942 	zval *offset;
32943 
32944 	SAVE_OPLINE();
32945 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
32946 
32947 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
32948 		zend_throw_error(NULL, "Using $this when not in object context");
32949 
32950 		HANDLE_EXCEPTION();
32951 	}
32952 
32953 	offset = EX_CONSTANT(opline->op2);
32954 
32955 	if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32956 		HashTable *ht;
32957 		zval *value;
32958 		zend_string *str;
32959 
32960 isset_dim_obj_array:
32961 		ht = Z_ARRVAL_P(container);
32962 isset_again:
32963 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32964 			str = Z_STR_P(offset);
32965 			if (IS_CONST != IS_CONST) {
32966 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
32967 					goto num_index_prop;
32968 				}
32969 			}
32970 str_index_prop:
32971 			value = zend_hash_find_ind(ht, str);
32972 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32973 			hval = Z_LVAL_P(offset);
32974 num_index_prop:
32975 			value = zend_hash_index_find(ht, hval);
32976 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
32977 			offset = Z_REFVAL_P(offset);
32978 			goto isset_again;
32979 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32980 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
32981 			goto num_index_prop;
32982 		} else if (Z_TYPE_P(offset) == IS_NULL) {
32983 			str = ZSTR_EMPTY_ALLOC();
32984 			goto str_index_prop;
32985 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
32986 			hval = 0;
32987 			goto num_index_prop;
32988 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
32989 			hval = 1;
32990 			goto num_index_prop;
32991 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32992 			hval = Z_RES_HANDLE_P(offset);
32993 			goto num_index_prop;
32994 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32995 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
32996 			str = ZSTR_EMPTY_ALLOC();
32997 			goto str_index_prop;
32998 		} else {
32999 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
33000 			goto isset_not_found;
33001 		}
33002 
33003 		if (opline->extended_value & ZEND_ISSET) {
33004 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
33005 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
33006 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
33007 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
33008 			result = (value == NULL || !i_zend_is_true(value));
33009 		}
33010 		goto isset_dim_obj_exit;
33011 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33012 		container = Z_REFVAL_P(container);
33013 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
33014 			goto isset_dim_obj_array;
33015 		}
33016 	}
33017 
33018 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
33019 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
33020 	}
33021 
33022 	if (IS_CV == IS_UNUSED ||
33023 	    (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
33024 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
33025 			result =
33026 				((opline->extended_value & ZEND_ISSET) == 0) ^
33027 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
33028 		} else {
33029 			zend_error(E_NOTICE, "Trying to check element of non-array");
33030 			goto isset_not_found;
33031 		}
33032 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
33033 		zend_long lval;
33034 
33035 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
33036 			lval = Z_LVAL_P(offset);
33037 isset_str_offset:
33038 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
33039 				if (opline->extended_value & ZEND_ISSET) {
33040 					result = 1;
33041 				} else {
33042 					result = (Z_STRVAL_P(container)[lval] == '0');
33043 				}
33044 			} else {
33045 				goto isset_not_found;
33046 			}
33047 		} else {
33048 			if (IS_CONST & (IS_CV|IS_VAR)) {
33049 				ZVAL_DEREF(offset);
33050 			}
33051 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
33052 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
33053 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
33054 				lval = zval_get_long(offset);
33055 				goto isset_str_offset;
33056 			}
33057 			goto isset_not_found;
33058 		}
33059 	} else {
33060 isset_not_found:
33061 		result = ((opline->extended_value & ZEND_ISSET) == 0);
33062 	}
33063 
33064 isset_dim_obj_exit:
33065 
33066 
33067 	ZEND_VM_SMART_BRANCH(result, 1);
33068 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33069 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33070 }
33071 
33072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33073 {
33074 	USE_OPLINE
33075 
33076 	zval *container;
33077 	int result;
33078 	zval *offset;
33079 
33080 	SAVE_OPLINE();
33081 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
33082 
33083 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
33084 		zend_throw_error(NULL, "Using $this when not in object context");
33085 
33086 		HANDLE_EXCEPTION();
33087 	}
33088 
33089 	offset = EX_CONSTANT(opline->op2);
33090 
33091 	if (IS_CV == IS_CONST ||
33092 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33093 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33094 			container = Z_REFVAL_P(container);
33095 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33096 				goto isset_no_object;
33097 			}
33098 		} else {
33099 			goto isset_no_object;
33100 		}
33101 	}
33102 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
33103 		zend_error(E_NOTICE, "Trying to check property of non-object");
33104 isset_no_object:
33105 		result = ((opline->extended_value & ZEND_ISSET) == 0);
33106 	} else {
33107 		result =
33108 			((opline->extended_value & ZEND_ISSET) == 0) ^
33109 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
33110 	}
33111 
33112 
33113 	ZEND_VM_SMART_BRANCH(result, 1);
33114 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33115 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33116 }
33117 
33118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33119 {
33120 	USE_OPLINE
33121 
33122 	zval *expr;
33123 	zend_bool result;
33124 
33125 	SAVE_OPLINE();
33126 	expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
33127 
33128 try_instanceof:
33129 	if (Z_TYPE_P(expr) == IS_OBJECT) {
33130 		zend_class_entry *ce;
33131 
33132 		if (IS_CONST == IS_CONST) {
33133 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
33134 			if (UNEXPECTED(ce == NULL)) {
33135 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
33136 				if (UNEXPECTED(ce == NULL)) {
33137 					ZVAL_FALSE(EX_VAR(opline->result.var));
33138 
33139 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33140 				}
33141 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
33142 			}
33143 		} else {
33144 			ce = Z_CE_P(EX_VAR(opline->op2.var));
33145 		}
33146 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
33147 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
33148 		expr = Z_REFVAL_P(expr);
33149 		goto try_instanceof;
33150 	} else {
33151 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
33152 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
33153 		}
33154 		result = 0;
33155 	}
33156 
33157 	ZEND_VM_SMART_BRANCH(result, 1);
33158 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33159 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33160 }
33161 
33162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33163 {
33164 	USE_OPLINE
33165 
33166 	zend_generator *generator = zend_get_running_generator(execute_data);
33167 
33168 	SAVE_OPLINE();
33169 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33170 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
33171 
33172 
33173 		HANDLE_EXCEPTION();
33174 	}
33175 
33176 	/* Destroy the previously yielded value */
33177 	zval_ptr_dtor(&generator->value);
33178 
33179 	/* Destroy the previously yielded key */
33180 	zval_ptr_dtor(&generator->key);
33181 
33182 	/* Set the new yielded value */
33183 	if (IS_CV != IS_UNUSED) {
33184 
33185 
33186 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33187 			/* Constants and temporary variables aren't yieldable by reference,
33188 			 * but we still allow them with a notice. */
33189 			if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
33190 				zval *value;
33191 
33192 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33193 
33194 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
33195 				ZVAL_COPY_VALUE(&generator->value, value);
33196 				if (IS_CV == IS_CONST) {
33197 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
33198 						zval_copy_ctor_func(&generator->value);
33199 					}
33200 				}
33201 			} else {
33202 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
33203 
33204 				if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
33205 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
33206 
33207 					HANDLE_EXCEPTION();
33208 				}
33209 
33210 				/* If a function call result is yielded and the function did
33211 				 * not return by reference we throw a notice. */
33212 				if (IS_CV == IS_VAR &&
33213 				    (value_ptr == &EG(uninitialized_zval) ||
33214 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
33215 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
33216 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33217 				} else {
33218 					ZVAL_MAKE_REF(value_ptr);
33219 				}
33220 				ZVAL_COPY(&generator->value, value_ptr);
33221 
33222 			}
33223 		} else {
33224 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
33225 
33226 			/* Consts, temporary variables and references need copying */
33227 			if (IS_CV == IS_CONST) {
33228 				ZVAL_COPY_VALUE(&generator->value, value);
33229 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
33230 					zval_copy_ctor_func(&generator->value);
33231 				}
33232 			} else if (IS_CV == IS_TMP_VAR) {
33233 				ZVAL_COPY_VALUE(&generator->value, value);
33234             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
33235 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
33236 
33237 			} else {
33238 				ZVAL_COPY_VALUE(&generator->value, value);
33239 				if (IS_CV == IS_CV) {
33240 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
33241 				}
33242 			}
33243 		}
33244 	} else {
33245 		/* If no value was specified yield null */
33246 		ZVAL_NULL(&generator->value);
33247 	}
33248 
33249 	/* Set the new yielded key */
33250 	if (IS_CONST != IS_UNUSED) {
33251 
33252 		zval *key = EX_CONSTANT(opline->op2);
33253 
33254 		/* Consts, temporary variables and references need copying */
33255 		if (IS_CONST == IS_CONST) {
33256 			ZVAL_COPY_VALUE(&generator->key, key);
33257 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
33258 				zval_copy_ctor_func(&generator->key);
33259 			}
33260 		} else if (IS_CONST == IS_TMP_VAR) {
33261 			ZVAL_COPY_VALUE(&generator->key, key);
33262 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
33263 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
33264 
33265 		} else {
33266 			ZVAL_COPY_VALUE(&generator->key, key);
33267 			if (IS_CONST == IS_CV) {
33268 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
33269 			}
33270 		}
33271 
33272 		if (Z_TYPE(generator->key) == IS_LONG
33273 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
33274 		) {
33275 			generator->largest_used_integer_key = Z_LVAL(generator->key);
33276 		}
33277 	} else {
33278 		/* If no key was specified we use auto-increment keys */
33279 		generator->largest_used_integer_key++;
33280 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
33281 	}
33282 
33283 	if (RETURN_VALUE_USED(opline)) {
33284 		/* If the return value of yield is used set the send
33285 		 * target and initialize it to NULL */
33286 		generator->send_target = EX_VAR(opline->result.var);
33287 		ZVAL_NULL(generator->send_target);
33288 	} else {
33289 		generator->send_target = NULL;
33290 	}
33291 
33292 	/* We increment to the next op, so we are at the correct position when the
33293 	 * generator is resumed. */
33294 	ZEND_VM_INC_OPCODE();
33295 
33296 	/* The GOTO VM uses a local opline variable. We need to set the opline
33297 	 * variable in execute_data so we don't resume at an old position. */
33298 	SAVE_OPLINE();
33299 
33300 	ZEND_VM_RETURN();
33301 }
33302 
33303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33304 {
33305 	USE_OPLINE
33306 
33307 	zval *varname;
33308 	zval *value;
33309 	zval *variable_ptr;
33310 	uint32_t idx;
33311 
33312 	ZEND_VM_REPEATABLE_OPCODE
33313 
33314 	varname = EX_CONSTANT(opline->op2);
33315 
33316 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
33317 	idx = (uint32_t)(uintptr_t)CACHED_PTR(Z_CACHE_SLOT_P(varname)) - 1;
33318 	if (EXPECTED(idx < EG(symbol_table).nNumUsed)) {
33319 		Bucket *p = EG(symbol_table).arData + idx;
33320 
33321 		if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
33322 	        (EXPECTED(p->key == Z_STR_P(varname)) ||
33323 	         (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
33324 	          EXPECTED(p->key != NULL) &&
33325 	          EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(varname)) &&
33326 	          EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(varname), Z_STRLEN_P(varname)) == 0)))) {
33327 
33328 			value = &EG(symbol_table).arData[idx].val;
33329 			goto check_indirect;
33330 		}
33331 	}
33332 
33333 	value = zend_hash_find(&EG(symbol_table), Z_STR_P(varname));
33334 	if (UNEXPECTED(value == NULL)) {
33335 		value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
33336 		idx = ((char*)value - (char*)EG(symbol_table).arData) / sizeof(Bucket);
33337 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
33338 		CACHE_PTR(Z_CACHE_SLOT_P(varname), (void*)(uintptr_t)(idx + 1));
33339 	} else {
33340 		idx = ((char*)value - (char*)EG(symbol_table).arData) / sizeof(Bucket);
33341 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
33342 		CACHE_PTR(Z_CACHE_SLOT_P(varname), (void*)(uintptr_t)(idx + 1));
33343 check_indirect:
33344 		/* GLOBAL variable may be an INDIRECT pointer to CV */
33345 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
33346 			value = Z_INDIRECT_P(value);
33347 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
33348 				ZVAL_NULL(value);
33349 			}
33350 		}
33351 	}
33352 
33353 	do {
33354 		zend_reference *ref;
33355 
33356 		if (UNEXPECTED(!Z_ISREF_P(value))) {
33357 			ref = (zend_reference*)emalloc(sizeof(zend_reference));
33358 			GC_REFCOUNT(ref) = 2;
33359 			GC_TYPE_INFO(ref) = IS_REFERENCE;
33360 			ZVAL_COPY_VALUE(&ref->val, value);
33361 			Z_REF_P(value) = ref;
33362 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
33363 		} else {
33364 			ref = Z_REF_P(value);
33365 			GC_REFCOUNT(ref)++;
33366 		}
33367 
33368 		variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
33369 
33370 		if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
33371 			uint32_t refcnt = Z_DELREF_P(variable_ptr);
33372 
33373 			if (UNEXPECTED(variable_ptr == value)) {
33374 				break;
33375 			}
33376 			if (refcnt == 0) {
33377 				SAVE_OPLINE();
33378 				zval_dtor_func_for_ptr(Z_COUNTED_P(variable_ptr));
33379 				if (UNEXPECTED(EG(exception))) {
33380 					ZVAL_NULL(variable_ptr);
33381 					HANDLE_EXCEPTION();
33382 				}
33383 			} else {
33384 				GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
33385 			}
33386 		}
33387 		ZVAL_REF(variable_ptr, ref);
33388 	} while (0);
33389 
33390 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
33391 	ZEND_VM_NEXT_OPCODE();
33392 }
33393 
33394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33395 {
33396 	USE_OPLINE
33397 	zend_free_op free_op2;
33398 	zval *op1, *op2;
33399 	int result;
33400 
33401 	SAVE_OPLINE();
33402 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
33403 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
33404 	result = fast_is_identical_function(op1, op2);
33405 
33406 	zval_ptr_dtor_nogc(free_op2);
33407 	ZEND_VM_SMART_BRANCH(result, 1);
33408 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33409 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33410 }
33411 
33412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33413 {
33414 	USE_OPLINE
33415 	zend_free_op free_op2;
33416 	zval *op1, *op2;
33417 	int result;
33418 
33419 	SAVE_OPLINE();
33420 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
33421 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
33422 	result = fast_is_not_identical_function(op1, op2);
33423 
33424 	zval_ptr_dtor_nogc(free_op2);
33425 	ZEND_VM_SMART_BRANCH(result, 1);
33426 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33427 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33428 }
33429 
33430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33431 {
33432 	USE_OPLINE
33433 	zend_free_op free_op2;
33434 	zval *value;
33435 	zval *variable_ptr;
33436 
33437 	SAVE_OPLINE();
33438 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
33439 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
33440 
33441 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
33442 		zval_ptr_dtor_nogc(free_op2);
33443 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33444 			ZVAL_NULL(EX_VAR(opline->result.var));
33445 		}
33446 	} else {
33447 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
33448 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33449 			ZVAL_COPY(EX_VAR(opline->result.var), value);
33450 		}
33451 
33452 		/* zend_assign_to_variable() always takes care of op2, never free it! */
33453 	}
33454 
33455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33456 }
33457 
33458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33459 {
33460 	USE_OPLINE
33461 
33462 	zend_generator *generator = zend_get_running_generator(execute_data);
33463 
33464 	SAVE_OPLINE();
33465 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33466 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
33467 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33468 
33469 		HANDLE_EXCEPTION();
33470 	}
33471 
33472 	/* Destroy the previously yielded value */
33473 	zval_ptr_dtor(&generator->value);
33474 
33475 	/* Destroy the previously yielded key */
33476 	zval_ptr_dtor(&generator->key);
33477 
33478 	/* Set the new yielded value */
33479 	if (IS_CV != IS_UNUSED) {
33480 
33481 
33482 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33483 			/* Constants and temporary variables aren't yieldable by reference,
33484 			 * but we still allow them with a notice. */
33485 			if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
33486 				zval *value;
33487 
33488 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33489 
33490 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
33491 				ZVAL_COPY_VALUE(&generator->value, value);
33492 				if (IS_CV == IS_CONST) {
33493 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
33494 						zval_copy_ctor_func(&generator->value);
33495 					}
33496 				}
33497 			} else {
33498 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
33499 
33500 				if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
33501 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
33502 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33503 					HANDLE_EXCEPTION();
33504 				}
33505 
33506 				/* If a function call result is yielded and the function did
33507 				 * not return by reference we throw a notice. */
33508 				if (IS_CV == IS_VAR &&
33509 				    (value_ptr == &EG(uninitialized_zval) ||
33510 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
33511 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
33512 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33513 				} else {
33514 					ZVAL_MAKE_REF(value_ptr);
33515 				}
33516 				ZVAL_COPY(&generator->value, value_ptr);
33517 
33518 			}
33519 		} else {
33520 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
33521 
33522 			/* Consts, temporary variables and references need copying */
33523 			if (IS_CV == IS_CONST) {
33524 				ZVAL_COPY_VALUE(&generator->value, value);
33525 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
33526 					zval_copy_ctor_func(&generator->value);
33527 				}
33528 			} else if (IS_CV == IS_TMP_VAR) {
33529 				ZVAL_COPY_VALUE(&generator->value, value);
33530             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
33531 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
33532 
33533 			} else {
33534 				ZVAL_COPY_VALUE(&generator->value, value);
33535 				if (IS_CV == IS_CV) {
33536 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
33537 				}
33538 			}
33539 		}
33540 	} else {
33541 		/* If no value was specified yield null */
33542 		ZVAL_NULL(&generator->value);
33543 	}
33544 
33545 	/* Set the new yielded key */
33546 	if (IS_TMP_VAR != IS_UNUSED) {
33547 		zend_free_op free_op2;
33548 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
33549 
33550 		/* Consts, temporary variables and references need copying */
33551 		if (IS_TMP_VAR == IS_CONST) {
33552 			ZVAL_COPY_VALUE(&generator->key, key);
33553 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
33554 				zval_copy_ctor_func(&generator->key);
33555 			}
33556 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
33557 			ZVAL_COPY_VALUE(&generator->key, key);
33558 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
33559 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
33560 
33561 		} else {
33562 			ZVAL_COPY_VALUE(&generator->key, key);
33563 			if (IS_TMP_VAR == IS_CV) {
33564 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
33565 			}
33566 		}
33567 
33568 		if (Z_TYPE(generator->key) == IS_LONG
33569 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
33570 		) {
33571 			generator->largest_used_integer_key = Z_LVAL(generator->key);
33572 		}
33573 	} else {
33574 		/* If no key was specified we use auto-increment keys */
33575 		generator->largest_used_integer_key++;
33576 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
33577 	}
33578 
33579 	if (RETURN_VALUE_USED(opline)) {
33580 		/* If the return value of yield is used set the send
33581 		 * target and initialize it to NULL */
33582 		generator->send_target = EX_VAR(opline->result.var);
33583 		ZVAL_NULL(generator->send_target);
33584 	} else {
33585 		generator->send_target = NULL;
33586 	}
33587 
33588 	/* We increment to the next op, so we are at the correct position when the
33589 	 * generator is resumed. */
33590 	ZEND_VM_INC_OPCODE();
33591 
33592 	/* The GOTO VM uses a local opline variable. We need to set the opline
33593 	 * variable in execute_data so we don't resume at an old position. */
33594 	SAVE_OPLINE();
33595 
33596 	ZEND_VM_RETURN();
33597 }
33598 
33599 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33600 {
33601 	USE_OPLINE
33602 	zend_free_op free_op2;
33603 	zval *op1, *op2;
33604 	int result;
33605 
33606 	SAVE_OPLINE();
33607 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
33608 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
33609 	result = fast_is_identical_function(op1, op2);
33610 
33611 	zval_ptr_dtor_nogc(free_op2);
33612 	ZEND_VM_SMART_BRANCH(result, 1);
33613 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33614 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33615 }
33616 
33617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33618 {
33619 	USE_OPLINE
33620 	zend_free_op free_op2;
33621 	zval *op1, *op2;
33622 	int result;
33623 
33624 	SAVE_OPLINE();
33625 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
33626 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
33627 	result = fast_is_not_identical_function(op1, op2);
33628 
33629 	zval_ptr_dtor_nogc(free_op2);
33630 	ZEND_VM_SMART_BRANCH(result, 1);
33631 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33632 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33633 }
33634 
33635 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
33636 {
33637 	USE_OPLINE
33638 
33639 	zval *varname;
33640 	zval *retval;
33641 	zend_string *name;
33642 	HashTable *target_symbol_table;
33643 
33644 	SAVE_OPLINE();
33645 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
33646 
33647  	if (IS_CV == IS_CONST) {
33648 		name = Z_STR_P(varname);
33649 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
33650 		name = Z_STR_P(varname);
33651 		zend_string_addref(name);
33652 	} else {
33653 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
33654 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
33655 		}
33656 		name = zval_get_string(varname);
33657 	}
33658 
33659 	if (IS_VAR != IS_UNUSED) {
33660 		zend_class_entry *ce;
33661 
33662 		if (IS_VAR == IS_CONST) {
33663 			if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
33664 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
33665 
33666 				/* check if static properties were destoyed */
33667 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
33668 					if (type == BP_VAR_IS) {
33669 						retval = &EG(uninitialized_zval);
33670 					} else {
33671 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
33672 
33673 						HANDLE_EXCEPTION();
33674 					}
33675 				}
33676 
33677 				goto fetch_var_return;
33678 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
33679 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
33680 				if (UNEXPECTED(ce == NULL)) {
33681 					if (IS_CV != IS_CONST) {
33682 						zend_string_release(name);
33683 					}
33684 
33685 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33686 				}
33687 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
33688 			}
33689 		} else {
33690 			ce = Z_CE_P(EX_VAR(opline->op2.var));
33691 			if (IS_CV == IS_CONST &&
33692 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
33693 
33694 				/* check if static properties were destoyed */
33695 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
33696 					if (type == BP_VAR_IS) {
33697 						retval = &EG(uninitialized_zval);
33698 					} else {
33699 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
33700 
33701 						HANDLE_EXCEPTION();
33702 					}
33703 				}
33704 
33705 				goto fetch_var_return;
33706 			}
33707 		}
33708 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
33709 		if (UNEXPECTED(EG(exception))) {
33710 			if (IS_CV != IS_CONST) {
33711 				zend_string_release(name);
33712 			}
33713 
33714 			HANDLE_EXCEPTION();
33715 		}
33716 		if (EXPECTED(retval)) {
33717 			if (IS_CV == IS_CONST) {
33718 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
33719 			}
33720 		} else {
33721 			retval = &EG(uninitialized_zval);
33722 		}
33723 
33724 	} else {
33725 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
33726 		retval = zend_hash_find(target_symbol_table, name);
33727 		if (retval == NULL) {
33728 			switch (type) {
33729 				case BP_VAR_R:
33730 				case BP_VAR_UNSET:
33731 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
33732 					/* break missing intentionally */
33733 				case BP_VAR_IS:
33734 					retval = &EG(uninitialized_zval);
33735 					break;
33736 				case BP_VAR_RW:
33737 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
33738 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
33739 					break;
33740 				case BP_VAR_W:
33741 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
33742 					break;
33743 				EMPTY_SWITCH_DEFAULT_CASE()
33744 			}
33745 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
33746 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
33747 			retval = Z_INDIRECT_P(retval);
33748 			if (Z_TYPE_P(retval) == IS_UNDEF) {
33749 				switch (type) {
33750 					case BP_VAR_R:
33751 					case BP_VAR_UNSET:
33752 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
33753 						/* break missing intentionally */
33754 					case BP_VAR_IS:
33755 						retval = &EG(uninitialized_zval);
33756 						break;
33757 					case BP_VAR_RW:
33758 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
33759 						/* break missing intentionally */
33760 					case BP_VAR_W:
33761 						ZVAL_NULL(retval);
33762 						break;
33763 					EMPTY_SWITCH_DEFAULT_CASE()
33764 				}
33765 			}
33766 		}
33767 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
33768 			if (Z_CONSTANT_P(retval)) {
33769 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
33770 
33771 					HANDLE_EXCEPTION();
33772 				}
33773 			}
33774 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
33775 
33776 		}
33777 	}
33778 
33779 	if (IS_CV != IS_CONST) {
33780 		zend_string_release(name);
33781 	}
33782 
33783 fetch_var_return:
33784 	ZEND_ASSERT(retval != NULL);
33785 	if (type == BP_VAR_R || type == BP_VAR_IS) {
33786 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
33787 			ZVAL_UNREF(retval);
33788 		}
33789 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
33790 	} else {
33791 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
33792 	}
33793 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33794 }
33795 
33796 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33797 {
33798 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33799 }
33800 
33801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33802 {
33803 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33804 }
33805 
33806 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33807 {
33808 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33809 }
33810 
33811 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33812 {
33813 	USE_OPLINE
33814 
33815 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
33816 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33817 	} else {
33818 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33819 	}
33820 }
33821 
33822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33823 {
33824 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33825 }
33826 
33827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33828 {
33829 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33830 }
33831 
33832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33833 {
33834 	USE_OPLINE
33835 	zend_free_op free_op2;
33836 	zval *value;
33837 	zval *variable_ptr;
33838 
33839 	SAVE_OPLINE();
33840 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33841 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
33842 
33843 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
33844 		zval_ptr_dtor_nogc(free_op2);
33845 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33846 			ZVAL_NULL(EX_VAR(opline->result.var));
33847 		}
33848 	} else {
33849 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
33850 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33851 			ZVAL_COPY(EX_VAR(opline->result.var), value);
33852 		}
33853 
33854 		/* zend_assign_to_variable() always takes care of op2, never free it! */
33855 	}
33856 
33857 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33858 }
33859 
33860 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33861 {
33862 	USE_OPLINE
33863 	zend_free_op free_op2;
33864 	zval *variable_ptr;
33865 	zval *value_ptr;
33866 
33867 	SAVE_OPLINE();
33868 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
33869 
33870 	if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
33871 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
33872 
33873 		HANDLE_EXCEPTION();
33874 	}
33875 	if (IS_CV == IS_VAR &&
33876 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
33877 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
33878 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
33879 
33880 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
33881 		HANDLE_EXCEPTION();
33882 	}
33883 	if (IS_VAR == IS_VAR &&
33884 	    (value_ptr == &EG(uninitialized_zval) ||
33885 	     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
33886 	      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
33887 		if (!(free_op2 != NULL) && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
33888 			Z_TRY_ADDREF_P(value_ptr);
33889 		}
33890 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
33891 		if (UNEXPECTED(EG(exception) != NULL)) {
33892 			if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
33893 			HANDLE_EXCEPTION();
33894 		}
33895 		ZEND_VM_TAIL_CALL(ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33896 	}
33897 
33898 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
33899 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
33900 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
33901 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
33902 		HANDLE_EXCEPTION();
33903 	}
33904 	if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
33905 	    (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
33906 		variable_ptr = &EG(uninitialized_zval);
33907 	} else {
33908 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
33909 	}
33910 
33911 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33912 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
33913 	}
33914 
33915 	if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
33916 
33917 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33918 }
33919 
33920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33921 {
33922 	USE_OPLINE
33923 	zval tmp, *varname;
33924 	HashTable *target_symbol_table;
33925 
33926 
33927 	SAVE_OPLINE();
33928 	if (IS_CV == IS_CV &&
33929 	    IS_VAR == IS_UNUSED &&
33930 	    (opline->extended_value & ZEND_QUICK_SET)) {
33931 		zval *var = EX_VAR(opline->op1.var);
33932 
33933 		if (Z_REFCOUNTED_P(var)) {
33934 			zend_refcounted *garbage = Z_COUNTED_P(var);
33935 
33936 			if (!--GC_REFCOUNT(garbage)) {
33937 				ZVAL_UNDEF(var);
33938 				zval_dtor_func_for_ptr(garbage);
33939 			} else {
33940 				zval *z = var;
33941 				ZVAL_DEREF(z);
33942 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
33943 					ZVAL_UNDEF(var);
33944 					gc_possible_root(Z_COUNTED_P(z));
33945 				} else {
33946 					ZVAL_UNDEF(var);
33947 				}
33948 			}
33949 		} else {
33950 			ZVAL_UNDEF(var);
33951 		}
33952 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33953 	}
33954 
33955 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
33956 
33957 	ZVAL_UNDEF(&tmp);
33958 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
33959 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
33960 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
33961 		}
33962 		ZVAL_STR(&tmp, zval_get_string(varname));
33963 		varname = &tmp;
33964 	}
33965 
33966 	if (IS_VAR != IS_UNUSED) {
33967 		zend_class_entry *ce;
33968 
33969 		if (IS_VAR == IS_CONST) {
33970 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
33971 			if (UNEXPECTED(ce == NULL)) {
33972 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
33973 				if (UNEXPECTED(ce == NULL)) {
33974 					if (EXPECTED(!EG(exception))) {
33975 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
33976 					}
33977 					if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
33978 						zend_string_release(Z_STR(tmp));
33979 					}
33980 
33981 					HANDLE_EXCEPTION();
33982 				}
33983 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
33984 			}
33985 		} else {
33986 			ce = Z_CE_P(EX_VAR(opline->op2.var));
33987 		}
33988 		zend_std_unset_static_property(ce, Z_STR_P(varname));
33989 	} else {
33990 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
33991 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
33992 	}
33993 
33994 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
33995 		zend_string_release(Z_STR(tmp));
33996 	}
33997 
33998 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33999 }
34000 
34001 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34002 {
34003 	USE_OPLINE
34004 	zval *value;
34005 	int result;
34006 
34007 	if (IS_CV == IS_CV &&
34008 	    IS_VAR == IS_UNUSED &&
34009 	    (opline->extended_value & ZEND_QUICK_SET)) {
34010 		value = EX_VAR(opline->op1.var);
34011 		if (opline->extended_value & ZEND_ISSET) {
34012 			result =
34013 				Z_TYPE_P(value) > IS_NULL &&
34014 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
34015 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
34016 			SAVE_OPLINE();
34017 			result = !i_zend_is_true(value);
34018 			if (UNEXPECTED(EG(exception))) {
34019 				HANDLE_EXCEPTION();
34020 			}
34021 		}
34022 		ZEND_VM_SMART_BRANCH(result, 0);
34023 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
34024 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
34025 		ZEND_VM_CONTINUE();
34026 	} else {
34027 
34028 		zval tmp, *varname;
34029 
34030 		SAVE_OPLINE();
34031 		varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
34032 		ZVAL_UNDEF(&tmp);
34033 		if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
34034 			ZVAL_STR(&tmp, zval_get_string(varname));
34035 			varname = &tmp;
34036 		}
34037 
34038 		if (IS_VAR != IS_UNUSED) {
34039 			zend_class_entry *ce;
34040 
34041 			if (IS_VAR == IS_CONST) {
34042 				if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
34043 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
34044 
34045 					/* check if static properties were destoyed */
34046 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34047 						value = NULL;
34048 					}
34049 
34050 					goto is_var_return;
34051 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
34052 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
34053 					if (UNEXPECTED(ce == NULL)) {
34054 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34055 					}
34056 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
34057 				}
34058 			} else {
34059 				ce = Z_CE_P(EX_VAR(opline->op2.var));
34060 				if (IS_CV == IS_CONST &&
34061 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
34062 
34063 					/* check if static properties were destoyed */
34064 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34065 						value = NULL;
34066 					}
34067 
34068 					goto is_var_return;
34069 				}
34070 			}
34071 
34072 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
34073 
34074 			if (IS_CV == IS_CONST && value) {
34075 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
34076 			}
34077 		} else {
34078 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
34079 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
34080 		}
34081 
34082 		if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
34083 			zend_string_release(Z_STR(tmp));
34084 		}
34085 
34086 is_var_return:
34087 		if (opline->extended_value & ZEND_ISSET) {
34088 			result = value && Z_TYPE_P(value) > IS_NULL &&
34089 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
34090 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
34091 			result = !value || !i_zend_is_true(value);
34092 		}
34093 
34094 		ZEND_VM_SMART_BRANCH(result, 1);
34095 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
34096 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34097 	}
34098 }
34099 
34100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34101 {
34102 	USE_OPLINE
34103 
34104 	zval *expr;
34105 	zend_bool result;
34106 
34107 	SAVE_OPLINE();
34108 	expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34109 
34110 try_instanceof:
34111 	if (Z_TYPE_P(expr) == IS_OBJECT) {
34112 		zend_class_entry *ce;
34113 
34114 		if (IS_VAR == IS_CONST) {
34115 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
34116 			if (UNEXPECTED(ce == NULL)) {
34117 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
34118 				if (UNEXPECTED(ce == NULL)) {
34119 					ZVAL_FALSE(EX_VAR(opline->result.var));
34120 
34121 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34122 				}
34123 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
34124 			}
34125 		} else {
34126 			ce = Z_CE_P(EX_VAR(opline->op2.var));
34127 		}
34128 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
34129 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
34130 		expr = Z_REFVAL_P(expr);
34131 		goto try_instanceof;
34132 	} else {
34133 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
34134 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
34135 		}
34136 		result = 0;
34137 	}
34138 
34139 	ZEND_VM_SMART_BRANCH(result, 1);
34140 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
34141 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34142 }
34143 
34144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34145 {
34146 	USE_OPLINE
34147 
34148 	zend_generator *generator = zend_get_running_generator(execute_data);
34149 
34150 	SAVE_OPLINE();
34151 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
34152 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
34153 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34154 
34155 		HANDLE_EXCEPTION();
34156 	}
34157 
34158 	/* Destroy the previously yielded value */
34159 	zval_ptr_dtor(&generator->value);
34160 
34161 	/* Destroy the previously yielded key */
34162 	zval_ptr_dtor(&generator->key);
34163 
34164 	/* Set the new yielded value */
34165 	if (IS_CV != IS_UNUSED) {
34166 
34167 
34168 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
34169 			/* Constants and temporary variables aren't yieldable by reference,
34170 			 * but we still allow them with a notice. */
34171 			if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
34172 				zval *value;
34173 
34174 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34175 
34176 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
34177 				ZVAL_COPY_VALUE(&generator->value, value);
34178 				if (IS_CV == IS_CONST) {
34179 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
34180 						zval_copy_ctor_func(&generator->value);
34181 					}
34182 				}
34183 			} else {
34184 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
34185 
34186 				if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
34187 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
34188 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34189 					HANDLE_EXCEPTION();
34190 				}
34191 
34192 				/* If a function call result is yielded and the function did
34193 				 * not return by reference we throw a notice. */
34194 				if (IS_CV == IS_VAR &&
34195 				    (value_ptr == &EG(uninitialized_zval) ||
34196 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
34197 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
34198 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34199 				} else {
34200 					ZVAL_MAKE_REF(value_ptr);
34201 				}
34202 				ZVAL_COPY(&generator->value, value_ptr);
34203 
34204 			}
34205 		} else {
34206 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
34207 
34208 			/* Consts, temporary variables and references need copying */
34209 			if (IS_CV == IS_CONST) {
34210 				ZVAL_COPY_VALUE(&generator->value, value);
34211 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
34212 					zval_copy_ctor_func(&generator->value);
34213 				}
34214 			} else if (IS_CV == IS_TMP_VAR) {
34215 				ZVAL_COPY_VALUE(&generator->value, value);
34216             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34217 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34218 
34219 			} else {
34220 				ZVAL_COPY_VALUE(&generator->value, value);
34221 				if (IS_CV == IS_CV) {
34222 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34223 				}
34224 			}
34225 		}
34226 	} else {
34227 		/* If no value was specified yield null */
34228 		ZVAL_NULL(&generator->value);
34229 	}
34230 
34231 	/* Set the new yielded key */
34232 	if (IS_VAR != IS_UNUSED) {
34233 		zend_free_op free_op2;
34234 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34235 
34236 		/* Consts, temporary variables and references need copying */
34237 		if (IS_VAR == IS_CONST) {
34238 			ZVAL_COPY_VALUE(&generator->key, key);
34239 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
34240 				zval_copy_ctor_func(&generator->key);
34241 			}
34242 		} else if (IS_VAR == IS_TMP_VAR) {
34243 			ZVAL_COPY_VALUE(&generator->key, key);
34244 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
34245 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
34246 			zval_ptr_dtor_nogc(free_op2);
34247 		} else {
34248 			ZVAL_COPY_VALUE(&generator->key, key);
34249 			if (IS_VAR == IS_CV) {
34250 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
34251 			}
34252 		}
34253 
34254 		if (Z_TYPE(generator->key) == IS_LONG
34255 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
34256 		) {
34257 			generator->largest_used_integer_key = Z_LVAL(generator->key);
34258 		}
34259 	} else {
34260 		/* If no key was specified we use auto-increment keys */
34261 		generator->largest_used_integer_key++;
34262 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
34263 	}
34264 
34265 	if (RETURN_VALUE_USED(opline)) {
34266 		/* If the return value of yield is used set the send
34267 		 * target and initialize it to NULL */
34268 		generator->send_target = EX_VAR(opline->result.var);
34269 		ZVAL_NULL(generator->send_target);
34270 	} else {
34271 		generator->send_target = NULL;
34272 	}
34273 
34274 	/* We increment to the next op, so we are at the correct position when the
34275 	 * generator is resumed. */
34276 	ZEND_VM_INC_OPCODE();
34277 
34278 	/* The GOTO VM uses a local opline variable. We need to set the opline
34279 	 * variable in execute_data so we don't resume at an old position. */
34280 	SAVE_OPLINE();
34281 
34282 	ZEND_VM_RETURN();
34283 }
34284 
34285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
34286 {
34287 	USE_OPLINE
34288 	zend_free_op free_op_data1;
34289 	zval *var_ptr, rv;
34290 	zval *value, *container, *dim;
34291 
34292 	SAVE_OPLINE();
34293 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
34294 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
34295 		zend_throw_error(NULL, "Using $this when not in object context");
34296 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
34297 
34298 		HANDLE_EXCEPTION();
34299 	}
34300 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
34301 		zend_throw_error(NULL, "Cannot use string offset as an array");
34302 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
34303 
34304 		HANDLE_EXCEPTION();
34305 	}
34306 
34307 	dim = NULL;
34308 
34309 	do {
34310 		if (IS_CV == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
34311 			if (IS_CV != IS_UNUSED) {
34312 				ZVAL_DEREF(container);
34313 			}
34314 			if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
34315 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
34316 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
34317 				break;
34318 			}
34319 		}
34320 
34321 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_UNUSED);
34322 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
34323 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
34324 		var_ptr = Z_INDIRECT(rv);
34325 
34326 		if (UNEXPECTED(var_ptr == NULL)) {
34327 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
34328 
34329 			FREE_OP(free_op_data1);
34330 
34331 			HANDLE_EXCEPTION();
34332 		}
34333 
34334 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
34335 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34336 				ZVAL_NULL(EX_VAR(opline->result.var));
34337 			}
34338 		} else {
34339 			ZVAL_DEREF(var_ptr);
34340 			SEPARATE_ZVAL_NOREF(var_ptr);
34341 
34342 			binary_op(var_ptr, var_ptr, value);
34343 
34344 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34345 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
34346 			}
34347 		}
34348 	} while (0);
34349 
34350 	FREE_OP(free_op_data1);
34351 
34352 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34353 }
34354 
34355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34356 {
34357 #if 0 || (IS_UNUSED != IS_UNUSED)
34358 	USE_OPLINE
34359 
34360 # if 0 || (IS_CV != IS_UNUSED)
34361 	if (EXPECTED(opline->extended_value == 0)) {
34362 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34363 	}
34364 # endif
34365 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34366 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34367 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34368 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34369 	}
34370 #else
34371 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34372 #endif
34373 }
34374 
34375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34376 {
34377 #if 0 || (IS_UNUSED != IS_UNUSED)
34378 	USE_OPLINE
34379 
34380 # if 0 || (IS_CV != IS_UNUSED)
34381 	if (EXPECTED(opline->extended_value == 0)) {
34382 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34383 	}
34384 # endif
34385 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34386 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34387 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34388 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34389 	}
34390 #else
34391 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34392 #endif
34393 }
34394 
34395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34396 {
34397 #if 0 || (IS_UNUSED != IS_UNUSED)
34398 	USE_OPLINE
34399 
34400 # if 0 || (IS_CV != IS_UNUSED)
34401 	if (EXPECTED(opline->extended_value == 0)) {
34402 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34403 	}
34404 # endif
34405 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34406 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34407 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34408 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34409 	}
34410 #else
34411 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34412 #endif
34413 }
34414 
34415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34416 {
34417 #if 0 || (IS_UNUSED != IS_UNUSED)
34418 	USE_OPLINE
34419 
34420 # if 0 || (IS_CV != IS_UNUSED)
34421 	if (EXPECTED(opline->extended_value == 0)) {
34422 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34423 	}
34424 # endif
34425 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34426 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34427 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34428 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34429 	}
34430 #else
34431 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34432 #endif
34433 }
34434 
34435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34436 {
34437 #if 0 || (IS_UNUSED != IS_UNUSED)
34438 	USE_OPLINE
34439 
34440 # if 0 || (IS_CV != IS_UNUSED)
34441 	if (EXPECTED(opline->extended_value == 0)) {
34442 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34443 	}
34444 # endif
34445 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34446 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34447 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34448 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34449 	}
34450 #else
34451 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34452 #endif
34453 }
34454 
34455 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34456 {
34457 #if 0 || (IS_UNUSED != IS_UNUSED)
34458 	USE_OPLINE
34459 
34460 # if 0 || (IS_CV != IS_UNUSED)
34461 	if (EXPECTED(opline->extended_value == 0)) {
34462 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34463 	}
34464 # endif
34465 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34466 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34467 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34468 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34469 	}
34470 #else
34471 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34472 #endif
34473 }
34474 
34475 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34476 {
34477 #if 0 || (IS_UNUSED != IS_UNUSED)
34478 	USE_OPLINE
34479 
34480 # if 0 || (IS_CV != IS_UNUSED)
34481 	if (EXPECTED(opline->extended_value == 0)) {
34482 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34483 	}
34484 # endif
34485 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34486 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34487 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34488 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34489 	}
34490 #else
34491 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34492 #endif
34493 }
34494 
34495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34496 {
34497 #if 0 || (IS_UNUSED != IS_UNUSED)
34498 	USE_OPLINE
34499 
34500 # if 0 || (IS_CV != IS_UNUSED)
34501 	if (EXPECTED(opline->extended_value == 0)) {
34502 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34503 	}
34504 # endif
34505 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34506 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34507 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34508 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34509 	}
34510 #else
34511 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34512 #endif
34513 }
34514 
34515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34516 {
34517 #if 0 || (IS_UNUSED != IS_UNUSED)
34518 	USE_OPLINE
34519 
34520 # if 0 || (IS_CV != IS_UNUSED)
34521 	if (EXPECTED(opline->extended_value == 0)) {
34522 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34523 	}
34524 # endif
34525 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34526 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34527 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34528 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34529 	}
34530 #else
34531 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34532 #endif
34533 }
34534 
34535 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34536 {
34537 #if 0 || (IS_UNUSED != IS_UNUSED)
34538 	USE_OPLINE
34539 
34540 # if 0 || (IS_CV != IS_UNUSED)
34541 	if (EXPECTED(opline->extended_value == 0)) {
34542 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34543 	}
34544 # endif
34545 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34546 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34547 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34548 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34549 	}
34550 #else
34551 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34552 #endif
34553 }
34554 
34555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34556 {
34557 #if 0 || (IS_UNUSED != IS_UNUSED)
34558 	USE_OPLINE
34559 
34560 # if 0 || (IS_CV != IS_UNUSED)
34561 	if (EXPECTED(opline->extended_value == 0)) {
34562 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34563 	}
34564 # endif
34565 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34566 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34567 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34568 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34569 	}
34570 #else
34571 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34572 #endif
34573 }
34574 
34575 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34576 {
34577 #if 0 || (IS_UNUSED != IS_UNUSED)
34578 	USE_OPLINE
34579 
34580 # if 0 || (IS_CV != IS_UNUSED)
34581 	if (EXPECTED(opline->extended_value == 0)) {
34582 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34583 	}
34584 # endif
34585 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
34586 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34587 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
34588 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34589 	}
34590 #else
34591 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34592 #endif
34593 }
34594 
34595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
34596 {
34597 	USE_OPLINE
34598 
34599 	zval *varname;
34600 	zval *retval;
34601 	zend_string *name;
34602 	HashTable *target_symbol_table;
34603 
34604 	SAVE_OPLINE();
34605 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34606 
34607  	if (IS_CV == IS_CONST) {
34608 		name = Z_STR_P(varname);
34609 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
34610 		name = Z_STR_P(varname);
34611 		zend_string_addref(name);
34612 	} else {
34613 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
34614 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
34615 		}
34616 		name = zval_get_string(varname);
34617 	}
34618 
34619 	if (IS_UNUSED != IS_UNUSED) {
34620 		zend_class_entry *ce;
34621 
34622 		if (IS_UNUSED == IS_CONST) {
34623 			if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
34624 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
34625 
34626 				/* check if static properties were destoyed */
34627 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34628 					if (type == BP_VAR_IS) {
34629 						retval = &EG(uninitialized_zval);
34630 					} else {
34631 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
34632 
34633 						HANDLE_EXCEPTION();
34634 					}
34635 				}
34636 
34637 				goto fetch_var_return;
34638 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
34639 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
34640 				if (UNEXPECTED(ce == NULL)) {
34641 					if (IS_CV != IS_CONST) {
34642 						zend_string_release(name);
34643 					}
34644 
34645 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34646 				}
34647 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
34648 			}
34649 		} else {
34650 			ce = Z_CE_P(EX_VAR(opline->op2.var));
34651 			if (IS_CV == IS_CONST &&
34652 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
34653 
34654 				/* check if static properties were destoyed */
34655 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34656 					if (type == BP_VAR_IS) {
34657 						retval = &EG(uninitialized_zval);
34658 					} else {
34659 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
34660 
34661 						HANDLE_EXCEPTION();
34662 					}
34663 				}
34664 
34665 				goto fetch_var_return;
34666 			}
34667 		}
34668 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
34669 		if (UNEXPECTED(EG(exception))) {
34670 			if (IS_CV != IS_CONST) {
34671 				zend_string_release(name);
34672 			}
34673 
34674 			HANDLE_EXCEPTION();
34675 		}
34676 		if (EXPECTED(retval)) {
34677 			if (IS_CV == IS_CONST) {
34678 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
34679 			}
34680 		} else {
34681 			retval = &EG(uninitialized_zval);
34682 		}
34683 
34684 	} else {
34685 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
34686 		retval = zend_hash_find(target_symbol_table, name);
34687 		if (retval == NULL) {
34688 			switch (type) {
34689 				case BP_VAR_R:
34690 				case BP_VAR_UNSET:
34691 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
34692 					/* break missing intentionally */
34693 				case BP_VAR_IS:
34694 					retval = &EG(uninitialized_zval);
34695 					break;
34696 				case BP_VAR_RW:
34697 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
34698 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
34699 					break;
34700 				case BP_VAR_W:
34701 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
34702 					break;
34703 				EMPTY_SWITCH_DEFAULT_CASE()
34704 			}
34705 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
34706 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
34707 			retval = Z_INDIRECT_P(retval);
34708 			if (Z_TYPE_P(retval) == IS_UNDEF) {
34709 				switch (type) {
34710 					case BP_VAR_R:
34711 					case BP_VAR_UNSET:
34712 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
34713 						/* break missing intentionally */
34714 					case BP_VAR_IS:
34715 						retval = &EG(uninitialized_zval);
34716 						break;
34717 					case BP_VAR_RW:
34718 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
34719 						/* break missing intentionally */
34720 					case BP_VAR_W:
34721 						ZVAL_NULL(retval);
34722 						break;
34723 					EMPTY_SWITCH_DEFAULT_CASE()
34724 				}
34725 			}
34726 		}
34727 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
34728 			if (Z_CONSTANT_P(retval)) {
34729 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
34730 
34731 					HANDLE_EXCEPTION();
34732 				}
34733 			}
34734 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
34735 
34736 		}
34737 	}
34738 
34739 	if (IS_CV != IS_CONST) {
34740 		zend_string_release(name);
34741 	}
34742 
34743 fetch_var_return:
34744 	ZEND_ASSERT(retval != NULL);
34745 	if (type == BP_VAR_R || type == BP_VAR_IS) {
34746 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
34747 			ZVAL_UNREF(retval);
34748 		}
34749 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
34750 	} else {
34751 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
34752 	}
34753 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34754 }
34755 
34756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34757 {
34758 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34759 }
34760 
34761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34762 {
34763 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34764 }
34765 
34766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34767 {
34768 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34769 }
34770 
34771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34772 {
34773 	USE_OPLINE
34774 
34775 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
34776 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34777 	} else {
34778 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34779 	}
34780 }
34781 
34782 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34783 {
34784 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34785 }
34786 
34787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34788 {
34789 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
34790 }
34791 
34792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34793 {
34794 	USE_OPLINE
34795 	zend_free_op free_op1;
34796 	zval *container;
34797 
34798 	SAVE_OPLINE();
34799 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
34800 
34801 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
34802 		zend_throw_error(NULL, "Cannot use string offset as an array");
34803 		HANDLE_EXCEPTION();
34804 	}
34805 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
34806 
34807 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
34808 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
34809 	}
34810 
34811 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34812 }
34813 
34814 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34815 {
34816 	USE_OPLINE
34817 	zend_free_op free_op1;
34818 	zval *container;
34819 
34820 	SAVE_OPLINE();
34821 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
34822 
34823 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
34824 		zend_throw_error(NULL, "Cannot use string offset as an array");
34825 		HANDLE_EXCEPTION();
34826 	}
34827 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
34828 
34829 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
34830 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
34831 	}
34832 
34833 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34834 }
34835 
34836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34837 {
34838 	USE_OPLINE
34839 	zval *container;
34840 	zend_free_op free_op1;
34841 
34842 	SAVE_OPLINE();
34843 
34844 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
34845         if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
34846             zend_throw_error(NULL, "Cannot use temporary expression in write context");
34847 
34848 
34849 			HANDLE_EXCEPTION();
34850         }
34851 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
34852 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
34853 			zend_throw_error(NULL, "Cannot use string offset as an array");
34854 
34855 			HANDLE_EXCEPTION();
34856 		}
34857 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
34858 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
34859 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
34860 		}
34861 
34862 
34863 	} else {
34864 		if (IS_UNUSED == IS_UNUSED) {
34865 			zend_throw_error(NULL, "Cannot use [] for reading");
34866 
34867 
34868 			HANDLE_EXCEPTION();
34869 		}
34870 		container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
34871 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
34872 
34873 
34874 	}
34875 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34876 }
34877 
34878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34879 {
34880 	USE_OPLINE
34881 
34882 	zval *object_ptr;
34883 	zend_free_op free_op_data1;
34884 	zval *value;
34885 	zval *variable_ptr;
34886 	zval *dim;
34887 
34888 	SAVE_OPLINE();
34889 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
34890 
34891 	if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
34892 		zend_throw_error(NULL, "Cannot use string offset as an array");
34893 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
34894 
34895 		HANDLE_EXCEPTION();
34896 	}
34897 
34898 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
34899 try_assign_dim_array:
34900 		if (IS_UNUSED == IS_UNUSED) {
34901 			SEPARATE_ARRAY(object_ptr);
34902 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
34903 			if (UNEXPECTED(variable_ptr == NULL)) {
34904 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
34905 				variable_ptr = &EG(error_zval);
34906 			}
34907 		} else {
34908 			dim = NULL;
34909 			SEPARATE_ARRAY(object_ptr);
34910 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_UNUSED, BP_VAR_W);
34911 
34912 		}
34913 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
34914 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
34915 			FREE_OP(free_op_data1);
34916 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34917 				ZVAL_NULL(EX_VAR(opline->result.var));
34918 			}
34919 		} else {
34920 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
34921 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34922 				ZVAL_COPY(EX_VAR(opline->result.var), value);
34923 			}
34924 		}
34925 	} else {
34926 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
34927 			object_ptr = Z_REFVAL_P(object_ptr);
34928 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
34929 				goto try_assign_dim_array;
34930 			}
34931 		}
34932 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
34933 
34934 			zval *property_name = NULL;
34935 
34936 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
34937 
34938 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
34939 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
34940 				if (IS_UNUSED == IS_UNUSED) {
34941 					zend_throw_error(NULL, "[] operator not supported for strings");
34942 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
34943 
34944 					HANDLE_EXCEPTION();
34945 				} else {
34946 					zend_long offset;
34947 
34948 					dim = NULL;
34949 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
34950 
34951 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
34952 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
34953 					FREE_OP(free_op_data1);
34954 				}
34955 			} else {
34956 				zval_ptr_dtor_nogc(object_ptr);
34957 assign_dim_convert_to_array:
34958 				ZVAL_NEW_ARR(object_ptr);
34959 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
34960 				goto try_assign_dim_array;
34961 			}
34962 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
34963 			if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
34964 				goto assign_dim_clean;
34965 			}
34966 			goto assign_dim_convert_to_array;
34967 		} else {
34968 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
34969 assign_dim_clean:
34970 			dim = NULL;
34971 
34972 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
34973 			FREE_OP(free_op_data1);
34974 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34975 				ZVAL_NULL(EX_VAR(opline->result.var));
34976 			}
34977 		}
34978 	}
34979 
34980 	/* assign_dim has two opcodes! */
34981 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34982 }
34983 
34984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34985 {
34986 	USE_OPLINE
34987 
34988 	SAVE_OPLINE();
34989 	if (IS_CV == IS_UNUSED) {
34990 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
34991 	} else {
34992 /* prevents "undefined variable opline" errors */
34993 #if 0 || (IS_CV != IS_UNUSED)
34994 		zval *retval_ref, *retval_ptr;
34995 
34996 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
34997 
34998 		retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
34999 
35000 		if (IS_CV == IS_CONST) {
35001 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
35002 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
35003 		} else if (IS_CV == IS_VAR) {
35004 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
35005 				retval_ptr = Z_INDIRECT_P(retval_ptr);
35006 			}
35007 			ZVAL_DEREF(retval_ptr);
35008 		} else if (IS_CV == IS_CV) {
35009 			ZVAL_DEREF(retval_ptr);
35010 		}
35011 
35012 		if (UNEXPECTED(!ret_info->class_name
35013 			&& ret_info->type_hint != IS_CALLABLE
35014 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
35015 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
35016 			&& retval_ref != retval_ptr)
35017 		) {
35018 			/* A cast might happen - unwrap the reference if this is a by-value return */
35019 			if (Z_REFCOUNT_P(retval_ref) == 1) {
35020 				ZVAL_UNREF(retval_ref);
35021 			} else {
35022 				Z_DELREF_P(retval_ref);
35023 				ZVAL_COPY(retval_ref, retval_ptr);
35024 			}
35025 			retval_ptr = retval_ref;
35026 		}
35027 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
35028 
35029 		if (UNEXPECTED(EG(exception) != NULL)) {
35030 			if (IS_CV == IS_CONST) {
35031 				zval_ptr_dtor_nogc(retval_ptr);
35032 			} else {
35033 
35034 			}
35035 		}
35036 #endif
35037 	}
35038 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35039 }
35040 
35041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35042 {
35043 	USE_OPLINE
35044 
35045 	zval *expr_ptr, new_expr;
35046 
35047 	SAVE_OPLINE();
35048 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
35049 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
35050 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
35051 		if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
35052 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
35053 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
35054 			HANDLE_EXCEPTION();
35055 		}
35056 		ZVAL_MAKE_REF(expr_ptr);
35057 		Z_ADDREF_P(expr_ptr);
35058 
35059 	} else {
35060 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35061 		if (IS_CV == IS_TMP_VAR) {
35062 			/* pass */
35063 		} else if (IS_CV == IS_CONST) {
35064 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
35065 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
35066 				zval_copy_ctor_func(&new_expr);
35067 				expr_ptr = &new_expr;
35068 			}
35069 		} else if (IS_CV == IS_CV) {
35070 			ZVAL_DEREF(expr_ptr);
35071 			if (Z_REFCOUNTED_P(expr_ptr)) {
35072 				Z_ADDREF_P(expr_ptr);
35073 			}
35074 		} else /* if (IS_CV == IS_VAR) */ {
35075 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
35076 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
35077 
35078 				expr_ptr = Z_REFVAL_P(expr_ptr);
35079 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
35080 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
35081 					expr_ptr = &new_expr;
35082 					efree_size(ref, sizeof(zend_reference));
35083 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
35084 					Z_ADDREF_P(expr_ptr);
35085 				}
35086 			}
35087 		}
35088 	}
35089 
35090 	if (IS_UNUSED != IS_UNUSED) {
35091 
35092 		zval *offset = NULL;
35093 		zend_string *str;
35094 		zend_ulong hval;
35095 
35096 add_again:
35097 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
35098 			str = Z_STR_P(offset);
35099 			if (IS_UNUSED != IS_CONST) {
35100 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
35101 					goto num_index;
35102 				}
35103 			}
35104 str_index:
35105 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
35106 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
35107 			hval = Z_LVAL_P(offset);
35108 num_index:
35109 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
35110 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
35111 			offset = Z_REFVAL_P(offset);
35112 			goto add_again;
35113 		} else if (Z_TYPE_P(offset) == IS_NULL) {
35114 			str = ZSTR_EMPTY_ALLOC();
35115 			goto str_index;
35116 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
35117 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
35118 			goto num_index;
35119 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
35120 			hval = 0;
35121 			goto num_index;
35122 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
35123 			hval = 1;
35124 			goto num_index;
35125 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
35126 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
35127 			str = ZSTR_EMPTY_ALLOC();
35128 			goto str_index;
35129 		} else {
35130 			zend_error(E_WARNING, "Illegal offset type");
35131 			zval_ptr_dtor(expr_ptr);
35132 		}
35133 
35134 	} else {
35135 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
35136 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
35137 			zval_ptr_dtor(expr_ptr);
35138 		}
35139 	}
35140 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35141 }
35142 
35143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35144 {
35145 	zval *array;
35146 	uint32_t size;
35147 	USE_OPLINE
35148 
35149 	array = EX_VAR(opline->result.var);
35150 	if (IS_CV != IS_UNUSED) {
35151 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
35152 	} else {
35153 		size = 0;
35154 	}
35155 	ZVAL_NEW_ARR(array);
35156 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
35157 
35158 	if (IS_CV != IS_UNUSED) {
35159 		/* Explicitly initialize array as not-packed if flag is set */
35160 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
35161 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
35162 		}
35163 	}
35164 
35165 	if (IS_CV == IS_UNUSED) {
35166 		ZEND_VM_NEXT_OPCODE();
35167 #if 0 || (IS_CV != IS_UNUSED)
35168 	} else {
35169 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35170 #endif
35171 	}
35172 }
35173 
35174 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35175 {
35176 	USE_OPLINE
35177 	zval tmp, *varname;
35178 	HashTable *target_symbol_table;
35179 
35180 
35181 	SAVE_OPLINE();
35182 	if (IS_CV == IS_CV &&
35183 	    IS_UNUSED == IS_UNUSED &&
35184 	    (opline->extended_value & ZEND_QUICK_SET)) {
35185 		zval *var = EX_VAR(opline->op1.var);
35186 
35187 		if (Z_REFCOUNTED_P(var)) {
35188 			zend_refcounted *garbage = Z_COUNTED_P(var);
35189 
35190 			if (!--GC_REFCOUNT(garbage)) {
35191 				ZVAL_UNDEF(var);
35192 				zval_dtor_func_for_ptr(garbage);
35193 			} else {
35194 				zval *z = var;
35195 				ZVAL_DEREF(z);
35196 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
35197 					ZVAL_UNDEF(var);
35198 					gc_possible_root(Z_COUNTED_P(z));
35199 				} else {
35200 					ZVAL_UNDEF(var);
35201 				}
35202 			}
35203 		} else {
35204 			ZVAL_UNDEF(var);
35205 		}
35206 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35207 	}
35208 
35209 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35210 
35211 	ZVAL_UNDEF(&tmp);
35212 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
35213 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
35214 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
35215 		}
35216 		ZVAL_STR(&tmp, zval_get_string(varname));
35217 		varname = &tmp;
35218 	}
35219 
35220 	if (IS_UNUSED != IS_UNUSED) {
35221 		zend_class_entry *ce;
35222 
35223 		if (IS_UNUSED == IS_CONST) {
35224 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
35225 			if (UNEXPECTED(ce == NULL)) {
35226 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
35227 				if (UNEXPECTED(ce == NULL)) {
35228 					if (EXPECTED(!EG(exception))) {
35229 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
35230 					}
35231 					if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
35232 						zend_string_release(Z_STR(tmp));
35233 					}
35234 
35235 					HANDLE_EXCEPTION();
35236 				}
35237 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
35238 			}
35239 		} else {
35240 			ce = Z_CE_P(EX_VAR(opline->op2.var));
35241 		}
35242 		zend_std_unset_static_property(ce, Z_STR_P(varname));
35243 	} else {
35244 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
35245 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
35246 	}
35247 
35248 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
35249 		zend_string_release(Z_STR(tmp));
35250 	}
35251 
35252 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35253 }
35254 
35255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35256 {
35257 	USE_OPLINE
35258 	zval *value;
35259 	int result;
35260 
35261 	if (IS_CV == IS_CV &&
35262 	    IS_UNUSED == IS_UNUSED &&
35263 	    (opline->extended_value & ZEND_QUICK_SET)) {
35264 		value = EX_VAR(opline->op1.var);
35265 		if (opline->extended_value & ZEND_ISSET) {
35266 			result =
35267 				Z_TYPE_P(value) > IS_NULL &&
35268 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
35269 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
35270 			SAVE_OPLINE();
35271 			result = !i_zend_is_true(value);
35272 			if (UNEXPECTED(EG(exception))) {
35273 				HANDLE_EXCEPTION();
35274 			}
35275 		}
35276 		ZEND_VM_SMART_BRANCH(result, 0);
35277 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
35278 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
35279 		ZEND_VM_CONTINUE();
35280 	} else {
35281 
35282 		zval tmp, *varname;
35283 
35284 		SAVE_OPLINE();
35285 		varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
35286 		ZVAL_UNDEF(&tmp);
35287 		if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
35288 			ZVAL_STR(&tmp, zval_get_string(varname));
35289 			varname = &tmp;
35290 		}
35291 
35292 		if (IS_UNUSED != IS_UNUSED) {
35293 			zend_class_entry *ce;
35294 
35295 			if (IS_UNUSED == IS_CONST) {
35296 				if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
35297 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
35298 
35299 					/* check if static properties were destoyed */
35300 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
35301 						value = NULL;
35302 					}
35303 
35304 					goto is_var_return;
35305 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
35306 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
35307 					if (UNEXPECTED(ce == NULL)) {
35308 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35309 					}
35310 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
35311 				}
35312 			} else {
35313 				ce = Z_CE_P(EX_VAR(opline->op2.var));
35314 				if (IS_CV == IS_CONST &&
35315 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
35316 
35317 					/* check if static properties were destoyed */
35318 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
35319 						value = NULL;
35320 					}
35321 
35322 					goto is_var_return;
35323 				}
35324 			}
35325 
35326 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
35327 
35328 			if (IS_CV == IS_CONST && value) {
35329 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
35330 			}
35331 		} else {
35332 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
35333 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
35334 		}
35335 
35336 		if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
35337 			zend_string_release(Z_STR(tmp));
35338 		}
35339 
35340 is_var_return:
35341 		if (opline->extended_value & ZEND_ISSET) {
35342 			result = value && Z_TYPE_P(value) > IS_NULL &&
35343 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
35344 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
35345 			result = !value || !i_zend_is_true(value);
35346 		}
35347 
35348 		ZEND_VM_SMART_BRANCH(result, 1);
35349 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
35350 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35351 	}
35352 }
35353 
35354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35355 {
35356 	USE_OPLINE
35357 
35358 	zend_generator *generator = zend_get_running_generator(execute_data);
35359 
35360 	SAVE_OPLINE();
35361 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
35362 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
35363 
35364 
35365 		HANDLE_EXCEPTION();
35366 	}
35367 
35368 	/* Destroy the previously yielded value */
35369 	zval_ptr_dtor(&generator->value);
35370 
35371 	/* Destroy the previously yielded key */
35372 	zval_ptr_dtor(&generator->key);
35373 
35374 	/* Set the new yielded value */
35375 	if (IS_CV != IS_UNUSED) {
35376 
35377 
35378 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
35379 			/* Constants and temporary variables aren't yieldable by reference,
35380 			 * but we still allow them with a notice. */
35381 			if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
35382 				zval *value;
35383 
35384 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35385 
35386 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35387 				ZVAL_COPY_VALUE(&generator->value, value);
35388 				if (IS_CV == IS_CONST) {
35389 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
35390 						zval_copy_ctor_func(&generator->value);
35391 					}
35392 				}
35393 			} else {
35394 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
35395 
35396 				if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
35397 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
35398 
35399 					HANDLE_EXCEPTION();
35400 				}
35401 
35402 				/* If a function call result is yielded and the function did
35403 				 * not return by reference we throw a notice. */
35404 				if (IS_CV == IS_VAR &&
35405 				    (value_ptr == &EG(uninitialized_zval) ||
35406 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
35407 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
35408 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
35409 				} else {
35410 					ZVAL_MAKE_REF(value_ptr);
35411 				}
35412 				ZVAL_COPY(&generator->value, value_ptr);
35413 
35414 			}
35415 		} else {
35416 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35417 
35418 			/* Consts, temporary variables and references need copying */
35419 			if (IS_CV == IS_CONST) {
35420 				ZVAL_COPY_VALUE(&generator->value, value);
35421 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
35422 					zval_copy_ctor_func(&generator->value);
35423 				}
35424 			} else if (IS_CV == IS_TMP_VAR) {
35425 				ZVAL_COPY_VALUE(&generator->value, value);
35426             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
35427 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
35428 
35429 			} else {
35430 				ZVAL_COPY_VALUE(&generator->value, value);
35431 				if (IS_CV == IS_CV) {
35432 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
35433 				}
35434 			}
35435 		}
35436 	} else {
35437 		/* If no value was specified yield null */
35438 		ZVAL_NULL(&generator->value);
35439 	}
35440 
35441 	/* Set the new yielded key */
35442 	if (IS_UNUSED != IS_UNUSED) {
35443 
35444 		zval *key = NULL;
35445 
35446 		/* Consts, temporary variables and references need copying */
35447 		if (IS_UNUSED == IS_CONST) {
35448 			ZVAL_COPY_VALUE(&generator->key, key);
35449 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
35450 				zval_copy_ctor_func(&generator->key);
35451 			}
35452 		} else if (IS_UNUSED == IS_TMP_VAR) {
35453 			ZVAL_COPY_VALUE(&generator->key, key);
35454 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
35455 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
35456 
35457 		} else {
35458 			ZVAL_COPY_VALUE(&generator->key, key);
35459 			if (IS_UNUSED == IS_CV) {
35460 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
35461 			}
35462 		}
35463 
35464 		if (Z_TYPE(generator->key) == IS_LONG
35465 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
35466 		) {
35467 			generator->largest_used_integer_key = Z_LVAL(generator->key);
35468 		}
35469 	} else {
35470 		/* If no key was specified we use auto-increment keys */
35471 		generator->largest_used_integer_key++;
35472 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
35473 	}
35474 
35475 	if (RETURN_VALUE_USED(opline)) {
35476 		/* If the return value of yield is used set the send
35477 		 * target and initialize it to NULL */
35478 		generator->send_target = EX_VAR(opline->result.var);
35479 		ZVAL_NULL(generator->send_target);
35480 	} else {
35481 		generator->send_target = NULL;
35482 	}
35483 
35484 	/* We increment to the next op, so we are at the correct position when the
35485 	 * generator is resumed. */
35486 	ZEND_VM_INC_OPCODE();
35487 
35488 	/* The GOTO VM uses a local opline variable. We need to set the opline
35489 	 * variable in execute_data so we don't resume at an old position. */
35490 	SAVE_OPLINE();
35491 
35492 	ZEND_VM_RETURN();
35493 }
35494 
35495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35496 {
35497 	USE_OPLINE
35498 
35499 	zval *op1, *op2, *result;
35500 
35501 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35502 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35503 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
35504 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35505 			result = EX_VAR(opline->result.var);
35506 			fast_long_add_function(result, op1, op2);
35507 			ZEND_VM_NEXT_OPCODE();
35508 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35509 			result = EX_VAR(opline->result.var);
35510 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
35511 			ZEND_VM_NEXT_OPCODE();
35512 		}
35513 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
35514 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35515 			result = EX_VAR(opline->result.var);
35516 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
35517 			ZEND_VM_NEXT_OPCODE();
35518 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35519 			result = EX_VAR(opline->result.var);
35520 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
35521 			ZEND_VM_NEXT_OPCODE();
35522 		}
35523 	}
35524 
35525 	SAVE_OPLINE();
35526 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
35527 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35528 	}
35529 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
35530 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35531 	}
35532 	add_function(EX_VAR(opline->result.var), op1, op2);
35533 
35534 
35535 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35536 }
35537 
35538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35539 {
35540 	USE_OPLINE
35541 
35542 	zval *op1, *op2, *result;
35543 
35544 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35545 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35546 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
35547 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35548 			result = EX_VAR(opline->result.var);
35549 			fast_long_sub_function(result, op1, op2);
35550 			ZEND_VM_NEXT_OPCODE();
35551 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35552 			result = EX_VAR(opline->result.var);
35553 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
35554 			ZEND_VM_NEXT_OPCODE();
35555 		}
35556 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
35557 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35558 			result = EX_VAR(opline->result.var);
35559 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
35560 			ZEND_VM_NEXT_OPCODE();
35561 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35562 			result = EX_VAR(opline->result.var);
35563 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
35564 			ZEND_VM_NEXT_OPCODE();
35565 		}
35566 	}
35567 
35568 	SAVE_OPLINE();
35569 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
35570 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35571 	}
35572 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
35573 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35574 	}
35575 	sub_function(EX_VAR(opline->result.var), op1, op2);
35576 
35577 
35578 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35579 }
35580 
35581 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35582 {
35583 	USE_OPLINE
35584 
35585 	zval *op1, *op2, *result;
35586 
35587 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35588 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35589 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
35590 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35591 			zend_long overflow;
35592 
35593 			result = EX_VAR(opline->result.var);
35594 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
35595 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
35596 			ZEND_VM_NEXT_OPCODE();
35597 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35598 			result = EX_VAR(opline->result.var);
35599 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
35600 			ZEND_VM_NEXT_OPCODE();
35601 		}
35602 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
35603 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35604 			result = EX_VAR(opline->result.var);
35605 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
35606 			ZEND_VM_NEXT_OPCODE();
35607 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35608 			result = EX_VAR(opline->result.var);
35609 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
35610 			ZEND_VM_NEXT_OPCODE();
35611 		}
35612 	}
35613 
35614 	SAVE_OPLINE();
35615 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
35616 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35617 	}
35618 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
35619 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35620 	}
35621 	mul_function(EX_VAR(opline->result.var), op1, op2);
35622 
35623 
35624 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35625 }
35626 
35627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35628 {
35629 	USE_OPLINE
35630 
35631 	zval *op1, *op2;
35632 
35633 	SAVE_OPLINE();
35634 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35635 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
35636 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
35637 
35638 
35639 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35640 }
35641 
35642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35643 {
35644 	USE_OPLINE
35645 
35646 	zval *op1, *op2, *result;
35647 
35648 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35649 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35650 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
35651 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35652 			result = EX_VAR(opline->result.var);
35653 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
35654 				SAVE_OPLINE();
35655 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
35656 				HANDLE_EXCEPTION();
35657 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
35658 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
35659 				ZVAL_LONG(result, 0);
35660 			} else {
35661 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
35662 			}
35663 			ZEND_VM_NEXT_OPCODE();
35664 		}
35665 	}
35666 
35667 	SAVE_OPLINE();
35668 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
35669 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35670 	}
35671 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
35672 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35673 	}
35674 	mod_function(EX_VAR(opline->result.var), op1, op2);
35675 
35676 
35677 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35678 }
35679 
35680 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35681 {
35682 	USE_OPLINE
35683 
35684 	zval *op1, *op2;
35685 
35686 	SAVE_OPLINE();
35687 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35688 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
35689 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
35690 
35691 
35692 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35693 }
35694 
35695 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35696 {
35697 	USE_OPLINE
35698 
35699 	zval *op1, *op2;
35700 
35701 	SAVE_OPLINE();
35702 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35703 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
35704 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
35705 
35706 
35707 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35708 }
35709 
35710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35711 {
35712 	USE_OPLINE
35713 
35714 	zval *op1, *op2;
35715 
35716 	SAVE_OPLINE();
35717 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35718 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
35719 	pow_function(EX_VAR(opline->result.var), op1, op2);
35720 
35721 
35722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35723 }
35724 
35725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35726 {
35727 	USE_OPLINE
35728 
35729 	zval *op1, *op2;
35730 
35731 	SAVE_OPLINE();
35732 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35733 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35734 
35735 	do {
35736 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
35737 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
35738 			zend_string *op1_str = Z_STR_P(op1);
35739 			zend_string *op2_str = Z_STR_P(op2);
35740 			zend_string *str;
35741 
35742 			if (IS_CV != IS_CONST) {
35743 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
35744 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
35745 
35746 					break;
35747 				}
35748 			}
35749 			if (IS_CV != IS_CONST) {
35750 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
35751 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
35752 
35753 					break;
35754 				}
35755 			}
35756 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
35757 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
35758 			    size_t len = ZSTR_LEN(op1_str);
35759 
35760 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
35761 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
35762 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
35763 				break;
35764 			} else {
35765 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
35766 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
35767 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
35768 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
35769 			}
35770 		} else {
35771 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
35772 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35773 			}
35774 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
35775 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35776 			}
35777 			concat_function(EX_VAR(opline->result.var), op1, op2);
35778 		}
35779 
35780 	} while (0);
35781 
35782 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35783 }
35784 
35785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35786 {
35787 	USE_OPLINE
35788 
35789 	zval *op1, *op2;
35790 	int result;
35791 
35792 	SAVE_OPLINE();
35793 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
35794 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
35795 	result = fast_is_identical_function(op1, op2);
35796 
35797 
35798 	ZEND_VM_SMART_BRANCH(result, 1);
35799 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
35800 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35801 }
35802 
35803 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35804 {
35805 	USE_OPLINE
35806 
35807 	zval *op1, *op2;
35808 	int result;
35809 
35810 	SAVE_OPLINE();
35811 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
35812 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
35813 	result = fast_is_not_identical_function(op1, op2);
35814 
35815 
35816 	ZEND_VM_SMART_BRANCH(result, 1);
35817 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
35818 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35819 }
35820 
35821 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35822 {
35823 	USE_OPLINE
35824 
35825 	zval *op1, *op2, *result;
35826 
35827 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35828 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35829 	do {
35830 		int result;
35831 
35832 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
35833 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
35834 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
35835 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
35836 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
35837 			} else {
35838 				break;
35839 			}
35840 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
35841 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
35842 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
35843 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
35844 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
35845 			} else {
35846 				break;
35847 			}
35848 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
35849 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
35850 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
35851 					result = 1;
35852 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
35853 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
35854 						result = 0;
35855 					} else {
35856 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
35857 					}
35858 				} else {
35859 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
35860 				}
35861 
35862 
35863 			} else {
35864 				break;
35865 			}
35866 		} else {
35867 			break;
35868 		}
35869 		ZEND_VM_SMART_BRANCH(result, 0);
35870 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
35871 		ZEND_VM_NEXT_OPCODE();
35872 	} while (0);
35873 
35874 	SAVE_OPLINE();
35875 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
35876 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35877 	}
35878 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
35879 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35880 	}
35881 	result = EX_VAR(opline->result.var);
35882 	compare_function(result, op1, op2);
35883 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
35884 
35885 
35886 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35887 }
35888 
35889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35890 {
35891 	USE_OPLINE
35892 
35893 	zval *op1, *op2, *result;
35894 
35895 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35896 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35897 	do {
35898 		int result;
35899 
35900 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
35901 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
35902 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
35903 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
35904 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
35905 			} else {
35906 				break;
35907 			}
35908 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
35909 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
35910 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
35911 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
35912 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
35913 			} else {
35914 				break;
35915 			}
35916 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
35917 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
35918 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
35919 					result = 0;
35920 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
35921 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
35922 						result = 1;
35923 					} else {
35924 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
35925 					}
35926 				} else {
35927 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
35928 				}
35929 
35930 
35931 			} else {
35932 				break;
35933 			}
35934 		} else {
35935 			break;
35936 		}
35937 		ZEND_VM_SMART_BRANCH(result, 0);
35938 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
35939 		ZEND_VM_NEXT_OPCODE();
35940 	} while (0);
35941 
35942 	SAVE_OPLINE();
35943 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
35944 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35945 	}
35946 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
35947 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35948 	}
35949 	result = EX_VAR(opline->result.var);
35950 	compare_function(result, op1, op2);
35951 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
35952 
35953 
35954 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35955 }
35956 
35957 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35958 {
35959 	USE_OPLINE
35960 
35961 	zval *op1, *op2, *result;
35962 
35963 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35964 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
35965 	do {
35966 		int result;
35967 
35968 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
35969 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35970 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
35971 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35972 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
35973 			} else {
35974 				break;
35975 			}
35976 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
35977 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
35978 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
35979 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
35980 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
35981 			} else {
35982 				break;
35983 			}
35984 		} else {
35985 			break;
35986 		}
35987 		ZEND_VM_SMART_BRANCH(result, 0);
35988 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
35989 		ZEND_VM_NEXT_OPCODE();
35990 	} while (0);
35991 
35992 	SAVE_OPLINE();
35993 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
35994 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
35995 	}
35996 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
35997 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
35998 	}
35999 	result = EX_VAR(opline->result.var);
36000 	compare_function(result, op1, op2);
36001 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
36002 
36003 
36004 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36005 }
36006 
36007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36008 {
36009 	USE_OPLINE
36010 
36011 	zval *op1, *op2, *result;
36012 
36013 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36014 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
36015 	do {
36016 		int result;
36017 
36018 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36019 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36020 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
36021 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36022 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
36023 			} else {
36024 				break;
36025 			}
36026 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36027 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36028 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
36029 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36030 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
36031 			} else {
36032 				break;
36033 			}
36034 		} else {
36035 			break;
36036 		}
36037 		ZEND_VM_SMART_BRANCH(result, 0);
36038 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
36039 		ZEND_VM_NEXT_OPCODE();
36040 	} while (0);
36041 
36042 	SAVE_OPLINE();
36043 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36044 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36045 	}
36046 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36047 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36048 	}
36049 	result = EX_VAR(opline->result.var);
36050 	compare_function(result, op1, op2);
36051 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
36052 
36053 
36054 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36055 }
36056 
36057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36058 {
36059 	USE_OPLINE
36060 
36061 	zval *op1, *op2;
36062 
36063 	SAVE_OPLINE();
36064 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36065 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36066 	compare_function(EX_VAR(opline->result.var), op1, op2);
36067 
36068 
36069 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36070 }
36071 
36072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36073 {
36074 	USE_OPLINE
36075 
36076 	zval *op1, *op2;
36077 
36078 	SAVE_OPLINE();
36079 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36080 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36081 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
36082 
36083 
36084 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36085 }
36086 
36087 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36088 {
36089 	USE_OPLINE
36090 
36091 	zval *op1, *op2;
36092 
36093 	SAVE_OPLINE();
36094 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36095 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36096 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
36097 
36098 
36099 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36100 }
36101 
36102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36103 {
36104 	USE_OPLINE
36105 
36106 	zval *op1, *op2;
36107 
36108 	SAVE_OPLINE();
36109 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36110 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36111 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
36112 
36113 
36114 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36115 }
36116 
36117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36118 {
36119 	USE_OPLINE
36120 
36121 	zval *op1, *op2;
36122 
36123 	SAVE_OPLINE();
36124 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36125 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36126 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
36127 
36128 
36129 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36130 }
36131 
36132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
36133 {
36134 	USE_OPLINE
36135 	zend_free_op free_op_data1;
36136 	zval *object;
36137 	zval *property;
36138 	zval *value;
36139 	zval *zptr;
36140 
36141 	SAVE_OPLINE();
36142 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36143 
36144 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
36145 		zend_throw_error(NULL, "Using $this when not in object context");
36146 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
36147 
36148 		HANDLE_EXCEPTION();
36149 	}
36150 
36151 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36152 
36153 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
36154 		zend_throw_error(NULL, "Cannot use string offset as an object");
36155 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
36156 
36157 		HANDLE_EXCEPTION();
36158 	}
36159 
36160 	do {
36161 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
36162 
36163 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36164 			ZVAL_DEREF(object);
36165 			if (UNEXPECTED(!make_real_object(object))) {
36166 				zend_error(E_WARNING, "Attempt to assign property of non-object");
36167 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36168 					ZVAL_NULL(EX_VAR(opline->result.var));
36169 				}
36170 				break;
36171 			}
36172 		}
36173 
36174 		/* here we are sure we are dealing with an object */
36175 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
36176 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
36177 			if (UNEXPECTED(zptr == &EG(error_zval))) {
36178 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36179 					ZVAL_NULL(EX_VAR(opline->result.var));
36180 				}
36181 			} else {
36182 				ZVAL_DEREF(zptr);
36183 				SEPARATE_ZVAL_NOREF(zptr);
36184 
36185 				binary_op(zptr, zptr, value);
36186 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36187 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
36188 				}
36189 			}
36190 		} else {
36191 			zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
36192 		}
36193 	} while (0);
36194 
36195 	FREE_OP(free_op_data1);
36196 
36197 
36198 	/* assign_obj has two opcodes! */
36199 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36200 }
36201 
36202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
36203 {
36204 	USE_OPLINE
36205 	zend_free_op free_op_data1;
36206 	zval *var_ptr, rv;
36207 	zval *value, *container, *dim;
36208 
36209 	SAVE_OPLINE();
36210 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36211 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
36212 		zend_throw_error(NULL, "Using $this when not in object context");
36213 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
36214 
36215 		HANDLE_EXCEPTION();
36216 	}
36217 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36218 		zend_throw_error(NULL, "Cannot use string offset as an array");
36219 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
36220 
36221 		HANDLE_EXCEPTION();
36222 	}
36223 
36224 	dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36225 
36226 	do {
36227 		if (IS_CV == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
36228 			if (IS_CV != IS_UNUSED) {
36229 				ZVAL_DEREF(container);
36230 			}
36231 			if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
36232 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
36233 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
36234 				break;
36235 			}
36236 		}
36237 
36238 		zend_fetch_dimension_address_RW(&rv, container, dim, IS_CV);
36239 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
36240 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
36241 		var_ptr = Z_INDIRECT(rv);
36242 
36243 		if (UNEXPECTED(var_ptr == NULL)) {
36244 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
36245 
36246 			FREE_OP(free_op_data1);
36247 
36248 			HANDLE_EXCEPTION();
36249 		}
36250 
36251 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
36252 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36253 				ZVAL_NULL(EX_VAR(opline->result.var));
36254 			}
36255 		} else {
36256 			ZVAL_DEREF(var_ptr);
36257 			SEPARATE_ZVAL_NOREF(var_ptr);
36258 
36259 			binary_op(var_ptr, var_ptr, value);
36260 
36261 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36262 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36263 			}
36264 		}
36265 	} while (0);
36266 
36267 	FREE_OP(free_op_data1);
36268 
36269 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36270 }
36271 
36272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
36273 {
36274 	USE_OPLINE
36275 
36276 	zval *var_ptr;
36277 	zval *value;
36278 
36279 	SAVE_OPLINE();
36280 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36281 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36282 
36283 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
36284 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
36285 
36286 		HANDLE_EXCEPTION();
36287 	}
36288 
36289 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
36290 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36291 			ZVAL_NULL(EX_VAR(opline->result.var));
36292 		}
36293 	} else {
36294 		ZVAL_DEREF(var_ptr);
36295 		SEPARATE_ZVAL_NOREF(var_ptr);
36296 
36297 		binary_op(var_ptr, var_ptr, value);
36298 
36299 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36300 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36301 		}
36302 	}
36303 
36304 
36305 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36306 }
36307 
36308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36309 {
36310 #if 0 || (IS_CV != IS_UNUSED)
36311 	USE_OPLINE
36312 
36313 # if 0 || (IS_CV != IS_UNUSED)
36314 	if (EXPECTED(opline->extended_value == 0)) {
36315 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36316 	}
36317 # endif
36318 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36319 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36320 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36321 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36322 	}
36323 #else
36324 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36325 #endif
36326 }
36327 
36328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36329 {
36330 #if 0 || (IS_CV != IS_UNUSED)
36331 	USE_OPLINE
36332 
36333 # if 0 || (IS_CV != IS_UNUSED)
36334 	if (EXPECTED(opline->extended_value == 0)) {
36335 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36336 	}
36337 # endif
36338 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36339 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36340 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36341 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36342 	}
36343 #else
36344 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36345 #endif
36346 }
36347 
36348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36349 {
36350 #if 0 || (IS_CV != IS_UNUSED)
36351 	USE_OPLINE
36352 
36353 # if 0 || (IS_CV != IS_UNUSED)
36354 	if (EXPECTED(opline->extended_value == 0)) {
36355 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36356 	}
36357 # endif
36358 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36359 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36360 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36361 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36362 	}
36363 #else
36364 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36365 #endif
36366 }
36367 
36368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36369 {
36370 #if 0 || (IS_CV != IS_UNUSED)
36371 	USE_OPLINE
36372 
36373 # if 0 || (IS_CV != IS_UNUSED)
36374 	if (EXPECTED(opline->extended_value == 0)) {
36375 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36376 	}
36377 # endif
36378 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36379 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36380 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36381 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36382 	}
36383 #else
36384 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36385 #endif
36386 }
36387 
36388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36389 {
36390 #if 0 || (IS_CV != IS_UNUSED)
36391 	USE_OPLINE
36392 
36393 # if 0 || (IS_CV != IS_UNUSED)
36394 	if (EXPECTED(opline->extended_value == 0)) {
36395 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36396 	}
36397 # endif
36398 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36399 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36400 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36401 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36402 	}
36403 #else
36404 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36405 #endif
36406 }
36407 
36408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36409 {
36410 #if 0 || (IS_CV != IS_UNUSED)
36411 	USE_OPLINE
36412 
36413 # if 0 || (IS_CV != IS_UNUSED)
36414 	if (EXPECTED(opline->extended_value == 0)) {
36415 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36416 	}
36417 # endif
36418 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36419 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36420 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36421 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36422 	}
36423 #else
36424 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36425 #endif
36426 }
36427 
36428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36429 {
36430 #if 0 || (IS_CV != IS_UNUSED)
36431 	USE_OPLINE
36432 
36433 # if 0 || (IS_CV != IS_UNUSED)
36434 	if (EXPECTED(opline->extended_value == 0)) {
36435 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36436 	}
36437 # endif
36438 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36439 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36440 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36441 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36442 	}
36443 #else
36444 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36445 #endif
36446 }
36447 
36448 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36449 {
36450 #if 0 || (IS_CV != IS_UNUSED)
36451 	USE_OPLINE
36452 
36453 # if 0 || (IS_CV != IS_UNUSED)
36454 	if (EXPECTED(opline->extended_value == 0)) {
36455 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36456 	}
36457 # endif
36458 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36459 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36460 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36461 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36462 	}
36463 #else
36464 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36465 #endif
36466 }
36467 
36468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36469 {
36470 #if 0 || (IS_CV != IS_UNUSED)
36471 	USE_OPLINE
36472 
36473 # if 0 || (IS_CV != IS_UNUSED)
36474 	if (EXPECTED(opline->extended_value == 0)) {
36475 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36476 	}
36477 # endif
36478 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36479 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36480 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36481 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36482 	}
36483 #else
36484 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36485 #endif
36486 }
36487 
36488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36489 {
36490 #if 0 || (IS_CV != IS_UNUSED)
36491 	USE_OPLINE
36492 
36493 # if 0 || (IS_CV != IS_UNUSED)
36494 	if (EXPECTED(opline->extended_value == 0)) {
36495 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36496 	}
36497 # endif
36498 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36499 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36500 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36501 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36502 	}
36503 #else
36504 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36505 #endif
36506 }
36507 
36508 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36509 {
36510 #if 0 || (IS_CV != IS_UNUSED)
36511 	USE_OPLINE
36512 
36513 # if 0 || (IS_CV != IS_UNUSED)
36514 	if (EXPECTED(opline->extended_value == 0)) {
36515 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36516 	}
36517 # endif
36518 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36519 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36520 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36521 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36522 	}
36523 #else
36524 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36525 #endif
36526 }
36527 
36528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36529 {
36530 #if 0 || (IS_CV != IS_UNUSED)
36531 	USE_OPLINE
36532 
36533 # if 0 || (IS_CV != IS_UNUSED)
36534 	if (EXPECTED(opline->extended_value == 0)) {
36535 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36536 	}
36537 # endif
36538 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
36539 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36540 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
36541 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36542 	}
36543 #else
36544 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36545 #endif
36546 }
36547 
36548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
36549 {
36550 	USE_OPLINE
36551 
36552 	zval *object;
36553 	zval *property;
36554 	zval *zptr;
36555 
36556 	SAVE_OPLINE();
36557 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36558 
36559 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
36560 		zend_throw_error(NULL, "Using $this when not in object context");
36561 
36562 		HANDLE_EXCEPTION();
36563 	}
36564 
36565 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36566 
36567 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
36568 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
36569 
36570 		HANDLE_EXCEPTION();
36571 	}
36572 
36573 	do {
36574 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36575 			ZVAL_DEREF(object);
36576 			if (UNEXPECTED(!make_real_object(object))) {
36577 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
36578 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36579 					ZVAL_NULL(EX_VAR(opline->result.var));
36580 				}
36581 				break;
36582 			}
36583 		}
36584 
36585 		/* here we are sure we are dealing with an object */
36586 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
36587 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
36588 			if (UNEXPECTED(zptr == &EG(error_zval))) {
36589 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36590 					ZVAL_NULL(EX_VAR(opline->result.var));
36591 				}
36592 			} else {
36593 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
36594 					if (inc) {
36595 						fast_long_increment_function(zptr);
36596 					} else {
36597 						fast_long_decrement_function(zptr);
36598 					}
36599 				} else {
36600 					ZVAL_DEREF(zptr);
36601 					SEPARATE_ZVAL_NOREF(zptr);
36602 
36603 					if (inc) {
36604 						increment_function(zptr);
36605 					} else {
36606 						decrement_function(zptr);
36607 					}
36608 				}
36609 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36610 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
36611 				}
36612 			}
36613 		} else {
36614 			zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
36615 		}
36616 	} while (0);
36617 
36618 
36619 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36620 }
36621 
36622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36623 {
36624 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36625 }
36626 
36627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36628 {
36629 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36630 }
36631 
36632 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
36633 {
36634 	USE_OPLINE
36635 
36636 	zval *object;
36637 	zval *property;
36638 	zval *zptr;
36639 
36640 	SAVE_OPLINE();
36641 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36642 
36643 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
36644 		zend_throw_error(NULL, "Using $this when not in object context");
36645 
36646 		HANDLE_EXCEPTION();
36647 	}
36648 
36649 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36650 
36651 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
36652 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
36653 
36654 		HANDLE_EXCEPTION();
36655 	}
36656 
36657 	do {
36658 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36659 			ZVAL_DEREF(object);
36660 			if (UNEXPECTED(!make_real_object(object))) {
36661 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
36662 				ZVAL_NULL(EX_VAR(opline->result.var));
36663 				break;
36664 			}
36665 		}
36666 
36667 		/* here we are sure we are dealing with an object */
36668 
36669 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
36670 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
36671 			if (UNEXPECTED(zptr == &EG(error_zval))) {
36672 				ZVAL_NULL(EX_VAR(opline->result.var));
36673 			} else {
36674 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
36675 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
36676 					if (inc) {
36677 						fast_long_increment_function(zptr);
36678 					} else {
36679 						fast_long_decrement_function(zptr);
36680 					}
36681 				} else {
36682 					ZVAL_DEREF(zptr);
36683 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
36684 					zval_opt_copy_ctor(zptr);
36685 					if (inc) {
36686 						increment_function(zptr);
36687 					} else {
36688 						decrement_function(zptr);
36689 					}
36690 				}
36691 			}
36692 		} else {
36693 			zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
36694 		}
36695 	} while (0);
36696 
36697 
36698 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36699 }
36700 
36701 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36702 {
36703 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36704 }
36705 
36706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36707 {
36708 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
36709 }
36710 
36711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36712 {
36713 	USE_OPLINE
36714 
36715 	zval *container;
36716 
36717 	SAVE_OPLINE();
36718 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36719 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36720 
36721 
36722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36723 }
36724 
36725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36726 {
36727 	USE_OPLINE
36728 	zend_free_op free_op1;
36729 	zval *container;
36730 
36731 	SAVE_OPLINE();
36732 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
36733 
36734 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36735 		zend_throw_error(NULL, "Cannot use string offset as an array");
36736 		HANDLE_EXCEPTION();
36737 	}
36738 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36739 
36740 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36741 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
36742 	}
36743 
36744 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36745 }
36746 
36747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36748 {
36749 	USE_OPLINE
36750 	zend_free_op free_op1;
36751 	zval *container;
36752 
36753 	SAVE_OPLINE();
36754 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36755 
36756 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36757 		zend_throw_error(NULL, "Cannot use string offset as an array");
36758 		HANDLE_EXCEPTION();
36759 	}
36760 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36761 
36762 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36763 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
36764 	}
36765 
36766 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36767 }
36768 
36769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36770 {
36771 	USE_OPLINE
36772 
36773 	zval *container;
36774 
36775 	SAVE_OPLINE();
36776 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
36777 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36778 
36779 
36780 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36781 }
36782 
36783 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36784 {
36785 	USE_OPLINE
36786 	zval *container;
36787 	zend_free_op free_op1;
36788 
36789 	SAVE_OPLINE();
36790 
36791 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
36792         if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
36793             zend_throw_error(NULL, "Cannot use temporary expression in write context");
36794 
36795 
36796 			HANDLE_EXCEPTION();
36797         }
36798 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
36799 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36800 			zend_throw_error(NULL, "Cannot use string offset as an array");
36801 
36802 			HANDLE_EXCEPTION();
36803 		}
36804 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36805 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36806 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
36807 		}
36808 
36809 
36810 	} else {
36811 		if (IS_CV == IS_UNUSED) {
36812 			zend_throw_error(NULL, "Cannot use [] for reading");
36813 
36814 
36815 			HANDLE_EXCEPTION();
36816 		}
36817 		container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36818 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36819 
36820 
36821 	}
36822 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36823 }
36824 
36825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36826 {
36827 	USE_OPLINE
36828 	zend_free_op free_op1;
36829 	zval *container;
36830 
36831 	SAVE_OPLINE();
36832 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
36833 
36834 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36835 		zend_throw_error(NULL, "Cannot use string offset as an array");
36836 
36837 		HANDLE_EXCEPTION();
36838 	}
36839 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
36840 
36841 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36842 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
36843 	}
36844 
36845 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36846 }
36847 
36848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36849 {
36850 	USE_OPLINE
36851 
36852 	zval *container;
36853 
36854 	zval *offset;
36855 
36856 	SAVE_OPLINE();
36857 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36858 
36859 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
36860 		zend_throw_error(NULL, "Using $this when not in object context");
36861 
36862 		HANDLE_EXCEPTION();
36863 	}
36864 
36865 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36866 
36867 	if (IS_CV == IS_CONST ||
36868 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36869 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36870 			container = Z_REFVAL_P(container);
36871 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36872 				goto fetch_obj_r_no_object;
36873 			}
36874 		} else {
36875 			goto fetch_obj_r_no_object;
36876 		}
36877 	}
36878 
36879 	/* here we are sure we are dealing with an object */
36880 	do {
36881 		zend_object *zobj = Z_OBJ_P(container);
36882 		zval *retval;
36883 
36884 		if (IS_CV == IS_CONST &&
36885 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
36886 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
36887 
36888 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
36889 				retval = OBJ_PROP(zobj, prop_offset);
36890 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
36891 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
36892 					break;
36893 				}
36894 			} else if (EXPECTED(zobj->properties != NULL)) {
36895 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
36896 				if (EXPECTED(retval)) {
36897 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
36898 					break;
36899 				}
36900 			}
36901 		}
36902 
36903 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
36904 fetch_obj_r_no_object:
36905 			zend_error(E_NOTICE, "Trying to get property of non-object");
36906 			ZVAL_NULL(EX_VAR(opline->result.var));
36907 		} else {
36908 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
36909 
36910 			if (retval != EX_VAR(opline->result.var)) {
36911 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
36912 			}
36913 		}
36914 	} while (0);
36915 
36916 
36917 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36918 }
36919 
36920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36921 {
36922 	USE_OPLINE
36923 	zend_free_op free_op1;
36924 	zval *property;
36925 	zval *container;
36926 
36927 	SAVE_OPLINE();
36928 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36929 
36930 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
36931 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
36932 		zend_throw_error(NULL, "Using $this when not in object context");
36933 
36934 		HANDLE_EXCEPTION();
36935 	}
36936 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36937 		zend_throw_error(NULL, "Cannot use string offset as an object");
36938 
36939 		HANDLE_EXCEPTION();
36940 	}
36941 
36942 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
36943 
36944 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36945 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
36946 	}
36947 
36948 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36949 }
36950 
36951 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36952 {
36953 	USE_OPLINE
36954 	zend_free_op free_op1;
36955 	zval *property;
36956 	zval *container;
36957 
36958 	SAVE_OPLINE();
36959 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36960 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36961 
36962 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
36963 		zend_throw_error(NULL, "Using $this when not in object context");
36964 
36965 		HANDLE_EXCEPTION();
36966 	}
36967 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
36968 		zend_throw_error(NULL, "Cannot use string offset as an object");
36969 
36970 		HANDLE_EXCEPTION();
36971 	}
36972 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
36973 
36974 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
36975 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
36976 	}
36977 
36978 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36979 }
36980 
36981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36982 {
36983 	USE_OPLINE
36984 
36985 	zval *container;
36986 
36987 	zval *offset;
36988 
36989 	SAVE_OPLINE();
36990 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
36991 
36992 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
36993 		zend_throw_error(NULL, "Using $this when not in object context");
36994 
36995 		HANDLE_EXCEPTION();
36996 	}
36997 
36998 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
36999 
37000 	if (IS_CV == IS_CONST ||
37001 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37002 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37003 			container = Z_REFVAL_P(container);
37004 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37005 				goto fetch_obj_is_no_object;
37006 			}
37007 		} else {
37008 			goto fetch_obj_is_no_object;
37009 		}
37010 	}
37011 
37012 	/* here we are sure we are dealing with an object */
37013 	do {
37014 		zend_object *zobj = Z_OBJ_P(container);
37015 		zval *retval;
37016 
37017 		if (IS_CV == IS_CONST &&
37018 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
37019 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
37020 
37021 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
37022 				retval = OBJ_PROP(zobj, prop_offset);
37023 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
37024 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
37025 					break;
37026 				}
37027 			} else if (EXPECTED(zobj->properties != NULL)) {
37028 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
37029 				if (EXPECTED(retval)) {
37030 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
37031 					break;
37032 				}
37033 			}
37034 		}
37035 
37036 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
37037 fetch_obj_is_no_object:
37038 			ZVAL_NULL(EX_VAR(opline->result.var));
37039 		} else {
37040 
37041 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
37042 
37043 			if (retval != EX_VAR(opline->result.var)) {
37044 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
37045 			}
37046 		}
37047 	} while (0);
37048 
37049 
37050 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37051 }
37052 
37053 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37054 {
37055 	USE_OPLINE
37056 	zval *container;
37057 
37058 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
37059 		/* Behave like FETCH_OBJ_W */
37060 		zend_free_op free_op1;
37061 		zval *property;
37062 
37063 		SAVE_OPLINE();
37064 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37065 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
37066 
37067 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
37068 			zend_throw_error(NULL, "Using $this when not in object context");
37069 
37070 			HANDLE_EXCEPTION();
37071 		}
37072 		if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
37073 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
37074 
37075 
37076 			HANDLE_EXCEPTION();
37077 		}
37078 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
37079 			zend_throw_error(NULL, "Cannot use string offset as an object");
37080 
37081 			HANDLE_EXCEPTION();
37082 		}
37083 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
37084 
37085 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
37086 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
37087 		}
37088 
37089 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37090 	} else {
37091 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37092 	}
37093 }
37094 
37095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37096 {
37097 	USE_OPLINE
37098 	zend_free_op free_op1;
37099 	zval *container, *property;
37100 
37101 	SAVE_OPLINE();
37102 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
37103 
37104 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
37105 		zend_throw_error(NULL, "Using $this when not in object context");
37106 
37107 		HANDLE_EXCEPTION();
37108 	}
37109 
37110 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37111 
37112 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
37113 		zend_throw_error(NULL, "Cannot use string offset as an object");
37114 
37115 		HANDLE_EXCEPTION();
37116 	}
37117 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
37118 
37119 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
37120 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
37121 	}
37122 
37123 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37124 }
37125 
37126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37127 {
37128 	USE_OPLINE
37129 
37130 	zval *object;
37131 	zval *property_name;
37132 
37133 	SAVE_OPLINE();
37134 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
37135 
37136 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
37137 		zend_throw_error(NULL, "Using $this when not in object context");
37138 
37139 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
37140 		HANDLE_EXCEPTION();
37141 	}
37142 
37143 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37144 
37145 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
37146 		zend_throw_error(NULL, "Cannot use string offset as an array");
37147 
37148 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
37149 		HANDLE_EXCEPTION();
37150 	}
37151 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
37152 
37153 
37154 	/* assign_obj has two opcodes! */
37155 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37156 }
37157 
37158 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37159 {
37160 	USE_OPLINE
37161 
37162 	zval *object_ptr;
37163 	zend_free_op free_op_data1;
37164 	zval *value;
37165 	zval *variable_ptr;
37166 	zval *dim;
37167 
37168 	SAVE_OPLINE();
37169 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
37170 
37171 	if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
37172 		zend_throw_error(NULL, "Cannot use string offset as an array");
37173 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
37174 
37175 		HANDLE_EXCEPTION();
37176 	}
37177 
37178 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
37179 try_assign_dim_array:
37180 		if (IS_CV == IS_UNUSED) {
37181 			SEPARATE_ARRAY(object_ptr);
37182 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
37183 			if (UNEXPECTED(variable_ptr == NULL)) {
37184 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
37185 				variable_ptr = &EG(error_zval);
37186 			}
37187 		} else {
37188 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37189 			SEPARATE_ARRAY(object_ptr);
37190 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, IS_CV, BP_VAR_W);
37191 
37192 		}
37193 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37194 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
37195 			FREE_OP(free_op_data1);
37196 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37197 				ZVAL_NULL(EX_VAR(opline->result.var));
37198 			}
37199 		} else {
37200 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
37201 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37202 				ZVAL_COPY(EX_VAR(opline->result.var), value);
37203 			}
37204 		}
37205 	} else {
37206 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
37207 			object_ptr = Z_REFVAL_P(object_ptr);
37208 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
37209 				goto try_assign_dim_array;
37210 			}
37211 		}
37212 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
37213 
37214 			zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37215 
37216 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
37217 
37218 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
37219 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
37220 				if (IS_CV == IS_UNUSED) {
37221 					zend_throw_error(NULL, "[] operator not supported for strings");
37222 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
37223 
37224 					HANDLE_EXCEPTION();
37225 				} else {
37226 					zend_long offset;
37227 
37228 					dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37229 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
37230 
37231 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37232 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
37233 					FREE_OP(free_op_data1);
37234 				}
37235 			} else {
37236 				zval_ptr_dtor_nogc(object_ptr);
37237 assign_dim_convert_to_array:
37238 				ZVAL_NEW_ARR(object_ptr);
37239 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
37240 				goto try_assign_dim_array;
37241 			}
37242 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
37243 			if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
37244 				goto assign_dim_clean;
37245 			}
37246 			goto assign_dim_convert_to_array;
37247 		} else {
37248 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
37249 assign_dim_clean:
37250 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37251 
37252 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37253 			FREE_OP(free_op_data1);
37254 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37255 				ZVAL_NULL(EX_VAR(opline->result.var));
37256 			}
37257 		}
37258 	}
37259 
37260 	/* assign_dim has two opcodes! */
37261 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37262 }
37263 
37264 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37265 {
37266 	USE_OPLINE
37267 
37268 	zval *value;
37269 	zval *variable_ptr;
37270 
37271 	SAVE_OPLINE();
37272 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37273 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
37274 
37275 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) {
37276 
37277 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37278 			ZVAL_NULL(EX_VAR(opline->result.var));
37279 		}
37280 	} else {
37281 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
37282 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37283 			ZVAL_COPY(EX_VAR(opline->result.var), value);
37284 		}
37285 
37286 		/* zend_assign_to_variable() always takes care of op2, never free it! */
37287 	}
37288 
37289 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37290 }
37291 
37292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37293 {
37294 	USE_OPLINE
37295 
37296 	zval *variable_ptr;
37297 	zval *value_ptr;
37298 
37299 	SAVE_OPLINE();
37300 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
37301 
37302 	if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
37303 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
37304 
37305 		HANDLE_EXCEPTION();
37306 	}
37307 	if (IS_CV == IS_VAR &&
37308 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
37309 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
37310 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
37311 
37312 
37313 		HANDLE_EXCEPTION();
37314 	}
37315 	if (IS_CV == IS_VAR &&
37316 	    (value_ptr == &EG(uninitialized_zval) ||
37317 	     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
37318 	      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
37319 		if (!0 && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op2.var)) != IS_INDIRECT)) { /* undo the effect of get_zval_ptr_ptr() */
37320 			Z_TRY_ADDREF_P(value_ptr);
37321 		}
37322 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
37323 		if (UNEXPECTED(EG(exception) != NULL)) {
37324 
37325 			HANDLE_EXCEPTION();
37326 		}
37327 		ZEND_VM_TAIL_CALL(ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37328 	}
37329 
37330 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
37331 	if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
37332 		zend_throw_error(NULL, "Cannot create references to/from string offsets nor overloaded objects");
37333 
37334 		HANDLE_EXCEPTION();
37335 	}
37336 	if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
37337 	    (IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
37338 		variable_ptr = &EG(uninitialized_zval);
37339 	} else {
37340 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
37341 	}
37342 
37343 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37344 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
37345 	}
37346 
37347 
37348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37349 }
37350 
37351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37352 {
37353 	USE_OPLINE
37354 
37355 	zval *op1, *op2;
37356 	zend_string *op1_str, *op2_str, *str;
37357 
37358 	SAVE_OPLINE();
37359 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
37360 	if (IS_CV == IS_CONST) {
37361 		op1_str = Z_STR_P(op1);
37362 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
37363 		op1_str = zend_string_copy(Z_STR_P(op1));
37364 	} else {
37365 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
37366 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
37367 		}
37368 		op1_str = _zval_get_string_func(op1);
37369 	}
37370 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37371 	if (IS_CV == IS_CONST) {
37372 		op2_str = Z_STR_P(op2);
37373 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
37374 		op2_str = zend_string_copy(Z_STR_P(op2));
37375 	} else {
37376 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
37377 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
37378 		}
37379 		op2_str = _zval_get_string_func(op2);
37380 	}
37381 	do {
37382 		if (IS_CV != IS_CONST) {
37383 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
37384 				if (IS_CV == IS_CONST) {
37385 					zend_string_addref(op2_str);
37386 				}
37387 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
37388 				zend_string_release(op1_str);
37389 				break;
37390 			}
37391 		}
37392 		if (IS_CV != IS_CONST) {
37393 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
37394 				if (IS_CV == IS_CONST) {
37395 					zend_string_addref(op1_str);
37396 				}
37397 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
37398 				zend_string_release(op2_str);
37399 				break;
37400 			}
37401 		}
37402 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
37403 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
37404 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
37405 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
37406 		if (IS_CV != IS_CONST) {
37407 			zend_string_release(op1_str);
37408 		}
37409 		if (IS_CV != IS_CONST) {
37410 			zend_string_release(op2_str);
37411 		}
37412 	} while (0);
37413 
37414 
37415 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37416 }
37417 
37418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37419 {
37420 	USE_OPLINE
37421 	zval *function_name;
37422 
37423 	zval *object;
37424 	zend_function *fbc;
37425 	zend_class_entry *called_scope;
37426 	zend_object *obj;
37427 	zend_execute_data *call;
37428 	uint32_t call_info;
37429 
37430 	SAVE_OPLINE();
37431 
37432 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37433 
37434 	if (IS_CV != IS_CONST &&
37435 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
37436 		do {
37437 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
37438 				function_name = Z_REFVAL_P(function_name);
37439 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
37440 					break;
37441 				}
37442 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
37443 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
37444 				if (UNEXPECTED(EG(exception) != NULL)) {
37445 					HANDLE_EXCEPTION();
37446 				}
37447 			}
37448 			zend_throw_error(NULL, "Method name must be a string");
37449 
37450 
37451 			HANDLE_EXCEPTION();
37452 		} while (0);
37453 	}
37454 
37455 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
37456 
37457 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
37458 		zend_throw_error(NULL, "Using $this when not in object context");
37459 
37460 		HANDLE_EXCEPTION();
37461 	}
37462 
37463 	if (IS_CV != IS_UNUSED) {
37464 		do {
37465 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37466 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
37467 					object = Z_REFVAL_P(object);
37468 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
37469 						break;
37470 					}
37471 				}
37472 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37473 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
37474 					if (UNEXPECTED(EG(exception) != NULL)) {
37475 
37476 						HANDLE_EXCEPTION();
37477 					}
37478 				}
37479 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
37480 
37481 
37482 				HANDLE_EXCEPTION();
37483 			}
37484 		} while (0);
37485 	}
37486 
37487 	obj = Z_OBJ_P(object);
37488 	called_scope = obj->ce;
37489 
37490 	if (IS_CV != IS_CONST ||
37491 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
37492 	    zend_object *orig_obj = obj;
37493 
37494 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
37495 			zend_throw_error(NULL, "Object does not support method calls");
37496 
37497 
37498 			HANDLE_EXCEPTION();
37499 		}
37500 
37501 		/* First, locate the function. */
37502 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
37503 		if (UNEXPECTED(fbc == NULL)) {
37504 			if (EXPECTED(!EG(exception))) {
37505 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
37506 			}
37507 
37508 
37509 			HANDLE_EXCEPTION();
37510 		}
37511 		if (IS_CV == IS_CONST &&
37512 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
37513 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
37514 		    EXPECTED(obj == orig_obj)) {
37515 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
37516 		}
37517 	}
37518 
37519 	call_info = ZEND_CALL_NESTED_FUNCTION;
37520 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
37521 		obj = NULL;
37522 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
37523 		/* CV may be changed indirectly (e.g. when it's a reference) */
37524 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
37525 		GC_REFCOUNT(obj)++; /* For $this pointer */
37526 	}
37527 
37528 
37529 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
37530 		HANDLE_EXCEPTION();
37531 	}
37532 
37533 	call = zend_vm_stack_push_call_frame(call_info,
37534 		fbc, opline->extended_value, called_scope, obj);
37535 	call->prev_execute_data = EX(call);
37536 	EX(call) = call;
37537 
37538 	ZEND_VM_NEXT_OPCODE();
37539 }
37540 
37541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37542 {
37543 	USE_OPLINE
37544 
37545 	zval *op1, *op2, *result;
37546 
37547 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
37548 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37549 	do {
37550 		int result;
37551 
37552 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
37553 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
37554 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
37555 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
37556 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
37557 			} else {
37558 				break;
37559 			}
37560 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
37561 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
37562 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
37563 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
37564 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
37565 			} else {
37566 				break;
37567 			}
37568 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
37569 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
37570 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
37571 					result = 1;
37572 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
37573 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
37574 						result = 0;
37575 					} else {
37576 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
37577 					}
37578 				} else {
37579 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
37580 				}
37581 
37582 			} else {
37583 				break;
37584 			}
37585 		} else {
37586 			break;
37587 		}
37588 		ZEND_VM_SMART_BRANCH(result, 0);
37589 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
37590 		ZEND_VM_NEXT_OPCODE();
37591 	} while (0);
37592 
37593 	SAVE_OPLINE();
37594 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
37595 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
37596 	} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
37597 		/* Don't keep lock on reference, lock the value instead */
37598 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
37599 			ZVAL_UNREF(op1);
37600 		} else {
37601 			Z_DELREF_P(op1);
37602 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
37603 		}
37604 	}
37605 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
37606 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
37607 	}
37608 	result = EX_VAR(opline->result.var);
37609 	compare_function(result, op1, op2);
37610 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
37611 
37612 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37613 }
37614 
37615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37616 {
37617 	USE_OPLINE
37618 
37619 	zval *expr_ptr, new_expr;
37620 
37621 	SAVE_OPLINE();
37622 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
37623 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
37624 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
37625 		if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
37626 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
37627 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
37628 			HANDLE_EXCEPTION();
37629 		}
37630 		ZVAL_MAKE_REF(expr_ptr);
37631 		Z_ADDREF_P(expr_ptr);
37632 
37633 	} else {
37634 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
37635 		if (IS_CV == IS_TMP_VAR) {
37636 			/* pass */
37637 		} else if (IS_CV == IS_CONST) {
37638 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
37639 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
37640 				zval_copy_ctor_func(&new_expr);
37641 				expr_ptr = &new_expr;
37642 			}
37643 		} else if (IS_CV == IS_CV) {
37644 			ZVAL_DEREF(expr_ptr);
37645 			if (Z_REFCOUNTED_P(expr_ptr)) {
37646 				Z_ADDREF_P(expr_ptr);
37647 			}
37648 		} else /* if (IS_CV == IS_VAR) */ {
37649 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
37650 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
37651 
37652 				expr_ptr = Z_REFVAL_P(expr_ptr);
37653 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
37654 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
37655 					expr_ptr = &new_expr;
37656 					efree_size(ref, sizeof(zend_reference));
37657 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
37658 					Z_ADDREF_P(expr_ptr);
37659 				}
37660 			}
37661 		}
37662 	}
37663 
37664 	if (IS_CV != IS_UNUSED) {
37665 
37666 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37667 		zend_string *str;
37668 		zend_ulong hval;
37669 
37670 add_again:
37671 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
37672 			str = Z_STR_P(offset);
37673 			if (IS_CV != IS_CONST) {
37674 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
37675 					goto num_index;
37676 				}
37677 			}
37678 str_index:
37679 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
37680 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
37681 			hval = Z_LVAL_P(offset);
37682 num_index:
37683 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
37684 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
37685 			offset = Z_REFVAL_P(offset);
37686 			goto add_again;
37687 		} else if (Z_TYPE_P(offset) == IS_NULL) {
37688 			str = ZSTR_EMPTY_ALLOC();
37689 			goto str_index;
37690 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
37691 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
37692 			goto num_index;
37693 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
37694 			hval = 0;
37695 			goto num_index;
37696 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
37697 			hval = 1;
37698 			goto num_index;
37699 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
37700 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
37701 			str = ZSTR_EMPTY_ALLOC();
37702 			goto str_index;
37703 		} else {
37704 			zend_error(E_WARNING, "Illegal offset type");
37705 			zval_ptr_dtor(expr_ptr);
37706 		}
37707 
37708 	} else {
37709 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
37710 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
37711 			zval_ptr_dtor(expr_ptr);
37712 		}
37713 	}
37714 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37715 }
37716 
37717 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37718 {
37719 	zval *array;
37720 	uint32_t size;
37721 	USE_OPLINE
37722 
37723 	array = EX_VAR(opline->result.var);
37724 	if (IS_CV != IS_UNUSED) {
37725 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
37726 	} else {
37727 		size = 0;
37728 	}
37729 	ZVAL_NEW_ARR(array);
37730 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
37731 
37732 	if (IS_CV != IS_UNUSED) {
37733 		/* Explicitly initialize array as not-packed if flag is set */
37734 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
37735 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
37736 		}
37737 	}
37738 
37739 	if (IS_CV == IS_UNUSED) {
37740 		ZEND_VM_NEXT_OPCODE();
37741 #if 0 || (IS_CV != IS_UNUSED)
37742 	} else {
37743 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37744 #endif
37745 	}
37746 }
37747 
37748 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37749 {
37750 	USE_OPLINE
37751 
37752 	zval *container;
37753 	zval *offset;
37754 	zend_ulong hval;
37755 	zend_string *key;
37756 
37757 	SAVE_OPLINE();
37758 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
37759 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
37760 		zend_throw_error(NULL, "Using $this when not in object context");
37761 
37762 		HANDLE_EXCEPTION();
37763 	}
37764 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
37765 		zend_throw_error(NULL, "Cannot unset string offsets");
37766 
37767 		HANDLE_EXCEPTION();
37768 	}
37769 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37770 
37771 	do {
37772 		if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37773 			HashTable *ht;
37774 
37775 unset_dim_array:
37776 			SEPARATE_ARRAY(container);
37777 			ht = Z_ARRVAL_P(container);
37778 offset_again:
37779 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
37780 				key = Z_STR_P(offset);
37781 				if (IS_CV != IS_CONST) {
37782 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
37783 						goto num_index_dim;
37784 					}
37785 				}
37786 str_index_dim:
37787 				if (ht == &EG(symbol_table)) {
37788 					zend_delete_global_variable(key);
37789 				} else {
37790 					zend_hash_del(ht, key);
37791 				}
37792 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
37793 				hval = Z_LVAL_P(offset);
37794 num_index_dim:
37795 				zend_hash_index_del(ht, hval);
37796 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
37797 				offset = Z_REFVAL_P(offset);
37798 				goto offset_again;
37799 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
37800 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
37801 				goto num_index_dim;
37802 			} else if (Z_TYPE_P(offset) == IS_NULL) {
37803 				key = ZSTR_EMPTY_ALLOC();
37804 				goto str_index_dim;
37805 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
37806 				hval = 0;
37807 				goto num_index_dim;
37808 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
37809 				hval = 1;
37810 				goto num_index_dim;
37811 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
37812 				hval = Z_RES_HANDLE_P(offset);
37813 				goto num_index_dim;
37814 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
37815 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
37816 				key = ZSTR_EMPTY_ALLOC();
37817 				goto str_index_dim;
37818 			} else {
37819 				zend_error(E_WARNING, "Illegal offset type in unset");
37820 			}
37821 			break;
37822 		} else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
37823 			container = Z_REFVAL_P(container);
37824 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37825 				goto unset_dim_array;
37826 			}
37827 		}
37828 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
37829 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
37830 		}
37831 		if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37832 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
37833 				zend_throw_error(NULL, "Cannot use object as array");
37834 			} else {
37835 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
37836 			}
37837 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
37838 			zend_throw_error(NULL, "Cannot unset string offsets");
37839 		}
37840 	} while (0);
37841 
37842 
37843 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37844 }
37845 
37846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37847 {
37848 	USE_OPLINE
37849 
37850 	zval *container;
37851 	zval *offset;
37852 
37853 	SAVE_OPLINE();
37854 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
37855 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
37856 		zend_throw_error(NULL, "Using $this when not in object context");
37857 
37858 		HANDLE_EXCEPTION();
37859 	}
37860 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
37861 		zend_throw_error(NULL, "Cannot unset string offsets");
37862 
37863 		HANDLE_EXCEPTION();
37864 	}
37865 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
37866 
37867 	do {
37868 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
37869 			if (Z_ISREF_P(container)) {
37870 				container = Z_REFVAL_P(container);
37871 				if (Z_TYPE_P(container) != IS_OBJECT) {
37872 					break;
37873 				}
37874 			} else {
37875 				break;
37876 			}
37877 		}
37878 		if (Z_OBJ_HT_P(container)->unset_property) {
37879 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
37880 		} else {
37881 			zend_error(E_NOTICE, "Trying to unset property of non-object");
37882 		}
37883 	} while (0);
37884 
37885 
37886 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37887 }
37888 
37889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37890 {
37891 	USE_OPLINE
37892 
37893 	zval *container;
37894 	int result;
37895 	zend_ulong hval;
37896 	zval *offset;
37897 
37898 	SAVE_OPLINE();
37899 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
37900 
37901 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
37902 		zend_throw_error(NULL, "Using $this when not in object context");
37903 
37904 		HANDLE_EXCEPTION();
37905 	}
37906 
37907 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
37908 
37909 	if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37910 		HashTable *ht;
37911 		zval *value;
37912 		zend_string *str;
37913 
37914 isset_dim_obj_array:
37915 		ht = Z_ARRVAL_P(container);
37916 isset_again:
37917 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
37918 			str = Z_STR_P(offset);
37919 			if (IS_CV != IS_CONST) {
37920 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
37921 					goto num_index_prop;
37922 				}
37923 			}
37924 str_index_prop:
37925 			value = zend_hash_find_ind(ht, str);
37926 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
37927 			hval = Z_LVAL_P(offset);
37928 num_index_prop:
37929 			value = zend_hash_index_find(ht, hval);
37930 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
37931 			offset = Z_REFVAL_P(offset);
37932 			goto isset_again;
37933 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
37934 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
37935 			goto num_index_prop;
37936 		} else if (Z_TYPE_P(offset) == IS_NULL) {
37937 			str = ZSTR_EMPTY_ALLOC();
37938 			goto str_index_prop;
37939 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
37940 			hval = 0;
37941 			goto num_index_prop;
37942 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
37943 			hval = 1;
37944 			goto num_index_prop;
37945 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
37946 			hval = Z_RES_HANDLE_P(offset);
37947 			goto num_index_prop;
37948 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
37949 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
37950 			str = ZSTR_EMPTY_ALLOC();
37951 			goto str_index_prop;
37952 		} else {
37953 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
37954 			goto isset_not_found;
37955 		}
37956 
37957 		if (opline->extended_value & ZEND_ISSET) {
37958 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
37959 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
37960 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
37961 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
37962 			result = (value == NULL || !i_zend_is_true(value));
37963 		}
37964 		goto isset_dim_obj_exit;
37965 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37966 		container = Z_REFVAL_P(container);
37967 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37968 			goto isset_dim_obj_array;
37969 		}
37970 	}
37971 
37972 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
37973 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
37974 	}
37975 
37976 	if (IS_CV == IS_UNUSED ||
37977 	    (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
37978 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
37979 			result =
37980 				((opline->extended_value & ZEND_ISSET) == 0) ^
37981 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
37982 		} else {
37983 			zend_error(E_NOTICE, "Trying to check element of non-array");
37984 			goto isset_not_found;
37985 		}
37986 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
37987 		zend_long lval;
37988 
37989 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
37990 			lval = Z_LVAL_P(offset);
37991 isset_str_offset:
37992 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
37993 				if (opline->extended_value & ZEND_ISSET) {
37994 					result = 1;
37995 				} else {
37996 					result = (Z_STRVAL_P(container)[lval] == '0');
37997 				}
37998 			} else {
37999 				goto isset_not_found;
38000 			}
38001 		} else {
38002 			if (IS_CV & (IS_CV|IS_VAR)) {
38003 				ZVAL_DEREF(offset);
38004 			}
38005 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
38006 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
38007 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
38008 				lval = zval_get_long(offset);
38009 				goto isset_str_offset;
38010 			}
38011 			goto isset_not_found;
38012 		}
38013 	} else {
38014 isset_not_found:
38015 		result = ((opline->extended_value & ZEND_ISSET) == 0);
38016 	}
38017 
38018 isset_dim_obj_exit:
38019 
38020 
38021 	ZEND_VM_SMART_BRANCH(result, 1);
38022 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
38023 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38024 }
38025 
38026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38027 {
38028 	USE_OPLINE
38029 
38030 	zval *container;
38031 	int result;
38032 	zval *offset;
38033 
38034 	SAVE_OPLINE();
38035 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
38036 
38037 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
38038 		zend_throw_error(NULL, "Using $this when not in object context");
38039 
38040 		HANDLE_EXCEPTION();
38041 	}
38042 
38043 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
38044 
38045 	if (IS_CV == IS_CONST ||
38046 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
38047 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
38048 			container = Z_REFVAL_P(container);
38049 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
38050 				goto isset_no_object;
38051 			}
38052 		} else {
38053 			goto isset_no_object;
38054 		}
38055 	}
38056 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
38057 		zend_error(E_NOTICE, "Trying to check property of non-object");
38058 isset_no_object:
38059 		result = ((opline->extended_value & ZEND_ISSET) == 0);
38060 	} else {
38061 		result =
38062 			((opline->extended_value & ZEND_ISSET) == 0) ^
38063 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
38064 	}
38065 
38066 
38067 	ZEND_VM_SMART_BRANCH(result, 1);
38068 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
38069 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38070 }
38071 
38072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38073 {
38074 	USE_OPLINE
38075 
38076 	zend_generator *generator = zend_get_running_generator(execute_data);
38077 
38078 	SAVE_OPLINE();
38079 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
38080 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
38081 
38082 
38083 		HANDLE_EXCEPTION();
38084 	}
38085 
38086 	/* Destroy the previously yielded value */
38087 	zval_ptr_dtor(&generator->value);
38088 
38089 	/* Destroy the previously yielded key */
38090 	zval_ptr_dtor(&generator->key);
38091 
38092 	/* Set the new yielded value */
38093 	if (IS_CV != IS_UNUSED) {
38094 
38095 
38096 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
38097 			/* Constants and temporary variables aren't yieldable by reference,
38098 			 * but we still allow them with a notice. */
38099 			if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
38100 				zval *value;
38101 
38102 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
38103 
38104 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38105 				ZVAL_COPY_VALUE(&generator->value, value);
38106 				if (IS_CV == IS_CONST) {
38107 					if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
38108 						zval_copy_ctor_func(&generator->value);
38109 					}
38110 				}
38111 			} else {
38112 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
38113 
38114 				if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
38115 					zend_throw_error(NULL, "Cannot yield string offsets by reference");
38116 
38117 					HANDLE_EXCEPTION();
38118 				}
38119 
38120 				/* If a function call result is yielded and the function did
38121 				 * not return by reference we throw a notice. */
38122 				if (IS_CV == IS_VAR &&
38123 				    (value_ptr == &EG(uninitialized_zval) ||
38124 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
38125 				      !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
38126 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
38127 				} else {
38128 					ZVAL_MAKE_REF(value_ptr);
38129 				}
38130 				ZVAL_COPY(&generator->value, value_ptr);
38131 
38132 			}
38133 		} else {
38134 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38135 
38136 			/* Consts, temporary variables and references need copying */
38137 			if (IS_CV == IS_CONST) {
38138 				ZVAL_COPY_VALUE(&generator->value, value);
38139 				if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
38140 					zval_copy_ctor_func(&generator->value);
38141 				}
38142 			} else if (IS_CV == IS_TMP_VAR) {
38143 				ZVAL_COPY_VALUE(&generator->value, value);
38144             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
38145 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
38146 
38147 			} else {
38148 				ZVAL_COPY_VALUE(&generator->value, value);
38149 				if (IS_CV == IS_CV) {
38150 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
38151 				}
38152 			}
38153 		}
38154 	} else {
38155 		/* If no value was specified yield null */
38156 		ZVAL_NULL(&generator->value);
38157 	}
38158 
38159 	/* Set the new yielded key */
38160 	if (IS_CV != IS_UNUSED) {
38161 
38162 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
38163 
38164 		/* Consts, temporary variables and references need copying */
38165 		if (IS_CV == IS_CONST) {
38166 			ZVAL_COPY_VALUE(&generator->key, key);
38167 			if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
38168 				zval_copy_ctor_func(&generator->key);
38169 			}
38170 		} else if (IS_CV == IS_TMP_VAR) {
38171 			ZVAL_COPY_VALUE(&generator->key, key);
38172 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
38173 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
38174 
38175 		} else {
38176 			ZVAL_COPY_VALUE(&generator->key, key);
38177 			if (IS_CV == IS_CV) {
38178 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
38179 			}
38180 		}
38181 
38182 		if (Z_TYPE(generator->key) == IS_LONG
38183 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
38184 		) {
38185 			generator->largest_used_integer_key = Z_LVAL(generator->key);
38186 		}
38187 	} else {
38188 		/* If no key was specified we use auto-increment keys */
38189 		generator->largest_used_integer_key++;
38190 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
38191 	}
38192 
38193 	if (RETURN_VALUE_USED(opline)) {
38194 		/* If the return value of yield is used set the send
38195 		 * target and initialize it to NULL */
38196 		generator->send_target = EX_VAR(opline->result.var);
38197 		ZVAL_NULL(generator->send_target);
38198 	} else {
38199 		generator->send_target = NULL;
38200 	}
38201 
38202 	/* We increment to the next op, so we are at the correct position when the
38203 	 * generator is resumed. */
38204 	ZEND_VM_INC_OPCODE();
38205 
38206 	/* The GOTO VM uses a local opline variable. We need to set the opline
38207 	 * variable in execute_data so we don't resume at an old position. */
38208 	SAVE_OPLINE();
38209 
38210 	ZEND_VM_RETURN();
38211 }
38212 
38213 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38214 {
38215 	USE_OPLINE
38216 	zend_free_op free_op2;
38217 	zval *op1, *op2, *result;
38218 
38219 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38220 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38221 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38222 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38223 			result = EX_VAR(opline->result.var);
38224 			fast_long_add_function(result, op1, op2);
38225 			ZEND_VM_NEXT_OPCODE();
38226 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38227 			result = EX_VAR(opline->result.var);
38228 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
38229 			ZEND_VM_NEXT_OPCODE();
38230 		}
38231 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
38232 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38233 			result = EX_VAR(opline->result.var);
38234 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
38235 			ZEND_VM_NEXT_OPCODE();
38236 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38237 			result = EX_VAR(opline->result.var);
38238 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
38239 			ZEND_VM_NEXT_OPCODE();
38240 		}
38241 	}
38242 
38243 	SAVE_OPLINE();
38244 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38245 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38246 	}
38247 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38248 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38249 	}
38250 	add_function(EX_VAR(opline->result.var), op1, op2);
38251 
38252 	zval_ptr_dtor_nogc(free_op2);
38253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38254 }
38255 
38256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38257 {
38258 	USE_OPLINE
38259 	zend_free_op free_op2;
38260 	zval *op1, *op2, *result;
38261 
38262 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38263 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38264 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38265 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38266 			result = EX_VAR(opline->result.var);
38267 			fast_long_sub_function(result, op1, op2);
38268 			ZEND_VM_NEXT_OPCODE();
38269 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38270 			result = EX_VAR(opline->result.var);
38271 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
38272 			ZEND_VM_NEXT_OPCODE();
38273 		}
38274 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
38275 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38276 			result = EX_VAR(opline->result.var);
38277 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
38278 			ZEND_VM_NEXT_OPCODE();
38279 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38280 			result = EX_VAR(opline->result.var);
38281 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
38282 			ZEND_VM_NEXT_OPCODE();
38283 		}
38284 	}
38285 
38286 	SAVE_OPLINE();
38287 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38288 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38289 	}
38290 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38291 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38292 	}
38293 	sub_function(EX_VAR(opline->result.var), op1, op2);
38294 
38295 	zval_ptr_dtor_nogc(free_op2);
38296 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38297 }
38298 
38299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38300 {
38301 	USE_OPLINE
38302 	zend_free_op free_op2;
38303 	zval *op1, *op2, *result;
38304 
38305 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38306 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38307 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38308 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38309 			zend_long overflow;
38310 
38311 			result = EX_VAR(opline->result.var);
38312 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
38313 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
38314 			ZEND_VM_NEXT_OPCODE();
38315 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38316 			result = EX_VAR(opline->result.var);
38317 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
38318 			ZEND_VM_NEXT_OPCODE();
38319 		}
38320 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
38321 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38322 			result = EX_VAR(opline->result.var);
38323 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
38324 			ZEND_VM_NEXT_OPCODE();
38325 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38326 			result = EX_VAR(opline->result.var);
38327 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
38328 			ZEND_VM_NEXT_OPCODE();
38329 		}
38330 	}
38331 
38332 	SAVE_OPLINE();
38333 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38334 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38335 	}
38336 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38337 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38338 	}
38339 	mul_function(EX_VAR(opline->result.var), op1, op2);
38340 
38341 	zval_ptr_dtor_nogc(free_op2);
38342 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38343 }
38344 
38345 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38346 {
38347 	USE_OPLINE
38348 	zend_free_op free_op2;
38349 	zval *op1, *op2;
38350 
38351 	SAVE_OPLINE();
38352 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38353 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38354 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
38355 
38356 	zval_ptr_dtor_nogc(free_op2);
38357 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38358 }
38359 
38360 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38361 {
38362 	USE_OPLINE
38363 	zend_free_op free_op2;
38364 	zval *op1, *op2, *result;
38365 
38366 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38367 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38368 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38369 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38370 			result = EX_VAR(opline->result.var);
38371 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
38372 				SAVE_OPLINE();
38373 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
38374 				HANDLE_EXCEPTION();
38375 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
38376 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
38377 				ZVAL_LONG(result, 0);
38378 			} else {
38379 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
38380 			}
38381 			ZEND_VM_NEXT_OPCODE();
38382 		}
38383 	}
38384 
38385 	SAVE_OPLINE();
38386 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38387 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38388 	}
38389 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38390 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38391 	}
38392 	mod_function(EX_VAR(opline->result.var), op1, op2);
38393 
38394 	zval_ptr_dtor_nogc(free_op2);
38395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38396 }
38397 
38398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38399 {
38400 	USE_OPLINE
38401 	zend_free_op free_op2;
38402 	zval *op1, *op2;
38403 
38404 	SAVE_OPLINE();
38405 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38406 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38407 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
38408 
38409 	zval_ptr_dtor_nogc(free_op2);
38410 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38411 }
38412 
38413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38414 {
38415 	USE_OPLINE
38416 	zend_free_op free_op2;
38417 	zval *op1, *op2;
38418 
38419 	SAVE_OPLINE();
38420 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38421 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38422 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
38423 
38424 	zval_ptr_dtor_nogc(free_op2);
38425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38426 }
38427 
38428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38429 {
38430 	USE_OPLINE
38431 	zend_free_op free_op2;
38432 	zval *op1, *op2;
38433 
38434 	SAVE_OPLINE();
38435 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38436 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38437 	pow_function(EX_VAR(opline->result.var), op1, op2);
38438 
38439 	zval_ptr_dtor_nogc(free_op2);
38440 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38441 }
38442 
38443 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38444 {
38445 	USE_OPLINE
38446 	zend_free_op free_op2;
38447 	zval *op1, *op2;
38448 
38449 	SAVE_OPLINE();
38450 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38451 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38452 
38453 	do {
38454 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
38455 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
38456 			zend_string *op1_str = Z_STR_P(op1);
38457 			zend_string *op2_str = Z_STR_P(op2);
38458 			zend_string *str;
38459 
38460 			if (IS_CV != IS_CONST) {
38461 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
38462 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
38463 
38464 					break;
38465 				}
38466 			}
38467 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
38468 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
38469 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
38470 
38471 					break;
38472 				}
38473 			}
38474 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
38475 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
38476 			    size_t len = ZSTR_LEN(op1_str);
38477 
38478 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
38479 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
38480 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
38481 				break;
38482 			} else {
38483 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
38484 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
38485 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
38486 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
38487 			}
38488 		} else {
38489 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
38490 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38491 			}
38492 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
38493 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38494 			}
38495 			concat_function(EX_VAR(opline->result.var), op1, op2);
38496 		}
38497 
38498 	} while (0);
38499 	zval_ptr_dtor_nogc(free_op2);
38500 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38501 }
38502 
38503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38504 {
38505 	USE_OPLINE
38506 	zend_free_op free_op2;
38507 	zval *op1, *op2, *result;
38508 
38509 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38510 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38511 	do {
38512 		int result;
38513 
38514 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38515 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38516 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
38517 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38518 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
38519 			} else {
38520 				break;
38521 			}
38522 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38523 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38524 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
38525 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38526 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
38527 			} else {
38528 				break;
38529 			}
38530 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38531 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38532 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
38533 					result = 1;
38534 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
38535 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
38536 						result = 0;
38537 					} else {
38538 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
38539 					}
38540 				} else {
38541 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
38542 				}
38543 
38544 				zval_ptr_dtor_nogc(free_op2);
38545 			} else {
38546 				break;
38547 			}
38548 		} else {
38549 			break;
38550 		}
38551 		ZEND_VM_SMART_BRANCH(result, 0);
38552 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38553 		ZEND_VM_NEXT_OPCODE();
38554 	} while (0);
38555 
38556 	SAVE_OPLINE();
38557 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
38558 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38559 	}
38560 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
38561 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38562 	}
38563 	result = EX_VAR(opline->result.var);
38564 	compare_function(result, op1, op2);
38565 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
38566 
38567 	zval_ptr_dtor_nogc(free_op2);
38568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38569 }
38570 
38571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38572 {
38573 	USE_OPLINE
38574 	zend_free_op free_op2;
38575 	zval *op1, *op2, *result;
38576 
38577 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38578 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38579 	do {
38580 		int result;
38581 
38582 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38583 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38584 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
38585 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38586 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
38587 			} else {
38588 				break;
38589 			}
38590 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38591 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38592 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
38593 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38594 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
38595 			} else {
38596 				break;
38597 			}
38598 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38599 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38600 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
38601 					result = 0;
38602 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
38603 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
38604 						result = 1;
38605 					} else {
38606 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
38607 					}
38608 				} else {
38609 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
38610 				}
38611 
38612 				zval_ptr_dtor_nogc(free_op2);
38613 			} else {
38614 				break;
38615 			}
38616 		} else {
38617 			break;
38618 		}
38619 		ZEND_VM_SMART_BRANCH(result, 0);
38620 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38621 		ZEND_VM_NEXT_OPCODE();
38622 	} while (0);
38623 
38624 	SAVE_OPLINE();
38625 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
38626 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38627 	}
38628 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
38629 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38630 	}
38631 	result = EX_VAR(opline->result.var);
38632 	compare_function(result, op1, op2);
38633 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
38634 
38635 	zval_ptr_dtor_nogc(free_op2);
38636 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38637 }
38638 
38639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38640 {
38641 	USE_OPLINE
38642 	zend_free_op free_op2;
38643 	zval *op1, *op2, *result;
38644 
38645 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38646 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38647 	do {
38648 		int result;
38649 
38650 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38651 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38652 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
38653 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38654 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
38655 			} else {
38656 				break;
38657 			}
38658 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
38659 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38660 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
38661 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38662 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
38663 			} else {
38664 				break;
38665 			}
38666 		} else {
38667 			break;
38668 		}
38669 		ZEND_VM_SMART_BRANCH(result, 0);
38670 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38671 		ZEND_VM_NEXT_OPCODE();
38672 	} while (0);
38673 
38674 	SAVE_OPLINE();
38675 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38676 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38677 	}
38678 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38679 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38680 	}
38681 	result = EX_VAR(opline->result.var);
38682 	compare_function(result, op1, op2);
38683 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
38684 
38685 	zval_ptr_dtor_nogc(free_op2);
38686 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38687 }
38688 
38689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38690 {
38691 	USE_OPLINE
38692 	zend_free_op free_op2;
38693 	zval *op1, *op2, *result;
38694 
38695 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38696 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38697 	do {
38698 		int result;
38699 
38700 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
38701 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38702 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
38703 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38704 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
38705 			} else {
38706 				break;
38707 			}
38708 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
38709 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
38710 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
38711 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
38712 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
38713 			} else {
38714 				break;
38715 			}
38716 		} else {
38717 			break;
38718 		}
38719 		ZEND_VM_SMART_BRANCH(result, 0);
38720 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38721 		ZEND_VM_NEXT_OPCODE();
38722 	} while (0);
38723 
38724 	SAVE_OPLINE();
38725 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
38726 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
38727 	}
38728 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
38729 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
38730 	}
38731 	result = EX_VAR(opline->result.var);
38732 	compare_function(result, op1, op2);
38733 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
38734 
38735 	zval_ptr_dtor_nogc(free_op2);
38736 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38737 }
38738 
38739 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38740 {
38741 	USE_OPLINE
38742 	zend_free_op free_op2;
38743 	zval *op1, *op2;
38744 
38745 	SAVE_OPLINE();
38746 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38747 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38748 	compare_function(EX_VAR(opline->result.var), op1, op2);
38749 
38750 	zval_ptr_dtor_nogc(free_op2);
38751 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38752 }
38753 
38754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38755 {
38756 	USE_OPLINE
38757 	zend_free_op free_op2;
38758 	zval *op1, *op2;
38759 
38760 	SAVE_OPLINE();
38761 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38762 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38763 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
38764 
38765 	zval_ptr_dtor_nogc(free_op2);
38766 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38767 }
38768 
38769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38770 {
38771 	USE_OPLINE
38772 	zend_free_op free_op2;
38773 	zval *op1, *op2;
38774 
38775 	SAVE_OPLINE();
38776 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38777 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38778 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
38779 
38780 	zval_ptr_dtor_nogc(free_op2);
38781 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38782 }
38783 
38784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38785 {
38786 	USE_OPLINE
38787 	zend_free_op free_op2;
38788 	zval *op1, *op2;
38789 
38790 	SAVE_OPLINE();
38791 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38792 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38793 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
38794 
38795 	zval_ptr_dtor_nogc(free_op2);
38796 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38797 }
38798 
38799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38800 {
38801 	USE_OPLINE
38802 	zend_free_op free_op2;
38803 	zval *op1, *op2;
38804 
38805 	SAVE_OPLINE();
38806 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38807 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38808 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
38809 
38810 	zval_ptr_dtor_nogc(free_op2);
38811 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38812 }
38813 
38814 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
38815 {
38816 	USE_OPLINE
38817 	zend_free_op free_op2, free_op_data1;
38818 	zval *object;
38819 	zval *property;
38820 	zval *value;
38821 	zval *zptr;
38822 
38823 	SAVE_OPLINE();
38824 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
38825 
38826 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
38827 		zend_throw_error(NULL, "Using $this when not in object context");
38828 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
38829 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
38830 		HANDLE_EXCEPTION();
38831 	}
38832 
38833 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38834 
38835 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
38836 		zend_throw_error(NULL, "Cannot use string offset as an object");
38837 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
38838 		zval_ptr_dtor_nogc(free_op2);
38839 		HANDLE_EXCEPTION();
38840 	}
38841 
38842 	do {
38843 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
38844 
38845 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38846 			ZVAL_DEREF(object);
38847 			if (UNEXPECTED(!make_real_object(object))) {
38848 				zend_error(E_WARNING, "Attempt to assign property of non-object");
38849 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38850 					ZVAL_NULL(EX_VAR(opline->result.var));
38851 				}
38852 				break;
38853 			}
38854 		}
38855 
38856 		/* here we are sure we are dealing with an object */
38857 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
38858 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
38859 			if (UNEXPECTED(zptr == &EG(error_zval))) {
38860 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38861 					ZVAL_NULL(EX_VAR(opline->result.var));
38862 				}
38863 			} else {
38864 				ZVAL_DEREF(zptr);
38865 				SEPARATE_ZVAL_NOREF(zptr);
38866 
38867 				binary_op(zptr, zptr, value);
38868 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38869 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
38870 				}
38871 			}
38872 		} else {
38873 			zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), value, binary_op, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
38874 		}
38875 	} while (0);
38876 
38877 	FREE_OP(free_op_data1);
38878 	zval_ptr_dtor_nogc(free_op2);
38879 
38880 	/* assign_obj has two opcodes! */
38881 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38882 }
38883 
38884 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
38885 {
38886 	USE_OPLINE
38887 	zend_free_op free_op2, free_op_data1;
38888 	zval *var_ptr, rv;
38889 	zval *value, *container, *dim;
38890 
38891 	SAVE_OPLINE();
38892 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
38893 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
38894 		zend_throw_error(NULL, "Using $this when not in object context");
38895 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
38896 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
38897 		HANDLE_EXCEPTION();
38898 	}
38899 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
38900 		zend_throw_error(NULL, "Cannot use string offset as an array");
38901 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
38902 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
38903 		HANDLE_EXCEPTION();
38904 	}
38905 
38906 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38907 
38908 	do {
38909 		if (IS_CV == IS_UNUSED || UNEXPECTED(Z_TYPE_P(container) != IS_ARRAY)) {
38910 			if (IS_CV != IS_UNUSED) {
38911 				ZVAL_DEREF(container);
38912 			}
38913 			if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
38914 				value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
38915 				zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
38916 				break;
38917 			}
38918 		}
38919 
38920 		zend_fetch_dimension_address_RW(&rv, container, dim, (IS_TMP_VAR|IS_VAR));
38921 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
38922 		ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
38923 		var_ptr = Z_INDIRECT(rv);
38924 
38925 		if (UNEXPECTED(var_ptr == NULL)) {
38926 			zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
38927 			zval_ptr_dtor_nogc(free_op2);
38928 			FREE_OP(free_op_data1);
38929 
38930 			HANDLE_EXCEPTION();
38931 		}
38932 
38933 		if (UNEXPECTED(var_ptr == &EG(error_zval))) {
38934 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38935 				ZVAL_NULL(EX_VAR(opline->result.var));
38936 			}
38937 		} else {
38938 			ZVAL_DEREF(var_ptr);
38939 			SEPARATE_ZVAL_NOREF(var_ptr);
38940 
38941 			binary_op(var_ptr, var_ptr, value);
38942 
38943 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38944 				ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
38945 			}
38946 		}
38947 	} while (0);
38948 
38949 	zval_ptr_dtor_nogc(free_op2);
38950 	FREE_OP(free_op_data1);
38951 
38952 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38953 }
38954 
38955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
38956 {
38957 	USE_OPLINE
38958 	zend_free_op free_op2;
38959 	zval *var_ptr;
38960 	zval *value;
38961 
38962 	SAVE_OPLINE();
38963 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
38964 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
38965 
38966 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
38967 		zend_throw_error(NULL, "Cannot use assign-op operators with overloaded objects nor string offsets");
38968 		zval_ptr_dtor_nogc(free_op2);
38969 		HANDLE_EXCEPTION();
38970 	}
38971 
38972 	if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
38973 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38974 			ZVAL_NULL(EX_VAR(opline->result.var));
38975 		}
38976 	} else {
38977 		ZVAL_DEREF(var_ptr);
38978 		SEPARATE_ZVAL_NOREF(var_ptr);
38979 
38980 		binary_op(var_ptr, var_ptr, value);
38981 
38982 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38983 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
38984 		}
38985 	}
38986 
38987 	zval_ptr_dtor_nogc(free_op2);
38988 
38989 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38990 }
38991 
38992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38993 {
38994 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
38995 	USE_OPLINE
38996 
38997 # if 0 || (IS_CV != IS_UNUSED)
38998 	if (EXPECTED(opline->extended_value == 0)) {
38999 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39000 	}
39001 # endif
39002 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39003 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39004 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39005 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39006 	}
39007 #else
39008 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39009 #endif
39010 }
39011 
39012 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39013 {
39014 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39015 	USE_OPLINE
39016 
39017 # if 0 || (IS_CV != IS_UNUSED)
39018 	if (EXPECTED(opline->extended_value == 0)) {
39019 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39020 	}
39021 # endif
39022 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39023 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39024 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39025 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39026 	}
39027 #else
39028 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39029 #endif
39030 }
39031 
39032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39033 {
39034 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39035 	USE_OPLINE
39036 
39037 # if 0 || (IS_CV != IS_UNUSED)
39038 	if (EXPECTED(opline->extended_value == 0)) {
39039 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39040 	}
39041 # endif
39042 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39043 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39044 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39045 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39046 	}
39047 #else
39048 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39049 #endif
39050 }
39051 
39052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39053 {
39054 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39055 	USE_OPLINE
39056 
39057 # if 0 || (IS_CV != IS_UNUSED)
39058 	if (EXPECTED(opline->extended_value == 0)) {
39059 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39060 	}
39061 # endif
39062 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39063 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39064 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39065 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39066 	}
39067 #else
39068 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39069 #endif
39070 }
39071 
39072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39073 {
39074 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39075 	USE_OPLINE
39076 
39077 # if 0 || (IS_CV != IS_UNUSED)
39078 	if (EXPECTED(opline->extended_value == 0)) {
39079 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39080 	}
39081 # endif
39082 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39083 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39084 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39085 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39086 	}
39087 #else
39088 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39089 #endif
39090 }
39091 
39092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39093 {
39094 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39095 	USE_OPLINE
39096 
39097 # if 0 || (IS_CV != IS_UNUSED)
39098 	if (EXPECTED(opline->extended_value == 0)) {
39099 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39100 	}
39101 # endif
39102 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39103 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39104 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39105 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39106 	}
39107 #else
39108 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39109 #endif
39110 }
39111 
39112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39113 {
39114 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39115 	USE_OPLINE
39116 
39117 # if 0 || (IS_CV != IS_UNUSED)
39118 	if (EXPECTED(opline->extended_value == 0)) {
39119 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39120 	}
39121 # endif
39122 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39123 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39124 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39125 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39126 	}
39127 #else
39128 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39129 #endif
39130 }
39131 
39132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39133 {
39134 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39135 	USE_OPLINE
39136 
39137 # if 0 || (IS_CV != IS_UNUSED)
39138 	if (EXPECTED(opline->extended_value == 0)) {
39139 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39140 	}
39141 # endif
39142 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39143 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39144 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39145 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39146 	}
39147 #else
39148 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39149 #endif
39150 }
39151 
39152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39153 {
39154 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39155 	USE_OPLINE
39156 
39157 # if 0 || (IS_CV != IS_UNUSED)
39158 	if (EXPECTED(opline->extended_value == 0)) {
39159 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39160 	}
39161 # endif
39162 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39163 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39164 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39165 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39166 	}
39167 #else
39168 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39169 #endif
39170 }
39171 
39172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39173 {
39174 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39175 	USE_OPLINE
39176 
39177 # if 0 || (IS_CV != IS_UNUSED)
39178 	if (EXPECTED(opline->extended_value == 0)) {
39179 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39180 	}
39181 # endif
39182 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39183 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39184 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39185 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39186 	}
39187 #else
39188 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39189 #endif
39190 }
39191 
39192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39193 {
39194 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39195 	USE_OPLINE
39196 
39197 # if 0 || (IS_CV != IS_UNUSED)
39198 	if (EXPECTED(opline->extended_value == 0)) {
39199 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39200 	}
39201 # endif
39202 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39203 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39204 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39205 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39206 	}
39207 #else
39208 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39209 #endif
39210 }
39211 
39212 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39213 {
39214 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
39215 	USE_OPLINE
39216 
39217 # if 0 || (IS_CV != IS_UNUSED)
39218 	if (EXPECTED(opline->extended_value == 0)) {
39219 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39220 	}
39221 # endif
39222 	if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
39223 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39224 	} else /* if (EXPECTED(opline->extended_value == ZEND_ASSIGN_OBJ)) */ {
39225 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39226 	}
39227 #else
39228 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39229 #endif
39230 }
39231 
39232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
39233 {
39234 	USE_OPLINE
39235 	zend_free_op free_op2;
39236 	zval *object;
39237 	zval *property;
39238 	zval *zptr;
39239 
39240 	SAVE_OPLINE();
39241 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
39242 
39243 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
39244 		zend_throw_error(NULL, "Using $this when not in object context");
39245 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39246 		HANDLE_EXCEPTION();
39247 	}
39248 
39249 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39250 
39251 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
39252 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
39253 		zval_ptr_dtor_nogc(free_op2);
39254 		HANDLE_EXCEPTION();
39255 	}
39256 
39257 	do {
39258 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39259 			ZVAL_DEREF(object);
39260 			if (UNEXPECTED(!make_real_object(object))) {
39261 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
39262 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39263 					ZVAL_NULL(EX_VAR(opline->result.var));
39264 				}
39265 				break;
39266 			}
39267 		}
39268 
39269 		/* here we are sure we are dealing with an object */
39270 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
39271 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
39272 			if (UNEXPECTED(zptr == &EG(error_zval))) {
39273 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39274 					ZVAL_NULL(EX_VAR(opline->result.var));
39275 				}
39276 			} else {
39277 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
39278 					if (inc) {
39279 						fast_long_increment_function(zptr);
39280 					} else {
39281 						fast_long_decrement_function(zptr);
39282 					}
39283 				} else {
39284 					ZVAL_DEREF(zptr);
39285 					SEPARATE_ZVAL_NOREF(zptr);
39286 
39287 					if (inc) {
39288 						increment_function(zptr);
39289 					} else {
39290 						decrement_function(zptr);
39291 					}
39292 				}
39293 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39294 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
39295 				}
39296 			}
39297 		} else {
39298 			zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39299 		}
39300 	} while (0);
39301 
39302 	zval_ptr_dtor_nogc(free_op2);
39303 
39304 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39305 }
39306 
39307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39308 {
39309 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39310 }
39311 
39312 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39313 {
39314 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39315 }
39316 
39317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
39318 {
39319 	USE_OPLINE
39320 	zend_free_op free_op2;
39321 	zval *object;
39322 	zval *property;
39323 	zval *zptr;
39324 
39325 	SAVE_OPLINE();
39326 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
39327 
39328 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
39329 		zend_throw_error(NULL, "Using $this when not in object context");
39330 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39331 		HANDLE_EXCEPTION();
39332 	}
39333 
39334 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39335 
39336 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
39337 		zend_throw_error(NULL, "Cannot increment/decrement overloaded objects nor string offsets");
39338 		zval_ptr_dtor_nogc(free_op2);
39339 		HANDLE_EXCEPTION();
39340 	}
39341 
39342 	do {
39343 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39344 			ZVAL_DEREF(object);
39345 			if (UNEXPECTED(!make_real_object(object))) {
39346 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
39347 				ZVAL_NULL(EX_VAR(opline->result.var));
39348 				break;
39349 			}
39350 		}
39351 
39352 		/* here we are sure we are dealing with an object */
39353 
39354 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
39355 			&& EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL))) != NULL)) {
39356 			if (UNEXPECTED(zptr == &EG(error_zval))) {
39357 				ZVAL_NULL(EX_VAR(opline->result.var));
39358 			} else {
39359 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
39360 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
39361 					if (inc) {
39362 						fast_long_increment_function(zptr);
39363 					} else {
39364 						fast_long_decrement_function(zptr);
39365 					}
39366 				} else {
39367 					ZVAL_DEREF(zptr);
39368 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
39369 					zval_opt_copy_ctor(zptr);
39370 					if (inc) {
39371 						increment_function(zptr);
39372 					} else {
39373 						decrement_function(zptr);
39374 					}
39375 				}
39376 			}
39377 		} else {
39378 			zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), inc, EX_VAR(opline->result.var));
39379 		}
39380 	} while (0);
39381 
39382 	zval_ptr_dtor_nogc(free_op2);
39383 
39384 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39385 }
39386 
39387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39388 {
39389 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39390 }
39391 
39392 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39393 {
39394 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
39395 }
39396 
39397 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39398 {
39399 	USE_OPLINE
39400 	zend_free_op free_op2;
39401 	zval *container;
39402 
39403 	SAVE_OPLINE();
39404 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
39405 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39406 	zval_ptr_dtor_nogc(free_op2);
39407 
39408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39409 }
39410 
39411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39412 {
39413 	USE_OPLINE
39414 	zend_free_op free_op1, free_op2;
39415 	zval *container;
39416 
39417 	SAVE_OPLINE();
39418 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39419 
39420 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39421 		zend_throw_error(NULL, "Cannot use string offset as an array");
39422 		HANDLE_EXCEPTION();
39423 	}
39424 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39425 	zval_ptr_dtor_nogc(free_op2);
39426 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39427 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
39428 	}
39429 
39430 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39431 }
39432 
39433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39434 {
39435 	USE_OPLINE
39436 	zend_free_op free_op1, free_op2;
39437 	zval *container;
39438 
39439 	SAVE_OPLINE();
39440 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
39441 
39442 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39443 		zend_throw_error(NULL, "Cannot use string offset as an array");
39444 		HANDLE_EXCEPTION();
39445 	}
39446 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39447 	zval_ptr_dtor_nogc(free_op2);
39448 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39449 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
39450 	}
39451 
39452 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39453 }
39454 
39455 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39456 {
39457 	USE_OPLINE
39458 	zend_free_op free_op2;
39459 	zval *container;
39460 
39461 	SAVE_OPLINE();
39462 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
39463 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39464 	zval_ptr_dtor_nogc(free_op2);
39465 
39466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39467 }
39468 
39469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39470 {
39471 	USE_OPLINE
39472 	zval *container;
39473 	zend_free_op free_op1, free_op2;
39474 
39475 	SAVE_OPLINE();
39476 
39477 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
39478         if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
39479             zend_throw_error(NULL, "Cannot use temporary expression in write context");
39480 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39481 
39482 			HANDLE_EXCEPTION();
39483         }
39484 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39485 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39486 			zend_throw_error(NULL, "Cannot use string offset as an array");
39487 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39488 			HANDLE_EXCEPTION();
39489 		}
39490 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39491 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39492 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
39493 		}
39494 		zval_ptr_dtor_nogc(free_op2);
39495 
39496 	} else {
39497 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
39498 			zend_throw_error(NULL, "Cannot use [] for reading");
39499 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39500 
39501 			HANDLE_EXCEPTION();
39502 		}
39503 		container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
39504 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39505 		zval_ptr_dtor_nogc(free_op2);
39506 
39507 	}
39508 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39509 }
39510 
39511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39512 {
39513 	USE_OPLINE
39514 	zend_free_op free_op1, free_op2;
39515 	zval *container;
39516 
39517 	SAVE_OPLINE();
39518 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
39519 
39520 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39521 		zend_throw_error(NULL, "Cannot use string offset as an array");
39522 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39523 		HANDLE_EXCEPTION();
39524 	}
39525 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
39526 	zval_ptr_dtor_nogc(free_op2);
39527 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39528 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
39529 	}
39530 
39531 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39532 }
39533 
39534 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39535 {
39536 	USE_OPLINE
39537 
39538 	zval *container;
39539 	zend_free_op free_op2;
39540 	zval *offset;
39541 
39542 	SAVE_OPLINE();
39543 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
39544 
39545 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39546 		zend_throw_error(NULL, "Using $this when not in object context");
39547 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39548 		HANDLE_EXCEPTION();
39549 	}
39550 
39551 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39552 
39553 	if (IS_CV == IS_CONST ||
39554 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
39555 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
39556 			container = Z_REFVAL_P(container);
39557 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
39558 				goto fetch_obj_r_no_object;
39559 			}
39560 		} else {
39561 			goto fetch_obj_r_no_object;
39562 		}
39563 	}
39564 
39565 	/* here we are sure we are dealing with an object */
39566 	do {
39567 		zend_object *zobj = Z_OBJ_P(container);
39568 		zval *retval;
39569 
39570 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
39571 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
39572 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
39573 
39574 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
39575 				retval = OBJ_PROP(zobj, prop_offset);
39576 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
39577 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
39578 					break;
39579 				}
39580 			} else if (EXPECTED(zobj->properties != NULL)) {
39581 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
39582 				if (EXPECTED(retval)) {
39583 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
39584 					break;
39585 				}
39586 			}
39587 		}
39588 
39589 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
39590 fetch_obj_r_no_object:
39591 			zend_error(E_NOTICE, "Trying to get property of non-object");
39592 			ZVAL_NULL(EX_VAR(opline->result.var));
39593 		} else {
39594 			retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
39595 
39596 			if (retval != EX_VAR(opline->result.var)) {
39597 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
39598 			}
39599 		}
39600 	} while (0);
39601 
39602 	zval_ptr_dtor_nogc(free_op2);
39603 
39604 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39605 }
39606 
39607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39608 {
39609 	USE_OPLINE
39610 	zend_free_op free_op1, free_op2;
39611 	zval *property;
39612 	zval *container;
39613 
39614 	SAVE_OPLINE();
39615 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39616 
39617 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39618 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39619 		zend_throw_error(NULL, "Using $this when not in object context");
39620 		zval_ptr_dtor_nogc(free_op2);
39621 		HANDLE_EXCEPTION();
39622 	}
39623 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39624 		zend_throw_error(NULL, "Cannot use string offset as an object");
39625 		zval_ptr_dtor_nogc(free_op2);
39626 		HANDLE_EXCEPTION();
39627 	}
39628 
39629 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
39630 	zval_ptr_dtor_nogc(free_op2);
39631 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39632 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
39633 	}
39634 
39635 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39636 }
39637 
39638 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39639 {
39640 	USE_OPLINE
39641 	zend_free_op free_op1, free_op2;
39642 	zval *property;
39643 	zval *container;
39644 
39645 	SAVE_OPLINE();
39646 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39647 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
39648 
39649 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39650 		zend_throw_error(NULL, "Using $this when not in object context");
39651 		zval_ptr_dtor_nogc(free_op2);
39652 		HANDLE_EXCEPTION();
39653 	}
39654 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39655 		zend_throw_error(NULL, "Cannot use string offset as an object");
39656 		zval_ptr_dtor_nogc(free_op2);
39657 		HANDLE_EXCEPTION();
39658 	}
39659 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
39660 	zval_ptr_dtor_nogc(free_op2);
39661 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39662 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
39663 	}
39664 
39665 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39666 }
39667 
39668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39669 {
39670 	USE_OPLINE
39671 
39672 	zval *container;
39673 	zend_free_op free_op2;
39674 	zval *offset;
39675 
39676 	SAVE_OPLINE();
39677 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
39678 
39679 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39680 		zend_throw_error(NULL, "Using $this when not in object context");
39681 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39682 		HANDLE_EXCEPTION();
39683 	}
39684 
39685 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39686 
39687 	if (IS_CV == IS_CONST ||
39688 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
39689 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
39690 			container = Z_REFVAL_P(container);
39691 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
39692 				goto fetch_obj_is_no_object;
39693 			}
39694 		} else {
39695 			goto fetch_obj_is_no_object;
39696 		}
39697 	}
39698 
39699 	/* here we are sure we are dealing with an object */
39700 	do {
39701 		zend_object *zobj = Z_OBJ_P(container);
39702 		zval *retval;
39703 
39704 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
39705 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
39706 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
39707 
39708 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
39709 				retval = OBJ_PROP(zobj, prop_offset);
39710 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
39711 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
39712 					break;
39713 				}
39714 			} else if (EXPECTED(zobj->properties != NULL)) {
39715 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
39716 				if (EXPECTED(retval)) {
39717 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
39718 					break;
39719 				}
39720 			}
39721 		}
39722 
39723 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
39724 fetch_obj_is_no_object:
39725 			ZVAL_NULL(EX_VAR(opline->result.var));
39726 		} else {
39727 
39728 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
39729 
39730 			if (retval != EX_VAR(opline->result.var)) {
39731 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
39732 			}
39733 		}
39734 	} while (0);
39735 
39736 	zval_ptr_dtor_nogc(free_op2);
39737 
39738 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39739 }
39740 
39741 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39742 {
39743 	USE_OPLINE
39744 	zval *container;
39745 
39746 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
39747 		/* Behave like FETCH_OBJ_W */
39748 		zend_free_op free_op1, free_op2;
39749 		zval *property;
39750 
39751 		SAVE_OPLINE();
39752 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39753 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39754 
39755 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39756 			zend_throw_error(NULL, "Using $this when not in object context");
39757 			zval_ptr_dtor_nogc(free_op2);
39758 			HANDLE_EXCEPTION();
39759 		}
39760 		if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
39761 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
39762 			zval_ptr_dtor_nogc(free_op2);
39763 
39764 			HANDLE_EXCEPTION();
39765 		}
39766 		if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39767 			zend_throw_error(NULL, "Cannot use string offset as an object");
39768 			zval_ptr_dtor_nogc(free_op2);
39769 			HANDLE_EXCEPTION();
39770 		}
39771 		zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
39772 		zval_ptr_dtor_nogc(free_op2);
39773 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39774 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
39775 		}
39776 
39777 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39778 	} else {
39779 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39780 	}
39781 }
39782 
39783 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39784 {
39785 	USE_OPLINE
39786 	zend_free_op free_op1, free_op2;
39787 	zval *container, *property;
39788 
39789 	SAVE_OPLINE();
39790 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
39791 
39792 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
39793 		zend_throw_error(NULL, "Using $this when not in object context");
39794 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39795 		HANDLE_EXCEPTION();
39796 	}
39797 
39798 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39799 
39800 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
39801 		zend_throw_error(NULL, "Cannot use string offset as an object");
39802 		zval_ptr_dtor_nogc(free_op2);
39803 		HANDLE_EXCEPTION();
39804 	}
39805 	zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
39806 	zval_ptr_dtor_nogc(free_op2);
39807 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
39808 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 0);
39809 	}
39810 
39811 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39812 }
39813 
39814 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39815 {
39816 	USE_OPLINE
39817 	zend_free_op free_op2;
39818 	zval *object;
39819 	zval *property_name;
39820 
39821 	SAVE_OPLINE();
39822 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39823 
39824 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
39825 		zend_throw_error(NULL, "Using $this when not in object context");
39826 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39827 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
39828 		HANDLE_EXCEPTION();
39829 	}
39830 
39831 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39832 
39833 	if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
39834 		zend_throw_error(NULL, "Cannot use string offset as an array");
39835 		zval_ptr_dtor_nogc(free_op2);
39836 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
39837 		HANDLE_EXCEPTION();
39838 	}
39839 	zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
39840 	zval_ptr_dtor_nogc(free_op2);
39841 
39842 	/* assign_obj has two opcodes! */
39843 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39844 }
39845 
39846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39847 {
39848 	USE_OPLINE
39849 
39850 	zval *object_ptr;
39851 	zend_free_op free_op2, free_op_data1;
39852 	zval *value;
39853 	zval *variable_ptr;
39854 	zval *dim;
39855 
39856 	SAVE_OPLINE();
39857 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39858 
39859 	if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
39860 		zend_throw_error(NULL, "Cannot use string offset as an array");
39861 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
39862 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
39863 		HANDLE_EXCEPTION();
39864 	}
39865 
39866 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39867 try_assign_dim_array:
39868 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
39869 			SEPARATE_ARRAY(object_ptr);
39870 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
39871 			if (UNEXPECTED(variable_ptr == NULL)) {
39872 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39873 				variable_ptr = &EG(error_zval);
39874 			}
39875 		} else {
39876 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39877 			SEPARATE_ARRAY(object_ptr);
39878 			variable_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(object_ptr), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_W);
39879 			zval_ptr_dtor_nogc(free_op2);
39880 		}
39881 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
39882 		if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
39883 			FREE_OP(free_op_data1);
39884 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39885 				ZVAL_NULL(EX_VAR(opline->result.var));
39886 			}
39887 		} else {
39888 			value = zend_assign_to_variable(variable_ptr, value, (opline+1)->op1_type);
39889 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39890 				ZVAL_COPY(EX_VAR(opline->result.var), value);
39891 			}
39892 		}
39893 	} else {
39894 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
39895 			object_ptr = Z_REFVAL_P(object_ptr);
39896 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39897 				goto try_assign_dim_array;
39898 			}
39899 		}
39900 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
39901 			zend_free_op free_op2;
39902 			zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39903 
39904 			zend_assign_to_object_dim(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object_ptr, property_name, (opline+1)->op1_type, (opline+1)->op1, execute_data);
39905 			zval_ptr_dtor_nogc(free_op2);
39906 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
39907 			if (EXPECTED(Z_STRLEN_P(object_ptr) != 0)) {
39908 				if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
39909 					zend_throw_error(NULL, "[] operator not supported for strings");
39910 					FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
39911 
39912 					HANDLE_EXCEPTION();
39913 				} else {
39914 					zend_long offset;
39915 
39916 					dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39917 					offset = zend_fetch_string_offset(object_ptr, dim, BP_VAR_W);
39918 					zval_ptr_dtor_nogc(free_op2);
39919 					value = get_zval_ptr_r_deref((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
39920 					zend_assign_to_string_offset(object_ptr, offset, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39921 					FREE_OP(free_op_data1);
39922 				}
39923 			} else {
39924 				zval_ptr_dtor_nogc(object_ptr);
39925 assign_dim_convert_to_array:
39926 				ZVAL_NEW_ARR(object_ptr);
39927 				zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
39928 				goto try_assign_dim_array;
39929 			}
39930 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
39931 			if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == &EG(error_zval))) {
39932 				goto assign_dim_clean;
39933 			}
39934 			goto assign_dim_convert_to_array;
39935 		} else {
39936 			zend_error(E_WARNING, "Cannot use a scalar value as an array");
39937 assign_dim_clean:
39938 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39939 			zval_ptr_dtor_nogc(free_op2);
39940 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
39941 			FREE_OP(free_op_data1);
39942 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39943 				ZVAL_NULL(EX_VAR(opline->result.var));
39944 			}
39945 		}
39946 	}
39947 
39948 	/* assign_dim has two opcodes! */
39949 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39950 }
39951 
39952 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39953 {
39954 	USE_OPLINE
39955 	zend_free_op free_op2;
39956 	zval *op1, *op2;
39957 	zend_string *op1_str, *op2_str, *str;
39958 
39959 	SAVE_OPLINE();
39960 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
39961 	if (IS_CV == IS_CONST) {
39962 		op1_str = Z_STR_P(op1);
39963 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39964 		op1_str = zend_string_copy(Z_STR_P(op1));
39965 	} else {
39966 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
39967 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
39968 		}
39969 		op1_str = _zval_get_string_func(op1);
39970 	}
39971 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
39972 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
39973 		op2_str = Z_STR_P(op2);
39974 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39975 		op2_str = zend_string_copy(Z_STR_P(op2));
39976 	} else {
39977 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
39978 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
39979 		}
39980 		op2_str = _zval_get_string_func(op2);
39981 	}
39982 	do {
39983 		if (IS_CV != IS_CONST) {
39984 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
39985 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
39986 					zend_string_addref(op2_str);
39987 				}
39988 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
39989 				zend_string_release(op1_str);
39990 				break;
39991 			}
39992 		}
39993 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
39994 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
39995 				if (IS_CV == IS_CONST) {
39996 					zend_string_addref(op1_str);
39997 				}
39998 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
39999 				zend_string_release(op2_str);
40000 				break;
40001 			}
40002 		}
40003 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
40004 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
40005 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40006 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40007 		if (IS_CV != IS_CONST) {
40008 			zend_string_release(op1_str);
40009 		}
40010 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
40011 			zend_string_release(op2_str);
40012 		}
40013 	} while (0);
40014 
40015 	zval_ptr_dtor_nogc(free_op2);
40016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40017 }
40018 
40019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40020 {
40021 	USE_OPLINE
40022 	zval *function_name;
40023 	zend_free_op free_op2;
40024 	zval *object;
40025 	zend_function *fbc;
40026 	zend_class_entry *called_scope;
40027 	zend_object *obj;
40028 	zend_execute_data *call;
40029 	uint32_t call_info;
40030 
40031 	SAVE_OPLINE();
40032 
40033 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40034 
40035 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
40036 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
40037 		do {
40038 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
40039 				function_name = Z_REFVAL_P(function_name);
40040 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
40041 					break;
40042 				}
40043 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
40044 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
40045 				if (UNEXPECTED(EG(exception) != NULL)) {
40046 					HANDLE_EXCEPTION();
40047 				}
40048 			}
40049 			zend_throw_error(NULL, "Method name must be a string");
40050 			zval_ptr_dtor_nogc(free_op2);
40051 
40052 			HANDLE_EXCEPTION();
40053 		} while (0);
40054 	}
40055 
40056 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
40057 
40058 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
40059 		zend_throw_error(NULL, "Using $this when not in object context");
40060 		zval_ptr_dtor_nogc(free_op2);
40061 		HANDLE_EXCEPTION();
40062 	}
40063 
40064 	if (IS_CV != IS_UNUSED) {
40065 		do {
40066 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40067 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
40068 					object = Z_REFVAL_P(object);
40069 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
40070 						break;
40071 					}
40072 				}
40073 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40074 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
40075 					if (UNEXPECTED(EG(exception) != NULL)) {
40076 						zval_ptr_dtor_nogc(free_op2);
40077 						HANDLE_EXCEPTION();
40078 					}
40079 				}
40080 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
40081 				zval_ptr_dtor_nogc(free_op2);
40082 
40083 				HANDLE_EXCEPTION();
40084 			}
40085 		} while (0);
40086 	}
40087 
40088 	obj = Z_OBJ_P(object);
40089 	called_scope = obj->ce;
40090 
40091 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
40092 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
40093 	    zend_object *orig_obj = obj;
40094 
40095 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
40096 			zend_throw_error(NULL, "Object does not support method calls");
40097 			zval_ptr_dtor_nogc(free_op2);
40098 
40099 			HANDLE_EXCEPTION();
40100 		}
40101 
40102 		/* First, locate the function. */
40103 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
40104 		if (UNEXPECTED(fbc == NULL)) {
40105 			if (EXPECTED(!EG(exception))) {
40106 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
40107 			}
40108 			zval_ptr_dtor_nogc(free_op2);
40109 
40110 			HANDLE_EXCEPTION();
40111 		}
40112 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
40113 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
40114 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
40115 		    EXPECTED(obj == orig_obj)) {
40116 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
40117 		}
40118 	}
40119 
40120 	call_info = ZEND_CALL_NESTED_FUNCTION;
40121 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
40122 		obj = NULL;
40123 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
40124 		/* CV may be changed indirectly (e.g. when it's a reference) */
40125 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
40126 		GC_REFCOUNT(obj)++; /* For $this pointer */
40127 	}
40128 
40129 	zval_ptr_dtor_nogc(free_op2);
40130 
40131 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
40132 		HANDLE_EXCEPTION();
40133 	}
40134 
40135 	call = zend_vm_stack_push_call_frame(call_info,
40136 		fbc, opline->extended_value, called_scope, obj);
40137 	call->prev_execute_data = EX(call);
40138 	EX(call) = call;
40139 
40140 	ZEND_VM_NEXT_OPCODE();
40141 }
40142 
40143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40144 {
40145 	USE_OPLINE
40146 	zend_free_op free_op2;
40147 	zval *op1, *op2, *result;
40148 
40149 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
40150 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40151 	do {
40152 		int result;
40153 
40154 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
40155 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40156 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
40157 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40158 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
40159 			} else {
40160 				break;
40161 			}
40162 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
40163 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40164 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
40165 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40166 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
40167 			} else {
40168 				break;
40169 			}
40170 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
40171 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
40172 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
40173 					result = 1;
40174 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
40175 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
40176 						result = 0;
40177 					} else {
40178 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
40179 					}
40180 				} else {
40181 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
40182 				}
40183 				zval_ptr_dtor_nogc(free_op2);
40184 			} else {
40185 				break;
40186 			}
40187 		} else {
40188 			break;
40189 		}
40190 		ZEND_VM_SMART_BRANCH(result, 0);
40191 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
40192 		ZEND_VM_NEXT_OPCODE();
40193 	} while (0);
40194 
40195 	SAVE_OPLINE();
40196 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
40197 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
40198 	} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
40199 		/* Don't keep lock on reference, lock the value instead */
40200 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
40201 			ZVAL_UNREF(op1);
40202 		} else {
40203 			Z_DELREF_P(op1);
40204 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
40205 		}
40206 	}
40207 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
40208 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
40209 	}
40210 	result = EX_VAR(opline->result.var);
40211 	compare_function(result, op1, op2);
40212 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
40213 	zval_ptr_dtor_nogc(free_op2);
40214 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40215 }
40216 
40217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40218 {
40219 	USE_OPLINE
40220 
40221 	zval *expr_ptr, new_expr;
40222 
40223 	SAVE_OPLINE();
40224 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
40225 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
40226 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
40227 		if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
40228 			zend_throw_error(NULL, "Cannot create references to/from string offsets");
40229 			zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
40230 			HANDLE_EXCEPTION();
40231 		}
40232 		ZVAL_MAKE_REF(expr_ptr);
40233 		Z_ADDREF_P(expr_ptr);
40234 
40235 	} else {
40236 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
40237 		if (IS_CV == IS_TMP_VAR) {
40238 			/* pass */
40239 		} else if (IS_CV == IS_CONST) {
40240 			if (UNEXPECTED(Z_OPT_COPYABLE_P(expr_ptr))) {
40241 				ZVAL_COPY_VALUE(&new_expr, expr_ptr);
40242 				zval_copy_ctor_func(&new_expr);
40243 				expr_ptr = &new_expr;
40244 			}
40245 		} else if (IS_CV == IS_CV) {
40246 			ZVAL_DEREF(expr_ptr);
40247 			if (Z_REFCOUNTED_P(expr_ptr)) {
40248 				Z_ADDREF_P(expr_ptr);
40249 			}
40250 		} else /* if (IS_CV == IS_VAR) */ {
40251 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
40252 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
40253 
40254 				expr_ptr = Z_REFVAL_P(expr_ptr);
40255 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
40256 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
40257 					expr_ptr = &new_expr;
40258 					efree_size(ref, sizeof(zend_reference));
40259 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
40260 					Z_ADDREF_P(expr_ptr);
40261 				}
40262 			}
40263 		}
40264 	}
40265 
40266 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
40267 		zend_free_op free_op2;
40268 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40269 		zend_string *str;
40270 		zend_ulong hval;
40271 
40272 add_again:
40273 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
40274 			str = Z_STR_P(offset);
40275 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
40276 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
40277 					goto num_index;
40278 				}
40279 			}
40280 str_index:
40281 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
40282 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40283 			hval = Z_LVAL_P(offset);
40284 num_index:
40285 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
40286 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
40287 			offset = Z_REFVAL_P(offset);
40288 			goto add_again;
40289 		} else if (Z_TYPE_P(offset) == IS_NULL) {
40290 			str = ZSTR_EMPTY_ALLOC();
40291 			goto str_index;
40292 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
40293 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
40294 			goto num_index;
40295 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
40296 			hval = 0;
40297 			goto num_index;
40298 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
40299 			hval = 1;
40300 			goto num_index;
40301 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
40302 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40303 			str = ZSTR_EMPTY_ALLOC();
40304 			goto str_index;
40305 		} else {
40306 			zend_error(E_WARNING, "Illegal offset type");
40307 			zval_ptr_dtor(expr_ptr);
40308 		}
40309 		zval_ptr_dtor_nogc(free_op2);
40310 	} else {
40311 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
40312 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
40313 			zval_ptr_dtor(expr_ptr);
40314 		}
40315 	}
40316 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40317 }
40318 
40319 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40320 {
40321 	zval *array;
40322 	uint32_t size;
40323 	USE_OPLINE
40324 
40325 	array = EX_VAR(opline->result.var);
40326 	if (IS_CV != IS_UNUSED) {
40327 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
40328 	} else {
40329 		size = 0;
40330 	}
40331 	ZVAL_NEW_ARR(array);
40332 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
40333 
40334 	if (IS_CV != IS_UNUSED) {
40335 		/* Explicitly initialize array as not-packed if flag is set */
40336 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
40337 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
40338 		}
40339 	}
40340 
40341 	if (IS_CV == IS_UNUSED) {
40342 		ZEND_VM_NEXT_OPCODE();
40343 #if 0 || (IS_CV != IS_UNUSED)
40344 	} else {
40345 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40346 #endif
40347 	}
40348 }
40349 
40350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40351 {
40352 	USE_OPLINE
40353 	zend_free_op free_op2;
40354 	zval *container;
40355 	zval *offset;
40356 	zend_ulong hval;
40357 	zend_string *key;
40358 
40359 	SAVE_OPLINE();
40360 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
40361 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
40362 		zend_throw_error(NULL, "Using $this when not in object context");
40363 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40364 		HANDLE_EXCEPTION();
40365 	}
40366 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
40367 		zend_throw_error(NULL, "Cannot unset string offsets");
40368 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40369 		HANDLE_EXCEPTION();
40370 	}
40371 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40372 
40373 	do {
40374 		if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40375 			HashTable *ht;
40376 
40377 unset_dim_array:
40378 			SEPARATE_ARRAY(container);
40379 			ht = Z_ARRVAL_P(container);
40380 offset_again:
40381 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
40382 				key = Z_STR_P(offset);
40383 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
40384 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
40385 						goto num_index_dim;
40386 					}
40387 				}
40388 str_index_dim:
40389 				if (ht == &EG(symbol_table)) {
40390 					zend_delete_global_variable(key);
40391 				} else {
40392 					zend_hash_del(ht, key);
40393 				}
40394 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40395 				hval = Z_LVAL_P(offset);
40396 num_index_dim:
40397 				zend_hash_index_del(ht, hval);
40398 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
40399 				offset = Z_REFVAL_P(offset);
40400 				goto offset_again;
40401 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
40402 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
40403 				goto num_index_dim;
40404 			} else if (Z_TYPE_P(offset) == IS_NULL) {
40405 				key = ZSTR_EMPTY_ALLOC();
40406 				goto str_index_dim;
40407 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
40408 				hval = 0;
40409 				goto num_index_dim;
40410 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
40411 				hval = 1;
40412 				goto num_index_dim;
40413 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
40414 				hval = Z_RES_HANDLE_P(offset);
40415 				goto num_index_dim;
40416 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
40417 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40418 				key = ZSTR_EMPTY_ALLOC();
40419 				goto str_index_dim;
40420 			} else {
40421 				zend_error(E_WARNING, "Illegal offset type in unset");
40422 			}
40423 			break;
40424 		} else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
40425 			container = Z_REFVAL_P(container);
40426 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40427 				goto unset_dim_array;
40428 			}
40429 		}
40430 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
40431 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40432 		}
40433 		if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40434 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
40435 				zend_throw_error(NULL, "Cannot use object as array");
40436 			} else {
40437 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
40438 			}
40439 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
40440 			zend_throw_error(NULL, "Cannot unset string offsets");
40441 		}
40442 	} while (0);
40443 
40444 	zval_ptr_dtor_nogc(free_op2);
40445 
40446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40447 }
40448 
40449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40450 {
40451 	USE_OPLINE
40452 	zend_free_op free_op2;
40453 	zval *container;
40454 	zval *offset;
40455 
40456 	SAVE_OPLINE();
40457 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
40458 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
40459 		zend_throw_error(NULL, "Using $this when not in object context");
40460 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40461 		HANDLE_EXCEPTION();
40462 	}
40463 	if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
40464 		zend_throw_error(NULL, "Cannot unset string offsets");
40465 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40466 		HANDLE_EXCEPTION();
40467 	}
40468 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40469 
40470 	do {
40471 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
40472 			if (Z_ISREF_P(container)) {
40473 				container = Z_REFVAL_P(container);
40474 				if (Z_TYPE_P(container) != IS_OBJECT) {
40475 					break;
40476 				}
40477 			} else {
40478 				break;
40479 			}
40480 		}
40481 		if (Z_OBJ_HT_P(container)->unset_property) {
40482 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
40483 		} else {
40484 			zend_error(E_NOTICE, "Trying to unset property of non-object");
40485 		}
40486 	} while (0);
40487 
40488 	zval_ptr_dtor_nogc(free_op2);
40489 
40490 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40491 }
40492 
40493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40494 {
40495 	USE_OPLINE
40496 	zend_free_op free_op2;
40497 	zval *container;
40498 	int result;
40499 	zend_ulong hval;
40500 	zval *offset;
40501 
40502 	SAVE_OPLINE();
40503 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
40504 
40505 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
40506 		zend_throw_error(NULL, "Using $this when not in object context");
40507 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40508 		HANDLE_EXCEPTION();
40509 	}
40510 
40511 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40512 
40513 	if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40514 		HashTable *ht;
40515 		zval *value;
40516 		zend_string *str;
40517 
40518 isset_dim_obj_array:
40519 		ht = Z_ARRVAL_P(container);
40520 isset_again:
40521 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
40522 			str = Z_STR_P(offset);
40523 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
40524 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
40525 					goto num_index_prop;
40526 				}
40527 			}
40528 str_index_prop:
40529 			value = zend_hash_find_ind(ht, str);
40530 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40531 			hval = Z_LVAL_P(offset);
40532 num_index_prop:
40533 			value = zend_hash_index_find(ht, hval);
40534 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
40535 			offset = Z_REFVAL_P(offset);
40536 			goto isset_again;
40537 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
40538 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
40539 			goto num_index_prop;
40540 		} else if (Z_TYPE_P(offset) == IS_NULL) {
40541 			str = ZSTR_EMPTY_ALLOC();
40542 			goto str_index_prop;
40543 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
40544 			hval = 0;
40545 			goto num_index_prop;
40546 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
40547 			hval = 1;
40548 			goto num_index_prop;
40549 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
40550 			hval = Z_RES_HANDLE_P(offset);
40551 			goto num_index_prop;
40552 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
40553 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40554 			str = ZSTR_EMPTY_ALLOC();
40555 			goto str_index_prop;
40556 		} else {
40557 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
40558 			goto isset_not_found;
40559 		}
40560 
40561 		if (opline->extended_value & ZEND_ISSET) {
40562 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
40563 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
40564 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
40565 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
40566 			result = (value == NULL || !i_zend_is_true(value));
40567 		}
40568 		goto isset_dim_obj_exit;
40569 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40570 		container = Z_REFVAL_P(container);
40571 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40572 			goto isset_dim_obj_array;
40573 		}
40574 	}
40575 
40576 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
40577 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40578 	}
40579 
40580 	if (IS_CV == IS_UNUSED ||
40581 	    (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
40582 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
40583 			result =
40584 				((opline->extended_value & ZEND_ISSET) == 0) ^
40585 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
40586 		} else {
40587 			zend_error(E_NOTICE, "Trying to check element of non-array");
40588 			goto isset_not_found;
40589 		}
40590 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
40591 		zend_long lval;
40592 
40593 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40594 			lval = Z_LVAL_P(offset);
40595 isset_str_offset:
40596 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
40597 				if (opline->extended_value & ZEND_ISSET) {
40598 					result = 1;
40599 				} else {
40600 					result = (Z_STRVAL_P(container)[lval] == '0');
40601 				}
40602 			} else {
40603 				goto isset_not_found;
40604 			}
40605 		} else {
40606 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
40607 				ZVAL_DEREF(offset);
40608 			}
40609 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
40610 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
40611 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
40612 				lval = zval_get_long(offset);
40613 				goto isset_str_offset;
40614 			}
40615 			goto isset_not_found;
40616 		}
40617 	} else {
40618 isset_not_found:
40619 		result = ((opline->extended_value & ZEND_ISSET) == 0);
40620 	}
40621 
40622 isset_dim_obj_exit:
40623 	zval_ptr_dtor_nogc(free_op2);
40624 
40625 	ZEND_VM_SMART_BRANCH(result, 1);
40626 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40627 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40628 }
40629 
40630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40631 {
40632 	USE_OPLINE
40633 	zend_free_op free_op2;
40634 	zval *container;
40635 	int result;
40636 	zval *offset;
40637 
40638 	SAVE_OPLINE();
40639 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
40640 
40641 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
40642 		zend_throw_error(NULL, "Using $this when not in object context");
40643 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40644 		HANDLE_EXCEPTION();
40645 	}
40646 
40647 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
40648 
40649 	if (IS_CV == IS_CONST ||
40650 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40651 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40652 			container = Z_REFVAL_P(container);
40653 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
40654 				goto isset_no_object;
40655 			}
40656 		} else {
40657 			goto isset_no_object;
40658 		}
40659 	}
40660 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
40661 		zend_error(E_NOTICE, "Trying to check property of non-object");
40662 isset_no_object:
40663 		result = ((opline->extended_value & ZEND_ISSET) == 0);
40664 	} else {
40665 		result =
40666 			((opline->extended_value & ZEND_ISSET) == 0) ^
40667 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
40668 	}
40669 
40670 	zval_ptr_dtor_nogc(free_op2);
40671 
40672 	ZEND_VM_SMART_BRANCH(result, 1);
40673 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40674 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40675 }
40676 
40677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40678 {
40679 	USE_OPLINE
40680 	zend_free_op free_op1;
40681 
40682 	SAVE_OPLINE();
40683 	bitwise_not_function(EX_VAR(opline->result.var),
40684 		_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1));
40685 	zval_ptr_dtor_nogc(free_op1);
40686 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40687 }
40688 
40689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40690 {
40691 	USE_OPLINE
40692 	zval *val;
40693 	zend_free_op free_op1;
40694 
40695 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40696 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40697 		ZVAL_FALSE(EX_VAR(opline->result.var));
40698 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40699 		ZVAL_TRUE(EX_VAR(opline->result.var));
40700 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40701 			SAVE_OPLINE();
40702 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
40703 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40704 		}
40705 	} else {
40706 		SAVE_OPLINE();
40707 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
40708 		zval_ptr_dtor_nogc(free_op1);
40709 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40710 	}
40711 	ZEND_VM_NEXT_OPCODE();
40712 }
40713 
40714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40715 {
40716 	USE_OPLINE
40717 	zend_free_op free_op1;
40718 	zval *z;
40719 
40720 	SAVE_OPLINE();
40721 	z = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40722 
40723 	if (Z_TYPE_P(z) == IS_STRING) {
40724 		zend_string *str = Z_STR_P(z);
40725 
40726 		if (ZSTR_LEN(str) != 0) {
40727 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
40728 		}
40729 	} else {
40730 		zend_string *str = _zval_get_string_func(z);
40731 
40732 		if (ZSTR_LEN(str) != 0) {
40733 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
40734 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
40735 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
40736 		}
40737 		zend_string_release(str);
40738 	}
40739 
40740 	zval_ptr_dtor_nogc(free_op1);
40741 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40742 }
40743 
40744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40745 {
40746 	USE_OPLINE
40747 	zend_free_op free_op1;
40748 	zval *val;
40749 
40750 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40751 
40752 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40753 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
40754 		ZEND_VM_CONTINUE();
40755 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40756 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40757 			SAVE_OPLINE();
40758 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
40759 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40760 		} else {
40761 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
40762 			ZEND_VM_CONTINUE();
40763 		}
40764 	}
40765 
40766 	SAVE_OPLINE();
40767 	if (i_zend_is_true(val)) {
40768 		opline++;
40769 	} else {
40770 		opline = OP_JMP_ADDR(opline, opline->op2);
40771 	}
40772 	zval_ptr_dtor_nogc(free_op1);
40773 	if (UNEXPECTED(EG(exception) != NULL)) {
40774 		HANDLE_EXCEPTION();
40775 	}
40776 	ZEND_VM_JMP(opline);
40777 }
40778 
40779 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40780 {
40781 	USE_OPLINE
40782 	zend_free_op free_op1;
40783 	zval *val;
40784 
40785 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40786 
40787 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40788 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
40789 		ZEND_VM_CONTINUE();
40790 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40791 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40792 			SAVE_OPLINE();
40793 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
40794 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40795 		} else {
40796 			ZEND_VM_NEXT_OPCODE();
40797 		}
40798 	}
40799 
40800 	SAVE_OPLINE();
40801 	if (i_zend_is_true(val)) {
40802 		opline = OP_JMP_ADDR(opline, opline->op2);
40803 	} else {
40804 		opline++;
40805 	}
40806 	zval_ptr_dtor_nogc(free_op1);
40807 	if (UNEXPECTED(EG(exception) != NULL)) {
40808 		HANDLE_EXCEPTION();
40809 	}
40810 	ZEND_VM_JMP(opline);
40811 }
40812 
40813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40814 {
40815 	USE_OPLINE
40816 	zend_free_op free_op1;
40817 	zval *val;
40818 
40819 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40820 
40821 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
40822 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
40823 		ZEND_VM_CONTINUE();
40824 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40825 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
40826 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40827 				SAVE_OPLINE();
40828 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
40829 			}
40830 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40831 		} else {
40832 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
40833 			ZEND_VM_CONTINUE();
40834 		}
40835 	}
40836 
40837 	SAVE_OPLINE();
40838 	if (i_zend_is_true(val)) {
40839 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
40840 	} else {
40841 		opline = OP_JMP_ADDR(opline, opline->op2);
40842 	}
40843 	zval_ptr_dtor_nogc(free_op1);
40844 	if (UNEXPECTED(EG(exception) != NULL)) {
40845 		HANDLE_EXCEPTION();
40846 	}
40847 	ZEND_VM_JMP(opline);
40848 }
40849 
40850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40851 {
40852 	USE_OPLINE
40853 	zend_free_op free_op1;
40854 	zval *val;
40855 	int ret;
40856 
40857 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40858 
40859 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40860 		ZVAL_TRUE(EX_VAR(opline->result.var));
40861 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
40862 		ZEND_VM_CONTINUE();
40863 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40864 		ZVAL_FALSE(EX_VAR(opline->result.var));
40865 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
40866 			if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40867 				SAVE_OPLINE();
40868 				GET_OP1_UNDEF_CV(val, BP_VAR_R);
40869 			}
40870 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40871 		} else {
40872 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
40873 			ZEND_VM_CONTINUE();
40874 		}
40875 	}
40876 
40877 	SAVE_OPLINE();
40878 	ret = i_zend_is_true(val);
40879 	zval_ptr_dtor_nogc(free_op1);
40880 	if (ret) {
40881 		ZVAL_TRUE(EX_VAR(opline->result.var));
40882 		opline++;
40883 	} else {
40884 		ZVAL_FALSE(EX_VAR(opline->result.var));
40885 		opline = OP_JMP_ADDR(opline, opline->op2);
40886 	}
40887 	if (UNEXPECTED(EG(exception) != NULL)) {
40888 		HANDLE_EXCEPTION();
40889 	}
40890 	ZEND_VM_JMP(opline);
40891 }
40892 
40893 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40894 {
40895 	USE_OPLINE
40896 	zend_free_op free_op1;
40897 	zval *val;
40898 	int ret;
40899 
40900 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40901 
40902 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40903 		ZVAL_TRUE(EX_VAR(opline->result.var));
40904 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
40905 		ZEND_VM_CONTINUE();
40906 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40907 		ZVAL_FALSE(EX_VAR(opline->result.var));
40908 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40909 			SAVE_OPLINE();
40910 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
40911 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40912 		} else {
40913 			ZEND_VM_NEXT_OPCODE();
40914 		}
40915 	}
40916 
40917 	SAVE_OPLINE();
40918 	ret = i_zend_is_true(val);
40919 	zval_ptr_dtor_nogc(free_op1);
40920 	if (ret) {
40921 		ZVAL_TRUE(EX_VAR(opline->result.var));
40922 		opline = OP_JMP_ADDR(opline, opline->op2);
40923 	} else {
40924 		ZVAL_FALSE(EX_VAR(opline->result.var));
40925 		opline++;
40926 	}
40927 	if (UNEXPECTED(EG(exception) != NULL)) {
40928 		HANDLE_EXCEPTION();
40929 	}
40930 	ZEND_VM_JMP(opline);
40931 }
40932 
40933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40934 {
40935 	USE_OPLINE
40936 
40937 	SAVE_OPLINE();
40938 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
40939 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40940 }
40941 
40942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40943 {
40944 	zval *var;
40945 	USE_OPLINE
40946 
40947 	SAVE_OPLINE();
40948 	var = EX_VAR(opline->op1.var);
40949 	if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
40950 		zend_hash_iterator_del(Z_FE_ITER_P(var));
40951 	}
40952 	zval_ptr_dtor_nogc(var);
40953 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40954 }
40955 
40956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40957 {
40958 	USE_OPLINE
40959 	zval *val;
40960 	zend_free_op free_op1;
40961 
40962 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40963 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
40964 		ZVAL_TRUE(EX_VAR(opline->result.var));
40965 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
40966 		ZVAL_FALSE(EX_VAR(opline->result.var));
40967 		if (UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
40968 			SAVE_OPLINE();
40969 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
40970 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40971 		}
40972 	} else {
40973 		SAVE_OPLINE();
40974 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
40975 		zval_ptr_dtor_nogc(free_op1);
40976 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40977 	}
40978 	ZEND_VM_NEXT_OPCODE();
40979 }
40980 
40981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40982 {
40983 	USE_OPLINE
40984 	zend_free_op free_op1;
40985 	zval *obj;
40986 	zend_class_entry *ce;
40987 	zend_function *clone;
40988 	zend_object_clone_obj_t clone_call;
40989 
40990 	SAVE_OPLINE();
40991 	obj = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
40992 
40993 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
40994 		zend_throw_error(NULL, "Using $this when not in object context");
40995 		HANDLE_EXCEPTION();
40996 	}
40997 
40998 	do {
40999 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
41000 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
41001 		    if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
41002 		    	obj = Z_REFVAL_P(obj);
41003 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
41004 		    		break;
41005 				}
41006 			}
41007 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
41008 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
41009 				if (UNEXPECTED(EG(exception) != NULL)) {
41010 					HANDLE_EXCEPTION();
41011 				}
41012 			}
41013 			zend_throw_error(NULL, "__clone method called on non-object");
41014 			zval_ptr_dtor_nogc(free_op1);
41015 			HANDLE_EXCEPTION();
41016 		}
41017 	} while (0);
41018 
41019 	ce = Z_OBJCE_P(obj);
41020 	clone = ce ? ce->clone : NULL;
41021 	clone_call =  Z_OBJ_HT_P(obj)->clone_obj;
41022 	if (UNEXPECTED(clone_call == NULL)) {
41023 		if (ce) {
41024 			zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
41025 		} else {
41026 			zend_throw_error(NULL, "Trying to clone an uncloneable object");
41027 		}
41028 		zval_ptr_dtor_nogc(free_op1);
41029 		HANDLE_EXCEPTION();
41030 	}
41031 
41032 	if (ce && clone) {
41033 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
41034 			/* Ensure that if we're calling a private function, we're allowed to do so.
41035 			 */
41036 			if (UNEXPECTED(ce != EG(scope))) {
41037 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
41038 				zval_ptr_dtor_nogc(free_op1);
41039 				HANDLE_EXCEPTION();
41040 			}
41041 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
41042 			/* Ensure that if we're calling a protected function, we're allowed to do so.
41043 			 */
41044 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) {
41045 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(ce->name), EG(scope) ? ZSTR_VAL(EG(scope)->name) : "");
41046 				zval_ptr_dtor_nogc(free_op1);
41047 				HANDLE_EXCEPTION();
41048 			}
41049 		}
41050 	}
41051 
41052 	if (EXPECTED(EG(exception) == NULL)) {
41053 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
41054 		if (UNEXPECTED(!RETURN_VALUE_USED(opline)) || UNEXPECTED(EG(exception) != NULL)) {
41055 			OBJ_RELEASE(Z_OBJ_P(EX_VAR(opline->result.var)));
41056 		}
41057 	}
41058 	zval_ptr_dtor_nogc(free_op1);
41059 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41060 }
41061 
41062 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41063 {
41064 	USE_OPLINE
41065 	zend_op_array *new_op_array=NULL;
41066 	zend_free_op free_op1;
41067 	zval *inc_filename;
41068 	zval tmp_inc_filename;
41069 	zend_bool failure_retval=0;
41070 
41071 	SAVE_OPLINE();
41072 	inc_filename = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41073 
41074 	ZVAL_UNDEF(&tmp_inc_filename);
41075 	if (Z_TYPE_P(inc_filename) != IS_STRING) {
41076 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
41077 			inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
41078 		}
41079 		ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
41080 		inc_filename = &tmp_inc_filename;
41081 	}
41082 
41083 	if (opline->extended_value != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
41084 		if (opline->extended_value == ZEND_INCLUDE_ONCE || opline->extended_value == ZEND_INCLUDE) {
41085 			zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
41086 		} else {
41087 			zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
41088 		}
41089 	} else {
41090 		switch (opline->extended_value) {
41091 			case ZEND_INCLUDE_ONCE:
41092 			case ZEND_REQUIRE_ONCE: {
41093 					zend_file_handle file_handle;
41094 					zend_string *resolved_path;
41095 
41096 					resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), (int)Z_STRLEN_P(inc_filename));
41097 					if (resolved_path) {
41098 						failure_retval = zend_hash_exists(&EG(included_files), resolved_path);
41099 					} else {
41100 						resolved_path = zend_string_copy(Z_STR_P(inc_filename));
41101 					}
41102 
41103 					if (failure_retval) {
41104 						/* do nothing, file already included */
41105 					} else if (SUCCESS == zend_stream_open(ZSTR_VAL(resolved_path), &file_handle)) {
41106 
41107 						if (!file_handle.opened_path) {
41108 							file_handle.opened_path = zend_string_copy(resolved_path);
41109 						}
41110 
41111 						if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path)) {
41112 							new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE));
41113 							zend_destroy_file_handle(&file_handle);
41114 						} else {
41115 							zend_file_handle_dtor(&file_handle);
41116 							failure_retval=1;
41117 						}
41118 					} else {
41119 						if (opline->extended_value == ZEND_INCLUDE_ONCE) {
41120 							zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
41121 						} else {
41122 							zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
41123 						}
41124 					}
41125 					zend_string_release(resolved_path);
41126 				}
41127 				break;
41128 			case ZEND_INCLUDE:
41129 			case ZEND_REQUIRE:
41130 				new_op_array = compile_filename(opline->extended_value, inc_filename);
41131 				break;
41132 			case ZEND_EVAL: {
41133 					char *eval_desc = zend_make_compiled_string_description("eval()'d code");
41134 
41135 					new_op_array = zend_compile_string(inc_filename, eval_desc);
41136 					efree(eval_desc);
41137 				}
41138 				break;
41139 			EMPTY_SWITCH_DEFAULT_CASE()
41140 		}
41141 	}
41142 	if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
41143 		zend_string_release(Z_STR(tmp_inc_filename));
41144 	}
41145 	zval_ptr_dtor_nogc(free_op1);
41146 	if (UNEXPECTED(EG(exception) != NULL)) {
41147 		if (new_op_array != NULL) {
41148 			destroy_op_array(new_op_array);
41149 			efree_size(new_op_array, sizeof(zend_op_array));
41150 		}
41151 		HANDLE_EXCEPTION();
41152 	} else if (EXPECTED(new_op_array != NULL)) {
41153 		zval *return_value = NULL;
41154 		zend_execute_data *call;
41155 
41156 		if (RETURN_VALUE_USED(opline)) {
41157 			return_value = EX_VAR(opline->result.var);
41158 		}
41159 
41160 		new_op_array->scope = EG(scope);
41161 
41162 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE,
41163 			(zend_function*)new_op_array, 0, EX(called_scope), Z_OBJ(EX(This)));
41164 
41165 		if (EX(symbol_table)) {
41166 			call->symbol_table = EX(symbol_table);
41167 		} else {
41168 			call->symbol_table = zend_rebuild_symbol_table();
41169 		}
41170 
41171 		call->prev_execute_data = execute_data;
41172 	    i_init_code_execute_data(call, new_op_array, return_value);
41173 		if (EXPECTED(zend_execute_ex == execute_ex)) {
41174 			ZEND_VM_ENTER();
41175 		} else {
41176 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
41177 			zend_execute_ex(call);
41178 			zend_vm_stack_free_call_frame(call);
41179 		}
41180 
41181 		destroy_op_array(new_op_array);
41182 		efree_size(new_op_array, sizeof(zend_op_array));
41183 		if (UNEXPECTED(EG(exception) != NULL)) {
41184 			zend_throw_exception_internal(NULL);
41185 			HANDLE_EXCEPTION();
41186 		}
41187 
41188 	} else if (RETURN_VALUE_USED(opline)) {
41189 		ZVAL_BOOL(EX_VAR(opline->result.var), failure_retval);
41190 	}
41191 	ZEND_VM_INTERRUPT_CHECK();
41192 	ZEND_VM_NEXT_OPCODE();
41193 }
41194 
41195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41196 {
41197 	USE_OPLINE
41198 
41199 	SAVE_OPLINE();
41200 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
41201 		zend_free_op free_op1;
41202 		zval *ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41203 
41204 		do {
41205 			if (Z_TYPE_P(ptr) == IS_LONG) {
41206 				EG(exit_status) = Z_LVAL_P(ptr);
41207 			} else {
41208 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
41209 					ptr = Z_REFVAL_P(ptr);
41210 					if (Z_TYPE_P(ptr) == IS_LONG) {
41211 						EG(exit_status) = Z_LVAL_P(ptr);
41212 						break;
41213 					}
41214 				}
41215 				zend_print_variable(ptr);
41216 			}
41217 		} while (0);
41218 		zval_ptr_dtor_nogc(free_op1);
41219 	}
41220 	zend_bailout();
41221 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
41222 }
41223 
41224 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41225 {
41226 	USE_OPLINE
41227 	zval *value;
41228 	zend_free_op free_op1;
41229 
41230 	SAVE_OPLINE();
41231 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41232 try_strlen:
41233 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
41234 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
41235 	} else {
41236 		zend_bool strict;
41237 
41238 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41239 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
41240 		}
41241 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
41242 			value = Z_REFVAL_P(value);
41243 			goto try_strlen;
41244 		}
41245 		strict = EX_USES_STRICT_TYPES();
41246 		do {
41247 			if (EXPECTED(!strict)) {
41248 				zend_string *str;
41249 				zval tmp;
41250 
41251 				ZVAL_COPY(&tmp, value);
41252 				if (zend_parse_arg_str_weak(&tmp, &str)) {
41253 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
41254 					zval_ptr_dtor(&tmp);
41255 					break;
41256 				}
41257 				zval_ptr_dtor(&tmp);
41258 			}
41259 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
41260 			ZVAL_NULL(EX_VAR(opline->result.var));
41261 		} while (0);
41262 	}
41263 	zval_ptr_dtor_nogc(free_op1);
41264 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41265 }
41266 
41267 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41268 {
41269 	USE_OPLINE
41270 	zend_free_op free_op1;
41271 	zval *op1, *op2, *result;
41272 
41273 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41274 	op2 = EX_CONSTANT(opline->op2);
41275 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41276 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41277 			result = EX_VAR(opline->result.var);
41278 			fast_long_add_function(result, op1, op2);
41279 			ZEND_VM_NEXT_OPCODE();
41280 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41281 			result = EX_VAR(opline->result.var);
41282 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
41283 			ZEND_VM_NEXT_OPCODE();
41284 		}
41285 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
41286 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41287 			result = EX_VAR(opline->result.var);
41288 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
41289 			ZEND_VM_NEXT_OPCODE();
41290 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41291 			result = EX_VAR(opline->result.var);
41292 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
41293 			ZEND_VM_NEXT_OPCODE();
41294 		}
41295 	}
41296 
41297 	SAVE_OPLINE();
41298 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41299 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41300 	}
41301 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41302 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41303 	}
41304 	add_function(EX_VAR(opline->result.var), op1, op2);
41305 	zval_ptr_dtor_nogc(free_op1);
41306 
41307 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41308 }
41309 
41310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41311 {
41312 	USE_OPLINE
41313 	zend_free_op free_op1;
41314 	zval *op1, *op2, *result;
41315 
41316 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41317 	op2 = EX_CONSTANT(opline->op2);
41318 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41319 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41320 			result = EX_VAR(opline->result.var);
41321 			fast_long_sub_function(result, op1, op2);
41322 			ZEND_VM_NEXT_OPCODE();
41323 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41324 			result = EX_VAR(opline->result.var);
41325 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
41326 			ZEND_VM_NEXT_OPCODE();
41327 		}
41328 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
41329 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41330 			result = EX_VAR(opline->result.var);
41331 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
41332 			ZEND_VM_NEXT_OPCODE();
41333 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41334 			result = EX_VAR(opline->result.var);
41335 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
41336 			ZEND_VM_NEXT_OPCODE();
41337 		}
41338 	}
41339 
41340 	SAVE_OPLINE();
41341 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41342 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41343 	}
41344 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41345 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41346 	}
41347 	sub_function(EX_VAR(opline->result.var), op1, op2);
41348 	zval_ptr_dtor_nogc(free_op1);
41349 
41350 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41351 }
41352 
41353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41354 {
41355 	USE_OPLINE
41356 	zend_free_op free_op1;
41357 	zval *op1, *op2, *result;
41358 
41359 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41360 	op2 = EX_CONSTANT(opline->op2);
41361 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41362 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41363 			zend_long overflow;
41364 
41365 			result = EX_VAR(opline->result.var);
41366 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
41367 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
41368 			ZEND_VM_NEXT_OPCODE();
41369 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41370 			result = EX_VAR(opline->result.var);
41371 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
41372 			ZEND_VM_NEXT_OPCODE();
41373 		}
41374 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
41375 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41376 			result = EX_VAR(opline->result.var);
41377 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
41378 			ZEND_VM_NEXT_OPCODE();
41379 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41380 			result = EX_VAR(opline->result.var);
41381 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
41382 			ZEND_VM_NEXT_OPCODE();
41383 		}
41384 	}
41385 
41386 	SAVE_OPLINE();
41387 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41388 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41389 	}
41390 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41391 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41392 	}
41393 	mul_function(EX_VAR(opline->result.var), op1, op2);
41394 	zval_ptr_dtor_nogc(free_op1);
41395 
41396 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41397 }
41398 
41399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41400 {
41401 	USE_OPLINE
41402 	zend_free_op free_op1;
41403 	zval *op1, *op2;
41404 
41405 	SAVE_OPLINE();
41406 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41407 	op2 = EX_CONSTANT(opline->op2);
41408 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
41409 	zval_ptr_dtor_nogc(free_op1);
41410 
41411 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41412 }
41413 
41414 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41415 {
41416 	USE_OPLINE
41417 	zend_free_op free_op1;
41418 	zval *op1, *op2, *result;
41419 
41420 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41421 	op2 = EX_CONSTANT(opline->op2);
41422 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41423 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41424 			result = EX_VAR(opline->result.var);
41425 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
41426 				SAVE_OPLINE();
41427 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
41428 				HANDLE_EXCEPTION();
41429 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
41430 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
41431 				ZVAL_LONG(result, 0);
41432 			} else {
41433 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
41434 			}
41435 			ZEND_VM_NEXT_OPCODE();
41436 		}
41437 	}
41438 
41439 	SAVE_OPLINE();
41440 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41441 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41442 	}
41443 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41444 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41445 	}
41446 	mod_function(EX_VAR(opline->result.var), op1, op2);
41447 	zval_ptr_dtor_nogc(free_op1);
41448 
41449 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41450 }
41451 
41452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41453 {
41454 	USE_OPLINE
41455 	zend_free_op free_op1;
41456 	zval *op1, *op2;
41457 
41458 	SAVE_OPLINE();
41459 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41460 	op2 = EX_CONSTANT(opline->op2);
41461 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
41462 	zval_ptr_dtor_nogc(free_op1);
41463 
41464 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41465 }
41466 
41467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41468 {
41469 	USE_OPLINE
41470 	zend_free_op free_op1;
41471 	zval *op1, *op2;
41472 
41473 	SAVE_OPLINE();
41474 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41475 	op2 = EX_CONSTANT(opline->op2);
41476 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
41477 	zval_ptr_dtor_nogc(free_op1);
41478 
41479 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41480 }
41481 
41482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41483 {
41484 	USE_OPLINE
41485 	zend_free_op free_op1;
41486 	zval *op1, *op2;
41487 
41488 	SAVE_OPLINE();
41489 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41490 	op2 = EX_CONSTANT(opline->op2);
41491 	pow_function(EX_VAR(opline->result.var), op1, op2);
41492 	zval_ptr_dtor_nogc(free_op1);
41493 
41494 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41495 }
41496 
41497 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41498 {
41499 	USE_OPLINE
41500 	zend_free_op free_op1;
41501 	zval *op1, *op2;
41502 
41503 	SAVE_OPLINE();
41504 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41505 	op2 = EX_CONSTANT(opline->op2);
41506 
41507 	do {
41508 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
41509 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
41510 			zend_string *op1_str = Z_STR_P(op1);
41511 			zend_string *op2_str = Z_STR_P(op2);
41512 			zend_string *str;
41513 
41514 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
41515 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
41516 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
41517 					zval_ptr_dtor_nogc(free_op1);
41518 					break;
41519 				}
41520 			}
41521 			if (IS_CONST != IS_CONST) {
41522 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
41523 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
41524 					zval_ptr_dtor_nogc(free_op1);
41525 					break;
41526 				}
41527 			}
41528 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
41529 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
41530 			    size_t len = ZSTR_LEN(op1_str);
41531 
41532 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
41533 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41534 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41535 				break;
41536 			} else {
41537 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
41538 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
41539 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41540 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41541 			}
41542 		} else {
41543 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41544 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41545 			}
41546 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41547 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41548 			}
41549 			concat_function(EX_VAR(opline->result.var), op1, op2);
41550 		}
41551 		zval_ptr_dtor_nogc(free_op1);
41552 	} while (0);
41553 
41554 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41555 }
41556 
41557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41558 {
41559 	USE_OPLINE
41560 	zend_free_op free_op1;
41561 	zval *op1, *op2, *result;
41562 
41563 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41564 	op2 = EX_CONSTANT(opline->op2);
41565 	do {
41566 		int result;
41567 
41568 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41569 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41570 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
41571 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41572 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
41573 			} else {
41574 				break;
41575 			}
41576 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41577 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41578 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
41579 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41580 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
41581 			} else {
41582 				break;
41583 			}
41584 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41585 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41586 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
41587 					result = 1;
41588 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
41589 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
41590 						result = 0;
41591 					} else {
41592 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
41593 					}
41594 				} else {
41595 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
41596 				}
41597 				zval_ptr_dtor_nogc(free_op1);
41598 
41599 			} else {
41600 				break;
41601 			}
41602 		} else {
41603 			break;
41604 		}
41605 		ZEND_VM_SMART_BRANCH(result, 0);
41606 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
41607 		ZEND_VM_NEXT_OPCODE();
41608 	} while (0);
41609 
41610 	SAVE_OPLINE();
41611 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41612 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41613 	}
41614 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41615 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41616 	}
41617 	result = EX_VAR(opline->result.var);
41618 	compare_function(result, op1, op2);
41619 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
41620 	zval_ptr_dtor_nogc(free_op1);
41621 
41622 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41623 }
41624 
41625 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41626 {
41627 	USE_OPLINE
41628 	zend_free_op free_op1;
41629 	zval *op1, *op2, *result;
41630 
41631 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41632 	op2 = EX_CONSTANT(opline->op2);
41633 	do {
41634 		int result;
41635 
41636 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41637 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41638 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
41639 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41640 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
41641 			} else {
41642 				break;
41643 			}
41644 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41645 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41646 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
41647 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41648 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
41649 			} else {
41650 				break;
41651 			}
41652 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41653 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41654 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
41655 					result = 0;
41656 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
41657 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
41658 						result = 1;
41659 					} else {
41660 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
41661 					}
41662 				} else {
41663 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
41664 				}
41665 				zval_ptr_dtor_nogc(free_op1);
41666 
41667 			} else {
41668 				break;
41669 			}
41670 		} else {
41671 			break;
41672 		}
41673 		ZEND_VM_SMART_BRANCH(result, 0);
41674 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
41675 		ZEND_VM_NEXT_OPCODE();
41676 	} while (0);
41677 
41678 	SAVE_OPLINE();
41679 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41680 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41681 	}
41682 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41683 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41684 	}
41685 	result = EX_VAR(opline->result.var);
41686 	compare_function(result, op1, op2);
41687 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
41688 	zval_ptr_dtor_nogc(free_op1);
41689 
41690 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41691 }
41692 
41693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41694 {
41695 	USE_OPLINE
41696 	zend_free_op free_op1;
41697 	zval *op1, *op2, *result;
41698 
41699 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41700 	op2 = EX_CONSTANT(opline->op2);
41701 	do {
41702 		int result;
41703 
41704 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41705 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41706 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
41707 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41708 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
41709 			} else {
41710 				break;
41711 			}
41712 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
41713 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41714 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
41715 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41716 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
41717 			} else {
41718 				break;
41719 			}
41720 		} else {
41721 			break;
41722 		}
41723 		ZEND_VM_SMART_BRANCH(result, 0);
41724 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
41725 		ZEND_VM_NEXT_OPCODE();
41726 	} while (0);
41727 
41728 	SAVE_OPLINE();
41729 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41730 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41731 	}
41732 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41733 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41734 	}
41735 	result = EX_VAR(opline->result.var);
41736 	compare_function(result, op1, op2);
41737 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
41738 	zval_ptr_dtor_nogc(free_op1);
41739 
41740 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41741 }
41742 
41743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41744 {
41745 	USE_OPLINE
41746 	zend_free_op free_op1;
41747 	zval *op1, *op2, *result;
41748 
41749 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41750 	op2 = EX_CONSTANT(opline->op2);
41751 	do {
41752 		int result;
41753 
41754 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
41755 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41756 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
41757 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41758 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
41759 			} else {
41760 				break;
41761 			}
41762 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
41763 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
41764 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
41765 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
41766 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
41767 			} else {
41768 				break;
41769 			}
41770 		} else {
41771 			break;
41772 		}
41773 		ZEND_VM_SMART_BRANCH(result, 0);
41774 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
41775 		ZEND_VM_NEXT_OPCODE();
41776 	} while (0);
41777 
41778 	SAVE_OPLINE();
41779 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
41780 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
41781 	}
41782 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
41783 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
41784 	}
41785 	result = EX_VAR(opline->result.var);
41786 	compare_function(result, op1, op2);
41787 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
41788 	zval_ptr_dtor_nogc(free_op1);
41789 
41790 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41791 }
41792 
41793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41794 {
41795 	USE_OPLINE
41796 	zend_free_op free_op1;
41797 	zval *op1, *op2;
41798 
41799 	SAVE_OPLINE();
41800 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41801 	op2 = EX_CONSTANT(opline->op2);
41802 	compare_function(EX_VAR(opline->result.var), op1, op2);
41803 	zval_ptr_dtor_nogc(free_op1);
41804 
41805 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41806 }
41807 
41808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41809 {
41810 	USE_OPLINE
41811 	zend_free_op free_op1;
41812 	zval *op1, *op2;
41813 
41814 	SAVE_OPLINE();
41815 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41816 	op2 = EX_CONSTANT(opline->op2);
41817 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
41818 	zval_ptr_dtor_nogc(free_op1);
41819 
41820 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41821 }
41822 
41823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41824 {
41825 	USE_OPLINE
41826 	zend_free_op free_op1;
41827 	zval *op1, *op2;
41828 
41829 	SAVE_OPLINE();
41830 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41831 	op2 = EX_CONSTANT(opline->op2);
41832 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
41833 	zval_ptr_dtor_nogc(free_op1);
41834 
41835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41836 }
41837 
41838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41839 {
41840 	USE_OPLINE
41841 	zend_free_op free_op1;
41842 	zval *op1, *op2;
41843 
41844 	SAVE_OPLINE();
41845 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41846 	op2 = EX_CONSTANT(opline->op2);
41847 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
41848 	zval_ptr_dtor_nogc(free_op1);
41849 
41850 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41851 }
41852 
41853 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41854 {
41855 	USE_OPLINE
41856 	zend_free_op free_op1;
41857 	zval *op1, *op2;
41858 
41859 	SAVE_OPLINE();
41860 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41861 	op2 = EX_CONSTANT(opline->op2);
41862 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
41863 	zval_ptr_dtor_nogc(free_op1);
41864 
41865 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41866 }
41867 
41868 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
41869 {
41870 	USE_OPLINE
41871 	zend_free_op free_op1;
41872 	zval *varname;
41873 	zval *retval;
41874 	zend_string *name;
41875 	HashTable *target_symbol_table;
41876 
41877 	SAVE_OPLINE();
41878 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
41879 
41880  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
41881 		name = Z_STR_P(varname);
41882 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
41883 		name = Z_STR_P(varname);
41884 		zend_string_addref(name);
41885 	} else {
41886 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
41887 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
41888 		}
41889 		name = zval_get_string(varname);
41890 	}
41891 
41892 	if (IS_CONST != IS_UNUSED) {
41893 		zend_class_entry *ce;
41894 
41895 		if (IS_CONST == IS_CONST) {
41896 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
41897 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
41898 
41899 				/* check if static properties were destoyed */
41900 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41901 					if (type == BP_VAR_IS) {
41902 						retval = &EG(uninitialized_zval);
41903 					} else {
41904 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
41905 						zval_ptr_dtor_nogc(free_op1);
41906 						HANDLE_EXCEPTION();
41907 					}
41908 				}
41909 
41910 				goto fetch_var_return;
41911 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
41912 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
41913 				if (UNEXPECTED(ce == NULL)) {
41914 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
41915 						zend_string_release(name);
41916 					}
41917 					zval_ptr_dtor_nogc(free_op1);
41918 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41919 				}
41920 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
41921 			}
41922 		} else {
41923 			ce = Z_CE_P(EX_VAR(opline->op2.var));
41924 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
41925 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
41926 
41927 				/* check if static properties were destoyed */
41928 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41929 					if (type == BP_VAR_IS) {
41930 						retval = &EG(uninitialized_zval);
41931 					} else {
41932 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
41933 						zval_ptr_dtor_nogc(free_op1);
41934 						HANDLE_EXCEPTION();
41935 					}
41936 				}
41937 
41938 				goto fetch_var_return;
41939 			}
41940 		}
41941 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
41942 		if (UNEXPECTED(EG(exception))) {
41943 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
41944 				zend_string_release(name);
41945 			}
41946 			zval_ptr_dtor_nogc(free_op1);
41947 			HANDLE_EXCEPTION();
41948 		}
41949 		if (EXPECTED(retval)) {
41950 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
41951 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
41952 			}
41953 		} else {
41954 			retval = &EG(uninitialized_zval);
41955 		}
41956 
41957 		zval_ptr_dtor_nogc(free_op1);
41958 	} else {
41959 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
41960 		retval = zend_hash_find(target_symbol_table, name);
41961 		if (retval == NULL) {
41962 			switch (type) {
41963 				case BP_VAR_R:
41964 				case BP_VAR_UNSET:
41965 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
41966 					/* break missing intentionally */
41967 				case BP_VAR_IS:
41968 					retval = &EG(uninitialized_zval);
41969 					break;
41970 				case BP_VAR_RW:
41971 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
41972 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
41973 					break;
41974 				case BP_VAR_W:
41975 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
41976 					break;
41977 				EMPTY_SWITCH_DEFAULT_CASE()
41978 			}
41979 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
41980 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
41981 			retval = Z_INDIRECT_P(retval);
41982 			if (Z_TYPE_P(retval) == IS_UNDEF) {
41983 				switch (type) {
41984 					case BP_VAR_R:
41985 					case BP_VAR_UNSET:
41986 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
41987 						/* break missing intentionally */
41988 					case BP_VAR_IS:
41989 						retval = &EG(uninitialized_zval);
41990 						break;
41991 					case BP_VAR_RW:
41992 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
41993 						/* break missing intentionally */
41994 					case BP_VAR_W:
41995 						ZVAL_NULL(retval);
41996 						break;
41997 					EMPTY_SWITCH_DEFAULT_CASE()
41998 				}
41999 			}
42000 		}
42001 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
42002 			if (Z_CONSTANT_P(retval)) {
42003 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
42004 					zval_ptr_dtor_nogc(free_op1);
42005 					HANDLE_EXCEPTION();
42006 				}
42007 			}
42008 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
42009 			zval_ptr_dtor_nogc(free_op1);
42010 		}
42011 	}
42012 
42013 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
42014 		zend_string_release(name);
42015 	}
42016 
42017 fetch_var_return:
42018 	ZEND_ASSERT(retval != NULL);
42019 	if (type == BP_VAR_R || type == BP_VAR_IS) {
42020 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
42021 			ZVAL_UNREF(retval);
42022 		}
42023 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
42024 	} else {
42025 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
42026 	}
42027 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42028 }
42029 
42030 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42031 {
42032 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42033 }
42034 
42035 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42036 {
42037 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42038 }
42039 
42040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42041 {
42042 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42043 }
42044 
42045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42046 {
42047 	USE_OPLINE
42048 
42049 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
42050 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42051 	} else {
42052 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42053 	}
42054 }
42055 
42056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42057 {
42058 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42059 }
42060 
42061 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42062 {
42063 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42064 }
42065 
42066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42067 {
42068 	USE_OPLINE
42069 	zend_free_op free_op1;
42070 	zval *container;
42071 
42072 	SAVE_OPLINE();
42073 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42074 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
42075 
42076 	zval_ptr_dtor_nogc(free_op1);
42077 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42078 }
42079 
42080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42081 {
42082 	USE_OPLINE
42083 	zend_free_op free_op1;
42084 	zval *container;
42085 
42086 	SAVE_OPLINE();
42087 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42088 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
42089 
42090 	zval_ptr_dtor_nogc(free_op1);
42091 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42092 }
42093 
42094 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42095 {
42096 	USE_OPLINE
42097 	zend_free_op free_op1;
42098 	zval *container;
42099 
42100 	zval *offset;
42101 
42102 	SAVE_OPLINE();
42103 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42104 
42105 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
42106 		zend_throw_error(NULL, "Using $this when not in object context");
42107 
42108 		HANDLE_EXCEPTION();
42109 	}
42110 
42111 	offset  = EX_CONSTANT(opline->op2);
42112 
42113 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
42114 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42115 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42116 			container = Z_REFVAL_P(container);
42117 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42118 				goto fetch_obj_is_no_object;
42119 			}
42120 		} else {
42121 			goto fetch_obj_is_no_object;
42122 		}
42123 	}
42124 
42125 	/* here we are sure we are dealing with an object */
42126 	do {
42127 		zend_object *zobj = Z_OBJ_P(container);
42128 		zval *retval;
42129 
42130 		if (IS_CONST == IS_CONST &&
42131 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
42132 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
42133 
42134 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
42135 				retval = OBJ_PROP(zobj, prop_offset);
42136 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
42137 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
42138 					break;
42139 				}
42140 			} else if (EXPECTED(zobj->properties != NULL)) {
42141 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
42142 				if (EXPECTED(retval)) {
42143 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
42144 					break;
42145 				}
42146 			}
42147 		}
42148 
42149 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
42150 fetch_obj_is_no_object:
42151 			ZVAL_NULL(EX_VAR(opline->result.var));
42152 		} else {
42153 
42154 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
42155 
42156 			if (retval != EX_VAR(opline->result.var)) {
42157 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
42158 			}
42159 		}
42160 	} while (0);
42161 
42162 	zval_ptr_dtor_nogc(free_op1);
42163 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42164 }
42165 
42166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42167 {
42168 	USE_OPLINE
42169 	zend_free_op free_op1;
42170 	zval *container;
42171 
42172 	SAVE_OPLINE();
42173 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42174 
42175 try_fetch_list:
42176 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42177 		zval *value = zend_hash_index_find(Z_ARRVAL_P(container), Z_LVAL_P(EX_CONSTANT(opline->op2)));
42178 
42179 		if (UNEXPECTED(value == NULL)) {
42180 			zend_error(E_NOTICE,"Undefined offset: " ZEND_ULONG_FMT, Z_LVAL_P(EX_CONSTANT(opline->op2)));
42181 			ZVAL_NULL(EX_VAR(opline->result.var));
42182 		} else {
42183 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42184 		}
42185 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
42186 	           UNEXPECTED(Z_TYPE_P(container) == IS_OBJECT) &&
42187 	           EXPECTED(Z_OBJ_HT_P(container)->read_dimension)) {
42188 		zval *result = EX_VAR(opline->result.var);
42189 		zval *retval = Z_OBJ_HT_P(container)->read_dimension(container, EX_CONSTANT(opline->op2), BP_VAR_R, result);
42190 
42191 		if (retval) {
42192 			if (result != retval) {
42193 				ZVAL_COPY(result, retval);
42194 			}
42195 		} else {
42196 			ZVAL_NULL(result);
42197 		}
42198 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(container) == IS_REFERENCE) {
42199 		container = Z_REFVAL_P(container);
42200 		goto try_fetch_list;
42201 	} else {
42202 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42203 			GET_OP1_UNDEF_CV(container, BP_VAR_R);
42204 		}
42205 		ZVAL_NULL(EX_VAR(opline->result.var));
42206 	}
42207 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42208 }
42209 
42210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42211 {
42212 	USE_OPLINE
42213 	zend_free_op free_op1;
42214 	zval *op1, *op2;
42215 	zend_string *op1_str, *op2_str, *str;
42216 
42217 	SAVE_OPLINE();
42218 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42219 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42220 		op1_str = Z_STR_P(op1);
42221 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42222 		op1_str = zend_string_copy(Z_STR_P(op1));
42223 	} else {
42224 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
42225 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
42226 		}
42227 		op1_str = _zval_get_string_func(op1);
42228 	}
42229 	op2 = EX_CONSTANT(opline->op2);
42230 	if (IS_CONST == IS_CONST) {
42231 		op2_str = Z_STR_P(op2);
42232 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42233 		op2_str = zend_string_copy(Z_STR_P(op2));
42234 	} else {
42235 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
42236 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
42237 		}
42238 		op2_str = _zval_get_string_func(op2);
42239 	}
42240 	do {
42241 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
42242 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
42243 				if (IS_CONST == IS_CONST) {
42244 					zend_string_addref(op2_str);
42245 				}
42246 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
42247 				zend_string_release(op1_str);
42248 				break;
42249 			}
42250 		}
42251 		if (IS_CONST != IS_CONST) {
42252 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
42253 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42254 					zend_string_addref(op1_str);
42255 				}
42256 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
42257 				zend_string_release(op2_str);
42258 				break;
42259 			}
42260 		}
42261 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
42262 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
42263 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
42264 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
42265 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
42266 			zend_string_release(op1_str);
42267 		}
42268 		if (IS_CONST != IS_CONST) {
42269 			zend_string_release(op2_str);
42270 		}
42271 	} while (0);
42272 	zval_ptr_dtor_nogc(free_op1);
42273 
42274 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42275 }
42276 
42277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42278 {
42279 	USE_OPLINE
42280 	zval *function_name;
42281 	zend_free_op free_op1;
42282 	zval *object;
42283 	zend_function *fbc;
42284 	zend_class_entry *called_scope;
42285 	zend_object *obj;
42286 	zend_execute_data *call;
42287 	uint32_t call_info;
42288 
42289 	SAVE_OPLINE();
42290 
42291 	function_name = EX_CONSTANT(opline->op2);
42292 
42293 	if (IS_CONST != IS_CONST &&
42294 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
42295 		do {
42296 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
42297 				function_name = Z_REFVAL_P(function_name);
42298 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
42299 					break;
42300 				}
42301 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
42302 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
42303 				if (UNEXPECTED(EG(exception) != NULL)) {
42304 					HANDLE_EXCEPTION();
42305 				}
42306 			}
42307 			zend_throw_error(NULL, "Method name must be a string");
42308 
42309 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
42310 			HANDLE_EXCEPTION();
42311 		} while (0);
42312 	}
42313 
42314 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42315 
42316 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
42317 		zend_throw_error(NULL, "Using $this when not in object context");
42318 
42319 		HANDLE_EXCEPTION();
42320 	}
42321 
42322 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
42323 		do {
42324 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42325 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
42326 					object = Z_REFVAL_P(object);
42327 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
42328 						break;
42329 					}
42330 				}
42331 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42332 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
42333 					if (UNEXPECTED(EG(exception) != NULL)) {
42334 
42335 						HANDLE_EXCEPTION();
42336 					}
42337 				}
42338 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
42339 
42340 				zval_ptr_dtor_nogc(free_op1);
42341 				HANDLE_EXCEPTION();
42342 			}
42343 		} while (0);
42344 	}
42345 
42346 	obj = Z_OBJ_P(object);
42347 	called_scope = obj->ce;
42348 
42349 	if (IS_CONST != IS_CONST ||
42350 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
42351 	    zend_object *orig_obj = obj;
42352 
42353 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
42354 			zend_throw_error(NULL, "Object does not support method calls");
42355 
42356 			zval_ptr_dtor_nogc(free_op1);
42357 			HANDLE_EXCEPTION();
42358 		}
42359 
42360 		/* First, locate the function. */
42361 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
42362 		if (UNEXPECTED(fbc == NULL)) {
42363 			if (EXPECTED(!EG(exception))) {
42364 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
42365 			}
42366 
42367 			zval_ptr_dtor_nogc(free_op1);
42368 			HANDLE_EXCEPTION();
42369 		}
42370 		if (IS_CONST == IS_CONST &&
42371 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
42372 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
42373 		    EXPECTED(obj == orig_obj)) {
42374 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
42375 		}
42376 	}
42377 
42378 	call_info = ZEND_CALL_NESTED_FUNCTION;
42379 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
42380 		obj = NULL;
42381 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
42382 		/* CV may be changed indirectly (e.g. when it's a reference) */
42383 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
42384 		GC_REFCOUNT(obj)++; /* For $this pointer */
42385 	}
42386 
42387 	zval_ptr_dtor_nogc(free_op1);
42388 
42389 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
42390 		HANDLE_EXCEPTION();
42391 	}
42392 
42393 	call = zend_vm_stack_push_call_frame(call_info,
42394 		fbc, opline->extended_value, called_scope, obj);
42395 	call->prev_execute_data = EX(call);
42396 	EX(call) = call;
42397 
42398 	ZEND_VM_NEXT_OPCODE();
42399 }
42400 
42401 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42402 {
42403 	USE_OPLINE
42404 	zend_free_op free_op1;
42405 	zval *op1, *op2, *result;
42406 
42407 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42408 	op2 = EX_CONSTANT(opline->op2);
42409 	do {
42410 		int result;
42411 
42412 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42413 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42414 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
42415 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42416 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
42417 			} else {
42418 				break;
42419 			}
42420 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
42421 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42422 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
42423 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42424 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
42425 			} else {
42426 				break;
42427 			}
42428 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42429 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42430 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
42431 					result = 1;
42432 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
42433 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
42434 						result = 0;
42435 					} else {
42436 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
42437 					}
42438 				} else {
42439 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
42440 				}
42441 
42442 			} else {
42443 				break;
42444 			}
42445 		} else {
42446 			break;
42447 		}
42448 		ZEND_VM_SMART_BRANCH(result, 0);
42449 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
42450 		ZEND_VM_NEXT_OPCODE();
42451 	} while (0);
42452 
42453 	SAVE_OPLINE();
42454 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
42455 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
42456 	} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
42457 		/* Don't keep lock on reference, lock the value instead */
42458 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
42459 			ZVAL_UNREF(op1);
42460 		} else {
42461 			Z_DELREF_P(op1);
42462 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
42463 		}
42464 	}
42465 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
42466 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
42467 	}
42468 	result = EX_VAR(opline->result.var);
42469 	compare_function(result, op1, op2);
42470 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
42471 
42472 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42473 }
42474 
42475 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42476 {
42477 	USE_OPLINE
42478 	zval tmp, *varname;
42479 	HashTable *target_symbol_table;
42480 	zend_free_op free_op1;
42481 
42482 	SAVE_OPLINE();
42483 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
42484 	    IS_CONST == IS_UNUSED &&
42485 	    (opline->extended_value & ZEND_QUICK_SET)) {
42486 		zval *var = EX_VAR(opline->op1.var);
42487 
42488 		if (Z_REFCOUNTED_P(var)) {
42489 			zend_refcounted *garbage = Z_COUNTED_P(var);
42490 
42491 			if (!--GC_REFCOUNT(garbage)) {
42492 				ZVAL_UNDEF(var);
42493 				zval_dtor_func_for_ptr(garbage);
42494 			} else {
42495 				zval *z = var;
42496 				ZVAL_DEREF(z);
42497 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
42498 					ZVAL_UNDEF(var);
42499 					gc_possible_root(Z_COUNTED_P(z));
42500 				} else {
42501 					ZVAL_UNDEF(var);
42502 				}
42503 			}
42504 		} else {
42505 			ZVAL_UNDEF(var);
42506 		}
42507 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42508 	}
42509 
42510 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42511 
42512 	ZVAL_UNDEF(&tmp);
42513 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
42514 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
42515 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
42516 		}
42517 		ZVAL_STR(&tmp, zval_get_string(varname));
42518 		varname = &tmp;
42519 	}
42520 
42521 	if (IS_CONST != IS_UNUSED) {
42522 		zend_class_entry *ce;
42523 
42524 		if (IS_CONST == IS_CONST) {
42525 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
42526 			if (UNEXPECTED(ce == NULL)) {
42527 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
42528 				if (UNEXPECTED(ce == NULL)) {
42529 					if (EXPECTED(!EG(exception))) {
42530 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
42531 					}
42532 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42533 						zend_string_release(Z_STR(tmp));
42534 					}
42535 					zval_ptr_dtor_nogc(free_op1);
42536 					HANDLE_EXCEPTION();
42537 				}
42538 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42539 			}
42540 		} else {
42541 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42542 		}
42543 		zend_std_unset_static_property(ce, Z_STR_P(varname));
42544 	} else {
42545 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
42546 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
42547 	}
42548 
42549 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42550 		zend_string_release(Z_STR(tmp));
42551 	}
42552 	zval_ptr_dtor_nogc(free_op1);
42553 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42554 }
42555 
42556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42557 {
42558 	USE_OPLINE
42559 	zval *value;
42560 	int result;
42561 
42562 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
42563 	    IS_CONST == IS_UNUSED &&
42564 	    (opline->extended_value & ZEND_QUICK_SET)) {
42565 		value = EX_VAR(opline->op1.var);
42566 		if (opline->extended_value & ZEND_ISSET) {
42567 			result =
42568 				Z_TYPE_P(value) > IS_NULL &&
42569 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42570 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
42571 			SAVE_OPLINE();
42572 			result = !i_zend_is_true(value);
42573 			if (UNEXPECTED(EG(exception))) {
42574 				HANDLE_EXCEPTION();
42575 			}
42576 		}
42577 		ZEND_VM_SMART_BRANCH(result, 0);
42578 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
42579 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
42580 		ZEND_VM_CONTINUE();
42581 	} else {
42582 		zend_free_op free_op1;
42583 		zval tmp, *varname;
42584 
42585 		SAVE_OPLINE();
42586 		varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42587 		ZVAL_UNDEF(&tmp);
42588 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
42589 			ZVAL_STR(&tmp, zval_get_string(varname));
42590 			varname = &tmp;
42591 		}
42592 
42593 		if (IS_CONST != IS_UNUSED) {
42594 			zend_class_entry *ce;
42595 
42596 			if (IS_CONST == IS_CONST) {
42597 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
42598 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
42599 
42600 					/* check if static properties were destoyed */
42601 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42602 						value = NULL;
42603 					}
42604 
42605 					goto is_var_return;
42606 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
42607 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
42608 					if (UNEXPECTED(ce == NULL)) {
42609 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42610 					}
42611 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42612 				}
42613 			} else {
42614 				ce = Z_CE_P(EX_VAR(opline->op2.var));
42615 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
42616 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
42617 
42618 					/* check if static properties were destoyed */
42619 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42620 						value = NULL;
42621 					}
42622 
42623 					goto is_var_return;
42624 				}
42625 			}
42626 
42627 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
42628 
42629 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
42630 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
42631 			}
42632 		} else {
42633 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
42634 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
42635 		}
42636 
42637 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42638 			zend_string_release(Z_STR(tmp));
42639 		}
42640 		zval_ptr_dtor_nogc(free_op1);
42641 
42642 is_var_return:
42643 		if (opline->extended_value & ZEND_ISSET) {
42644 			result = value && Z_TYPE_P(value) > IS_NULL &&
42645 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42646 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
42647 			result = !value || !i_zend_is_true(value);
42648 		}
42649 
42650 		ZEND_VM_SMART_BRANCH(result, 1);
42651 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
42652 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42653 	}
42654 }
42655 
42656 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42657 {
42658 	USE_OPLINE
42659 	zend_free_op free_op1;
42660 	zval *container;
42661 	int result;
42662 	zend_ulong hval;
42663 	zval *offset;
42664 
42665 	SAVE_OPLINE();
42666 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42667 
42668 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
42669 		zend_throw_error(NULL, "Using $this when not in object context");
42670 
42671 		HANDLE_EXCEPTION();
42672 	}
42673 
42674 	offset = EX_CONSTANT(opline->op2);
42675 
42676 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42677 		HashTable *ht;
42678 		zval *value;
42679 		zend_string *str;
42680 
42681 isset_dim_obj_array:
42682 		ht = Z_ARRVAL_P(container);
42683 isset_again:
42684 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42685 			str = Z_STR_P(offset);
42686 			if (IS_CONST != IS_CONST) {
42687 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42688 					goto num_index_prop;
42689 				}
42690 			}
42691 str_index_prop:
42692 			value = zend_hash_find_ind(ht, str);
42693 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42694 			hval = Z_LVAL_P(offset);
42695 num_index_prop:
42696 			value = zend_hash_index_find(ht, hval);
42697 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
42698 			offset = Z_REFVAL_P(offset);
42699 			goto isset_again;
42700 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42701 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
42702 			goto num_index_prop;
42703 		} else if (Z_TYPE_P(offset) == IS_NULL) {
42704 			str = ZSTR_EMPTY_ALLOC();
42705 			goto str_index_prop;
42706 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
42707 			hval = 0;
42708 			goto num_index_prop;
42709 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
42710 			hval = 1;
42711 			goto num_index_prop;
42712 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
42713 			hval = Z_RES_HANDLE_P(offset);
42714 			goto num_index_prop;
42715 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42716 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
42717 			str = ZSTR_EMPTY_ALLOC();
42718 			goto str_index_prop;
42719 		} else {
42720 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
42721 			goto isset_not_found;
42722 		}
42723 
42724 		if (opline->extended_value & ZEND_ISSET) {
42725 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
42726 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
42727 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42728 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
42729 			result = (value == NULL || !i_zend_is_true(value));
42730 		}
42731 		goto isset_dim_obj_exit;
42732 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42733 		container = Z_REFVAL_P(container);
42734 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42735 			goto isset_dim_obj_array;
42736 		}
42737 	}
42738 
42739 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
42740 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
42741 	}
42742 
42743 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
42744 	    ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
42745 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
42746 			result =
42747 				((opline->extended_value & ZEND_ISSET) == 0) ^
42748 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
42749 		} else {
42750 			zend_error(E_NOTICE, "Trying to check element of non-array");
42751 			goto isset_not_found;
42752 		}
42753 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
42754 		zend_long lval;
42755 
42756 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42757 			lval = Z_LVAL_P(offset);
42758 isset_str_offset:
42759 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
42760 				if (opline->extended_value & ZEND_ISSET) {
42761 					result = 1;
42762 				} else {
42763 					result = (Z_STRVAL_P(container)[lval] == '0');
42764 				}
42765 			} else {
42766 				goto isset_not_found;
42767 			}
42768 		} else {
42769 			if (IS_CONST & (IS_CV|IS_VAR)) {
42770 				ZVAL_DEREF(offset);
42771 			}
42772 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
42773 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
42774 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
42775 				lval = zval_get_long(offset);
42776 				goto isset_str_offset;
42777 			}
42778 			goto isset_not_found;
42779 		}
42780 	} else {
42781 isset_not_found:
42782 		result = ((opline->extended_value & ZEND_ISSET) == 0);
42783 	}
42784 
42785 isset_dim_obj_exit:
42786 
42787 	zval_ptr_dtor_nogc(free_op1);
42788 	ZEND_VM_SMART_BRANCH(result, 1);
42789 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
42790 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42791 }
42792 
42793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42794 {
42795 	USE_OPLINE
42796 	zend_free_op free_op1;
42797 	zval *container;
42798 	int result;
42799 	zval *offset;
42800 
42801 	SAVE_OPLINE();
42802 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42803 
42804 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
42805 		zend_throw_error(NULL, "Using $this when not in object context");
42806 
42807 		HANDLE_EXCEPTION();
42808 	}
42809 
42810 	offset = EX_CONSTANT(opline->op2);
42811 
42812 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
42813 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42814 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42815 			container = Z_REFVAL_P(container);
42816 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
42817 				goto isset_no_object;
42818 			}
42819 		} else {
42820 			goto isset_no_object;
42821 		}
42822 	}
42823 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
42824 		zend_error(E_NOTICE, "Trying to check property of non-object");
42825 isset_no_object:
42826 		result = ((opline->extended_value & ZEND_ISSET) == 0);
42827 	} else {
42828 		result =
42829 			((opline->extended_value & ZEND_ISSET) == 0) ^
42830 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
42831 	}
42832 
42833 	zval_ptr_dtor_nogc(free_op1);
42834 	ZEND_VM_SMART_BRANCH(result, 1);
42835 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
42836 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42837 }
42838 
42839 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42840 {
42841 	USE_OPLINE
42842 	zend_free_op free_op1;
42843 	zval *expr;
42844 	zend_bool result;
42845 
42846 	SAVE_OPLINE();
42847 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42848 
42849 try_instanceof:
42850 	if (Z_TYPE_P(expr) == IS_OBJECT) {
42851 		zend_class_entry *ce;
42852 
42853 		if (IS_CONST == IS_CONST) {
42854 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
42855 			if (UNEXPECTED(ce == NULL)) {
42856 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
42857 				if (UNEXPECTED(ce == NULL)) {
42858 					ZVAL_FALSE(EX_VAR(opline->result.var));
42859 					zval_ptr_dtor_nogc(free_op1);
42860 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42861 				}
42862 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42863 			}
42864 		} else {
42865 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42866 		}
42867 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
42868 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
42869 		expr = Z_REFVAL_P(expr);
42870 		goto try_instanceof;
42871 	} else {
42872 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
42873 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
42874 		}
42875 		result = 0;
42876 	}
42877 	zval_ptr_dtor_nogc(free_op1);
42878 	ZEND_VM_SMART_BRANCH(result, 1);
42879 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
42880 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42881 }
42882 
42883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
42884 {
42885 	USE_OPLINE
42886 	zend_free_op free_op1;
42887 	zval *varname;
42888 	zval *retval;
42889 	zend_string *name;
42890 	HashTable *target_symbol_table;
42891 
42892 	SAVE_OPLINE();
42893 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
42894 
42895  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42896 		name = Z_STR_P(varname);
42897 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
42898 		name = Z_STR_P(varname);
42899 		zend_string_addref(name);
42900 	} else {
42901 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
42902 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
42903 		}
42904 		name = zval_get_string(varname);
42905 	}
42906 
42907 	if (IS_VAR != IS_UNUSED) {
42908 		zend_class_entry *ce;
42909 
42910 		if (IS_VAR == IS_CONST) {
42911 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
42912 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
42913 
42914 				/* check if static properties were destoyed */
42915 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42916 					if (type == BP_VAR_IS) {
42917 						retval = &EG(uninitialized_zval);
42918 					} else {
42919 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
42920 						zval_ptr_dtor_nogc(free_op1);
42921 						HANDLE_EXCEPTION();
42922 					}
42923 				}
42924 
42925 				goto fetch_var_return;
42926 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
42927 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
42928 				if (UNEXPECTED(ce == NULL)) {
42929 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
42930 						zend_string_release(name);
42931 					}
42932 					zval_ptr_dtor_nogc(free_op1);
42933 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42934 				}
42935 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42936 			}
42937 		} else {
42938 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42939 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
42940 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
42941 
42942 				/* check if static properties were destoyed */
42943 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42944 					if (type == BP_VAR_IS) {
42945 						retval = &EG(uninitialized_zval);
42946 					} else {
42947 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
42948 						zval_ptr_dtor_nogc(free_op1);
42949 						HANDLE_EXCEPTION();
42950 					}
42951 				}
42952 
42953 				goto fetch_var_return;
42954 			}
42955 		}
42956 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
42957 		if (UNEXPECTED(EG(exception))) {
42958 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
42959 				zend_string_release(name);
42960 			}
42961 			zval_ptr_dtor_nogc(free_op1);
42962 			HANDLE_EXCEPTION();
42963 		}
42964 		if (EXPECTED(retval)) {
42965 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42966 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
42967 			}
42968 		} else {
42969 			retval = &EG(uninitialized_zval);
42970 		}
42971 
42972 		zval_ptr_dtor_nogc(free_op1);
42973 	} else {
42974 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
42975 		retval = zend_hash_find(target_symbol_table, name);
42976 		if (retval == NULL) {
42977 			switch (type) {
42978 				case BP_VAR_R:
42979 				case BP_VAR_UNSET:
42980 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
42981 					/* break missing intentionally */
42982 				case BP_VAR_IS:
42983 					retval = &EG(uninitialized_zval);
42984 					break;
42985 				case BP_VAR_RW:
42986 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
42987 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
42988 					break;
42989 				case BP_VAR_W:
42990 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
42991 					break;
42992 				EMPTY_SWITCH_DEFAULT_CASE()
42993 			}
42994 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
42995 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
42996 			retval = Z_INDIRECT_P(retval);
42997 			if (Z_TYPE_P(retval) == IS_UNDEF) {
42998 				switch (type) {
42999 					case BP_VAR_R:
43000 					case BP_VAR_UNSET:
43001 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43002 						/* break missing intentionally */
43003 					case BP_VAR_IS:
43004 						retval = &EG(uninitialized_zval);
43005 						break;
43006 					case BP_VAR_RW:
43007 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43008 						/* break missing intentionally */
43009 					case BP_VAR_W:
43010 						ZVAL_NULL(retval);
43011 						break;
43012 					EMPTY_SWITCH_DEFAULT_CASE()
43013 				}
43014 			}
43015 		}
43016 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
43017 			if (Z_CONSTANT_P(retval)) {
43018 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
43019 					zval_ptr_dtor_nogc(free_op1);
43020 					HANDLE_EXCEPTION();
43021 				}
43022 			}
43023 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
43024 			zval_ptr_dtor_nogc(free_op1);
43025 		}
43026 	}
43027 
43028 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43029 		zend_string_release(name);
43030 	}
43031 
43032 fetch_var_return:
43033 	ZEND_ASSERT(retval != NULL);
43034 	if (type == BP_VAR_R || type == BP_VAR_IS) {
43035 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
43036 			ZVAL_UNREF(retval);
43037 		}
43038 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
43039 	} else {
43040 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
43041 	}
43042 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43043 }
43044 
43045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43046 {
43047 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43048 }
43049 
43050 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43051 {
43052 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43053 }
43054 
43055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43056 {
43057 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43058 }
43059 
43060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43061 {
43062 	USE_OPLINE
43063 
43064 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
43065 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43066 	} else {
43067 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43068 	}
43069 }
43070 
43071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43072 {
43073 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43074 }
43075 
43076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43077 {
43078 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43079 }
43080 
43081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43082 {
43083 	USE_OPLINE
43084 	zval tmp, *varname;
43085 	HashTable *target_symbol_table;
43086 	zend_free_op free_op1;
43087 
43088 	SAVE_OPLINE();
43089 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
43090 	    IS_VAR == IS_UNUSED &&
43091 	    (opline->extended_value & ZEND_QUICK_SET)) {
43092 		zval *var = EX_VAR(opline->op1.var);
43093 
43094 		if (Z_REFCOUNTED_P(var)) {
43095 			zend_refcounted *garbage = Z_COUNTED_P(var);
43096 
43097 			if (!--GC_REFCOUNT(garbage)) {
43098 				ZVAL_UNDEF(var);
43099 				zval_dtor_func_for_ptr(garbage);
43100 			} else {
43101 				zval *z = var;
43102 				ZVAL_DEREF(z);
43103 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
43104 					ZVAL_UNDEF(var);
43105 					gc_possible_root(Z_COUNTED_P(z));
43106 				} else {
43107 					ZVAL_UNDEF(var);
43108 				}
43109 			}
43110 		} else {
43111 			ZVAL_UNDEF(var);
43112 		}
43113 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43114 	}
43115 
43116 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43117 
43118 	ZVAL_UNDEF(&tmp);
43119 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43120 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
43121 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
43122 		}
43123 		ZVAL_STR(&tmp, zval_get_string(varname));
43124 		varname = &tmp;
43125 	}
43126 
43127 	if (IS_VAR != IS_UNUSED) {
43128 		zend_class_entry *ce;
43129 
43130 		if (IS_VAR == IS_CONST) {
43131 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
43132 			if (UNEXPECTED(ce == NULL)) {
43133 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
43134 				if (UNEXPECTED(ce == NULL)) {
43135 					if (EXPECTED(!EG(exception))) {
43136 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
43137 					}
43138 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43139 						zend_string_release(Z_STR(tmp));
43140 					}
43141 					zval_ptr_dtor_nogc(free_op1);
43142 					HANDLE_EXCEPTION();
43143 				}
43144 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43145 			}
43146 		} else {
43147 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43148 		}
43149 		zend_std_unset_static_property(ce, Z_STR_P(varname));
43150 	} else {
43151 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43152 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
43153 	}
43154 
43155 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43156 		zend_string_release(Z_STR(tmp));
43157 	}
43158 	zval_ptr_dtor_nogc(free_op1);
43159 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43160 }
43161 
43162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43163 {
43164 	USE_OPLINE
43165 	zval *value;
43166 	int result;
43167 
43168 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
43169 	    IS_VAR == IS_UNUSED &&
43170 	    (opline->extended_value & ZEND_QUICK_SET)) {
43171 		value = EX_VAR(opline->op1.var);
43172 		if (opline->extended_value & ZEND_ISSET) {
43173 			result =
43174 				Z_TYPE_P(value) > IS_NULL &&
43175 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43176 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43177 			SAVE_OPLINE();
43178 			result = !i_zend_is_true(value);
43179 			if (UNEXPECTED(EG(exception))) {
43180 				HANDLE_EXCEPTION();
43181 			}
43182 		}
43183 		ZEND_VM_SMART_BRANCH(result, 0);
43184 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43185 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
43186 		ZEND_VM_CONTINUE();
43187 	} else {
43188 		zend_free_op free_op1;
43189 		zval tmp, *varname;
43190 
43191 		SAVE_OPLINE();
43192 		varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43193 		ZVAL_UNDEF(&tmp);
43194 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43195 			ZVAL_STR(&tmp, zval_get_string(varname));
43196 			varname = &tmp;
43197 		}
43198 
43199 		if (IS_VAR != IS_UNUSED) {
43200 			zend_class_entry *ce;
43201 
43202 			if (IS_VAR == IS_CONST) {
43203 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
43204 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
43205 
43206 					/* check if static properties were destoyed */
43207 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43208 						value = NULL;
43209 					}
43210 
43211 					goto is_var_return;
43212 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
43213 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
43214 					if (UNEXPECTED(ce == NULL)) {
43215 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43216 					}
43217 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43218 				}
43219 			} else {
43220 				ce = Z_CE_P(EX_VAR(opline->op2.var));
43221 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43222 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
43223 
43224 					/* check if static properties were destoyed */
43225 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43226 						value = NULL;
43227 					}
43228 
43229 					goto is_var_return;
43230 				}
43231 			}
43232 
43233 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
43234 
43235 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
43236 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
43237 			}
43238 		} else {
43239 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43240 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
43241 		}
43242 
43243 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43244 			zend_string_release(Z_STR(tmp));
43245 		}
43246 		zval_ptr_dtor_nogc(free_op1);
43247 
43248 is_var_return:
43249 		if (opline->extended_value & ZEND_ISSET) {
43250 			result = value && Z_TYPE_P(value) > IS_NULL &&
43251 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43252 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43253 			result = !value || !i_zend_is_true(value);
43254 		}
43255 
43256 		ZEND_VM_SMART_BRANCH(result, 1);
43257 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43258 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43259 	}
43260 }
43261 
43262 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43263 {
43264 	USE_OPLINE
43265 	zend_free_op free_op1;
43266 	zval *expr;
43267 	zend_bool result;
43268 
43269 	SAVE_OPLINE();
43270 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43271 
43272 try_instanceof:
43273 	if (Z_TYPE_P(expr) == IS_OBJECT) {
43274 		zend_class_entry *ce;
43275 
43276 		if (IS_VAR == IS_CONST) {
43277 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
43278 			if (UNEXPECTED(ce == NULL)) {
43279 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
43280 				if (UNEXPECTED(ce == NULL)) {
43281 					ZVAL_FALSE(EX_VAR(opline->result.var));
43282 					zval_ptr_dtor_nogc(free_op1);
43283 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43284 				}
43285 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43286 			}
43287 		} else {
43288 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43289 		}
43290 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
43291 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
43292 		expr = Z_REFVAL_P(expr);
43293 		goto try_instanceof;
43294 	} else {
43295 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
43296 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
43297 		}
43298 		result = 0;
43299 	}
43300 	zval_ptr_dtor_nogc(free_op1);
43301 	ZEND_VM_SMART_BRANCH(result, 1);
43302 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
43303 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43304 }
43305 
43306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
43307 {
43308 	USE_OPLINE
43309 	zend_free_op free_op1;
43310 	zval *varname;
43311 	zval *retval;
43312 	zend_string *name;
43313 	HashTable *target_symbol_table;
43314 
43315 	SAVE_OPLINE();
43316 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43317 
43318  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43319 		name = Z_STR_P(varname);
43320 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
43321 		name = Z_STR_P(varname);
43322 		zend_string_addref(name);
43323 	} else {
43324 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
43325 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
43326 		}
43327 		name = zval_get_string(varname);
43328 	}
43329 
43330 	if (IS_UNUSED != IS_UNUSED) {
43331 		zend_class_entry *ce;
43332 
43333 		if (IS_UNUSED == IS_CONST) {
43334 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
43335 				retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
43336 
43337 				/* check if static properties were destoyed */
43338 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43339 					if (type == BP_VAR_IS) {
43340 						retval = &EG(uninitialized_zval);
43341 					} else {
43342 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
43343 						zval_ptr_dtor_nogc(free_op1);
43344 						HANDLE_EXCEPTION();
43345 					}
43346 				}
43347 
43348 				goto fetch_var_return;
43349 			} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
43350 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
43351 				if (UNEXPECTED(ce == NULL)) {
43352 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43353 						zend_string_release(name);
43354 					}
43355 					zval_ptr_dtor_nogc(free_op1);
43356 					ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43357 				}
43358 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43359 			}
43360 		} else {
43361 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43362 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43363 			    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
43364 
43365 				/* check if static properties were destoyed */
43366 				if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43367 					if (type == BP_VAR_IS) {
43368 						retval = &EG(uninitialized_zval);
43369 					} else {
43370 						zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
43371 						zval_ptr_dtor_nogc(free_op1);
43372 						HANDLE_EXCEPTION();
43373 					}
43374 				}
43375 
43376 				goto fetch_var_return;
43377 			}
43378 		}
43379 		retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
43380 		if (UNEXPECTED(EG(exception))) {
43381 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43382 				zend_string_release(name);
43383 			}
43384 			zval_ptr_dtor_nogc(free_op1);
43385 			HANDLE_EXCEPTION();
43386 		}
43387 		if (EXPECTED(retval)) {
43388 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43389 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
43390 			}
43391 		} else {
43392 			retval = &EG(uninitialized_zval);
43393 		}
43394 
43395 		zval_ptr_dtor_nogc(free_op1);
43396 	} else {
43397 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43398 		retval = zend_hash_find(target_symbol_table, name);
43399 		if (retval == NULL) {
43400 			switch (type) {
43401 				case BP_VAR_R:
43402 				case BP_VAR_UNSET:
43403 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43404 					/* break missing intentionally */
43405 				case BP_VAR_IS:
43406 					retval = &EG(uninitialized_zval);
43407 					break;
43408 				case BP_VAR_RW:
43409 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43410 					retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
43411 					break;
43412 				case BP_VAR_W:
43413 					retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
43414 					break;
43415 				EMPTY_SWITCH_DEFAULT_CASE()
43416 			}
43417 		/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
43418 		} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
43419 			retval = Z_INDIRECT_P(retval);
43420 			if (Z_TYPE_P(retval) == IS_UNDEF) {
43421 				switch (type) {
43422 					case BP_VAR_R:
43423 					case BP_VAR_UNSET:
43424 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43425 						/* break missing intentionally */
43426 					case BP_VAR_IS:
43427 						retval = &EG(uninitialized_zval);
43428 						break;
43429 					case BP_VAR_RW:
43430 						zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
43431 						/* break missing intentionally */
43432 					case BP_VAR_W:
43433 						ZVAL_NULL(retval);
43434 						break;
43435 					EMPTY_SWITCH_DEFAULT_CASE()
43436 				}
43437 			}
43438 		}
43439 		if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
43440 			if (Z_CONSTANT_P(retval)) {
43441 				if (UNEXPECTED(zval_update_constant_ex(retval, 1, NULL) != SUCCESS)) {
43442 					zval_ptr_dtor_nogc(free_op1);
43443 					HANDLE_EXCEPTION();
43444 				}
43445 			}
43446 		} else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
43447 			zval_ptr_dtor_nogc(free_op1);
43448 		}
43449 	}
43450 
43451 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43452 		zend_string_release(name);
43453 	}
43454 
43455 fetch_var_return:
43456 	ZEND_ASSERT(retval != NULL);
43457 	if (type == BP_VAR_R || type == BP_VAR_IS) {
43458 		if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
43459 			ZVAL_UNREF(retval);
43460 		}
43461 		ZVAL_COPY(EX_VAR(opline->result.var), retval);
43462 	} else {
43463 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
43464 	}
43465 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43466 }
43467 
43468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43469 {
43470 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43471 }
43472 
43473 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43474 {
43475 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43476 }
43477 
43478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43479 {
43480 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43481 }
43482 
43483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43484 {
43485 	USE_OPLINE
43486 
43487 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
43488 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43489 	} else {
43490 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43491 	}
43492 }
43493 
43494 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43495 {
43496 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43497 }
43498 
43499 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43500 {
43501 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43502 }
43503 
43504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43505 {
43506 	USE_OPLINE
43507 	zval tmp, *varname;
43508 	HashTable *target_symbol_table;
43509 	zend_free_op free_op1;
43510 
43511 	SAVE_OPLINE();
43512 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
43513 	    IS_UNUSED == IS_UNUSED &&
43514 	    (opline->extended_value & ZEND_QUICK_SET)) {
43515 		zval *var = EX_VAR(opline->op1.var);
43516 
43517 		if (Z_REFCOUNTED_P(var)) {
43518 			zend_refcounted *garbage = Z_COUNTED_P(var);
43519 
43520 			if (!--GC_REFCOUNT(garbage)) {
43521 				ZVAL_UNDEF(var);
43522 				zval_dtor_func_for_ptr(garbage);
43523 			} else {
43524 				zval *z = var;
43525 				ZVAL_DEREF(z);
43526 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
43527 					ZVAL_UNDEF(var);
43528 					gc_possible_root(Z_COUNTED_P(z));
43529 				} else {
43530 					ZVAL_UNDEF(var);
43531 				}
43532 			}
43533 		} else {
43534 			ZVAL_UNDEF(var);
43535 		}
43536 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43537 	}
43538 
43539 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43540 
43541 	ZVAL_UNDEF(&tmp);
43542 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43543 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
43544 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
43545 		}
43546 		ZVAL_STR(&tmp, zval_get_string(varname));
43547 		varname = &tmp;
43548 	}
43549 
43550 	if (IS_UNUSED != IS_UNUSED) {
43551 		zend_class_entry *ce;
43552 
43553 		if (IS_UNUSED == IS_CONST) {
43554 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
43555 			if (UNEXPECTED(ce == NULL)) {
43556 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
43557 				if (UNEXPECTED(ce == NULL)) {
43558 					if (EXPECTED(!EG(exception))) {
43559 						zend_throw_error(NULL, "Class '%s' not found", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
43560 					}
43561 					if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43562 						zend_string_release(Z_STR(tmp));
43563 					}
43564 					zval_ptr_dtor_nogc(free_op1);
43565 					HANDLE_EXCEPTION();
43566 				}
43567 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43568 			}
43569 		} else {
43570 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43571 		}
43572 		zend_std_unset_static_property(ce, Z_STR_P(varname));
43573 	} else {
43574 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43575 		zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
43576 	}
43577 
43578 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43579 		zend_string_release(Z_STR(tmp));
43580 	}
43581 	zval_ptr_dtor_nogc(free_op1);
43582 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43583 }
43584 
43585 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43586 {
43587 	USE_OPLINE
43588 	zval *value;
43589 	int result;
43590 
43591 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
43592 	    IS_UNUSED == IS_UNUSED &&
43593 	    (opline->extended_value & ZEND_QUICK_SET)) {
43594 		value = EX_VAR(opline->op1.var);
43595 		if (opline->extended_value & ZEND_ISSET) {
43596 			result =
43597 				Z_TYPE_P(value) > IS_NULL &&
43598 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43599 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43600 			SAVE_OPLINE();
43601 			result = !i_zend_is_true(value);
43602 			if (UNEXPECTED(EG(exception))) {
43603 				HANDLE_EXCEPTION();
43604 			}
43605 		}
43606 		ZEND_VM_SMART_BRANCH(result, 0);
43607 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43608 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
43609 		ZEND_VM_CONTINUE();
43610 	} else {
43611 		zend_free_op free_op1;
43612 		zval tmp, *varname;
43613 
43614 		SAVE_OPLINE();
43615 		varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43616 		ZVAL_UNDEF(&tmp);
43617 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43618 			ZVAL_STR(&tmp, zval_get_string(varname));
43619 			varname = &tmp;
43620 		}
43621 
43622 		if (IS_UNUSED != IS_UNUSED) {
43623 			zend_class_entry *ce;
43624 
43625 			if (IS_UNUSED == IS_CONST) {
43626 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
43627 					value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
43628 
43629 					/* check if static properties were destoyed */
43630 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43631 						value = NULL;
43632 					}
43633 
43634 					goto is_var_return;
43635 				} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
43636 					ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
43637 					if (UNEXPECTED(ce == NULL)) {
43638 						ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43639 					}
43640 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43641 				}
43642 			} else {
43643 				ce = Z_CE_P(EX_VAR(opline->op2.var));
43644 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43645 				    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
43646 
43647 					/* check if static properties were destoyed */
43648 					if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43649 						value = NULL;
43650 					}
43651 
43652 					goto is_var_return;
43653 				}
43654 			}
43655 
43656 			value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
43657 
43658 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
43659 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
43660 			}
43661 		} else {
43662 			HashTable *target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43663 			value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
43664 		}
43665 
43666 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43667 			zend_string_release(Z_STR(tmp));
43668 		}
43669 		zval_ptr_dtor_nogc(free_op1);
43670 
43671 is_var_return:
43672 		if (opline->extended_value & ZEND_ISSET) {
43673 			result = value && Z_TYPE_P(value) > IS_NULL &&
43674 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43675 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43676 			result = !value || !i_zend_is_true(value);
43677 		}
43678 
43679 		ZEND_VM_SMART_BRANCH(result, 1);
43680 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43681 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43682 	}
43683 }
43684 
43685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43686 {
43687 	USE_OPLINE
43688 	zend_free_op free_op1;
43689 	zval *op1, *op2, *result;
43690 
43691 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43692 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43693 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43694 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43695 			result = EX_VAR(opline->result.var);
43696 			fast_long_add_function(result, op1, op2);
43697 			ZEND_VM_NEXT_OPCODE();
43698 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43699 			result = EX_VAR(opline->result.var);
43700 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
43701 			ZEND_VM_NEXT_OPCODE();
43702 		}
43703 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43704 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43705 			result = EX_VAR(opline->result.var);
43706 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
43707 			ZEND_VM_NEXT_OPCODE();
43708 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43709 			result = EX_VAR(opline->result.var);
43710 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
43711 			ZEND_VM_NEXT_OPCODE();
43712 		}
43713 	}
43714 
43715 	SAVE_OPLINE();
43716 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43717 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43718 	}
43719 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43720 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43721 	}
43722 	add_function(EX_VAR(opline->result.var), op1, op2);
43723 	zval_ptr_dtor_nogc(free_op1);
43724 
43725 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43726 }
43727 
43728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43729 {
43730 	USE_OPLINE
43731 	zend_free_op free_op1;
43732 	zval *op1, *op2, *result;
43733 
43734 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43735 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43736 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43737 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43738 			result = EX_VAR(opline->result.var);
43739 			fast_long_sub_function(result, op1, op2);
43740 			ZEND_VM_NEXT_OPCODE();
43741 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43742 			result = EX_VAR(opline->result.var);
43743 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
43744 			ZEND_VM_NEXT_OPCODE();
43745 		}
43746 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43747 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43748 			result = EX_VAR(opline->result.var);
43749 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
43750 			ZEND_VM_NEXT_OPCODE();
43751 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43752 			result = EX_VAR(opline->result.var);
43753 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
43754 			ZEND_VM_NEXT_OPCODE();
43755 		}
43756 	}
43757 
43758 	SAVE_OPLINE();
43759 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43760 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43761 	}
43762 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43763 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43764 	}
43765 	sub_function(EX_VAR(opline->result.var), op1, op2);
43766 	zval_ptr_dtor_nogc(free_op1);
43767 
43768 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43769 }
43770 
43771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43772 {
43773 	USE_OPLINE
43774 	zend_free_op free_op1;
43775 	zval *op1, *op2, *result;
43776 
43777 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43778 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43779 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43780 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43781 			zend_long overflow;
43782 
43783 			result = EX_VAR(opline->result.var);
43784 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
43785 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
43786 			ZEND_VM_NEXT_OPCODE();
43787 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43788 			result = EX_VAR(opline->result.var);
43789 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
43790 			ZEND_VM_NEXT_OPCODE();
43791 		}
43792 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43793 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43794 			result = EX_VAR(opline->result.var);
43795 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
43796 			ZEND_VM_NEXT_OPCODE();
43797 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43798 			result = EX_VAR(opline->result.var);
43799 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
43800 			ZEND_VM_NEXT_OPCODE();
43801 		}
43802 	}
43803 
43804 	SAVE_OPLINE();
43805 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43806 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43807 	}
43808 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43809 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43810 	}
43811 	mul_function(EX_VAR(opline->result.var), op1, op2);
43812 	zval_ptr_dtor_nogc(free_op1);
43813 
43814 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43815 }
43816 
43817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43818 {
43819 	USE_OPLINE
43820 	zend_free_op free_op1;
43821 	zval *op1, *op2;
43822 
43823 	SAVE_OPLINE();
43824 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43825 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43826 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
43827 	zval_ptr_dtor_nogc(free_op1);
43828 
43829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43830 }
43831 
43832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43833 {
43834 	USE_OPLINE
43835 	zend_free_op free_op1;
43836 	zval *op1, *op2, *result;
43837 
43838 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43839 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43840 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43841 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43842 			result = EX_VAR(opline->result.var);
43843 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
43844 				SAVE_OPLINE();
43845 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
43846 				HANDLE_EXCEPTION();
43847 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
43848 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
43849 				ZVAL_LONG(result, 0);
43850 			} else {
43851 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
43852 			}
43853 			ZEND_VM_NEXT_OPCODE();
43854 		}
43855 	}
43856 
43857 	SAVE_OPLINE();
43858 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43859 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43860 	}
43861 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43862 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43863 	}
43864 	mod_function(EX_VAR(opline->result.var), op1, op2);
43865 	zval_ptr_dtor_nogc(free_op1);
43866 
43867 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43868 }
43869 
43870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43871 {
43872 	USE_OPLINE
43873 	zend_free_op free_op1;
43874 	zval *op1, *op2;
43875 
43876 	SAVE_OPLINE();
43877 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43878 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43879 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
43880 	zval_ptr_dtor_nogc(free_op1);
43881 
43882 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43883 }
43884 
43885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43886 {
43887 	USE_OPLINE
43888 	zend_free_op free_op1;
43889 	zval *op1, *op2;
43890 
43891 	SAVE_OPLINE();
43892 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43893 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43894 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
43895 	zval_ptr_dtor_nogc(free_op1);
43896 
43897 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43898 }
43899 
43900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43901 {
43902 	USE_OPLINE
43903 	zend_free_op free_op1;
43904 	zval *op1, *op2;
43905 
43906 	SAVE_OPLINE();
43907 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43908 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43909 	pow_function(EX_VAR(opline->result.var), op1, op2);
43910 	zval_ptr_dtor_nogc(free_op1);
43911 
43912 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43913 }
43914 
43915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43916 {
43917 	USE_OPLINE
43918 	zend_free_op free_op1;
43919 	zval *op1, *op2;
43920 
43921 	SAVE_OPLINE();
43922 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43923 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43924 
43925 	do {
43926 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
43927 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
43928 			zend_string *op1_str = Z_STR_P(op1);
43929 			zend_string *op2_str = Z_STR_P(op2);
43930 			zend_string *str;
43931 
43932 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
43933 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43934 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
43935 					zval_ptr_dtor_nogc(free_op1);
43936 					break;
43937 				}
43938 			}
43939 			if (IS_CV != IS_CONST) {
43940 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43941 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
43942 					zval_ptr_dtor_nogc(free_op1);
43943 					break;
43944 				}
43945 			}
43946 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
43947 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
43948 			    size_t len = ZSTR_LEN(op1_str);
43949 
43950 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
43951 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43952 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43953 				break;
43954 			} else {
43955 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43956 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43957 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43958 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43959 			}
43960 		} else {
43961 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43962 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43963 			}
43964 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43965 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43966 			}
43967 			concat_function(EX_VAR(opline->result.var), op1, op2);
43968 		}
43969 		zval_ptr_dtor_nogc(free_op1);
43970 	} while (0);
43971 
43972 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43973 }
43974 
43975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43976 {
43977 	USE_OPLINE
43978 	zend_free_op free_op1;
43979 	zval *op1, *op2, *result;
43980 
43981 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
43982 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43983 	do {
43984 		int result;
43985 
43986 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43987 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43988 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
43989 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43990 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
43991 			} else {
43992 				break;
43993 			}
43994 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43995 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43996 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
43997 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43998 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
43999 			} else {
44000 				break;
44001 			}
44002 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44003 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44004 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
44005 					result = 1;
44006 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
44007 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
44008 						result = 0;
44009 					} else {
44010 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
44011 					}
44012 				} else {
44013 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
44014 				}
44015 				zval_ptr_dtor_nogc(free_op1);
44016 
44017 			} else {
44018 				break;
44019 			}
44020 		} else {
44021 			break;
44022 		}
44023 		ZEND_VM_SMART_BRANCH(result, 0);
44024 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
44025 		ZEND_VM_NEXT_OPCODE();
44026 	} while (0);
44027 
44028 	SAVE_OPLINE();
44029 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44030 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44031 	}
44032 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44033 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44034 	}
44035 	result = EX_VAR(opline->result.var);
44036 	compare_function(result, op1, op2);
44037 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
44038 	zval_ptr_dtor_nogc(free_op1);
44039 
44040 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44041 }
44042 
44043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44044 {
44045 	USE_OPLINE
44046 	zend_free_op free_op1;
44047 	zval *op1, *op2, *result;
44048 
44049 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44050 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44051 	do {
44052 		int result;
44053 
44054 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44055 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44056 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
44057 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44058 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
44059 			} else {
44060 				break;
44061 			}
44062 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44063 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44064 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
44065 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44066 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
44067 			} else {
44068 				break;
44069 			}
44070 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44071 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44072 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
44073 					result = 0;
44074 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
44075 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
44076 						result = 1;
44077 					} else {
44078 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
44079 					}
44080 				} else {
44081 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
44082 				}
44083 				zval_ptr_dtor_nogc(free_op1);
44084 
44085 			} else {
44086 				break;
44087 			}
44088 		} else {
44089 			break;
44090 		}
44091 		ZEND_VM_SMART_BRANCH(result, 0);
44092 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
44093 		ZEND_VM_NEXT_OPCODE();
44094 	} while (0);
44095 
44096 	SAVE_OPLINE();
44097 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44098 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44099 	}
44100 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44101 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44102 	}
44103 	result = EX_VAR(opline->result.var);
44104 	compare_function(result, op1, op2);
44105 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
44106 	zval_ptr_dtor_nogc(free_op1);
44107 
44108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44109 }
44110 
44111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44112 {
44113 	USE_OPLINE
44114 	zend_free_op free_op1;
44115 	zval *op1, *op2, *result;
44116 
44117 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44118 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44119 	do {
44120 		int result;
44121 
44122 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44123 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44124 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
44125 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44126 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
44127 			} else {
44128 				break;
44129 			}
44130 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
44131 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44132 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
44133 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44134 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
44135 			} else {
44136 				break;
44137 			}
44138 		} else {
44139 			break;
44140 		}
44141 		ZEND_VM_SMART_BRANCH(result, 0);
44142 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
44143 		ZEND_VM_NEXT_OPCODE();
44144 	} while (0);
44145 
44146 	SAVE_OPLINE();
44147 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44148 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44149 	}
44150 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44151 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44152 	}
44153 	result = EX_VAR(opline->result.var);
44154 	compare_function(result, op1, op2);
44155 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
44156 	zval_ptr_dtor_nogc(free_op1);
44157 
44158 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44159 }
44160 
44161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44162 {
44163 	USE_OPLINE
44164 	zend_free_op free_op1;
44165 	zval *op1, *op2, *result;
44166 
44167 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44168 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44169 	do {
44170 		int result;
44171 
44172 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44173 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44174 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
44175 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44176 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
44177 			} else {
44178 				break;
44179 			}
44180 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
44181 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44182 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
44183 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44184 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
44185 			} else {
44186 				break;
44187 			}
44188 		} else {
44189 			break;
44190 		}
44191 		ZEND_VM_SMART_BRANCH(result, 0);
44192 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
44193 		ZEND_VM_NEXT_OPCODE();
44194 	} while (0);
44195 
44196 	SAVE_OPLINE();
44197 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44198 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44199 	}
44200 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44201 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44202 	}
44203 	result = EX_VAR(opline->result.var);
44204 	compare_function(result, op1, op2);
44205 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
44206 	zval_ptr_dtor_nogc(free_op1);
44207 
44208 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44209 }
44210 
44211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44212 {
44213 	USE_OPLINE
44214 	zend_free_op free_op1;
44215 	zval *op1, *op2;
44216 
44217 	SAVE_OPLINE();
44218 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44219 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44220 	compare_function(EX_VAR(opline->result.var), op1, op2);
44221 	zval_ptr_dtor_nogc(free_op1);
44222 
44223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44224 }
44225 
44226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44227 {
44228 	USE_OPLINE
44229 	zend_free_op free_op1;
44230 	zval *op1, *op2;
44231 
44232 	SAVE_OPLINE();
44233 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44234 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44235 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
44236 	zval_ptr_dtor_nogc(free_op1);
44237 
44238 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44239 }
44240 
44241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44242 {
44243 	USE_OPLINE
44244 	zend_free_op free_op1;
44245 	zval *op1, *op2;
44246 
44247 	SAVE_OPLINE();
44248 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44249 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44250 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
44251 	zval_ptr_dtor_nogc(free_op1);
44252 
44253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44254 }
44255 
44256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44257 {
44258 	USE_OPLINE
44259 	zend_free_op free_op1;
44260 	zval *op1, *op2;
44261 
44262 	SAVE_OPLINE();
44263 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44264 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44265 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
44266 	zval_ptr_dtor_nogc(free_op1);
44267 
44268 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44269 }
44270 
44271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44272 {
44273 	USE_OPLINE
44274 	zend_free_op free_op1;
44275 	zval *op1, *op2;
44276 
44277 	SAVE_OPLINE();
44278 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44279 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44280 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
44281 	zval_ptr_dtor_nogc(free_op1);
44282 
44283 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44284 }
44285 
44286 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44287 {
44288 	USE_OPLINE
44289 	zend_free_op free_op1;
44290 	zval *container;
44291 
44292 	SAVE_OPLINE();
44293 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44294 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
44295 
44296 	zval_ptr_dtor_nogc(free_op1);
44297 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44298 }
44299 
44300 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44301 {
44302 	USE_OPLINE
44303 	zend_free_op free_op1;
44304 	zval *container;
44305 
44306 	SAVE_OPLINE();
44307 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44308 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
44309 
44310 	zval_ptr_dtor_nogc(free_op1);
44311 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44312 }
44313 
44314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44315 {
44316 	USE_OPLINE
44317 	zend_free_op free_op1;
44318 	zval *container;
44319 
44320 	zval *offset;
44321 
44322 	SAVE_OPLINE();
44323 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44324 
44325 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
44326 		zend_throw_error(NULL, "Using $this when not in object context");
44327 
44328 		HANDLE_EXCEPTION();
44329 	}
44330 
44331 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44332 
44333 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
44334 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44335 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44336 			container = Z_REFVAL_P(container);
44337 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44338 				goto fetch_obj_is_no_object;
44339 			}
44340 		} else {
44341 			goto fetch_obj_is_no_object;
44342 		}
44343 	}
44344 
44345 	/* here we are sure we are dealing with an object */
44346 	do {
44347 		zend_object *zobj = Z_OBJ_P(container);
44348 		zval *retval;
44349 
44350 		if (IS_CV == IS_CONST &&
44351 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
44352 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
44353 
44354 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
44355 				retval = OBJ_PROP(zobj, prop_offset);
44356 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
44357 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
44358 					break;
44359 				}
44360 			} else if (EXPECTED(zobj->properties != NULL)) {
44361 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
44362 				if (EXPECTED(retval)) {
44363 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
44364 					break;
44365 				}
44366 			}
44367 		}
44368 
44369 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
44370 fetch_obj_is_no_object:
44371 			ZVAL_NULL(EX_VAR(opline->result.var));
44372 		} else {
44373 
44374 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
44375 
44376 			if (retval != EX_VAR(opline->result.var)) {
44377 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
44378 			}
44379 		}
44380 	} while (0);
44381 
44382 	zval_ptr_dtor_nogc(free_op1);
44383 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44384 }
44385 
44386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44387 {
44388 	USE_OPLINE
44389 	zend_free_op free_op1;
44390 	zval *op1, *op2;
44391 	zend_string *op1_str, *op2_str, *str;
44392 
44393 	SAVE_OPLINE();
44394 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44395 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44396 		op1_str = Z_STR_P(op1);
44397 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44398 		op1_str = zend_string_copy(Z_STR_P(op1));
44399 	} else {
44400 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44401 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44402 		}
44403 		op1_str = _zval_get_string_func(op1);
44404 	}
44405 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44406 	if (IS_CV == IS_CONST) {
44407 		op2_str = Z_STR_P(op2);
44408 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44409 		op2_str = zend_string_copy(Z_STR_P(op2));
44410 	} else {
44411 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44412 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44413 		}
44414 		op2_str = _zval_get_string_func(op2);
44415 	}
44416 	do {
44417 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44418 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
44419 				if (IS_CV == IS_CONST) {
44420 					zend_string_addref(op2_str);
44421 				}
44422 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
44423 				zend_string_release(op1_str);
44424 				break;
44425 			}
44426 		}
44427 		if (IS_CV != IS_CONST) {
44428 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
44429 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44430 					zend_string_addref(op1_str);
44431 				}
44432 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
44433 				zend_string_release(op2_str);
44434 				break;
44435 			}
44436 		}
44437 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
44438 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
44439 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44440 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44441 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44442 			zend_string_release(op1_str);
44443 		}
44444 		if (IS_CV != IS_CONST) {
44445 			zend_string_release(op2_str);
44446 		}
44447 	} while (0);
44448 	zval_ptr_dtor_nogc(free_op1);
44449 
44450 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44451 }
44452 
44453 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44454 {
44455 	USE_OPLINE
44456 	zval *function_name;
44457 	zend_free_op free_op1;
44458 	zval *object;
44459 	zend_function *fbc;
44460 	zend_class_entry *called_scope;
44461 	zend_object *obj;
44462 	zend_execute_data *call;
44463 	uint32_t call_info;
44464 
44465 	SAVE_OPLINE();
44466 
44467 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44468 
44469 	if (IS_CV != IS_CONST &&
44470 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
44471 		do {
44472 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
44473 				function_name = Z_REFVAL_P(function_name);
44474 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
44475 					break;
44476 				}
44477 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
44478 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
44479 				if (UNEXPECTED(EG(exception) != NULL)) {
44480 					HANDLE_EXCEPTION();
44481 				}
44482 			}
44483 			zend_throw_error(NULL, "Method name must be a string");
44484 
44485 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
44486 			HANDLE_EXCEPTION();
44487 		} while (0);
44488 	}
44489 
44490 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44491 
44492 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
44493 		zend_throw_error(NULL, "Using $this when not in object context");
44494 
44495 		HANDLE_EXCEPTION();
44496 	}
44497 
44498 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
44499 		do {
44500 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44501 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
44502 					object = Z_REFVAL_P(object);
44503 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
44504 						break;
44505 					}
44506 				}
44507 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44508 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
44509 					if (UNEXPECTED(EG(exception) != NULL)) {
44510 
44511 						HANDLE_EXCEPTION();
44512 					}
44513 				}
44514 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
44515 
44516 				zval_ptr_dtor_nogc(free_op1);
44517 				HANDLE_EXCEPTION();
44518 			}
44519 		} while (0);
44520 	}
44521 
44522 	obj = Z_OBJ_P(object);
44523 	called_scope = obj->ce;
44524 
44525 	if (IS_CV != IS_CONST ||
44526 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
44527 	    zend_object *orig_obj = obj;
44528 
44529 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
44530 			zend_throw_error(NULL, "Object does not support method calls");
44531 
44532 			zval_ptr_dtor_nogc(free_op1);
44533 			HANDLE_EXCEPTION();
44534 		}
44535 
44536 		/* First, locate the function. */
44537 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
44538 		if (UNEXPECTED(fbc == NULL)) {
44539 			if (EXPECTED(!EG(exception))) {
44540 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
44541 			}
44542 
44543 			zval_ptr_dtor_nogc(free_op1);
44544 			HANDLE_EXCEPTION();
44545 		}
44546 		if (IS_CV == IS_CONST &&
44547 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
44548 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
44549 		    EXPECTED(obj == orig_obj)) {
44550 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
44551 		}
44552 	}
44553 
44554 	call_info = ZEND_CALL_NESTED_FUNCTION;
44555 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
44556 		obj = NULL;
44557 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
44558 		/* CV may be changed indirectly (e.g. when it's a reference) */
44559 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
44560 		GC_REFCOUNT(obj)++; /* For $this pointer */
44561 	}
44562 
44563 	zval_ptr_dtor_nogc(free_op1);
44564 
44565 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
44566 		HANDLE_EXCEPTION();
44567 	}
44568 
44569 	call = zend_vm_stack_push_call_frame(call_info,
44570 		fbc, opline->extended_value, called_scope, obj);
44571 	call->prev_execute_data = EX(call);
44572 	EX(call) = call;
44573 
44574 	ZEND_VM_NEXT_OPCODE();
44575 }
44576 
44577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44578 {
44579 	USE_OPLINE
44580 	zend_free_op free_op1;
44581 	zval *op1, *op2, *result;
44582 
44583 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44584 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44585 	do {
44586 		int result;
44587 
44588 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44589 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44590 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
44591 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44592 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
44593 			} else {
44594 				break;
44595 			}
44596 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44597 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44598 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
44599 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44600 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
44601 			} else {
44602 				break;
44603 			}
44604 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44605 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44606 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
44607 					result = 1;
44608 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
44609 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
44610 						result = 0;
44611 					} else {
44612 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
44613 					}
44614 				} else {
44615 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
44616 				}
44617 
44618 			} else {
44619 				break;
44620 			}
44621 		} else {
44622 			break;
44623 		}
44624 		ZEND_VM_SMART_BRANCH(result, 0);
44625 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
44626 		ZEND_VM_NEXT_OPCODE();
44627 	} while (0);
44628 
44629 	SAVE_OPLINE();
44630 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44631 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44632 	} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
44633 		/* Don't keep lock on reference, lock the value instead */
44634 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
44635 			ZVAL_UNREF(op1);
44636 		} else {
44637 			Z_DELREF_P(op1);
44638 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
44639 		}
44640 	}
44641 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44642 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44643 	}
44644 	result = EX_VAR(opline->result.var);
44645 	compare_function(result, op1, op2);
44646 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
44647 
44648 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44649 }
44650 
44651 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44652 {
44653 	USE_OPLINE
44654 	zend_free_op free_op1;
44655 	zval *container;
44656 	int result;
44657 	zend_ulong hval;
44658 	zval *offset;
44659 
44660 	SAVE_OPLINE();
44661 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44662 
44663 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
44664 		zend_throw_error(NULL, "Using $this when not in object context");
44665 
44666 		HANDLE_EXCEPTION();
44667 	}
44668 
44669 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44670 
44671 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44672 		HashTable *ht;
44673 		zval *value;
44674 		zend_string *str;
44675 
44676 isset_dim_obj_array:
44677 		ht = Z_ARRVAL_P(container);
44678 isset_again:
44679 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44680 			str = Z_STR_P(offset);
44681 			if (IS_CV != IS_CONST) {
44682 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44683 					goto num_index_prop;
44684 				}
44685 			}
44686 str_index_prop:
44687 			value = zend_hash_find_ind(ht, str);
44688 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44689 			hval = Z_LVAL_P(offset);
44690 num_index_prop:
44691 			value = zend_hash_index_find(ht, hval);
44692 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
44693 			offset = Z_REFVAL_P(offset);
44694 			goto isset_again;
44695 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
44696 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
44697 			goto num_index_prop;
44698 		} else if (Z_TYPE_P(offset) == IS_NULL) {
44699 			str = ZSTR_EMPTY_ALLOC();
44700 			goto str_index_prop;
44701 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
44702 			hval = 0;
44703 			goto num_index_prop;
44704 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
44705 			hval = 1;
44706 			goto num_index_prop;
44707 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
44708 			hval = Z_RES_HANDLE_P(offset);
44709 			goto num_index_prop;
44710 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
44711 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
44712 			str = ZSTR_EMPTY_ALLOC();
44713 			goto str_index_prop;
44714 		} else {
44715 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
44716 			goto isset_not_found;
44717 		}
44718 
44719 		if (opline->extended_value & ZEND_ISSET) {
44720 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
44721 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
44722 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
44723 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
44724 			result = (value == NULL || !i_zend_is_true(value));
44725 		}
44726 		goto isset_dim_obj_exit;
44727 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44728 		container = Z_REFVAL_P(container);
44729 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44730 			goto isset_dim_obj_array;
44731 		}
44732 	}
44733 
44734 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
44735 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
44736 	}
44737 
44738 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
44739 	    ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
44740 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
44741 			result =
44742 				((opline->extended_value & ZEND_ISSET) == 0) ^
44743 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
44744 		} else {
44745 			zend_error(E_NOTICE, "Trying to check element of non-array");
44746 			goto isset_not_found;
44747 		}
44748 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
44749 		zend_long lval;
44750 
44751 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44752 			lval = Z_LVAL_P(offset);
44753 isset_str_offset:
44754 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
44755 				if (opline->extended_value & ZEND_ISSET) {
44756 					result = 1;
44757 				} else {
44758 					result = (Z_STRVAL_P(container)[lval] == '0');
44759 				}
44760 			} else {
44761 				goto isset_not_found;
44762 			}
44763 		} else {
44764 			if (IS_CV & (IS_CV|IS_VAR)) {
44765 				ZVAL_DEREF(offset);
44766 			}
44767 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
44768 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
44769 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
44770 				lval = zval_get_long(offset);
44771 				goto isset_str_offset;
44772 			}
44773 			goto isset_not_found;
44774 		}
44775 	} else {
44776 isset_not_found:
44777 		result = ((opline->extended_value & ZEND_ISSET) == 0);
44778 	}
44779 
44780 isset_dim_obj_exit:
44781 
44782 	zval_ptr_dtor_nogc(free_op1);
44783 	ZEND_VM_SMART_BRANCH(result, 1);
44784 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44785 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44786 }
44787 
44788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44789 {
44790 	USE_OPLINE
44791 	zend_free_op free_op1;
44792 	zval *container;
44793 	int result;
44794 	zval *offset;
44795 
44796 	SAVE_OPLINE();
44797 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44798 
44799 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
44800 		zend_throw_error(NULL, "Using $this when not in object context");
44801 
44802 		HANDLE_EXCEPTION();
44803 	}
44804 
44805 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44806 
44807 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
44808 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44809 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44810 			container = Z_REFVAL_P(container);
44811 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44812 				goto isset_no_object;
44813 			}
44814 		} else {
44815 			goto isset_no_object;
44816 		}
44817 	}
44818 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
44819 		zend_error(E_NOTICE, "Trying to check property of non-object");
44820 isset_no_object:
44821 		result = ((opline->extended_value & ZEND_ISSET) == 0);
44822 	} else {
44823 		result =
44824 			((opline->extended_value & ZEND_ISSET) == 0) ^
44825 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
44826 	}
44827 
44828 	zval_ptr_dtor_nogc(free_op1);
44829 	ZEND_VM_SMART_BRANCH(result, 1);
44830 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44831 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44832 }
44833 
44834 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44835 {
44836 	USE_OPLINE
44837 	zend_free_op free_op1, free_op2;
44838 	zval *op1, *op2, *result;
44839 
44840 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44841 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
44842 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44843 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44844 			result = EX_VAR(opline->result.var);
44845 			fast_long_add_function(result, op1, op2);
44846 			ZEND_VM_NEXT_OPCODE();
44847 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44848 			result = EX_VAR(opline->result.var);
44849 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
44850 			ZEND_VM_NEXT_OPCODE();
44851 		}
44852 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
44853 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44854 			result = EX_VAR(opline->result.var);
44855 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
44856 			ZEND_VM_NEXT_OPCODE();
44857 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44858 			result = EX_VAR(opline->result.var);
44859 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
44860 			ZEND_VM_NEXT_OPCODE();
44861 		}
44862 	}
44863 
44864 	SAVE_OPLINE();
44865 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44866 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44867 	}
44868 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44869 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44870 	}
44871 	add_function(EX_VAR(opline->result.var), op1, op2);
44872 	zval_ptr_dtor_nogc(free_op1);
44873 	zval_ptr_dtor_nogc(free_op2);
44874 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44875 }
44876 
44877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44878 {
44879 	USE_OPLINE
44880 	zend_free_op free_op1, free_op2;
44881 	zval *op1, *op2, *result;
44882 
44883 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44884 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
44885 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44886 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44887 			result = EX_VAR(opline->result.var);
44888 			fast_long_sub_function(result, op1, op2);
44889 			ZEND_VM_NEXT_OPCODE();
44890 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44891 			result = EX_VAR(opline->result.var);
44892 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
44893 			ZEND_VM_NEXT_OPCODE();
44894 		}
44895 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
44896 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44897 			result = EX_VAR(opline->result.var);
44898 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
44899 			ZEND_VM_NEXT_OPCODE();
44900 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44901 			result = EX_VAR(opline->result.var);
44902 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
44903 			ZEND_VM_NEXT_OPCODE();
44904 		}
44905 	}
44906 
44907 	SAVE_OPLINE();
44908 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44909 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44910 	}
44911 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44912 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44913 	}
44914 	sub_function(EX_VAR(opline->result.var), op1, op2);
44915 	zval_ptr_dtor_nogc(free_op1);
44916 	zval_ptr_dtor_nogc(free_op2);
44917 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44918 }
44919 
44920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44921 {
44922 	USE_OPLINE
44923 	zend_free_op free_op1, free_op2;
44924 	zval *op1, *op2, *result;
44925 
44926 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44927 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
44928 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44929 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44930 			zend_long overflow;
44931 
44932 			result = EX_VAR(opline->result.var);
44933 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
44934 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
44935 			ZEND_VM_NEXT_OPCODE();
44936 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44937 			result = EX_VAR(opline->result.var);
44938 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
44939 			ZEND_VM_NEXT_OPCODE();
44940 		}
44941 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
44942 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
44943 			result = EX_VAR(opline->result.var);
44944 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
44945 			ZEND_VM_NEXT_OPCODE();
44946 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44947 			result = EX_VAR(opline->result.var);
44948 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
44949 			ZEND_VM_NEXT_OPCODE();
44950 		}
44951 	}
44952 
44953 	SAVE_OPLINE();
44954 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44955 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44956 	}
44957 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44958 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44959 	}
44960 	mul_function(EX_VAR(opline->result.var), op1, op2);
44961 	zval_ptr_dtor_nogc(free_op1);
44962 	zval_ptr_dtor_nogc(free_op2);
44963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44964 }
44965 
44966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44967 {
44968 	USE_OPLINE
44969 	zend_free_op free_op1, free_op2;
44970 	zval *op1, *op2;
44971 
44972 	SAVE_OPLINE();
44973 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44974 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
44975 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
44976 	zval_ptr_dtor_nogc(free_op1);
44977 	zval_ptr_dtor_nogc(free_op2);
44978 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44979 }
44980 
44981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44982 {
44983 	USE_OPLINE
44984 	zend_free_op free_op1, free_op2;
44985 	zval *op1, *op2, *result;
44986 
44987 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
44988 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
44989 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
44990 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44991 			result = EX_VAR(opline->result.var);
44992 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
44993 				SAVE_OPLINE();
44994 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
44995 				HANDLE_EXCEPTION();
44996 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
44997 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
44998 				ZVAL_LONG(result, 0);
44999 			} else {
45000 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
45001 			}
45002 			ZEND_VM_NEXT_OPCODE();
45003 		}
45004 	}
45005 
45006 	SAVE_OPLINE();
45007 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
45008 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45009 	}
45010 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
45011 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45012 	}
45013 	mod_function(EX_VAR(opline->result.var), op1, op2);
45014 	zval_ptr_dtor_nogc(free_op1);
45015 	zval_ptr_dtor_nogc(free_op2);
45016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45017 }
45018 
45019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45020 {
45021 	USE_OPLINE
45022 	zend_free_op free_op1, free_op2;
45023 	zval *op1, *op2;
45024 
45025 	SAVE_OPLINE();
45026 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45027 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45028 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
45029 	zval_ptr_dtor_nogc(free_op1);
45030 	zval_ptr_dtor_nogc(free_op2);
45031 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45032 }
45033 
45034 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45035 {
45036 	USE_OPLINE
45037 	zend_free_op free_op1, free_op2;
45038 	zval *op1, *op2;
45039 
45040 	SAVE_OPLINE();
45041 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45042 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45043 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
45044 	zval_ptr_dtor_nogc(free_op1);
45045 	zval_ptr_dtor_nogc(free_op2);
45046 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45047 }
45048 
45049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45050 {
45051 	USE_OPLINE
45052 	zend_free_op free_op1, free_op2;
45053 	zval *op1, *op2;
45054 
45055 	SAVE_OPLINE();
45056 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45057 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45058 	pow_function(EX_VAR(opline->result.var), op1, op2);
45059 	zval_ptr_dtor_nogc(free_op1);
45060 	zval_ptr_dtor_nogc(free_op2);
45061 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45062 }
45063 
45064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45065 {
45066 	USE_OPLINE
45067 	zend_free_op free_op1, free_op2;
45068 	zval *op1, *op2;
45069 
45070 	SAVE_OPLINE();
45071 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45072 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45073 
45074 	do {
45075 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
45076 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
45077 			zend_string *op1_str = Z_STR_P(op1);
45078 			zend_string *op2_str = Z_STR_P(op2);
45079 			zend_string *str;
45080 
45081 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45082 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45083 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
45084 					zval_ptr_dtor_nogc(free_op1);
45085 					break;
45086 				}
45087 			}
45088 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45089 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45090 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
45091 					zval_ptr_dtor_nogc(free_op1);
45092 					break;
45093 				}
45094 			}
45095 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
45096 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
45097 			    size_t len = ZSTR_LEN(op1_str);
45098 
45099 				str = zend_string_realloc(op1_str, len + ZSTR_LEN(op2_str), 0);
45100 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45101 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45102 				break;
45103 			} else {
45104 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45105 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45106 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45107 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45108 			}
45109 		} else {
45110 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45111 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45112 			}
45113 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45114 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45115 			}
45116 			concat_function(EX_VAR(opline->result.var), op1, op2);
45117 		}
45118 		zval_ptr_dtor_nogc(free_op1);
45119 	} while (0);
45120 	zval_ptr_dtor_nogc(free_op2);
45121 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45122 }
45123 
45124 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45125 {
45126 	USE_OPLINE
45127 	zend_free_op free_op1, free_op2;
45128 	zval *op1, *op2, *result;
45129 
45130 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45131 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45132 	do {
45133 		int result;
45134 
45135 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45136 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45137 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
45138 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45139 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
45140 			} else {
45141 				break;
45142 			}
45143 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45144 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45145 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
45146 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45147 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
45148 			} else {
45149 				break;
45150 			}
45151 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45152 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45153 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
45154 					result = 1;
45155 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
45156 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
45157 						result = 0;
45158 					} else {
45159 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
45160 					}
45161 				} else {
45162 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
45163 				}
45164 				zval_ptr_dtor_nogc(free_op1);
45165 				zval_ptr_dtor_nogc(free_op2);
45166 			} else {
45167 				break;
45168 			}
45169 		} else {
45170 			break;
45171 		}
45172 		ZEND_VM_SMART_BRANCH(result, 0);
45173 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
45174 		ZEND_VM_NEXT_OPCODE();
45175 	} while (0);
45176 
45177 	SAVE_OPLINE();
45178 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45179 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45180 	}
45181 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45182 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45183 	}
45184 	result = EX_VAR(opline->result.var);
45185 	compare_function(result, op1, op2);
45186 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
45187 	zval_ptr_dtor_nogc(free_op1);
45188 	zval_ptr_dtor_nogc(free_op2);
45189 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45190 }
45191 
45192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45193 {
45194 	USE_OPLINE
45195 	zend_free_op free_op1, free_op2;
45196 	zval *op1, *op2, *result;
45197 
45198 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45199 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45200 	do {
45201 		int result;
45202 
45203 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45204 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45205 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
45206 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45207 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
45208 			} else {
45209 				break;
45210 			}
45211 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45212 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45213 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
45214 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45215 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
45216 			} else {
45217 				break;
45218 			}
45219 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45220 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45221 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
45222 					result = 0;
45223 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
45224 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
45225 						result = 1;
45226 					} else {
45227 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
45228 					}
45229 				} else {
45230 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
45231 				}
45232 				zval_ptr_dtor_nogc(free_op1);
45233 				zval_ptr_dtor_nogc(free_op2);
45234 			} else {
45235 				break;
45236 			}
45237 		} else {
45238 			break;
45239 		}
45240 		ZEND_VM_SMART_BRANCH(result, 0);
45241 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
45242 		ZEND_VM_NEXT_OPCODE();
45243 	} while (0);
45244 
45245 	SAVE_OPLINE();
45246 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45247 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45248 	}
45249 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45250 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45251 	}
45252 	result = EX_VAR(opline->result.var);
45253 	compare_function(result, op1, op2);
45254 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
45255 	zval_ptr_dtor_nogc(free_op1);
45256 	zval_ptr_dtor_nogc(free_op2);
45257 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45258 }
45259 
45260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45261 {
45262 	USE_OPLINE
45263 	zend_free_op free_op1, free_op2;
45264 	zval *op1, *op2, *result;
45265 
45266 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45267 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45268 	do {
45269 		int result;
45270 
45271 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
45272 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
45273 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
45274 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
45275 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
45276 			} else {
45277 				break;
45278 			}
45279 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
45280 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
45281 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
45282 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
45283 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
45284 			} else {
45285 				break;
45286 			}
45287 		} else {
45288 			break;
45289 		}
45290 		ZEND_VM_SMART_BRANCH(result, 0);
45291 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
45292 		ZEND_VM_NEXT_OPCODE();
45293 	} while (0);
45294 
45295 	SAVE_OPLINE();
45296 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
45297 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45298 	}
45299 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
45300 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45301 	}
45302 	result = EX_VAR(opline->result.var);
45303 	compare_function(result, op1, op2);
45304 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
45305 	zval_ptr_dtor_nogc(free_op1);
45306 	zval_ptr_dtor_nogc(free_op2);
45307 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45308 }
45309 
45310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45311 {
45312 	USE_OPLINE
45313 	zend_free_op free_op1, free_op2;
45314 	zval *op1, *op2, *result;
45315 
45316 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45317 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45318 	do {
45319 		int result;
45320 
45321 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
45322 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
45323 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
45324 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
45325 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
45326 			} else {
45327 				break;
45328 			}
45329 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
45330 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
45331 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
45332 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
45333 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
45334 			} else {
45335 				break;
45336 			}
45337 		} else {
45338 			break;
45339 		}
45340 		ZEND_VM_SMART_BRANCH(result, 0);
45341 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
45342 		ZEND_VM_NEXT_OPCODE();
45343 	} while (0);
45344 
45345 	SAVE_OPLINE();
45346 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
45347 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45348 	}
45349 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
45350 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45351 	}
45352 	result = EX_VAR(opline->result.var);
45353 	compare_function(result, op1, op2);
45354 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
45355 	zval_ptr_dtor_nogc(free_op1);
45356 	zval_ptr_dtor_nogc(free_op2);
45357 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45358 }
45359 
45360 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45361 {
45362 	USE_OPLINE
45363 	zend_free_op free_op1, free_op2;
45364 	zval *op1, *op2;
45365 
45366 	SAVE_OPLINE();
45367 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45368 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45369 	compare_function(EX_VAR(opline->result.var), op1, op2);
45370 	zval_ptr_dtor_nogc(free_op1);
45371 	zval_ptr_dtor_nogc(free_op2);
45372 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45373 }
45374 
45375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45376 {
45377 	USE_OPLINE
45378 	zend_free_op free_op1, free_op2;
45379 	zval *op1, *op2;
45380 
45381 	SAVE_OPLINE();
45382 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45383 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45384 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
45385 	zval_ptr_dtor_nogc(free_op1);
45386 	zval_ptr_dtor_nogc(free_op2);
45387 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45388 }
45389 
45390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45391 {
45392 	USE_OPLINE
45393 	zend_free_op free_op1, free_op2;
45394 	zval *op1, *op2;
45395 
45396 	SAVE_OPLINE();
45397 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45398 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45399 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
45400 	zval_ptr_dtor_nogc(free_op1);
45401 	zval_ptr_dtor_nogc(free_op2);
45402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45403 }
45404 
45405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45406 {
45407 	USE_OPLINE
45408 	zend_free_op free_op1, free_op2;
45409 	zval *op1, *op2;
45410 
45411 	SAVE_OPLINE();
45412 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45413 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45414 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
45415 	zval_ptr_dtor_nogc(free_op1);
45416 	zval_ptr_dtor_nogc(free_op2);
45417 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45418 }
45419 
45420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45421 {
45422 	USE_OPLINE
45423 	zend_free_op free_op1, free_op2;
45424 	zval *op1, *op2;
45425 
45426 	SAVE_OPLINE();
45427 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45428 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45429 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
45430 	zval_ptr_dtor_nogc(free_op1);
45431 	zval_ptr_dtor_nogc(free_op2);
45432 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45433 }
45434 
45435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45436 {
45437 	USE_OPLINE
45438 	zend_free_op free_op1, free_op2;
45439 	zval *container;
45440 
45441 	SAVE_OPLINE();
45442 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45443 	zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
45444 	zval_ptr_dtor_nogc(free_op2);
45445 	zval_ptr_dtor_nogc(free_op1);
45446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45447 }
45448 
45449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45450 {
45451 	USE_OPLINE
45452 	zend_free_op free_op1, free_op2;
45453 	zval *container;
45454 
45455 	SAVE_OPLINE();
45456 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45457 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
45458 	zval_ptr_dtor_nogc(free_op2);
45459 	zval_ptr_dtor_nogc(free_op1);
45460 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45461 }
45462 
45463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45464 {
45465 	USE_OPLINE
45466 	zend_free_op free_op1;
45467 	zval *container;
45468 	zend_free_op free_op2;
45469 	zval *offset;
45470 
45471 	SAVE_OPLINE();
45472 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45473 
45474 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
45475 		zend_throw_error(NULL, "Using $this when not in object context");
45476 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45477 		HANDLE_EXCEPTION();
45478 	}
45479 
45480 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45481 
45482 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
45483 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45484 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45485 			container = Z_REFVAL_P(container);
45486 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45487 				goto fetch_obj_is_no_object;
45488 			}
45489 		} else {
45490 			goto fetch_obj_is_no_object;
45491 		}
45492 	}
45493 
45494 	/* here we are sure we are dealing with an object */
45495 	do {
45496 		zend_object *zobj = Z_OBJ_P(container);
45497 		zval *retval;
45498 
45499 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
45500 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
45501 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
45502 
45503 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45504 				retval = OBJ_PROP(zobj, prop_offset);
45505 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
45506 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
45507 					break;
45508 				}
45509 			} else if (EXPECTED(zobj->properties != NULL)) {
45510 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
45511 				if (EXPECTED(retval)) {
45512 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
45513 					break;
45514 				}
45515 			}
45516 		}
45517 
45518 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
45519 fetch_obj_is_no_object:
45520 			ZVAL_NULL(EX_VAR(opline->result.var));
45521 		} else {
45522 
45523 			retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
45524 
45525 			if (retval != EX_VAR(opline->result.var)) {
45526 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
45527 			}
45528 		}
45529 	} while (0);
45530 
45531 	zval_ptr_dtor_nogc(free_op2);
45532 	zval_ptr_dtor_nogc(free_op1);
45533 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45534 }
45535 
45536 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45537 {
45538 	USE_OPLINE
45539 	zend_free_op free_op1, free_op2;
45540 	zval *op1, *op2;
45541 	zend_string *op1_str, *op2_str, *str;
45542 
45543 	SAVE_OPLINE();
45544 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45545 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45546 		op1_str = Z_STR_P(op1);
45547 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45548 		op1_str = zend_string_copy(Z_STR_P(op1));
45549 	} else {
45550 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45551 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45552 		}
45553 		op1_str = _zval_get_string_func(op1);
45554 	}
45555 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45556 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45557 		op2_str = Z_STR_P(op2);
45558 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45559 		op2_str = zend_string_copy(Z_STR_P(op2));
45560 	} else {
45561 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45562 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45563 		}
45564 		op2_str = _zval_get_string_func(op2);
45565 	}
45566 	do {
45567 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45568 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
45569 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45570 					zend_string_addref(op2_str);
45571 				}
45572 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
45573 				zend_string_release(op1_str);
45574 				break;
45575 			}
45576 		}
45577 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45578 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
45579 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45580 					zend_string_addref(op1_str);
45581 				}
45582 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
45583 				zend_string_release(op2_str);
45584 				break;
45585 			}
45586 		}
45587 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
45588 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
45589 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
45590 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
45591 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45592 			zend_string_release(op1_str);
45593 		}
45594 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45595 			zend_string_release(op2_str);
45596 		}
45597 	} while (0);
45598 	zval_ptr_dtor_nogc(free_op1);
45599 	zval_ptr_dtor_nogc(free_op2);
45600 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45601 }
45602 
45603 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45604 {
45605 	USE_OPLINE
45606 	zval *function_name;
45607 	zend_free_op free_op1, free_op2;
45608 	zval *object;
45609 	zend_function *fbc;
45610 	zend_class_entry *called_scope;
45611 	zend_object *obj;
45612 	zend_execute_data *call;
45613 	uint32_t call_info;
45614 
45615 	SAVE_OPLINE();
45616 
45617 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45618 
45619 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
45620 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
45621 		do {
45622 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
45623 				function_name = Z_REFVAL_P(function_name);
45624 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
45625 					break;
45626 				}
45627 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
45628 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
45629 				if (UNEXPECTED(EG(exception) != NULL)) {
45630 					HANDLE_EXCEPTION();
45631 				}
45632 			}
45633 			zend_throw_error(NULL, "Method name must be a string");
45634 			zval_ptr_dtor_nogc(free_op2);
45635 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
45636 			HANDLE_EXCEPTION();
45637 		} while (0);
45638 	}
45639 
45640 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45641 
45642 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
45643 		zend_throw_error(NULL, "Using $this when not in object context");
45644 		zval_ptr_dtor_nogc(free_op2);
45645 		HANDLE_EXCEPTION();
45646 	}
45647 
45648 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
45649 		do {
45650 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45651 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
45652 					object = Z_REFVAL_P(object);
45653 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45654 						break;
45655 					}
45656 				}
45657 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45658 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
45659 					if (UNEXPECTED(EG(exception) != NULL)) {
45660 						zval_ptr_dtor_nogc(free_op2);
45661 						HANDLE_EXCEPTION();
45662 					}
45663 				}
45664 				zend_throw_error(NULL, "Call to a member function %s() on %s", Z_STRVAL_P(function_name), zend_get_type_by_const(Z_TYPE_P(object)));
45665 				zval_ptr_dtor_nogc(free_op2);
45666 				zval_ptr_dtor_nogc(free_op1);
45667 				HANDLE_EXCEPTION();
45668 			}
45669 		} while (0);
45670 	}
45671 
45672 	obj = Z_OBJ_P(object);
45673 	called_scope = obj->ce;
45674 
45675 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
45676 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
45677 	    zend_object *orig_obj = obj;
45678 
45679 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
45680 			zend_throw_error(NULL, "Object does not support method calls");
45681 			zval_ptr_dtor_nogc(free_op2);
45682 			zval_ptr_dtor_nogc(free_op1);
45683 			HANDLE_EXCEPTION();
45684 		}
45685 
45686 		/* First, locate the function. */
45687 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
45688 		if (UNEXPECTED(fbc == NULL)) {
45689 			if (EXPECTED(!EG(exception))) {
45690 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
45691 			}
45692 			zval_ptr_dtor_nogc(free_op2);
45693 			zval_ptr_dtor_nogc(free_op1);
45694 			HANDLE_EXCEPTION();
45695 		}
45696 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
45697 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
45698 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
45699 		    EXPECTED(obj == orig_obj)) {
45700 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
45701 		}
45702 	}
45703 
45704 	call_info = ZEND_CALL_NESTED_FUNCTION;
45705 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
45706 		obj = NULL;
45707 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
45708 		/* CV may be changed indirectly (e.g. when it's a reference) */
45709 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
45710 		GC_REFCOUNT(obj)++; /* For $this pointer */
45711 	}
45712 
45713 	zval_ptr_dtor_nogc(free_op2);
45714 	zval_ptr_dtor_nogc(free_op1);
45715 
45716 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
45717 		HANDLE_EXCEPTION();
45718 	}
45719 
45720 	call = zend_vm_stack_push_call_frame(call_info,
45721 		fbc, opline->extended_value, called_scope, obj);
45722 	call->prev_execute_data = EX(call);
45723 	EX(call) = call;
45724 
45725 	ZEND_VM_NEXT_OPCODE();
45726 }
45727 
45728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45729 {
45730 	USE_OPLINE
45731 	zend_free_op free_op1, free_op2;
45732 	zval *op1, *op2, *result;
45733 
45734 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45735 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45736 	do {
45737 		int result;
45738 
45739 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45740 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45741 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
45742 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45743 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
45744 			} else {
45745 				break;
45746 			}
45747 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45748 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45749 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
45750 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45751 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
45752 			} else {
45753 				break;
45754 			}
45755 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45756 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45757 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
45758 					result = 1;
45759 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
45760 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
45761 						result = 0;
45762 					} else {
45763 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
45764 					}
45765 				} else {
45766 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
45767 				}
45768 				zval_ptr_dtor_nogc(free_op2);
45769 			} else {
45770 				break;
45771 			}
45772 		} else {
45773 			break;
45774 		}
45775 		ZEND_VM_SMART_BRANCH(result, 0);
45776 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
45777 		ZEND_VM_NEXT_OPCODE();
45778 	} while (0);
45779 
45780 	SAVE_OPLINE();
45781 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
45782 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
45783 	} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
45784 		/* Don't keep lock on reference, lock the value instead */
45785 		if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
45786 			ZVAL_UNREF(op1);
45787 		} else {
45788 			Z_DELREF_P(op1);
45789 			ZVAL_COPY(op1, Z_REFVAL_P(op1));
45790 		}
45791 	}
45792 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
45793 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
45794 	}
45795 	result = EX_VAR(opline->result.var);
45796 	compare_function(result, op1, op2);
45797 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
45798 	zval_ptr_dtor_nogc(free_op2);
45799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45800 }
45801 
45802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45803 {
45804 	USE_OPLINE
45805 	zend_free_op free_op1, free_op2;
45806 	zval *container;
45807 	int result;
45808 	zend_ulong hval;
45809 	zval *offset;
45810 
45811 	SAVE_OPLINE();
45812 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45813 
45814 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
45815 		zend_throw_error(NULL, "Using $this when not in object context");
45816 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45817 		HANDLE_EXCEPTION();
45818 	}
45819 
45820 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45821 
45822 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45823 		HashTable *ht;
45824 		zval *value;
45825 		zend_string *str;
45826 
45827 isset_dim_obj_array:
45828 		ht = Z_ARRVAL_P(container);
45829 isset_again:
45830 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
45831 			str = Z_STR_P(offset);
45832 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45833 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
45834 					goto num_index_prop;
45835 				}
45836 			}
45837 str_index_prop:
45838 			value = zend_hash_find_ind(ht, str);
45839 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
45840 			hval = Z_LVAL_P(offset);
45841 num_index_prop:
45842 			value = zend_hash_index_find(ht, hval);
45843 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
45844 			offset = Z_REFVAL_P(offset);
45845 			goto isset_again;
45846 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
45847 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
45848 			goto num_index_prop;
45849 		} else if (Z_TYPE_P(offset) == IS_NULL) {
45850 			str = ZSTR_EMPTY_ALLOC();
45851 			goto str_index_prop;
45852 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
45853 			hval = 0;
45854 			goto num_index_prop;
45855 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
45856 			hval = 1;
45857 			goto num_index_prop;
45858 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
45859 			hval = Z_RES_HANDLE_P(offset);
45860 			goto num_index_prop;
45861 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
45862 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
45863 			str = ZSTR_EMPTY_ALLOC();
45864 			goto str_index_prop;
45865 		} else {
45866 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
45867 			goto isset_not_found;
45868 		}
45869 
45870 		if (opline->extended_value & ZEND_ISSET) {
45871 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
45872 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
45873 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
45874 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
45875 			result = (value == NULL || !i_zend_is_true(value));
45876 		}
45877 		goto isset_dim_obj_exit;
45878 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45879 		container = Z_REFVAL_P(container);
45880 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45881 			goto isset_dim_obj_array;
45882 		}
45883 	}
45884 
45885 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
45886 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
45887 	}
45888 
45889 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
45890 	    ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
45891 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
45892 			result =
45893 				((opline->extended_value & ZEND_ISSET) == 0) ^
45894 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
45895 		} else {
45896 			zend_error(E_NOTICE, "Trying to check element of non-array");
45897 			goto isset_not_found;
45898 		}
45899 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
45900 		zend_long lval;
45901 
45902 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
45903 			lval = Z_LVAL_P(offset);
45904 isset_str_offset:
45905 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
45906 				if (opline->extended_value & ZEND_ISSET) {
45907 					result = 1;
45908 				} else {
45909 					result = (Z_STRVAL_P(container)[lval] == '0');
45910 				}
45911 			} else {
45912 				goto isset_not_found;
45913 			}
45914 		} else {
45915 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
45916 				ZVAL_DEREF(offset);
45917 			}
45918 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
45919 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
45920 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
45921 				lval = zval_get_long(offset);
45922 				goto isset_str_offset;
45923 			}
45924 			goto isset_not_found;
45925 		}
45926 	} else {
45927 isset_not_found:
45928 		result = ((opline->extended_value & ZEND_ISSET) == 0);
45929 	}
45930 
45931 isset_dim_obj_exit:
45932 	zval_ptr_dtor_nogc(free_op2);
45933 	zval_ptr_dtor_nogc(free_op1);
45934 	ZEND_VM_SMART_BRANCH(result, 1);
45935 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
45936 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45937 }
45938 
45939 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45940 {
45941 	USE_OPLINE
45942 	zend_free_op free_op1, free_op2;
45943 	zval *container;
45944 	int result;
45945 	zval *offset;
45946 
45947 	SAVE_OPLINE();
45948 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
45949 
45950 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_OBJ_P(container) == NULL)) {
45951 		zend_throw_error(NULL, "Using $this when not in object context");
45952 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45953 		HANDLE_EXCEPTION();
45954 	}
45955 
45956 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
45957 
45958 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
45959 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45960 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45961 			container = Z_REFVAL_P(container);
45962 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45963 				goto isset_no_object;
45964 			}
45965 		} else {
45966 			goto isset_no_object;
45967 		}
45968 	}
45969 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
45970 		zend_error(E_NOTICE, "Trying to check property of non-object");
45971 isset_no_object:
45972 		result = ((opline->extended_value & ZEND_ISSET) == 0);
45973 	} else {
45974 		result =
45975 			((opline->extended_value & ZEND_ISSET) == 0) ^
45976 			Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISSET) == 0, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
45977 	}
45978 
45979 	zval_ptr_dtor_nogc(free_op2);
45980 	zval_ptr_dtor_nogc(free_op1);
45981 	ZEND_VM_SMART_BRANCH(result, 1);
45982 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
45983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45984 }
45985 
45986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45987 {
45988 	USE_OPLINE
45989 
45990 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
45991 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
45992 }
45993 
45994 
45995 void zend_init_opcodes_handlers(void)
45996 {
45997   static const void *labels[] = {
45998   	ZEND_NOP_SPEC_HANDLER,
45999   	ZEND_NOP_SPEC_HANDLER,
46000   	ZEND_NOP_SPEC_HANDLER,
46001   	ZEND_NOP_SPEC_HANDLER,
46002   	ZEND_NOP_SPEC_HANDLER,
46003   	ZEND_NOP_SPEC_HANDLER,
46004   	ZEND_NOP_SPEC_HANDLER,
46005   	ZEND_NOP_SPEC_HANDLER,
46006   	ZEND_NOP_SPEC_HANDLER,
46007   	ZEND_NOP_SPEC_HANDLER,
46008   	ZEND_NOP_SPEC_HANDLER,
46009   	ZEND_NOP_SPEC_HANDLER,
46010   	ZEND_NOP_SPEC_HANDLER,
46011   	ZEND_NOP_SPEC_HANDLER,
46012   	ZEND_NOP_SPEC_HANDLER,
46013   	ZEND_NOP_SPEC_HANDLER,
46014   	ZEND_NOP_SPEC_HANDLER,
46015   	ZEND_NOP_SPEC_HANDLER,
46016   	ZEND_NOP_SPEC_HANDLER,
46017   	ZEND_NOP_SPEC_HANDLER,
46018   	ZEND_NOP_SPEC_HANDLER,
46019   	ZEND_NOP_SPEC_HANDLER,
46020   	ZEND_NOP_SPEC_HANDLER,
46021   	ZEND_NOP_SPEC_HANDLER,
46022   	ZEND_NOP_SPEC_HANDLER,
46023   	ZEND_ADD_SPEC_CONST_CONST_HANDLER,
46024   	ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
46025   	ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
46026   	ZEND_NULL_HANDLER,
46027   	ZEND_ADD_SPEC_CONST_CV_HANDLER,
46028   	ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
46029   	ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
46030   	ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
46031   	ZEND_NULL_HANDLER,
46032   	ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
46033   	ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
46034   	ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
46035   	ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
46036   	ZEND_NULL_HANDLER,
46037   	ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
46038   	ZEND_NULL_HANDLER,
46039   	ZEND_NULL_HANDLER,
46040   	ZEND_NULL_HANDLER,
46041   	ZEND_NULL_HANDLER,
46042   	ZEND_NULL_HANDLER,
46043   	ZEND_ADD_SPEC_CV_CONST_HANDLER,
46044   	ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
46045   	ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
46046   	ZEND_NULL_HANDLER,
46047   	ZEND_ADD_SPEC_CV_CV_HANDLER,
46048   	ZEND_SUB_SPEC_CONST_CONST_HANDLER,
46049   	ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
46050   	ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
46051   	ZEND_NULL_HANDLER,
46052   	ZEND_SUB_SPEC_CONST_CV_HANDLER,
46053   	ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
46054   	ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
46055   	ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
46056   	ZEND_NULL_HANDLER,
46057   	ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
46058   	ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
46059   	ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
46060   	ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
46061   	ZEND_NULL_HANDLER,
46062   	ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
46063   	ZEND_NULL_HANDLER,
46064   	ZEND_NULL_HANDLER,
46065   	ZEND_NULL_HANDLER,
46066   	ZEND_NULL_HANDLER,
46067   	ZEND_NULL_HANDLER,
46068   	ZEND_SUB_SPEC_CV_CONST_HANDLER,
46069   	ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
46070   	ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
46071   	ZEND_NULL_HANDLER,
46072   	ZEND_SUB_SPEC_CV_CV_HANDLER,
46073   	ZEND_MUL_SPEC_CONST_CONST_HANDLER,
46074   	ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER,
46075   	ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER,
46076   	ZEND_NULL_HANDLER,
46077   	ZEND_MUL_SPEC_CONST_CV_HANDLER,
46078   	ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
46079   	ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
46080   	ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
46081   	ZEND_NULL_HANDLER,
46082   	ZEND_MUL_SPEC_TMPVAR_CV_HANDLER,
46083   	ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
46084   	ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
46085   	ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
46086   	ZEND_NULL_HANDLER,
46087   	ZEND_MUL_SPEC_TMPVAR_CV_HANDLER,
46088   	ZEND_NULL_HANDLER,
46089   	ZEND_NULL_HANDLER,
46090   	ZEND_NULL_HANDLER,
46091   	ZEND_NULL_HANDLER,
46092   	ZEND_NULL_HANDLER,
46093   	ZEND_MUL_SPEC_CV_CONST_HANDLER,
46094   	ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
46095   	ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
46096   	ZEND_NULL_HANDLER,
46097   	ZEND_MUL_SPEC_CV_CV_HANDLER,
46098   	ZEND_DIV_SPEC_CONST_CONST_HANDLER,
46099   	ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
46100   	ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
46101   	ZEND_NULL_HANDLER,
46102   	ZEND_DIV_SPEC_CONST_CV_HANDLER,
46103   	ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
46104   	ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
46105   	ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
46106   	ZEND_NULL_HANDLER,
46107   	ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
46108   	ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
46109   	ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
46110   	ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
46111   	ZEND_NULL_HANDLER,
46112   	ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
46113   	ZEND_NULL_HANDLER,
46114   	ZEND_NULL_HANDLER,
46115   	ZEND_NULL_HANDLER,
46116   	ZEND_NULL_HANDLER,
46117   	ZEND_NULL_HANDLER,
46118   	ZEND_DIV_SPEC_CV_CONST_HANDLER,
46119   	ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
46120   	ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
46121   	ZEND_NULL_HANDLER,
46122   	ZEND_DIV_SPEC_CV_CV_HANDLER,
46123   	ZEND_MOD_SPEC_CONST_CONST_HANDLER,
46124   	ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
46125   	ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
46126   	ZEND_NULL_HANDLER,
46127   	ZEND_MOD_SPEC_CONST_CV_HANDLER,
46128   	ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
46129   	ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
46130   	ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
46131   	ZEND_NULL_HANDLER,
46132   	ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
46133   	ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
46134   	ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
46135   	ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
46136   	ZEND_NULL_HANDLER,
46137   	ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
46138   	ZEND_NULL_HANDLER,
46139   	ZEND_NULL_HANDLER,
46140   	ZEND_NULL_HANDLER,
46141   	ZEND_NULL_HANDLER,
46142   	ZEND_NULL_HANDLER,
46143   	ZEND_MOD_SPEC_CV_CONST_HANDLER,
46144   	ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
46145   	ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
46146   	ZEND_NULL_HANDLER,
46147   	ZEND_MOD_SPEC_CV_CV_HANDLER,
46148   	ZEND_SL_SPEC_CONST_CONST_HANDLER,
46149   	ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
46150   	ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
46151   	ZEND_NULL_HANDLER,
46152   	ZEND_SL_SPEC_CONST_CV_HANDLER,
46153   	ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
46154   	ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
46155   	ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
46156   	ZEND_NULL_HANDLER,
46157   	ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
46158   	ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
46159   	ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
46160   	ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
46161   	ZEND_NULL_HANDLER,
46162   	ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
46163   	ZEND_NULL_HANDLER,
46164   	ZEND_NULL_HANDLER,
46165   	ZEND_NULL_HANDLER,
46166   	ZEND_NULL_HANDLER,
46167   	ZEND_NULL_HANDLER,
46168   	ZEND_SL_SPEC_CV_CONST_HANDLER,
46169   	ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
46170   	ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
46171   	ZEND_NULL_HANDLER,
46172   	ZEND_SL_SPEC_CV_CV_HANDLER,
46173   	ZEND_SR_SPEC_CONST_CONST_HANDLER,
46174   	ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
46175   	ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
46176   	ZEND_NULL_HANDLER,
46177   	ZEND_SR_SPEC_CONST_CV_HANDLER,
46178   	ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
46179   	ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
46180   	ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
46181   	ZEND_NULL_HANDLER,
46182   	ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
46183   	ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
46184   	ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
46185   	ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
46186   	ZEND_NULL_HANDLER,
46187   	ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
46188   	ZEND_NULL_HANDLER,
46189   	ZEND_NULL_HANDLER,
46190   	ZEND_NULL_HANDLER,
46191   	ZEND_NULL_HANDLER,
46192   	ZEND_NULL_HANDLER,
46193   	ZEND_SR_SPEC_CV_CONST_HANDLER,
46194   	ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
46195   	ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
46196   	ZEND_NULL_HANDLER,
46197   	ZEND_SR_SPEC_CV_CV_HANDLER,
46198   	ZEND_CONCAT_SPEC_CONST_CONST_HANDLER,
46199   	ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
46200   	ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
46201   	ZEND_NULL_HANDLER,
46202   	ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
46203   	ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
46204   	ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
46205   	ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
46206   	ZEND_NULL_HANDLER,
46207   	ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
46208   	ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
46209   	ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
46210   	ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
46211   	ZEND_NULL_HANDLER,
46212   	ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
46213   	ZEND_NULL_HANDLER,
46214   	ZEND_NULL_HANDLER,
46215   	ZEND_NULL_HANDLER,
46216   	ZEND_NULL_HANDLER,
46217   	ZEND_NULL_HANDLER,
46218   	ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
46219   	ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
46220   	ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
46221   	ZEND_NULL_HANDLER,
46222   	ZEND_CONCAT_SPEC_CV_CV_HANDLER,
46223   	ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
46224   	ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER,
46225   	ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER,
46226   	ZEND_NULL_HANDLER,
46227   	ZEND_BW_OR_SPEC_CONST_CV_HANDLER,
46228   	ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
46229   	ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
46230   	ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
46231   	ZEND_NULL_HANDLER,
46232   	ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER,
46233   	ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
46234   	ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
46235   	ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
46236   	ZEND_NULL_HANDLER,
46237   	ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER,
46238   	ZEND_NULL_HANDLER,
46239   	ZEND_NULL_HANDLER,
46240   	ZEND_NULL_HANDLER,
46241   	ZEND_NULL_HANDLER,
46242   	ZEND_NULL_HANDLER,
46243   	ZEND_BW_OR_SPEC_CV_CONST_HANDLER,
46244   	ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
46245   	ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
46246   	ZEND_NULL_HANDLER,
46247   	ZEND_BW_OR_SPEC_CV_CV_HANDLER,
46248   	ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
46249   	ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER,
46250   	ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER,
46251   	ZEND_NULL_HANDLER,
46252   	ZEND_BW_AND_SPEC_CONST_CV_HANDLER,
46253   	ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
46254   	ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
46255   	ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
46256   	ZEND_NULL_HANDLER,
46257   	ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER,
46258   	ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
46259   	ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
46260   	ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
46261   	ZEND_NULL_HANDLER,
46262   	ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER,
46263   	ZEND_NULL_HANDLER,
46264   	ZEND_NULL_HANDLER,
46265   	ZEND_NULL_HANDLER,
46266   	ZEND_NULL_HANDLER,
46267   	ZEND_NULL_HANDLER,
46268   	ZEND_BW_AND_SPEC_CV_CONST_HANDLER,
46269   	ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
46270   	ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
46271   	ZEND_NULL_HANDLER,
46272   	ZEND_BW_AND_SPEC_CV_CV_HANDLER,
46273   	ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
46274   	ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER,
46275   	ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER,
46276   	ZEND_NULL_HANDLER,
46277   	ZEND_BW_XOR_SPEC_CONST_CV_HANDLER,
46278   	ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
46279   	ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46280   	ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46281   	ZEND_NULL_HANDLER,
46282   	ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER,
46283   	ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
46284   	ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46285   	ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46286   	ZEND_NULL_HANDLER,
46287   	ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER,
46288   	ZEND_NULL_HANDLER,
46289   	ZEND_NULL_HANDLER,
46290   	ZEND_NULL_HANDLER,
46291   	ZEND_NULL_HANDLER,
46292   	ZEND_NULL_HANDLER,
46293   	ZEND_BW_XOR_SPEC_CV_CONST_HANDLER,
46294   	ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
46295   	ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
46296   	ZEND_NULL_HANDLER,
46297   	ZEND_BW_XOR_SPEC_CV_CV_HANDLER,
46298   	ZEND_BW_NOT_SPEC_CONST_HANDLER,
46299   	ZEND_BW_NOT_SPEC_CONST_HANDLER,
46300   	ZEND_BW_NOT_SPEC_CONST_HANDLER,
46301   	ZEND_BW_NOT_SPEC_CONST_HANDLER,
46302   	ZEND_BW_NOT_SPEC_CONST_HANDLER,
46303   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46304   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46305   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46306   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46307   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46308   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46309   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46310   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46311   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46312   	ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
46313   	ZEND_NULL_HANDLER,
46314   	ZEND_NULL_HANDLER,
46315   	ZEND_NULL_HANDLER,
46316   	ZEND_NULL_HANDLER,
46317   	ZEND_NULL_HANDLER,
46318   	ZEND_BW_NOT_SPEC_CV_HANDLER,
46319   	ZEND_BW_NOT_SPEC_CV_HANDLER,
46320   	ZEND_BW_NOT_SPEC_CV_HANDLER,
46321   	ZEND_BW_NOT_SPEC_CV_HANDLER,
46322   	ZEND_BW_NOT_SPEC_CV_HANDLER,
46323   	ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
46324   	ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
46325   	ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
46326   	ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
46327   	ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
46328   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46329   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46330   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46331   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46332   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46333   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46334   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46335   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46336   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46337   	ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
46338   	ZEND_NULL_HANDLER,
46339   	ZEND_NULL_HANDLER,
46340   	ZEND_NULL_HANDLER,
46341   	ZEND_NULL_HANDLER,
46342   	ZEND_NULL_HANDLER,
46343   	ZEND_BOOL_NOT_SPEC_CV_HANDLER,
46344   	ZEND_BOOL_NOT_SPEC_CV_HANDLER,
46345   	ZEND_BOOL_NOT_SPEC_CV_HANDLER,
46346   	ZEND_BOOL_NOT_SPEC_CV_HANDLER,
46347   	ZEND_BOOL_NOT_SPEC_CV_HANDLER,
46348   	ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
46349   	ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER,
46350   	ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER,
46351   	ZEND_NULL_HANDLER,
46352   	ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER,
46353   	ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
46354   	ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46355   	ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46356   	ZEND_NULL_HANDLER,
46357   	ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER,
46358   	ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
46359   	ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46360   	ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
46361   	ZEND_NULL_HANDLER,
46362   	ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER,
46363   	ZEND_NULL_HANDLER,
46364   	ZEND_NULL_HANDLER,
46365   	ZEND_NULL_HANDLER,
46366   	ZEND_NULL_HANDLER,
46367   	ZEND_NULL_HANDLER,
46368   	ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
46369   	ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
46370   	ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
46371   	ZEND_NULL_HANDLER,
46372   	ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
46373   	ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
46374   	ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER,
46375   	ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER,
46376   	ZEND_NULL_HANDLER,
46377   	ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER,
46378   	ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
46379   	ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
46380   	ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER,
46381   	ZEND_NULL_HANDLER,
46382   	ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER,
46383   	ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
46384   	ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
46385   	ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
46386   	ZEND_NULL_HANDLER,
46387   	ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER,
46388   	ZEND_NULL_HANDLER,
46389   	ZEND_NULL_HANDLER,
46390   	ZEND_NULL_HANDLER,
46391   	ZEND_NULL_HANDLER,
46392   	ZEND_NULL_HANDLER,
46393   	ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
46394   	ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
46395   	ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
46396   	ZEND_NULL_HANDLER,
46397   	ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
46398   	ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
46399   	ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER,
46400   	ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER,
46401   	ZEND_NULL_HANDLER,
46402   	ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER,
46403   	ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
46404   	ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
46405   	ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER,
46406   	ZEND_NULL_HANDLER,
46407   	ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER,
46408   	ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
46409   	ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
46410   	ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
46411   	ZEND_NULL_HANDLER,
46412   	ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER,
46413   	ZEND_NULL_HANDLER,
46414   	ZEND_NULL_HANDLER,
46415   	ZEND_NULL_HANDLER,
46416   	ZEND_NULL_HANDLER,
46417   	ZEND_NULL_HANDLER,
46418   	ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
46419   	ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
46420   	ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
46421   	ZEND_NULL_HANDLER,
46422   	ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
46423   	ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
46424   	ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46425   	ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46426   	ZEND_NULL_HANDLER,
46427   	ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER,
46428   	ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46429   	ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46430   	ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46431   	ZEND_NULL_HANDLER,
46432   	ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46433   	ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46434   	ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46435   	ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46436   	ZEND_NULL_HANDLER,
46437   	ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46438   	ZEND_NULL_HANDLER,
46439   	ZEND_NULL_HANDLER,
46440   	ZEND_NULL_HANDLER,
46441   	ZEND_NULL_HANDLER,
46442   	ZEND_NULL_HANDLER,
46443   	ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
46444   	ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46445   	ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46446   	ZEND_NULL_HANDLER,
46447   	ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
46448   	ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
46449   	ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46450   	ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46451   	ZEND_NULL_HANDLER,
46452   	ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER,
46453   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46454   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46455   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46456   	ZEND_NULL_HANDLER,
46457   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46458   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46459   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46460   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46461   	ZEND_NULL_HANDLER,
46462   	ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46463   	ZEND_NULL_HANDLER,
46464   	ZEND_NULL_HANDLER,
46465   	ZEND_NULL_HANDLER,
46466   	ZEND_NULL_HANDLER,
46467   	ZEND_NULL_HANDLER,
46468   	ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
46469   	ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46470   	ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46471   	ZEND_NULL_HANDLER,
46472   	ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
46473   	ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
46474   	ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
46475   	ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
46476   	ZEND_NULL_HANDLER,
46477   	ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER,
46478   	ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
46479   	ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
46480   	ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
46481   	ZEND_NULL_HANDLER,
46482   	ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
46483   	ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
46484   	ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
46485   	ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
46486   	ZEND_NULL_HANDLER,
46487   	ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
46488   	ZEND_NULL_HANDLER,
46489   	ZEND_NULL_HANDLER,
46490   	ZEND_NULL_HANDLER,
46491   	ZEND_NULL_HANDLER,
46492   	ZEND_NULL_HANDLER,
46493   	ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER,
46494   	ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
46495   	ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
46496   	ZEND_NULL_HANDLER,
46497   	ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER,
46498   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
46499   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46500   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
46501   	ZEND_NULL_HANDLER,
46502   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER,
46503   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46504   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46505   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46506   	ZEND_NULL_HANDLER,
46507   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46508   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
46509   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46510   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
46511   	ZEND_NULL_HANDLER,
46512   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
46513   	ZEND_NULL_HANDLER,
46514   	ZEND_NULL_HANDLER,
46515   	ZEND_NULL_HANDLER,
46516   	ZEND_NULL_HANDLER,
46517   	ZEND_NULL_HANDLER,
46518   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER,
46519   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46520   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
46521   	ZEND_NULL_HANDLER,
46522   	ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER,
46523   	ZEND_CAST_SPEC_CONST_HANDLER,
46524   	ZEND_CAST_SPEC_CONST_HANDLER,
46525   	ZEND_CAST_SPEC_CONST_HANDLER,
46526   	ZEND_CAST_SPEC_CONST_HANDLER,
46527   	ZEND_CAST_SPEC_CONST_HANDLER,
46528   	ZEND_CAST_SPEC_TMP_HANDLER,
46529   	ZEND_CAST_SPEC_TMP_HANDLER,
46530   	ZEND_CAST_SPEC_TMP_HANDLER,
46531   	ZEND_CAST_SPEC_TMP_HANDLER,
46532   	ZEND_CAST_SPEC_TMP_HANDLER,
46533   	ZEND_CAST_SPEC_VAR_HANDLER,
46534   	ZEND_CAST_SPEC_VAR_HANDLER,
46535   	ZEND_CAST_SPEC_VAR_HANDLER,
46536   	ZEND_CAST_SPEC_VAR_HANDLER,
46537   	ZEND_CAST_SPEC_VAR_HANDLER,
46538   	ZEND_NULL_HANDLER,
46539   	ZEND_NULL_HANDLER,
46540   	ZEND_NULL_HANDLER,
46541   	ZEND_NULL_HANDLER,
46542   	ZEND_NULL_HANDLER,
46543   	ZEND_CAST_SPEC_CV_HANDLER,
46544   	ZEND_CAST_SPEC_CV_HANDLER,
46545   	ZEND_CAST_SPEC_CV_HANDLER,
46546   	ZEND_CAST_SPEC_CV_HANDLER,
46547   	ZEND_CAST_SPEC_CV_HANDLER,
46548   	ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
46549   	ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
46550   	ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
46551   	ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
46552   	ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
46553   	ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
46554   	ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
46555   	ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
46556   	ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
46557   	ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
46558   	ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
46559   	ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
46560   	ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
46561   	ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
46562   	ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
46563   	ZEND_NULL_HANDLER,
46564   	ZEND_NULL_HANDLER,
46565   	ZEND_NULL_HANDLER,
46566   	ZEND_NULL_HANDLER,
46567   	ZEND_NULL_HANDLER,
46568   	ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
46569   	ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
46570   	ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
46571   	ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
46572   	ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
46573   	ZEND_NULL_HANDLER,
46574   	ZEND_NULL_HANDLER,
46575   	ZEND_NULL_HANDLER,
46576   	ZEND_NULL_HANDLER,
46577   	ZEND_NULL_HANDLER,
46578   	ZEND_NULL_HANDLER,
46579   	ZEND_NULL_HANDLER,
46580   	ZEND_NULL_HANDLER,
46581   	ZEND_NULL_HANDLER,
46582   	ZEND_NULL_HANDLER,
46583   	ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER,
46584   	ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
46585   	ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
46586   	ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER,
46587   	ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER,
46588   	ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER,
46589   	ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_HANDLER,
46590   	ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_HANDLER,
46591   	ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER,
46592   	ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER,
46593   	ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER,
46594   	ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
46595   	ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
46596   	ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER,
46597   	ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER,
46598   	ZEND_NULL_HANDLER,
46599   	ZEND_NULL_HANDLER,
46600   	ZEND_NULL_HANDLER,
46601   	ZEND_NULL_HANDLER,
46602   	ZEND_NULL_HANDLER,
46603   	ZEND_NULL_HANDLER,
46604   	ZEND_NULL_HANDLER,
46605   	ZEND_NULL_HANDLER,
46606   	ZEND_NULL_HANDLER,
46607   	ZEND_NULL_HANDLER,
46608   	ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER,
46609   	ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
46610   	ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
46611   	ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER,
46612   	ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER,
46613   	ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER,
46614   	ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_HANDLER,
46615   	ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_HANDLER,
46616   	ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER,
46617   	ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER,
46618   	ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER,
46619   	ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
46620   	ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
46621   	ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER,
46622   	ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER,
46623   	ZEND_NULL_HANDLER,
46624   	ZEND_NULL_HANDLER,
46625   	ZEND_NULL_HANDLER,
46626   	ZEND_NULL_HANDLER,
46627   	ZEND_NULL_HANDLER,
46628   	ZEND_NULL_HANDLER,
46629   	ZEND_NULL_HANDLER,
46630   	ZEND_NULL_HANDLER,
46631   	ZEND_NULL_HANDLER,
46632   	ZEND_NULL_HANDLER,
46633   	ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER,
46634   	ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
46635   	ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
46636   	ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER,
46637   	ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER,
46638   	ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER,
46639   	ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_HANDLER,
46640   	ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_HANDLER,
46641   	ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER,
46642   	ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER,
46643   	ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER,
46644   	ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
46645   	ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
46646   	ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER,
46647   	ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER,
46648   	ZEND_NULL_HANDLER,
46649   	ZEND_NULL_HANDLER,
46650   	ZEND_NULL_HANDLER,
46651   	ZEND_NULL_HANDLER,
46652   	ZEND_NULL_HANDLER,
46653   	ZEND_NULL_HANDLER,
46654   	ZEND_NULL_HANDLER,
46655   	ZEND_NULL_HANDLER,
46656   	ZEND_NULL_HANDLER,
46657   	ZEND_NULL_HANDLER,
46658   	ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER,
46659   	ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
46660   	ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
46661   	ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER,
46662   	ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER,
46663   	ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER,
46664   	ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_HANDLER,
46665   	ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_HANDLER,
46666   	ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER,
46667   	ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER,
46668   	ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER,
46669   	ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
46670   	ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
46671   	ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER,
46672   	ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER,
46673   	ZEND_NULL_HANDLER,
46674   	ZEND_NULL_HANDLER,
46675   	ZEND_NULL_HANDLER,
46676   	ZEND_NULL_HANDLER,
46677   	ZEND_NULL_HANDLER,
46678   	ZEND_NULL_HANDLER,
46679   	ZEND_NULL_HANDLER,
46680   	ZEND_NULL_HANDLER,
46681   	ZEND_NULL_HANDLER,
46682   	ZEND_NULL_HANDLER,
46683   	ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER,
46684   	ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
46685   	ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
46686   	ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER,
46687   	ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER,
46688   	ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER,
46689   	ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_HANDLER,
46690   	ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_HANDLER,
46691   	ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER,
46692   	ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER,
46693   	ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER,
46694   	ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
46695   	ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
46696   	ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER,
46697   	ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER,
46698   	ZEND_NULL_HANDLER,
46699   	ZEND_NULL_HANDLER,
46700   	ZEND_NULL_HANDLER,
46701   	ZEND_NULL_HANDLER,
46702   	ZEND_NULL_HANDLER,
46703   	ZEND_NULL_HANDLER,
46704   	ZEND_NULL_HANDLER,
46705   	ZEND_NULL_HANDLER,
46706   	ZEND_NULL_HANDLER,
46707   	ZEND_NULL_HANDLER,
46708   	ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER,
46709   	ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
46710   	ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
46711   	ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER,
46712   	ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER,
46713   	ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER,
46714   	ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_HANDLER,
46715   	ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_HANDLER,
46716   	ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER,
46717   	ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER,
46718   	ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER,
46719   	ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
46720   	ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
46721   	ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER,
46722   	ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER,
46723   	ZEND_NULL_HANDLER,
46724   	ZEND_NULL_HANDLER,
46725   	ZEND_NULL_HANDLER,
46726   	ZEND_NULL_HANDLER,
46727   	ZEND_NULL_HANDLER,
46728   	ZEND_NULL_HANDLER,
46729   	ZEND_NULL_HANDLER,
46730   	ZEND_NULL_HANDLER,
46731   	ZEND_NULL_HANDLER,
46732   	ZEND_NULL_HANDLER,
46733   	ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER,
46734   	ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
46735   	ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
46736   	ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER,
46737   	ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER,
46738   	ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER,
46739   	ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_HANDLER,
46740   	ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_HANDLER,
46741   	ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER,
46742   	ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER,
46743   	ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER,
46744   	ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
46745   	ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
46746   	ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER,
46747   	ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER,
46748   	ZEND_NULL_HANDLER,
46749   	ZEND_NULL_HANDLER,
46750   	ZEND_NULL_HANDLER,
46751   	ZEND_NULL_HANDLER,
46752   	ZEND_NULL_HANDLER,
46753   	ZEND_NULL_HANDLER,
46754   	ZEND_NULL_HANDLER,
46755   	ZEND_NULL_HANDLER,
46756   	ZEND_NULL_HANDLER,
46757   	ZEND_NULL_HANDLER,
46758   	ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER,
46759   	ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
46760   	ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
46761   	ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER,
46762   	ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER,
46763   	ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER,
46764   	ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_HANDLER,
46765   	ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_HANDLER,
46766   	ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER,
46767   	ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER,
46768   	ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER,
46769   	ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
46770   	ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
46771   	ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER,
46772   	ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER,
46773   	ZEND_NULL_HANDLER,
46774   	ZEND_NULL_HANDLER,
46775   	ZEND_NULL_HANDLER,
46776   	ZEND_NULL_HANDLER,
46777   	ZEND_NULL_HANDLER,
46778   	ZEND_NULL_HANDLER,
46779   	ZEND_NULL_HANDLER,
46780   	ZEND_NULL_HANDLER,
46781   	ZEND_NULL_HANDLER,
46782   	ZEND_NULL_HANDLER,
46783   	ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER,
46784   	ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
46785   	ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
46786   	ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER,
46787   	ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER,
46788   	ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER,
46789   	ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_HANDLER,
46790   	ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_HANDLER,
46791   	ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER,
46792   	ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER,
46793   	ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER,
46794   	ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
46795   	ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
46796   	ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER,
46797   	ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER,
46798   	ZEND_NULL_HANDLER,
46799   	ZEND_NULL_HANDLER,
46800   	ZEND_NULL_HANDLER,
46801   	ZEND_NULL_HANDLER,
46802   	ZEND_NULL_HANDLER,
46803   	ZEND_NULL_HANDLER,
46804   	ZEND_NULL_HANDLER,
46805   	ZEND_NULL_HANDLER,
46806   	ZEND_NULL_HANDLER,
46807   	ZEND_NULL_HANDLER,
46808   	ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER,
46809   	ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
46810   	ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
46811   	ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER,
46812   	ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER,
46813   	ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER,
46814   	ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_HANDLER,
46815   	ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_HANDLER,
46816   	ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER,
46817   	ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER,
46818   	ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER,
46819   	ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
46820   	ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
46821   	ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER,
46822   	ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER,
46823   	ZEND_NULL_HANDLER,
46824   	ZEND_NULL_HANDLER,
46825   	ZEND_NULL_HANDLER,
46826   	ZEND_NULL_HANDLER,
46827   	ZEND_NULL_HANDLER,
46828   	ZEND_NULL_HANDLER,
46829   	ZEND_NULL_HANDLER,
46830   	ZEND_NULL_HANDLER,
46831   	ZEND_NULL_HANDLER,
46832   	ZEND_NULL_HANDLER,
46833   	ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER,
46834   	ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
46835   	ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
46836   	ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER,
46837   	ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER,
46838   	ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER,
46839   	ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_HANDLER,
46840   	ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_HANDLER,
46841   	ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER,
46842   	ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER,
46843   	ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER,
46844   	ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
46845   	ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
46846   	ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER,
46847   	ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER,
46848   	ZEND_NULL_HANDLER,
46849   	ZEND_NULL_HANDLER,
46850   	ZEND_NULL_HANDLER,
46851   	ZEND_NULL_HANDLER,
46852   	ZEND_NULL_HANDLER,
46853   	ZEND_NULL_HANDLER,
46854   	ZEND_NULL_HANDLER,
46855   	ZEND_NULL_HANDLER,
46856   	ZEND_NULL_HANDLER,
46857   	ZEND_NULL_HANDLER,
46858   	ZEND_PRE_INC_SPEC_VAR_HANDLER,
46859   	ZEND_PRE_INC_SPEC_VAR_HANDLER,
46860   	ZEND_PRE_INC_SPEC_VAR_HANDLER,
46861   	ZEND_PRE_INC_SPEC_VAR_HANDLER,
46862   	ZEND_PRE_INC_SPEC_VAR_HANDLER,
46863   	ZEND_NULL_HANDLER,
46864   	ZEND_NULL_HANDLER,
46865   	ZEND_NULL_HANDLER,
46866   	ZEND_NULL_HANDLER,
46867   	ZEND_NULL_HANDLER,
46868   	ZEND_PRE_INC_SPEC_CV_HANDLER,
46869   	ZEND_PRE_INC_SPEC_CV_HANDLER,
46870   	ZEND_PRE_INC_SPEC_CV_HANDLER,
46871   	ZEND_PRE_INC_SPEC_CV_HANDLER,
46872   	ZEND_PRE_INC_SPEC_CV_HANDLER,
46873   	ZEND_NULL_HANDLER,
46874   	ZEND_NULL_HANDLER,
46875   	ZEND_NULL_HANDLER,
46876   	ZEND_NULL_HANDLER,
46877   	ZEND_NULL_HANDLER,
46878   	ZEND_NULL_HANDLER,
46879   	ZEND_NULL_HANDLER,
46880   	ZEND_NULL_HANDLER,
46881   	ZEND_NULL_HANDLER,
46882   	ZEND_NULL_HANDLER,
46883   	ZEND_PRE_DEC_SPEC_VAR_HANDLER,
46884   	ZEND_PRE_DEC_SPEC_VAR_HANDLER,
46885   	ZEND_PRE_DEC_SPEC_VAR_HANDLER,
46886   	ZEND_PRE_DEC_SPEC_VAR_HANDLER,
46887   	ZEND_PRE_DEC_SPEC_VAR_HANDLER,
46888   	ZEND_NULL_HANDLER,
46889   	ZEND_NULL_HANDLER,
46890   	ZEND_NULL_HANDLER,
46891   	ZEND_NULL_HANDLER,
46892   	ZEND_NULL_HANDLER,
46893   	ZEND_PRE_DEC_SPEC_CV_HANDLER,
46894   	ZEND_PRE_DEC_SPEC_CV_HANDLER,
46895   	ZEND_PRE_DEC_SPEC_CV_HANDLER,
46896   	ZEND_PRE_DEC_SPEC_CV_HANDLER,
46897   	ZEND_PRE_DEC_SPEC_CV_HANDLER,
46898   	ZEND_NULL_HANDLER,
46899   	ZEND_NULL_HANDLER,
46900   	ZEND_NULL_HANDLER,
46901   	ZEND_NULL_HANDLER,
46902   	ZEND_NULL_HANDLER,
46903   	ZEND_NULL_HANDLER,
46904   	ZEND_NULL_HANDLER,
46905   	ZEND_NULL_HANDLER,
46906   	ZEND_NULL_HANDLER,
46907   	ZEND_NULL_HANDLER,
46908   	ZEND_POST_INC_SPEC_VAR_HANDLER,
46909   	ZEND_POST_INC_SPEC_VAR_HANDLER,
46910   	ZEND_POST_INC_SPEC_VAR_HANDLER,
46911   	ZEND_POST_INC_SPEC_VAR_HANDLER,
46912   	ZEND_POST_INC_SPEC_VAR_HANDLER,
46913   	ZEND_NULL_HANDLER,
46914   	ZEND_NULL_HANDLER,
46915   	ZEND_NULL_HANDLER,
46916   	ZEND_NULL_HANDLER,
46917   	ZEND_NULL_HANDLER,
46918   	ZEND_POST_INC_SPEC_CV_HANDLER,
46919   	ZEND_POST_INC_SPEC_CV_HANDLER,
46920   	ZEND_POST_INC_SPEC_CV_HANDLER,
46921   	ZEND_POST_INC_SPEC_CV_HANDLER,
46922   	ZEND_POST_INC_SPEC_CV_HANDLER,
46923   	ZEND_NULL_HANDLER,
46924   	ZEND_NULL_HANDLER,
46925   	ZEND_NULL_HANDLER,
46926   	ZEND_NULL_HANDLER,
46927   	ZEND_NULL_HANDLER,
46928   	ZEND_NULL_HANDLER,
46929   	ZEND_NULL_HANDLER,
46930   	ZEND_NULL_HANDLER,
46931   	ZEND_NULL_HANDLER,
46932   	ZEND_NULL_HANDLER,
46933   	ZEND_POST_DEC_SPEC_VAR_HANDLER,
46934   	ZEND_POST_DEC_SPEC_VAR_HANDLER,
46935   	ZEND_POST_DEC_SPEC_VAR_HANDLER,
46936   	ZEND_POST_DEC_SPEC_VAR_HANDLER,
46937   	ZEND_POST_DEC_SPEC_VAR_HANDLER,
46938   	ZEND_NULL_HANDLER,
46939   	ZEND_NULL_HANDLER,
46940   	ZEND_NULL_HANDLER,
46941   	ZEND_NULL_HANDLER,
46942   	ZEND_NULL_HANDLER,
46943   	ZEND_POST_DEC_SPEC_CV_HANDLER,
46944   	ZEND_POST_DEC_SPEC_CV_HANDLER,
46945   	ZEND_POST_DEC_SPEC_CV_HANDLER,
46946   	ZEND_POST_DEC_SPEC_CV_HANDLER,
46947   	ZEND_POST_DEC_SPEC_CV_HANDLER,
46948   	ZEND_NULL_HANDLER,
46949   	ZEND_NULL_HANDLER,
46950   	ZEND_NULL_HANDLER,
46951   	ZEND_NULL_HANDLER,
46952   	ZEND_NULL_HANDLER,
46953   	ZEND_NULL_HANDLER,
46954   	ZEND_NULL_HANDLER,
46955   	ZEND_NULL_HANDLER,
46956   	ZEND_NULL_HANDLER,
46957   	ZEND_NULL_HANDLER,
46958   	ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER,
46959   	ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER,
46960   	ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER,
46961   	ZEND_NULL_HANDLER,
46962   	ZEND_ASSIGN_SPEC_VAR_CV_HANDLER,
46963   	ZEND_NULL_HANDLER,
46964   	ZEND_NULL_HANDLER,
46965   	ZEND_NULL_HANDLER,
46966   	ZEND_NULL_HANDLER,
46967   	ZEND_NULL_HANDLER,
46968   	ZEND_ASSIGN_SPEC_CV_CONST_HANDLER,
46969   	ZEND_ASSIGN_SPEC_CV_TMP_HANDLER,
46970   	ZEND_ASSIGN_SPEC_CV_VAR_HANDLER,
46971   	ZEND_NULL_HANDLER,
46972   	ZEND_ASSIGN_SPEC_CV_CV_HANDLER,
46973   	ZEND_NULL_HANDLER,
46974   	ZEND_NULL_HANDLER,
46975   	ZEND_NULL_HANDLER,
46976   	ZEND_NULL_HANDLER,
46977   	ZEND_NULL_HANDLER,
46978   	ZEND_NULL_HANDLER,
46979   	ZEND_NULL_HANDLER,
46980   	ZEND_NULL_HANDLER,
46981   	ZEND_NULL_HANDLER,
46982   	ZEND_NULL_HANDLER,
46983   	ZEND_NULL_HANDLER,
46984   	ZEND_NULL_HANDLER,
46985   	ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
46986   	ZEND_NULL_HANDLER,
46987   	ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
46988   	ZEND_NULL_HANDLER,
46989   	ZEND_NULL_HANDLER,
46990   	ZEND_NULL_HANDLER,
46991   	ZEND_NULL_HANDLER,
46992   	ZEND_NULL_HANDLER,
46993   	ZEND_NULL_HANDLER,
46994   	ZEND_NULL_HANDLER,
46995   	ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
46996   	ZEND_NULL_HANDLER,
46997   	ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
46998   	ZEND_ECHO_SPEC_CONST_HANDLER,
46999   	ZEND_ECHO_SPEC_CONST_HANDLER,
47000   	ZEND_ECHO_SPEC_CONST_HANDLER,
47001   	ZEND_ECHO_SPEC_CONST_HANDLER,
47002   	ZEND_ECHO_SPEC_CONST_HANDLER,
47003   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47004   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47005   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47006   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47007   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47008   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47009   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47010   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47011   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47012   	ZEND_ECHO_SPEC_TMPVAR_HANDLER,
47013   	ZEND_NULL_HANDLER,
47014   	ZEND_NULL_HANDLER,
47015   	ZEND_NULL_HANDLER,
47016   	ZEND_NULL_HANDLER,
47017   	ZEND_NULL_HANDLER,
47018   	ZEND_ECHO_SPEC_CV_HANDLER,
47019   	ZEND_ECHO_SPEC_CV_HANDLER,
47020   	ZEND_ECHO_SPEC_CV_HANDLER,
47021   	ZEND_ECHO_SPEC_CV_HANDLER,
47022   	ZEND_ECHO_SPEC_CV_HANDLER,
47023   	ZEND_NULL_HANDLER,
47024   	ZEND_NULL_HANDLER,
47025   	ZEND_NULL_HANDLER,
47026   	ZEND_NULL_HANDLER,
47027   	ZEND_NULL_HANDLER,
47028   	ZEND_NULL_HANDLER,
47029   	ZEND_NULL_HANDLER,
47030   	ZEND_NULL_HANDLER,
47031   	ZEND_NULL_HANDLER,
47032   	ZEND_NULL_HANDLER,
47033   	ZEND_NULL_HANDLER,
47034   	ZEND_NULL_HANDLER,
47035   	ZEND_NULL_HANDLER,
47036   	ZEND_NULL_HANDLER,
47037   	ZEND_NULL_HANDLER,
47038   	ZEND_NULL_HANDLER,
47039   	ZEND_NULL_HANDLER,
47040   	ZEND_NULL_HANDLER,
47041   	ZEND_NULL_HANDLER,
47042   	ZEND_NULL_HANDLER,
47043   	ZEND_NULL_HANDLER,
47044   	ZEND_NULL_HANDLER,
47045   	ZEND_NULL_HANDLER,
47046   	ZEND_NULL_HANDLER,
47047   	ZEND_NULL_HANDLER,
47048   	ZEND_JMP_SPEC_HANDLER,
47049   	ZEND_JMP_SPEC_HANDLER,
47050   	ZEND_JMP_SPEC_HANDLER,
47051   	ZEND_JMP_SPEC_HANDLER,
47052   	ZEND_JMP_SPEC_HANDLER,
47053   	ZEND_JMP_SPEC_HANDLER,
47054   	ZEND_JMP_SPEC_HANDLER,
47055   	ZEND_JMP_SPEC_HANDLER,
47056   	ZEND_JMP_SPEC_HANDLER,
47057   	ZEND_JMP_SPEC_HANDLER,
47058   	ZEND_JMP_SPEC_HANDLER,
47059   	ZEND_JMP_SPEC_HANDLER,
47060   	ZEND_JMP_SPEC_HANDLER,
47061   	ZEND_JMP_SPEC_HANDLER,
47062   	ZEND_JMP_SPEC_HANDLER,
47063   	ZEND_JMP_SPEC_HANDLER,
47064   	ZEND_JMP_SPEC_HANDLER,
47065   	ZEND_JMP_SPEC_HANDLER,
47066   	ZEND_JMP_SPEC_HANDLER,
47067   	ZEND_JMP_SPEC_HANDLER,
47068   	ZEND_JMP_SPEC_HANDLER,
47069   	ZEND_JMP_SPEC_HANDLER,
47070   	ZEND_JMP_SPEC_HANDLER,
47071   	ZEND_JMP_SPEC_HANDLER,
47072   	ZEND_JMP_SPEC_HANDLER,
47073   	ZEND_JMPZ_SPEC_CONST_HANDLER,
47074   	ZEND_JMPZ_SPEC_CONST_HANDLER,
47075   	ZEND_JMPZ_SPEC_CONST_HANDLER,
47076   	ZEND_JMPZ_SPEC_CONST_HANDLER,
47077   	ZEND_JMPZ_SPEC_CONST_HANDLER,
47078   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47079   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47080   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47081   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47082   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47083   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47084   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47085   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47086   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47087   	ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
47088   	ZEND_NULL_HANDLER,
47089   	ZEND_NULL_HANDLER,
47090   	ZEND_NULL_HANDLER,
47091   	ZEND_NULL_HANDLER,
47092   	ZEND_NULL_HANDLER,
47093   	ZEND_JMPZ_SPEC_CV_HANDLER,
47094   	ZEND_JMPZ_SPEC_CV_HANDLER,
47095   	ZEND_JMPZ_SPEC_CV_HANDLER,
47096   	ZEND_JMPZ_SPEC_CV_HANDLER,
47097   	ZEND_JMPZ_SPEC_CV_HANDLER,
47098   	ZEND_JMPNZ_SPEC_CONST_HANDLER,
47099   	ZEND_JMPNZ_SPEC_CONST_HANDLER,
47100   	ZEND_JMPNZ_SPEC_CONST_HANDLER,
47101   	ZEND_JMPNZ_SPEC_CONST_HANDLER,
47102   	ZEND_JMPNZ_SPEC_CONST_HANDLER,
47103   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47104   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47105   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47106   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47107   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47108   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47109   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47110   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47111   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47112   	ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
47113   	ZEND_NULL_HANDLER,
47114   	ZEND_NULL_HANDLER,
47115   	ZEND_NULL_HANDLER,
47116   	ZEND_NULL_HANDLER,
47117   	ZEND_NULL_HANDLER,
47118   	ZEND_JMPNZ_SPEC_CV_HANDLER,
47119   	ZEND_JMPNZ_SPEC_CV_HANDLER,
47120   	ZEND_JMPNZ_SPEC_CV_HANDLER,
47121   	ZEND_JMPNZ_SPEC_CV_HANDLER,
47122   	ZEND_JMPNZ_SPEC_CV_HANDLER,
47123   	ZEND_JMPZNZ_SPEC_CONST_HANDLER,
47124   	ZEND_JMPZNZ_SPEC_CONST_HANDLER,
47125   	ZEND_JMPZNZ_SPEC_CONST_HANDLER,
47126   	ZEND_JMPZNZ_SPEC_CONST_HANDLER,
47127   	ZEND_JMPZNZ_SPEC_CONST_HANDLER,
47128   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47129   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47130   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47131   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47132   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47133   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47134   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47135   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47136   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47137   	ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
47138   	ZEND_NULL_HANDLER,
47139   	ZEND_NULL_HANDLER,
47140   	ZEND_NULL_HANDLER,
47141   	ZEND_NULL_HANDLER,
47142   	ZEND_NULL_HANDLER,
47143   	ZEND_JMPZNZ_SPEC_CV_HANDLER,
47144   	ZEND_JMPZNZ_SPEC_CV_HANDLER,
47145   	ZEND_JMPZNZ_SPEC_CV_HANDLER,
47146   	ZEND_JMPZNZ_SPEC_CV_HANDLER,
47147   	ZEND_JMPZNZ_SPEC_CV_HANDLER,
47148   	ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
47149   	ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
47150   	ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
47151   	ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
47152   	ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
47153   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47154   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47155   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47156   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47157   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47158   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47159   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47160   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47161   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47162   	ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
47163   	ZEND_NULL_HANDLER,
47164   	ZEND_NULL_HANDLER,
47165   	ZEND_NULL_HANDLER,
47166   	ZEND_NULL_HANDLER,
47167   	ZEND_NULL_HANDLER,
47168   	ZEND_JMPZ_EX_SPEC_CV_HANDLER,
47169   	ZEND_JMPZ_EX_SPEC_CV_HANDLER,
47170   	ZEND_JMPZ_EX_SPEC_CV_HANDLER,
47171   	ZEND_JMPZ_EX_SPEC_CV_HANDLER,
47172   	ZEND_JMPZ_EX_SPEC_CV_HANDLER,
47173   	ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
47174   	ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
47175   	ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
47176   	ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
47177   	ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
47178   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47179   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47180   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47181   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47182   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47183   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47184   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47185   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47186   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47187   	ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
47188   	ZEND_NULL_HANDLER,
47189   	ZEND_NULL_HANDLER,
47190   	ZEND_NULL_HANDLER,
47191   	ZEND_NULL_HANDLER,
47192   	ZEND_NULL_HANDLER,
47193   	ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
47194   	ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
47195   	ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
47196   	ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
47197   	ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
47198   	ZEND_CASE_SPEC_CONST_CONST_HANDLER,
47199   	ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER,
47200   	ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER,
47201   	ZEND_NULL_HANDLER,
47202   	ZEND_CASE_SPEC_CONST_CV_HANDLER,
47203   	ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
47204   	ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
47205   	ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
47206   	ZEND_NULL_HANDLER,
47207   	ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
47208   	ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
47209   	ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
47210   	ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
47211   	ZEND_NULL_HANDLER,
47212   	ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
47213   	ZEND_NULL_HANDLER,
47214   	ZEND_NULL_HANDLER,
47215   	ZEND_NULL_HANDLER,
47216   	ZEND_NULL_HANDLER,
47217   	ZEND_NULL_HANDLER,
47218   	ZEND_CASE_SPEC_CV_CONST_HANDLER,
47219   	ZEND_CASE_SPEC_CV_TMPVAR_HANDLER,
47220   	ZEND_CASE_SPEC_CV_TMPVAR_HANDLER,
47221   	ZEND_NULL_HANDLER,
47222   	ZEND_CASE_SPEC_CV_CV_HANDLER,
47223   	ZEND_NULL_HANDLER,
47224   	ZEND_NULL_HANDLER,
47225   	ZEND_NULL_HANDLER,
47226   	ZEND_NULL_HANDLER,
47227   	ZEND_NULL_HANDLER,
47228   	ZEND_NULL_HANDLER,
47229   	ZEND_NULL_HANDLER,
47230   	ZEND_NULL_HANDLER,
47231   	ZEND_NULL_HANDLER,
47232   	ZEND_NULL_HANDLER,
47233   	ZEND_NULL_HANDLER,
47234   	ZEND_NULL_HANDLER,
47235   	ZEND_NULL_HANDLER,
47236   	ZEND_NULL_HANDLER,
47237   	ZEND_NULL_HANDLER,
47238   	ZEND_NULL_HANDLER,
47239   	ZEND_NULL_HANDLER,
47240   	ZEND_NULL_HANDLER,
47241   	ZEND_NULL_HANDLER,
47242   	ZEND_NULL_HANDLER,
47243   	ZEND_NULL_HANDLER,
47244   	ZEND_NULL_HANDLER,
47245   	ZEND_NULL_HANDLER,
47246   	ZEND_NULL_HANDLER,
47247   	ZEND_NULL_HANDLER,
47248   	ZEND_NULL_HANDLER,
47249   	ZEND_NULL_HANDLER,
47250   	ZEND_NULL_HANDLER,
47251   	ZEND_NULL_HANDLER,
47252   	ZEND_NULL_HANDLER,
47253   	ZEND_NULL_HANDLER,
47254   	ZEND_NULL_HANDLER,
47255   	ZEND_NULL_HANDLER,
47256   	ZEND_NULL_HANDLER,
47257   	ZEND_NULL_HANDLER,
47258   	ZEND_NULL_HANDLER,
47259   	ZEND_NULL_HANDLER,
47260   	ZEND_NULL_HANDLER,
47261   	ZEND_NULL_HANDLER,
47262   	ZEND_NULL_HANDLER,
47263   	ZEND_NULL_HANDLER,
47264   	ZEND_NULL_HANDLER,
47265   	ZEND_NULL_HANDLER,
47266   	ZEND_NULL_HANDLER,
47267   	ZEND_NULL_HANDLER,
47268   	ZEND_NULL_HANDLER,
47269   	ZEND_NULL_HANDLER,
47270   	ZEND_NULL_HANDLER,
47271   	ZEND_NULL_HANDLER,
47272   	ZEND_NULL_HANDLER,
47273   	ZEND_NULL_HANDLER,
47274   	ZEND_NULL_HANDLER,
47275   	ZEND_NULL_HANDLER,
47276   	ZEND_NULL_HANDLER,
47277   	ZEND_NULL_HANDLER,
47278   	ZEND_NULL_HANDLER,
47279   	ZEND_NULL_HANDLER,
47280   	ZEND_NULL_HANDLER,
47281   	ZEND_NULL_HANDLER,
47282   	ZEND_NULL_HANDLER,
47283   	ZEND_NULL_HANDLER,
47284   	ZEND_NULL_HANDLER,
47285   	ZEND_NULL_HANDLER,
47286   	ZEND_NULL_HANDLER,
47287   	ZEND_NULL_HANDLER,
47288   	ZEND_NULL_HANDLER,
47289   	ZEND_NULL_HANDLER,
47290   	ZEND_NULL_HANDLER,
47291   	ZEND_NULL_HANDLER,
47292   	ZEND_NULL_HANDLER,
47293   	ZEND_NULL_HANDLER,
47294   	ZEND_NULL_HANDLER,
47295   	ZEND_NULL_HANDLER,
47296   	ZEND_NULL_HANDLER,
47297   	ZEND_NULL_HANDLER,
47298   	ZEND_BOOL_SPEC_CONST_HANDLER,
47299   	ZEND_BOOL_SPEC_CONST_HANDLER,
47300   	ZEND_BOOL_SPEC_CONST_HANDLER,
47301   	ZEND_BOOL_SPEC_CONST_HANDLER,
47302   	ZEND_BOOL_SPEC_CONST_HANDLER,
47303   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47304   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47305   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47306   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47307   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47308   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47309   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47310   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47311   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47312   	ZEND_BOOL_SPEC_TMPVAR_HANDLER,
47313   	ZEND_NULL_HANDLER,
47314   	ZEND_NULL_HANDLER,
47315   	ZEND_NULL_HANDLER,
47316   	ZEND_NULL_HANDLER,
47317   	ZEND_NULL_HANDLER,
47318   	ZEND_BOOL_SPEC_CV_HANDLER,
47319   	ZEND_BOOL_SPEC_CV_HANDLER,
47320   	ZEND_BOOL_SPEC_CV_HANDLER,
47321   	ZEND_BOOL_SPEC_CV_HANDLER,
47322   	ZEND_BOOL_SPEC_CV_HANDLER,
47323   	ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
47324   	ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
47325   	ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
47326   	ZEND_NULL_HANDLER,
47327   	ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
47328   	ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
47329   	ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
47330   	ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
47331   	ZEND_NULL_HANDLER,
47332   	ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
47333   	ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
47334   	ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
47335   	ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
47336   	ZEND_NULL_HANDLER,
47337   	ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
47338   	ZEND_NULL_HANDLER,
47339   	ZEND_NULL_HANDLER,
47340   	ZEND_NULL_HANDLER,
47341   	ZEND_NULL_HANDLER,
47342   	ZEND_NULL_HANDLER,
47343   	ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
47344   	ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
47345   	ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
47346   	ZEND_NULL_HANDLER,
47347   	ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
47348   	ZEND_NULL_HANDLER,
47349   	ZEND_NULL_HANDLER,
47350   	ZEND_NULL_HANDLER,
47351   	ZEND_NULL_HANDLER,
47352   	ZEND_NULL_HANDLER,
47353   	ZEND_NULL_HANDLER,
47354   	ZEND_NULL_HANDLER,
47355   	ZEND_NULL_HANDLER,
47356   	ZEND_NULL_HANDLER,
47357   	ZEND_NULL_HANDLER,
47358   	ZEND_NULL_HANDLER,
47359   	ZEND_NULL_HANDLER,
47360   	ZEND_NULL_HANDLER,
47361   	ZEND_NULL_HANDLER,
47362   	ZEND_NULL_HANDLER,
47363   	ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
47364   	ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
47365   	ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
47366   	ZEND_NULL_HANDLER,
47367   	ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
47368   	ZEND_NULL_HANDLER,
47369   	ZEND_NULL_HANDLER,
47370   	ZEND_NULL_HANDLER,
47371   	ZEND_NULL_HANDLER,
47372   	ZEND_NULL_HANDLER,
47373   	ZEND_NULL_HANDLER,
47374   	ZEND_NULL_HANDLER,
47375   	ZEND_NULL_HANDLER,
47376   	ZEND_NULL_HANDLER,
47377   	ZEND_NULL_HANDLER,
47378   	ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
47379   	ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
47380   	ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
47381   	ZEND_NULL_HANDLER,
47382   	ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
47383   	ZEND_NULL_HANDLER,
47384   	ZEND_NULL_HANDLER,
47385   	ZEND_NULL_HANDLER,
47386   	ZEND_NULL_HANDLER,
47387   	ZEND_NULL_HANDLER,
47388   	ZEND_NULL_HANDLER,
47389   	ZEND_NULL_HANDLER,
47390   	ZEND_NULL_HANDLER,
47391   	ZEND_NULL_HANDLER,
47392   	ZEND_NULL_HANDLER,
47393   	ZEND_NULL_HANDLER,
47394   	ZEND_NULL_HANDLER,
47395   	ZEND_NULL_HANDLER,
47396   	ZEND_NULL_HANDLER,
47397   	ZEND_NULL_HANDLER,
47398   	ZEND_NULL_HANDLER,
47399   	ZEND_NULL_HANDLER,
47400   	ZEND_NULL_HANDLER,
47401   	ZEND_NULL_HANDLER,
47402   	ZEND_NULL_HANDLER,
47403   	ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
47404   	ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
47405   	ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
47406   	ZEND_NULL_HANDLER,
47407   	ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
47408   	ZEND_NULL_HANDLER,
47409   	ZEND_NULL_HANDLER,
47410   	ZEND_NULL_HANDLER,
47411   	ZEND_NULL_HANDLER,
47412   	ZEND_NULL_HANDLER,
47413   	ZEND_NULL_HANDLER,
47414   	ZEND_NULL_HANDLER,
47415   	ZEND_NULL_HANDLER,
47416   	ZEND_NULL_HANDLER,
47417   	ZEND_NULL_HANDLER,
47418   	ZEND_NULL_HANDLER,
47419   	ZEND_NULL_HANDLER,
47420   	ZEND_NULL_HANDLER,
47421   	ZEND_NULL_HANDLER,
47422   	ZEND_NULL_HANDLER,
47423   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47424   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47425   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47426   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47427   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47428   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47429   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47430   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47431   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47432   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47433   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47434   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47435   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47436   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47437   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47438   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47439   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47440   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47441   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47442   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47443   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47444   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47445   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47446   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47447   	ZEND_BEGIN_SILENCE_SPEC_HANDLER,
47448   	ZEND_NULL_HANDLER,
47449   	ZEND_NULL_HANDLER,
47450   	ZEND_NULL_HANDLER,
47451   	ZEND_NULL_HANDLER,
47452   	ZEND_NULL_HANDLER,
47453   	ZEND_END_SILENCE_SPEC_TMP_HANDLER,
47454   	ZEND_END_SILENCE_SPEC_TMP_HANDLER,
47455   	ZEND_END_SILENCE_SPEC_TMP_HANDLER,
47456   	ZEND_END_SILENCE_SPEC_TMP_HANDLER,
47457   	ZEND_END_SILENCE_SPEC_TMP_HANDLER,
47458   	ZEND_NULL_HANDLER,
47459   	ZEND_NULL_HANDLER,
47460   	ZEND_NULL_HANDLER,
47461   	ZEND_NULL_HANDLER,
47462   	ZEND_NULL_HANDLER,
47463   	ZEND_NULL_HANDLER,
47464   	ZEND_NULL_HANDLER,
47465   	ZEND_NULL_HANDLER,
47466   	ZEND_NULL_HANDLER,
47467   	ZEND_NULL_HANDLER,
47468   	ZEND_NULL_HANDLER,
47469   	ZEND_NULL_HANDLER,
47470   	ZEND_NULL_HANDLER,
47471   	ZEND_NULL_HANDLER,
47472   	ZEND_NULL_HANDLER,
47473   	ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47474   	ZEND_NULL_HANDLER,
47475   	ZEND_NULL_HANDLER,
47476   	ZEND_NULL_HANDLER,
47477   	ZEND_NULL_HANDLER,
47478   	ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47479   	ZEND_NULL_HANDLER,
47480   	ZEND_NULL_HANDLER,
47481   	ZEND_NULL_HANDLER,
47482   	ZEND_NULL_HANDLER,
47483   	ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47484   	ZEND_NULL_HANDLER,
47485   	ZEND_NULL_HANDLER,
47486   	ZEND_NULL_HANDLER,
47487   	ZEND_NULL_HANDLER,
47488   	ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47489   	ZEND_NULL_HANDLER,
47490   	ZEND_NULL_HANDLER,
47491   	ZEND_NULL_HANDLER,
47492   	ZEND_NULL_HANDLER,
47493   	ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47494   	ZEND_NULL_HANDLER,
47495   	ZEND_NULL_HANDLER,
47496   	ZEND_NULL_HANDLER,
47497   	ZEND_NULL_HANDLER,
47498   	ZEND_DO_FCALL_SPEC_HANDLER,
47499   	ZEND_DO_FCALL_SPEC_HANDLER,
47500   	ZEND_DO_FCALL_SPEC_HANDLER,
47501   	ZEND_DO_FCALL_SPEC_HANDLER,
47502   	ZEND_DO_FCALL_SPEC_HANDLER,
47503   	ZEND_DO_FCALL_SPEC_HANDLER,
47504   	ZEND_DO_FCALL_SPEC_HANDLER,
47505   	ZEND_DO_FCALL_SPEC_HANDLER,
47506   	ZEND_DO_FCALL_SPEC_HANDLER,
47507   	ZEND_DO_FCALL_SPEC_HANDLER,
47508   	ZEND_DO_FCALL_SPEC_HANDLER,
47509   	ZEND_DO_FCALL_SPEC_HANDLER,
47510   	ZEND_DO_FCALL_SPEC_HANDLER,
47511   	ZEND_DO_FCALL_SPEC_HANDLER,
47512   	ZEND_DO_FCALL_SPEC_HANDLER,
47513   	ZEND_DO_FCALL_SPEC_HANDLER,
47514   	ZEND_DO_FCALL_SPEC_HANDLER,
47515   	ZEND_DO_FCALL_SPEC_HANDLER,
47516   	ZEND_DO_FCALL_SPEC_HANDLER,
47517   	ZEND_DO_FCALL_SPEC_HANDLER,
47518   	ZEND_DO_FCALL_SPEC_HANDLER,
47519   	ZEND_DO_FCALL_SPEC_HANDLER,
47520   	ZEND_DO_FCALL_SPEC_HANDLER,
47521   	ZEND_DO_FCALL_SPEC_HANDLER,
47522   	ZEND_DO_FCALL_SPEC_HANDLER,
47523   	ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
47524   	ZEND_NULL_HANDLER,
47525   	ZEND_NULL_HANDLER,
47526   	ZEND_NULL_HANDLER,
47527   	ZEND_NULL_HANDLER,
47528   	ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
47529   	ZEND_NULL_HANDLER,
47530   	ZEND_NULL_HANDLER,
47531   	ZEND_NULL_HANDLER,
47532   	ZEND_NULL_HANDLER,
47533   	ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
47534   	ZEND_NULL_HANDLER,
47535   	ZEND_NULL_HANDLER,
47536   	ZEND_NULL_HANDLER,
47537   	ZEND_NULL_HANDLER,
47538   	ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
47539   	ZEND_NULL_HANDLER,
47540   	ZEND_NULL_HANDLER,
47541   	ZEND_NULL_HANDLER,
47542   	ZEND_NULL_HANDLER,
47543   	ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
47544   	ZEND_NULL_HANDLER,
47545   	ZEND_NULL_HANDLER,
47546   	ZEND_NULL_HANDLER,
47547   	ZEND_NULL_HANDLER,
47548   	ZEND_RETURN_SPEC_CONST_HANDLER,
47549   	ZEND_RETURN_SPEC_CONST_HANDLER,
47550   	ZEND_RETURN_SPEC_CONST_HANDLER,
47551   	ZEND_RETURN_SPEC_CONST_HANDLER,
47552   	ZEND_RETURN_SPEC_CONST_HANDLER,
47553   	ZEND_RETURN_SPEC_TMP_HANDLER,
47554   	ZEND_RETURN_SPEC_TMP_HANDLER,
47555   	ZEND_RETURN_SPEC_TMP_HANDLER,
47556   	ZEND_RETURN_SPEC_TMP_HANDLER,
47557   	ZEND_RETURN_SPEC_TMP_HANDLER,
47558   	ZEND_RETURN_SPEC_VAR_HANDLER,
47559   	ZEND_RETURN_SPEC_VAR_HANDLER,
47560   	ZEND_RETURN_SPEC_VAR_HANDLER,
47561   	ZEND_RETURN_SPEC_VAR_HANDLER,
47562   	ZEND_RETURN_SPEC_VAR_HANDLER,
47563   	ZEND_NULL_HANDLER,
47564   	ZEND_NULL_HANDLER,
47565   	ZEND_NULL_HANDLER,
47566   	ZEND_NULL_HANDLER,
47567   	ZEND_NULL_HANDLER,
47568   	ZEND_RETURN_SPEC_CV_HANDLER,
47569   	ZEND_RETURN_SPEC_CV_HANDLER,
47570   	ZEND_RETURN_SPEC_CV_HANDLER,
47571   	ZEND_RETURN_SPEC_CV_HANDLER,
47572   	ZEND_RETURN_SPEC_CV_HANDLER,
47573   	ZEND_RECV_SPEC_HANDLER,
47574   	ZEND_RECV_SPEC_HANDLER,
47575   	ZEND_RECV_SPEC_HANDLER,
47576   	ZEND_RECV_SPEC_HANDLER,
47577   	ZEND_RECV_SPEC_HANDLER,
47578   	ZEND_RECV_SPEC_HANDLER,
47579   	ZEND_RECV_SPEC_HANDLER,
47580   	ZEND_RECV_SPEC_HANDLER,
47581   	ZEND_RECV_SPEC_HANDLER,
47582   	ZEND_RECV_SPEC_HANDLER,
47583   	ZEND_RECV_SPEC_HANDLER,
47584   	ZEND_RECV_SPEC_HANDLER,
47585   	ZEND_RECV_SPEC_HANDLER,
47586   	ZEND_RECV_SPEC_HANDLER,
47587   	ZEND_RECV_SPEC_HANDLER,
47588   	ZEND_RECV_SPEC_HANDLER,
47589   	ZEND_RECV_SPEC_HANDLER,
47590   	ZEND_RECV_SPEC_HANDLER,
47591   	ZEND_RECV_SPEC_HANDLER,
47592   	ZEND_RECV_SPEC_HANDLER,
47593   	ZEND_RECV_SPEC_HANDLER,
47594   	ZEND_RECV_SPEC_HANDLER,
47595   	ZEND_RECV_SPEC_HANDLER,
47596   	ZEND_RECV_SPEC_HANDLER,
47597   	ZEND_RECV_SPEC_HANDLER,
47598   	ZEND_RECV_INIT_SPEC_CONST_HANDLER,
47599   	ZEND_NULL_HANDLER,
47600   	ZEND_NULL_HANDLER,
47601   	ZEND_NULL_HANDLER,
47602   	ZEND_NULL_HANDLER,
47603   	ZEND_RECV_INIT_SPEC_CONST_HANDLER,
47604   	ZEND_NULL_HANDLER,
47605   	ZEND_NULL_HANDLER,
47606   	ZEND_NULL_HANDLER,
47607   	ZEND_NULL_HANDLER,
47608   	ZEND_RECV_INIT_SPEC_CONST_HANDLER,
47609   	ZEND_NULL_HANDLER,
47610   	ZEND_NULL_HANDLER,
47611   	ZEND_NULL_HANDLER,
47612   	ZEND_NULL_HANDLER,
47613   	ZEND_RECV_INIT_SPEC_CONST_HANDLER,
47614   	ZEND_NULL_HANDLER,
47615   	ZEND_NULL_HANDLER,
47616   	ZEND_NULL_HANDLER,
47617   	ZEND_NULL_HANDLER,
47618   	ZEND_RECV_INIT_SPEC_CONST_HANDLER,
47619   	ZEND_NULL_HANDLER,
47620   	ZEND_NULL_HANDLER,
47621   	ZEND_NULL_HANDLER,
47622   	ZEND_NULL_HANDLER,
47623   	ZEND_SEND_VAL_SPEC_CONST_HANDLER,
47624   	ZEND_SEND_VAL_SPEC_CONST_HANDLER,
47625   	ZEND_SEND_VAL_SPEC_CONST_HANDLER,
47626   	ZEND_SEND_VAL_SPEC_CONST_HANDLER,
47627   	ZEND_SEND_VAL_SPEC_CONST_HANDLER,
47628   	ZEND_SEND_VAL_SPEC_TMP_HANDLER,
47629   	ZEND_SEND_VAL_SPEC_TMP_HANDLER,
47630   	ZEND_SEND_VAL_SPEC_TMP_HANDLER,
47631   	ZEND_SEND_VAL_SPEC_TMP_HANDLER,
47632   	ZEND_SEND_VAL_SPEC_TMP_HANDLER,
47633   	ZEND_NULL_HANDLER,
47634   	ZEND_NULL_HANDLER,
47635   	ZEND_NULL_HANDLER,
47636   	ZEND_NULL_HANDLER,
47637   	ZEND_NULL_HANDLER,
47638   	ZEND_NULL_HANDLER,
47639   	ZEND_NULL_HANDLER,
47640   	ZEND_NULL_HANDLER,
47641   	ZEND_NULL_HANDLER,
47642   	ZEND_NULL_HANDLER,
47643   	ZEND_NULL_HANDLER,
47644   	ZEND_NULL_HANDLER,
47645   	ZEND_NULL_HANDLER,
47646   	ZEND_NULL_HANDLER,
47647   	ZEND_NULL_HANDLER,
47648   	ZEND_NULL_HANDLER,
47649   	ZEND_NULL_HANDLER,
47650   	ZEND_NULL_HANDLER,
47651   	ZEND_NULL_HANDLER,
47652   	ZEND_NULL_HANDLER,
47653   	ZEND_NULL_HANDLER,
47654   	ZEND_NULL_HANDLER,
47655   	ZEND_NULL_HANDLER,
47656   	ZEND_NULL_HANDLER,
47657   	ZEND_NULL_HANDLER,
47658   	ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
47659   	ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
47660   	ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
47661   	ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
47662   	ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
47663   	ZEND_NULL_HANDLER,
47664   	ZEND_NULL_HANDLER,
47665   	ZEND_NULL_HANDLER,
47666   	ZEND_NULL_HANDLER,
47667   	ZEND_NULL_HANDLER,
47668   	ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
47669   	ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
47670   	ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
47671   	ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
47672   	ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
47673   	ZEND_NULL_HANDLER,
47674   	ZEND_NULL_HANDLER,
47675   	ZEND_NULL_HANDLER,
47676   	ZEND_NULL_HANDLER,
47677   	ZEND_NULL_HANDLER,
47678   	ZEND_NULL_HANDLER,
47679   	ZEND_NULL_HANDLER,
47680   	ZEND_NULL_HANDLER,
47681   	ZEND_NULL_HANDLER,
47682   	ZEND_NULL_HANDLER,
47683   	ZEND_SEND_REF_SPEC_VAR_HANDLER,
47684   	ZEND_SEND_REF_SPEC_VAR_HANDLER,
47685   	ZEND_SEND_REF_SPEC_VAR_HANDLER,
47686   	ZEND_SEND_REF_SPEC_VAR_HANDLER,
47687   	ZEND_SEND_REF_SPEC_VAR_HANDLER,
47688   	ZEND_NULL_HANDLER,
47689   	ZEND_NULL_HANDLER,
47690   	ZEND_NULL_HANDLER,
47691   	ZEND_NULL_HANDLER,
47692   	ZEND_NULL_HANDLER,
47693   	ZEND_SEND_REF_SPEC_CV_HANDLER,
47694   	ZEND_SEND_REF_SPEC_CV_HANDLER,
47695   	ZEND_SEND_REF_SPEC_CV_HANDLER,
47696   	ZEND_SEND_REF_SPEC_CV_HANDLER,
47697   	ZEND_SEND_REF_SPEC_CV_HANDLER,
47698   	ZEND_NEW_SPEC_CONST_HANDLER,
47699   	ZEND_NEW_SPEC_CONST_HANDLER,
47700   	ZEND_NEW_SPEC_CONST_HANDLER,
47701   	ZEND_NEW_SPEC_CONST_HANDLER,
47702   	ZEND_NEW_SPEC_CONST_HANDLER,
47703   	ZEND_NULL_HANDLER,
47704   	ZEND_NULL_HANDLER,
47705   	ZEND_NULL_HANDLER,
47706   	ZEND_NULL_HANDLER,
47707   	ZEND_NULL_HANDLER,
47708   	ZEND_NEW_SPEC_VAR_HANDLER,
47709   	ZEND_NEW_SPEC_VAR_HANDLER,
47710   	ZEND_NEW_SPEC_VAR_HANDLER,
47711   	ZEND_NEW_SPEC_VAR_HANDLER,
47712   	ZEND_NEW_SPEC_VAR_HANDLER,
47713   	ZEND_NULL_HANDLER,
47714   	ZEND_NULL_HANDLER,
47715   	ZEND_NULL_HANDLER,
47716   	ZEND_NULL_HANDLER,
47717   	ZEND_NULL_HANDLER,
47718   	ZEND_NULL_HANDLER,
47719   	ZEND_NULL_HANDLER,
47720   	ZEND_NULL_HANDLER,
47721   	ZEND_NULL_HANDLER,
47722   	ZEND_NULL_HANDLER,
47723   	ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47724   	ZEND_NULL_HANDLER,
47725   	ZEND_NULL_HANDLER,
47726   	ZEND_NULL_HANDLER,
47727   	ZEND_NULL_HANDLER,
47728   	ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47729   	ZEND_NULL_HANDLER,
47730   	ZEND_NULL_HANDLER,
47731   	ZEND_NULL_HANDLER,
47732   	ZEND_NULL_HANDLER,
47733   	ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47734   	ZEND_NULL_HANDLER,
47735   	ZEND_NULL_HANDLER,
47736   	ZEND_NULL_HANDLER,
47737   	ZEND_NULL_HANDLER,
47738   	ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47739   	ZEND_NULL_HANDLER,
47740   	ZEND_NULL_HANDLER,
47741   	ZEND_NULL_HANDLER,
47742   	ZEND_NULL_HANDLER,
47743   	ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
47744   	ZEND_NULL_HANDLER,
47745   	ZEND_NULL_HANDLER,
47746   	ZEND_NULL_HANDLER,
47747   	ZEND_NULL_HANDLER,
47748   	ZEND_NULL_HANDLER,
47749   	ZEND_NULL_HANDLER,
47750   	ZEND_NULL_HANDLER,
47751   	ZEND_NULL_HANDLER,
47752   	ZEND_NULL_HANDLER,
47753   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47754   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47755   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47756   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47757   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47758   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47759   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47760   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47761   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47762   	ZEND_FREE_SPEC_TMPVAR_HANDLER,
47763   	ZEND_NULL_HANDLER,
47764   	ZEND_NULL_HANDLER,
47765   	ZEND_NULL_HANDLER,
47766   	ZEND_NULL_HANDLER,
47767   	ZEND_NULL_HANDLER,
47768   	ZEND_NULL_HANDLER,
47769   	ZEND_NULL_HANDLER,
47770   	ZEND_NULL_HANDLER,
47771   	ZEND_NULL_HANDLER,
47772   	ZEND_NULL_HANDLER,
47773   	ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
47774   	ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
47775   	ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
47776   	ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
47777   	ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
47778   	ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
47779   	ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
47780   	ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
47781   	ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
47782   	ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
47783   	ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
47784   	ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
47785   	ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
47786   	ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
47787   	ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
47788   	ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
47789   	ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
47790   	ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
47791   	ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
47792   	ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
47793   	ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
47794   	ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
47795   	ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
47796   	ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
47797   	ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
47798   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
47799   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
47800   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
47801   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
47802   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
47803   	ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
47804   	ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
47805   	ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
47806   	ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
47807   	ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
47808   	ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
47809   	ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
47810   	ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
47811   	ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
47812   	ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
47813   	ZEND_NULL_HANDLER,
47814   	ZEND_NULL_HANDLER,
47815   	ZEND_NULL_HANDLER,
47816   	ZEND_NULL_HANDLER,
47817   	ZEND_NULL_HANDLER,
47818   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
47819   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
47820   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
47821   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
47822   	ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
47823   	ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
47824   	ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
47825   	ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
47826   	ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
47827   	ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
47828   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47829   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47830   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47831   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47832   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47833   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47834   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47835   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47836   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47837   	ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
47838   	ZEND_NULL_HANDLER,
47839   	ZEND_NULL_HANDLER,
47840   	ZEND_NULL_HANDLER,
47841   	ZEND_NULL_HANDLER,
47842   	ZEND_NULL_HANDLER,
47843   	ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
47844   	ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
47845   	ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
47846   	ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
47847   	ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
47848   	ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER,
47849   	ZEND_NULL_HANDLER,
47850   	ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER,
47851   	ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
47852   	ZEND_NULL_HANDLER,
47853   	ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HANDLER,
47854   	ZEND_NULL_HANDLER,
47855   	ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HANDLER,
47856   	ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
47857   	ZEND_NULL_HANDLER,
47858   	ZEND_UNSET_VAR_SPEC_TMPVAR_CONST_HANDLER,
47859   	ZEND_NULL_HANDLER,
47860   	ZEND_UNSET_VAR_SPEC_TMPVAR_VAR_HANDLER,
47861   	ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
47862   	ZEND_NULL_HANDLER,
47863   	ZEND_NULL_HANDLER,
47864   	ZEND_NULL_HANDLER,
47865   	ZEND_NULL_HANDLER,
47866   	ZEND_NULL_HANDLER,
47867   	ZEND_NULL_HANDLER,
47868   	ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER,
47869   	ZEND_NULL_HANDLER,
47870   	ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER,
47871   	ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
47872   	ZEND_NULL_HANDLER,
47873   	ZEND_NULL_HANDLER,
47874   	ZEND_NULL_HANDLER,
47875   	ZEND_NULL_HANDLER,
47876   	ZEND_NULL_HANDLER,
47877   	ZEND_NULL_HANDLER,
47878   	ZEND_NULL_HANDLER,
47879   	ZEND_NULL_HANDLER,
47880   	ZEND_NULL_HANDLER,
47881   	ZEND_NULL_HANDLER,
47882   	ZEND_NULL_HANDLER,
47883   	ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
47884   	ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
47885   	ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
47886   	ZEND_NULL_HANDLER,
47887   	ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
47888   	ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER,
47889   	ZEND_UNSET_DIM_SPEC_UNUSED_TMPVAR_HANDLER,
47890   	ZEND_UNSET_DIM_SPEC_UNUSED_TMPVAR_HANDLER,
47891   	ZEND_NULL_HANDLER,
47892   	ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER,
47893   	ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
47894   	ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
47895   	ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
47896   	ZEND_NULL_HANDLER,
47897   	ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
47898   	ZEND_NULL_HANDLER,
47899   	ZEND_NULL_HANDLER,
47900   	ZEND_NULL_HANDLER,
47901   	ZEND_NULL_HANDLER,
47902   	ZEND_NULL_HANDLER,
47903   	ZEND_NULL_HANDLER,
47904   	ZEND_NULL_HANDLER,
47905   	ZEND_NULL_HANDLER,
47906   	ZEND_NULL_HANDLER,
47907   	ZEND_NULL_HANDLER,
47908   	ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
47909   	ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
47910   	ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
47911   	ZEND_NULL_HANDLER,
47912   	ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
47913   	ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
47914   	ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
47915   	ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
47916   	ZEND_NULL_HANDLER,
47917   	ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
47918   	ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
47919   	ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
47920   	ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
47921   	ZEND_NULL_HANDLER,
47922   	ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
47923   	ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
47924   	ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
47925   	ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
47926   	ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
47927   	ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
47928   	ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
47929   	ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
47930   	ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
47931   	ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
47932   	ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
47933   	ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
47934   	ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
47935   	ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
47936   	ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
47937   	ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
47938   	ZEND_NULL_HANDLER,
47939   	ZEND_NULL_HANDLER,
47940   	ZEND_NULL_HANDLER,
47941   	ZEND_NULL_HANDLER,
47942   	ZEND_NULL_HANDLER,
47943   	ZEND_FE_RESET_R_SPEC_CV_HANDLER,
47944   	ZEND_FE_RESET_R_SPEC_CV_HANDLER,
47945   	ZEND_FE_RESET_R_SPEC_CV_HANDLER,
47946   	ZEND_FE_RESET_R_SPEC_CV_HANDLER,
47947   	ZEND_FE_RESET_R_SPEC_CV_HANDLER,
47948   	ZEND_NULL_HANDLER,
47949   	ZEND_NULL_HANDLER,
47950   	ZEND_NULL_HANDLER,
47951   	ZEND_NULL_HANDLER,
47952   	ZEND_NULL_HANDLER,
47953   	ZEND_NULL_HANDLER,
47954   	ZEND_NULL_HANDLER,
47955   	ZEND_NULL_HANDLER,
47956   	ZEND_NULL_HANDLER,
47957   	ZEND_NULL_HANDLER,
47958   	ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
47959   	ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
47960   	ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
47961   	ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
47962   	ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
47963   	ZEND_NULL_HANDLER,
47964   	ZEND_NULL_HANDLER,
47965   	ZEND_NULL_HANDLER,
47966   	ZEND_NULL_HANDLER,
47967   	ZEND_NULL_HANDLER,
47968   	ZEND_NULL_HANDLER,
47969   	ZEND_NULL_HANDLER,
47970   	ZEND_NULL_HANDLER,
47971   	ZEND_NULL_HANDLER,
47972   	ZEND_NULL_HANDLER,
47973   	ZEND_EXIT_SPEC_CONST_HANDLER,
47974   	ZEND_EXIT_SPEC_CONST_HANDLER,
47975   	ZEND_EXIT_SPEC_CONST_HANDLER,
47976   	ZEND_EXIT_SPEC_CONST_HANDLER,
47977   	ZEND_EXIT_SPEC_CONST_HANDLER,
47978   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47979   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47980   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47981   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47982   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47983   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47984   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47985   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47986   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47987   	ZEND_EXIT_SPEC_TMPVAR_HANDLER,
47988   	ZEND_EXIT_SPEC_UNUSED_HANDLER,
47989   	ZEND_EXIT_SPEC_UNUSED_HANDLER,
47990   	ZEND_EXIT_SPEC_UNUSED_HANDLER,
47991   	ZEND_EXIT_SPEC_UNUSED_HANDLER,
47992   	ZEND_EXIT_SPEC_UNUSED_HANDLER,
47993   	ZEND_EXIT_SPEC_CV_HANDLER,
47994   	ZEND_EXIT_SPEC_CV_HANDLER,
47995   	ZEND_EXIT_SPEC_CV_HANDLER,
47996   	ZEND_EXIT_SPEC_CV_HANDLER,
47997   	ZEND_EXIT_SPEC_CV_HANDLER,
47998   	ZEND_FETCH_R_SPEC_CONST_CONST_HANDLER,
47999   	ZEND_NULL_HANDLER,
48000   	ZEND_FETCH_R_SPEC_CONST_VAR_HANDLER,
48001   	ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
48002   	ZEND_NULL_HANDLER,
48003   	ZEND_FETCH_R_SPEC_TMPVAR_CONST_HANDLER,
48004   	ZEND_NULL_HANDLER,
48005   	ZEND_FETCH_R_SPEC_TMPVAR_VAR_HANDLER,
48006   	ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
48007   	ZEND_NULL_HANDLER,
48008   	ZEND_FETCH_R_SPEC_TMPVAR_CONST_HANDLER,
48009   	ZEND_NULL_HANDLER,
48010   	ZEND_FETCH_R_SPEC_TMPVAR_VAR_HANDLER,
48011   	ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
48012   	ZEND_NULL_HANDLER,
48013   	ZEND_NULL_HANDLER,
48014   	ZEND_NULL_HANDLER,
48015   	ZEND_NULL_HANDLER,
48016   	ZEND_NULL_HANDLER,
48017   	ZEND_NULL_HANDLER,
48018   	ZEND_FETCH_R_SPEC_CV_CONST_HANDLER,
48019   	ZEND_NULL_HANDLER,
48020   	ZEND_FETCH_R_SPEC_CV_VAR_HANDLER,
48021   	ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
48022   	ZEND_NULL_HANDLER,
48023   	ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
48024   	ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
48025   	ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
48026   	ZEND_NULL_HANDLER,
48027   	ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
48028   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
48029   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
48030   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
48031   	ZEND_NULL_HANDLER,
48032   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
48033   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
48034   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
48035   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
48036   	ZEND_NULL_HANDLER,
48037   	ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
48038   	ZEND_NULL_HANDLER,
48039   	ZEND_NULL_HANDLER,
48040   	ZEND_NULL_HANDLER,
48041   	ZEND_NULL_HANDLER,
48042   	ZEND_NULL_HANDLER,
48043   	ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
48044   	ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
48045   	ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
48046   	ZEND_NULL_HANDLER,
48047   	ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
48048   	ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
48049   	ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
48050   	ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
48051   	ZEND_NULL_HANDLER,
48052   	ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
48053   	ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER,
48054   	ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER,
48055   	ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER,
48056   	ZEND_NULL_HANDLER,
48057   	ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER,
48058   	ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER,
48059   	ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER,
48060   	ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER,
48061   	ZEND_NULL_HANDLER,
48062   	ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER,
48063   	ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
48064   	ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
48065   	ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
48066   	ZEND_NULL_HANDLER,
48067   	ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
48068   	ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
48069   	ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
48070   	ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
48071   	ZEND_NULL_HANDLER,
48072   	ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
48073   	ZEND_FETCH_W_SPEC_CONST_CONST_HANDLER,
48074   	ZEND_NULL_HANDLER,
48075   	ZEND_FETCH_W_SPEC_CONST_VAR_HANDLER,
48076   	ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
48077   	ZEND_NULL_HANDLER,
48078   	ZEND_FETCH_W_SPEC_TMPVAR_CONST_HANDLER,
48079   	ZEND_NULL_HANDLER,
48080   	ZEND_FETCH_W_SPEC_TMPVAR_VAR_HANDLER,
48081   	ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
48082   	ZEND_NULL_HANDLER,
48083   	ZEND_FETCH_W_SPEC_TMPVAR_CONST_HANDLER,
48084   	ZEND_NULL_HANDLER,
48085   	ZEND_FETCH_W_SPEC_TMPVAR_VAR_HANDLER,
48086   	ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
48087   	ZEND_NULL_HANDLER,
48088   	ZEND_NULL_HANDLER,
48089   	ZEND_NULL_HANDLER,
48090   	ZEND_NULL_HANDLER,
48091   	ZEND_NULL_HANDLER,
48092   	ZEND_NULL_HANDLER,
48093   	ZEND_FETCH_W_SPEC_CV_CONST_HANDLER,
48094   	ZEND_NULL_HANDLER,
48095   	ZEND_FETCH_W_SPEC_CV_VAR_HANDLER,
48096   	ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
48097   	ZEND_NULL_HANDLER,
48098   	ZEND_NULL_HANDLER,
48099   	ZEND_NULL_HANDLER,
48100   	ZEND_NULL_HANDLER,
48101   	ZEND_NULL_HANDLER,
48102   	ZEND_NULL_HANDLER,
48103   	ZEND_NULL_HANDLER,
48104   	ZEND_NULL_HANDLER,
48105   	ZEND_NULL_HANDLER,
48106   	ZEND_NULL_HANDLER,
48107   	ZEND_NULL_HANDLER,
48108   	ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
48109   	ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
48110   	ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
48111   	ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
48112   	ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
48113   	ZEND_NULL_HANDLER,
48114   	ZEND_NULL_HANDLER,
48115   	ZEND_NULL_HANDLER,
48116   	ZEND_NULL_HANDLER,
48117   	ZEND_NULL_HANDLER,
48118   	ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
48119   	ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
48120   	ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
48121   	ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
48122   	ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
48123   	ZEND_NULL_HANDLER,
48124   	ZEND_NULL_HANDLER,
48125   	ZEND_NULL_HANDLER,
48126   	ZEND_NULL_HANDLER,
48127   	ZEND_NULL_HANDLER,
48128   	ZEND_NULL_HANDLER,
48129   	ZEND_NULL_HANDLER,
48130   	ZEND_NULL_HANDLER,
48131   	ZEND_NULL_HANDLER,
48132   	ZEND_NULL_HANDLER,
48133   	ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
48134   	ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
48135   	ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
48136   	ZEND_NULL_HANDLER,
48137   	ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
48138   	ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
48139   	ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
48140   	ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
48141   	ZEND_NULL_HANDLER,
48142   	ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
48143   	ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
48144   	ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
48145   	ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
48146   	ZEND_NULL_HANDLER,
48147   	ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
48148   	ZEND_FETCH_RW_SPEC_CONST_CONST_HANDLER,
48149   	ZEND_NULL_HANDLER,
48150   	ZEND_FETCH_RW_SPEC_CONST_VAR_HANDLER,
48151   	ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
48152   	ZEND_NULL_HANDLER,
48153   	ZEND_FETCH_RW_SPEC_TMPVAR_CONST_HANDLER,
48154   	ZEND_NULL_HANDLER,
48155   	ZEND_FETCH_RW_SPEC_TMPVAR_VAR_HANDLER,
48156   	ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
48157   	ZEND_NULL_HANDLER,
48158   	ZEND_FETCH_RW_SPEC_TMPVAR_CONST_HANDLER,
48159   	ZEND_NULL_HANDLER,
48160   	ZEND_FETCH_RW_SPEC_TMPVAR_VAR_HANDLER,
48161   	ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
48162   	ZEND_NULL_HANDLER,
48163   	ZEND_NULL_HANDLER,
48164   	ZEND_NULL_HANDLER,
48165   	ZEND_NULL_HANDLER,
48166   	ZEND_NULL_HANDLER,
48167   	ZEND_NULL_HANDLER,
48168   	ZEND_FETCH_RW_SPEC_CV_CONST_HANDLER,
48169   	ZEND_NULL_HANDLER,
48170   	ZEND_FETCH_RW_SPEC_CV_VAR_HANDLER,
48171   	ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
48172   	ZEND_NULL_HANDLER,
48173   	ZEND_NULL_HANDLER,
48174   	ZEND_NULL_HANDLER,
48175   	ZEND_NULL_HANDLER,
48176   	ZEND_NULL_HANDLER,
48177   	ZEND_NULL_HANDLER,
48178   	ZEND_NULL_HANDLER,
48179   	ZEND_NULL_HANDLER,
48180   	ZEND_NULL_HANDLER,
48181   	ZEND_NULL_HANDLER,
48182   	ZEND_NULL_HANDLER,
48183   	ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
48184   	ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
48185   	ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
48186   	ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
48187   	ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
48188   	ZEND_NULL_HANDLER,
48189   	ZEND_NULL_HANDLER,
48190   	ZEND_NULL_HANDLER,
48191   	ZEND_NULL_HANDLER,
48192   	ZEND_NULL_HANDLER,
48193   	ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
48194   	ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
48195   	ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
48196   	ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
48197   	ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
48198   	ZEND_NULL_HANDLER,
48199   	ZEND_NULL_HANDLER,
48200   	ZEND_NULL_HANDLER,
48201   	ZEND_NULL_HANDLER,
48202   	ZEND_NULL_HANDLER,
48203   	ZEND_NULL_HANDLER,
48204   	ZEND_NULL_HANDLER,
48205   	ZEND_NULL_HANDLER,
48206   	ZEND_NULL_HANDLER,
48207   	ZEND_NULL_HANDLER,
48208   	ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
48209   	ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
48210   	ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
48211   	ZEND_NULL_HANDLER,
48212   	ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
48213   	ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
48214   	ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
48215   	ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
48216   	ZEND_NULL_HANDLER,
48217   	ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
48218   	ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
48219   	ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
48220   	ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
48221   	ZEND_NULL_HANDLER,
48222   	ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
48223   	ZEND_FETCH_IS_SPEC_CONST_CONST_HANDLER,
48224   	ZEND_NULL_HANDLER,
48225   	ZEND_FETCH_IS_SPEC_CONST_VAR_HANDLER,
48226   	ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
48227   	ZEND_NULL_HANDLER,
48228   	ZEND_FETCH_IS_SPEC_TMPVAR_CONST_HANDLER,
48229   	ZEND_NULL_HANDLER,
48230   	ZEND_FETCH_IS_SPEC_TMPVAR_VAR_HANDLER,
48231   	ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
48232   	ZEND_NULL_HANDLER,
48233   	ZEND_FETCH_IS_SPEC_TMPVAR_CONST_HANDLER,
48234   	ZEND_NULL_HANDLER,
48235   	ZEND_FETCH_IS_SPEC_TMPVAR_VAR_HANDLER,
48236   	ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
48237   	ZEND_NULL_HANDLER,
48238   	ZEND_NULL_HANDLER,
48239   	ZEND_NULL_HANDLER,
48240   	ZEND_NULL_HANDLER,
48241   	ZEND_NULL_HANDLER,
48242   	ZEND_NULL_HANDLER,
48243   	ZEND_FETCH_IS_SPEC_CV_CONST_HANDLER,
48244   	ZEND_NULL_HANDLER,
48245   	ZEND_FETCH_IS_SPEC_CV_VAR_HANDLER,
48246   	ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
48247   	ZEND_NULL_HANDLER,
48248   	ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
48249   	ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
48250   	ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
48251   	ZEND_NULL_HANDLER,
48252   	ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
48253   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
48254   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48255   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48256   	ZEND_NULL_HANDLER,
48257   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
48258   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
48259   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48260   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48261   	ZEND_NULL_HANDLER,
48262   	ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
48263   	ZEND_NULL_HANDLER,
48264   	ZEND_NULL_HANDLER,
48265   	ZEND_NULL_HANDLER,
48266   	ZEND_NULL_HANDLER,
48267   	ZEND_NULL_HANDLER,
48268   	ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
48269   	ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
48270   	ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
48271   	ZEND_NULL_HANDLER,
48272   	ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
48273   	ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
48274   	ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
48275   	ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
48276   	ZEND_NULL_HANDLER,
48277   	ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
48278   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
48279   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48280   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48281   	ZEND_NULL_HANDLER,
48282   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
48283   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
48284   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48285   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
48286   	ZEND_NULL_HANDLER,
48287   	ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
48288   	ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
48289   	ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
48290   	ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
48291   	ZEND_NULL_HANDLER,
48292   	ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
48293   	ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
48294   	ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
48295   	ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
48296   	ZEND_NULL_HANDLER,
48297   	ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
48298   	ZEND_FETCH_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
48299   	ZEND_NULL_HANDLER,
48300   	ZEND_FETCH_FUNC_ARG_SPEC_CONST_VAR_HANDLER,
48301   	ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
48302   	ZEND_NULL_HANDLER,
48303   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
48304   	ZEND_NULL_HANDLER,
48305   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
48306   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
48307   	ZEND_NULL_HANDLER,
48308   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
48309   	ZEND_NULL_HANDLER,
48310   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
48311   	ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
48312   	ZEND_NULL_HANDLER,
48313   	ZEND_NULL_HANDLER,
48314   	ZEND_NULL_HANDLER,
48315   	ZEND_NULL_HANDLER,
48316   	ZEND_NULL_HANDLER,
48317   	ZEND_NULL_HANDLER,
48318   	ZEND_FETCH_FUNC_ARG_SPEC_CV_CONST_HANDLER,
48319   	ZEND_NULL_HANDLER,
48320   	ZEND_FETCH_FUNC_ARG_SPEC_CV_VAR_HANDLER,
48321   	ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
48322   	ZEND_NULL_HANDLER,
48323   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
48324   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
48325   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
48326   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
48327   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
48328   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
48329   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
48330   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
48331   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
48332   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
48333   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
48334   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
48335   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
48336   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
48337   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
48338   	ZEND_NULL_HANDLER,
48339   	ZEND_NULL_HANDLER,
48340   	ZEND_NULL_HANDLER,
48341   	ZEND_NULL_HANDLER,
48342   	ZEND_NULL_HANDLER,
48343   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
48344   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
48345   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
48346   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
48347   	ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
48348   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
48349   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
48350   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
48351   	ZEND_NULL_HANDLER,
48352   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
48353   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
48354   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
48355   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
48356   	ZEND_NULL_HANDLER,
48357   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
48358   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
48359   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
48360   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
48361   	ZEND_NULL_HANDLER,
48362   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
48363   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
48364   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
48365   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
48366   	ZEND_NULL_HANDLER,
48367   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
48368   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
48369   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
48370   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
48371   	ZEND_NULL_HANDLER,
48372   	ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
48373   	ZEND_FETCH_UNSET_SPEC_CONST_CONST_HANDLER,
48374   	ZEND_NULL_HANDLER,
48375   	ZEND_FETCH_UNSET_SPEC_CONST_VAR_HANDLER,
48376   	ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
48377   	ZEND_NULL_HANDLER,
48378   	ZEND_FETCH_UNSET_SPEC_TMPVAR_CONST_HANDLER,
48379   	ZEND_NULL_HANDLER,
48380   	ZEND_FETCH_UNSET_SPEC_TMPVAR_VAR_HANDLER,
48381   	ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
48382   	ZEND_NULL_HANDLER,
48383   	ZEND_FETCH_UNSET_SPEC_TMPVAR_CONST_HANDLER,
48384   	ZEND_NULL_HANDLER,
48385   	ZEND_FETCH_UNSET_SPEC_TMPVAR_VAR_HANDLER,
48386   	ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
48387   	ZEND_NULL_HANDLER,
48388   	ZEND_NULL_HANDLER,
48389   	ZEND_NULL_HANDLER,
48390   	ZEND_NULL_HANDLER,
48391   	ZEND_NULL_HANDLER,
48392   	ZEND_NULL_HANDLER,
48393   	ZEND_FETCH_UNSET_SPEC_CV_CONST_HANDLER,
48394   	ZEND_NULL_HANDLER,
48395   	ZEND_FETCH_UNSET_SPEC_CV_VAR_HANDLER,
48396   	ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
48397   	ZEND_NULL_HANDLER,
48398   	ZEND_NULL_HANDLER,
48399   	ZEND_NULL_HANDLER,
48400   	ZEND_NULL_HANDLER,
48401   	ZEND_NULL_HANDLER,
48402   	ZEND_NULL_HANDLER,
48403   	ZEND_NULL_HANDLER,
48404   	ZEND_NULL_HANDLER,
48405   	ZEND_NULL_HANDLER,
48406   	ZEND_NULL_HANDLER,
48407   	ZEND_NULL_HANDLER,
48408   	ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
48409   	ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
48410   	ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
48411   	ZEND_NULL_HANDLER,
48412   	ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
48413   	ZEND_NULL_HANDLER,
48414   	ZEND_NULL_HANDLER,
48415   	ZEND_NULL_HANDLER,
48416   	ZEND_NULL_HANDLER,
48417   	ZEND_NULL_HANDLER,
48418   	ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
48419   	ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
48420   	ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
48421   	ZEND_NULL_HANDLER,
48422   	ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
48423   	ZEND_NULL_HANDLER,
48424   	ZEND_NULL_HANDLER,
48425   	ZEND_NULL_HANDLER,
48426   	ZEND_NULL_HANDLER,
48427   	ZEND_NULL_HANDLER,
48428   	ZEND_NULL_HANDLER,
48429   	ZEND_NULL_HANDLER,
48430   	ZEND_NULL_HANDLER,
48431   	ZEND_NULL_HANDLER,
48432   	ZEND_NULL_HANDLER,
48433   	ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
48434   	ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
48435   	ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
48436   	ZEND_NULL_HANDLER,
48437   	ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
48438   	ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
48439   	ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
48440   	ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
48441   	ZEND_NULL_HANDLER,
48442   	ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
48443   	ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
48444   	ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
48445   	ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
48446   	ZEND_NULL_HANDLER,
48447   	ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
48448   	ZEND_FETCH_LIST_SPEC_CONST_CONST_HANDLER,
48449   	ZEND_NULL_HANDLER,
48450   	ZEND_NULL_HANDLER,
48451   	ZEND_NULL_HANDLER,
48452   	ZEND_NULL_HANDLER,
48453   	ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER,
48454   	ZEND_NULL_HANDLER,
48455   	ZEND_NULL_HANDLER,
48456   	ZEND_NULL_HANDLER,
48457   	ZEND_NULL_HANDLER,
48458   	ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER,
48459   	ZEND_NULL_HANDLER,
48460   	ZEND_NULL_HANDLER,
48461   	ZEND_NULL_HANDLER,
48462   	ZEND_NULL_HANDLER,
48463   	ZEND_NULL_HANDLER,
48464   	ZEND_NULL_HANDLER,
48465   	ZEND_NULL_HANDLER,
48466   	ZEND_NULL_HANDLER,
48467   	ZEND_NULL_HANDLER,
48468   	ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER,
48469   	ZEND_NULL_HANDLER,
48470   	ZEND_NULL_HANDLER,
48471   	ZEND_NULL_HANDLER,
48472   	ZEND_NULL_HANDLER,
48473   	ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER,
48474   	ZEND_NULL_HANDLER,
48475   	ZEND_NULL_HANDLER,
48476   	ZEND_NULL_HANDLER,
48477   	ZEND_NULL_HANDLER,
48478   	ZEND_NULL_HANDLER,
48479   	ZEND_NULL_HANDLER,
48480   	ZEND_NULL_HANDLER,
48481   	ZEND_NULL_HANDLER,
48482   	ZEND_NULL_HANDLER,
48483   	ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER,
48484   	ZEND_NULL_HANDLER,
48485   	ZEND_NULL_HANDLER,
48486   	ZEND_NULL_HANDLER,
48487   	ZEND_NULL_HANDLER,
48488   	ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
48489   	ZEND_NULL_HANDLER,
48490   	ZEND_NULL_HANDLER,
48491   	ZEND_NULL_HANDLER,
48492   	ZEND_NULL_HANDLER,
48493   	ZEND_NULL_HANDLER,
48494   	ZEND_NULL_HANDLER,
48495   	ZEND_NULL_HANDLER,
48496   	ZEND_NULL_HANDLER,
48497   	ZEND_NULL_HANDLER,
48498   	ZEND_NULL_HANDLER,
48499   	ZEND_NULL_HANDLER,
48500   	ZEND_NULL_HANDLER,
48501   	ZEND_NULL_HANDLER,
48502   	ZEND_NULL_HANDLER,
48503   	ZEND_NULL_HANDLER,
48504   	ZEND_NULL_HANDLER,
48505   	ZEND_NULL_HANDLER,
48506   	ZEND_NULL_HANDLER,
48507   	ZEND_NULL_HANDLER,
48508   	ZEND_NULL_HANDLER,
48509   	ZEND_NULL_HANDLER,
48510   	ZEND_NULL_HANDLER,
48511   	ZEND_NULL_HANDLER,
48512   	ZEND_NULL_HANDLER,
48513   	ZEND_NULL_HANDLER,
48514   	ZEND_NULL_HANDLER,
48515   	ZEND_NULL_HANDLER,
48516   	ZEND_NULL_HANDLER,
48517   	ZEND_NULL_HANDLER,
48518   	ZEND_NULL_HANDLER,
48519   	ZEND_NULL_HANDLER,
48520   	ZEND_NULL_HANDLER,
48521   	ZEND_NULL_HANDLER,
48522   	ZEND_NULL_HANDLER,
48523   	ZEND_EXT_STMT_SPEC_HANDLER,
48524   	ZEND_EXT_STMT_SPEC_HANDLER,
48525   	ZEND_EXT_STMT_SPEC_HANDLER,
48526   	ZEND_EXT_STMT_SPEC_HANDLER,
48527   	ZEND_EXT_STMT_SPEC_HANDLER,
48528   	ZEND_EXT_STMT_SPEC_HANDLER,
48529   	ZEND_EXT_STMT_SPEC_HANDLER,
48530   	ZEND_EXT_STMT_SPEC_HANDLER,
48531   	ZEND_EXT_STMT_SPEC_HANDLER,
48532   	ZEND_EXT_STMT_SPEC_HANDLER,
48533   	ZEND_EXT_STMT_SPEC_HANDLER,
48534   	ZEND_EXT_STMT_SPEC_HANDLER,
48535   	ZEND_EXT_STMT_SPEC_HANDLER,
48536   	ZEND_EXT_STMT_SPEC_HANDLER,
48537   	ZEND_EXT_STMT_SPEC_HANDLER,
48538   	ZEND_EXT_STMT_SPEC_HANDLER,
48539   	ZEND_EXT_STMT_SPEC_HANDLER,
48540   	ZEND_EXT_STMT_SPEC_HANDLER,
48541   	ZEND_EXT_STMT_SPEC_HANDLER,
48542   	ZEND_EXT_STMT_SPEC_HANDLER,
48543   	ZEND_EXT_STMT_SPEC_HANDLER,
48544   	ZEND_EXT_STMT_SPEC_HANDLER,
48545   	ZEND_EXT_STMT_SPEC_HANDLER,
48546   	ZEND_EXT_STMT_SPEC_HANDLER,
48547   	ZEND_EXT_STMT_SPEC_HANDLER,
48548   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48549   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48550   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48551   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48552   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48553   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48554   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48555   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48556   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48557   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48558   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48559   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48560   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48561   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48562   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48563   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48564   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48565   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48566   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48567   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48568   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48569   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48570   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48571   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48572   	ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
48573   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48574   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48575   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48576   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48577   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48578   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48579   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48580   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48581   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48582   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48583   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48584   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48585   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48586   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48587   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48588   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48589   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48590   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48591   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48592   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48593   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48594   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48595   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48596   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48597   	ZEND_EXT_FCALL_END_SPEC_HANDLER,
48598   	ZEND_EXT_NOP_SPEC_HANDLER,
48599   	ZEND_EXT_NOP_SPEC_HANDLER,
48600   	ZEND_EXT_NOP_SPEC_HANDLER,
48601   	ZEND_EXT_NOP_SPEC_HANDLER,
48602   	ZEND_EXT_NOP_SPEC_HANDLER,
48603   	ZEND_EXT_NOP_SPEC_HANDLER,
48604   	ZEND_EXT_NOP_SPEC_HANDLER,
48605   	ZEND_EXT_NOP_SPEC_HANDLER,
48606   	ZEND_EXT_NOP_SPEC_HANDLER,
48607   	ZEND_EXT_NOP_SPEC_HANDLER,
48608   	ZEND_EXT_NOP_SPEC_HANDLER,
48609   	ZEND_EXT_NOP_SPEC_HANDLER,
48610   	ZEND_EXT_NOP_SPEC_HANDLER,
48611   	ZEND_EXT_NOP_SPEC_HANDLER,
48612   	ZEND_EXT_NOP_SPEC_HANDLER,
48613   	ZEND_EXT_NOP_SPEC_HANDLER,
48614   	ZEND_EXT_NOP_SPEC_HANDLER,
48615   	ZEND_EXT_NOP_SPEC_HANDLER,
48616   	ZEND_EXT_NOP_SPEC_HANDLER,
48617   	ZEND_EXT_NOP_SPEC_HANDLER,
48618   	ZEND_EXT_NOP_SPEC_HANDLER,
48619   	ZEND_EXT_NOP_SPEC_HANDLER,
48620   	ZEND_EXT_NOP_SPEC_HANDLER,
48621   	ZEND_EXT_NOP_SPEC_HANDLER,
48622   	ZEND_EXT_NOP_SPEC_HANDLER,
48623   	ZEND_TICKS_SPEC_HANDLER,
48624   	ZEND_TICKS_SPEC_HANDLER,
48625   	ZEND_TICKS_SPEC_HANDLER,
48626   	ZEND_TICKS_SPEC_HANDLER,
48627   	ZEND_TICKS_SPEC_HANDLER,
48628   	ZEND_TICKS_SPEC_HANDLER,
48629   	ZEND_TICKS_SPEC_HANDLER,
48630   	ZEND_TICKS_SPEC_HANDLER,
48631   	ZEND_TICKS_SPEC_HANDLER,
48632   	ZEND_TICKS_SPEC_HANDLER,
48633   	ZEND_TICKS_SPEC_HANDLER,
48634   	ZEND_TICKS_SPEC_HANDLER,
48635   	ZEND_TICKS_SPEC_HANDLER,
48636   	ZEND_TICKS_SPEC_HANDLER,
48637   	ZEND_TICKS_SPEC_HANDLER,
48638   	ZEND_TICKS_SPEC_HANDLER,
48639   	ZEND_TICKS_SPEC_HANDLER,
48640   	ZEND_TICKS_SPEC_HANDLER,
48641   	ZEND_TICKS_SPEC_HANDLER,
48642   	ZEND_TICKS_SPEC_HANDLER,
48643   	ZEND_TICKS_SPEC_HANDLER,
48644   	ZEND_TICKS_SPEC_HANDLER,
48645   	ZEND_TICKS_SPEC_HANDLER,
48646   	ZEND_TICKS_SPEC_HANDLER,
48647   	ZEND_TICKS_SPEC_HANDLER,
48648   	ZEND_NULL_HANDLER,
48649   	ZEND_NULL_HANDLER,
48650   	ZEND_NULL_HANDLER,
48651   	ZEND_NULL_HANDLER,
48652   	ZEND_NULL_HANDLER,
48653   	ZEND_NULL_HANDLER,
48654   	ZEND_NULL_HANDLER,
48655   	ZEND_NULL_HANDLER,
48656   	ZEND_NULL_HANDLER,
48657   	ZEND_NULL_HANDLER,
48658   	ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
48659   	ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
48660   	ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
48661   	ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
48662   	ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
48663   	ZEND_NULL_HANDLER,
48664   	ZEND_NULL_HANDLER,
48665   	ZEND_NULL_HANDLER,
48666   	ZEND_NULL_HANDLER,
48667   	ZEND_NULL_HANDLER,
48668   	ZEND_NULL_HANDLER,
48669   	ZEND_NULL_HANDLER,
48670   	ZEND_NULL_HANDLER,
48671   	ZEND_NULL_HANDLER,
48672   	ZEND_NULL_HANDLER,
48673   	ZEND_NULL_HANDLER,
48674   	ZEND_NULL_HANDLER,
48675   	ZEND_NULL_HANDLER,
48676   	ZEND_NULL_HANDLER,
48677   	ZEND_CATCH_SPEC_CONST_CV_HANDLER,
48678   	ZEND_NULL_HANDLER,
48679   	ZEND_NULL_HANDLER,
48680   	ZEND_NULL_HANDLER,
48681   	ZEND_NULL_HANDLER,
48682   	ZEND_NULL_HANDLER,
48683   	ZEND_NULL_HANDLER,
48684   	ZEND_NULL_HANDLER,
48685   	ZEND_NULL_HANDLER,
48686   	ZEND_NULL_HANDLER,
48687   	ZEND_NULL_HANDLER,
48688   	ZEND_NULL_HANDLER,
48689   	ZEND_NULL_HANDLER,
48690   	ZEND_NULL_HANDLER,
48691   	ZEND_NULL_HANDLER,
48692   	ZEND_NULL_HANDLER,
48693   	ZEND_NULL_HANDLER,
48694   	ZEND_NULL_HANDLER,
48695   	ZEND_NULL_HANDLER,
48696   	ZEND_NULL_HANDLER,
48697   	ZEND_NULL_HANDLER,
48698   	ZEND_THROW_SPEC_CONST_HANDLER,
48699   	ZEND_THROW_SPEC_CONST_HANDLER,
48700   	ZEND_THROW_SPEC_CONST_HANDLER,
48701   	ZEND_THROW_SPEC_CONST_HANDLER,
48702   	ZEND_THROW_SPEC_CONST_HANDLER,
48703   	ZEND_THROW_SPEC_TMP_HANDLER,
48704   	ZEND_THROW_SPEC_TMP_HANDLER,
48705   	ZEND_THROW_SPEC_TMP_HANDLER,
48706   	ZEND_THROW_SPEC_TMP_HANDLER,
48707   	ZEND_THROW_SPEC_TMP_HANDLER,
48708   	ZEND_THROW_SPEC_VAR_HANDLER,
48709   	ZEND_THROW_SPEC_VAR_HANDLER,
48710   	ZEND_THROW_SPEC_VAR_HANDLER,
48711   	ZEND_THROW_SPEC_VAR_HANDLER,
48712   	ZEND_THROW_SPEC_VAR_HANDLER,
48713   	ZEND_NULL_HANDLER,
48714   	ZEND_NULL_HANDLER,
48715   	ZEND_NULL_HANDLER,
48716   	ZEND_NULL_HANDLER,
48717   	ZEND_NULL_HANDLER,
48718   	ZEND_THROW_SPEC_CV_HANDLER,
48719   	ZEND_THROW_SPEC_CV_HANDLER,
48720   	ZEND_THROW_SPEC_CV_HANDLER,
48721   	ZEND_THROW_SPEC_CV_HANDLER,
48722   	ZEND_THROW_SPEC_CV_HANDLER,
48723   	ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
48724   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48725   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48726   	ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
48727   	ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
48728   	ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
48729   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48730   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48731   	ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
48732   	ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
48733   	ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
48734   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48735   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48736   	ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
48737   	ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
48738   	ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
48739   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48740   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48741   	ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
48742   	ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
48743   	ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
48744   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48745   	ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
48746   	ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
48747   	ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
48748   	ZEND_CLONE_SPEC_CONST_HANDLER,
48749   	ZEND_CLONE_SPEC_CONST_HANDLER,
48750   	ZEND_CLONE_SPEC_CONST_HANDLER,
48751   	ZEND_CLONE_SPEC_CONST_HANDLER,
48752   	ZEND_CLONE_SPEC_CONST_HANDLER,
48753   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48754   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48755   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48756   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48757   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48758   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48759   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48760   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48761   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48762   	ZEND_CLONE_SPEC_TMPVAR_HANDLER,
48763   	ZEND_CLONE_SPEC_UNUSED_HANDLER,
48764   	ZEND_CLONE_SPEC_UNUSED_HANDLER,
48765   	ZEND_CLONE_SPEC_UNUSED_HANDLER,
48766   	ZEND_CLONE_SPEC_UNUSED_HANDLER,
48767   	ZEND_CLONE_SPEC_UNUSED_HANDLER,
48768   	ZEND_CLONE_SPEC_CV_HANDLER,
48769   	ZEND_CLONE_SPEC_CV_HANDLER,
48770   	ZEND_CLONE_SPEC_CV_HANDLER,
48771   	ZEND_CLONE_SPEC_CV_HANDLER,
48772   	ZEND_CLONE_SPEC_CV_HANDLER,
48773   	ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
48774   	ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
48775   	ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
48776   	ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
48777   	ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
48778   	ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
48779   	ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
48780   	ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
48781   	ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
48782   	ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
48783   	ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
48784   	ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
48785   	ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
48786   	ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
48787   	ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
48788   	ZEND_NULL_HANDLER,
48789   	ZEND_NULL_HANDLER,
48790   	ZEND_NULL_HANDLER,
48791   	ZEND_NULL_HANDLER,
48792   	ZEND_NULL_HANDLER,
48793   	ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
48794   	ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
48795   	ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
48796   	ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
48797   	ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
48798   	ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
48799   	ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
48800   	ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
48801   	ZEND_NULL_HANDLER,
48802   	ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
48803   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
48804   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
48805   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
48806   	ZEND_NULL_HANDLER,
48807   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
48808   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
48809   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
48810   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
48811   	ZEND_NULL_HANDLER,
48812   	ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
48813   	ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
48814   	ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
48815   	ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
48816   	ZEND_NULL_HANDLER,
48817   	ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
48818   	ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
48819   	ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
48820   	ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
48821   	ZEND_NULL_HANDLER,
48822   	ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
48823   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
48824   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
48825   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
48826   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
48827   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
48828   	ZEND_NULL_HANDLER,
48829   	ZEND_NULL_HANDLER,
48830   	ZEND_NULL_HANDLER,
48831   	ZEND_NULL_HANDLER,
48832   	ZEND_NULL_HANDLER,
48833   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
48834   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
48835   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
48836   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
48837   	ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
48838   	ZEND_NULL_HANDLER,
48839   	ZEND_NULL_HANDLER,
48840   	ZEND_NULL_HANDLER,
48841   	ZEND_NULL_HANDLER,
48842   	ZEND_NULL_HANDLER,
48843   	ZEND_NULL_HANDLER,
48844   	ZEND_NULL_HANDLER,
48845   	ZEND_NULL_HANDLER,
48846   	ZEND_NULL_HANDLER,
48847   	ZEND_NULL_HANDLER,
48848   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_CONST_HANDLER,
48849   	ZEND_NULL_HANDLER,
48850   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_VAR_HANDLER,
48851   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
48852   	ZEND_NULL_HANDLER,
48853   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_CONST_HANDLER,
48854   	ZEND_NULL_HANDLER,
48855   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_VAR_HANDLER,
48856   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
48857   	ZEND_NULL_HANDLER,
48858   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_CONST_HANDLER,
48859   	ZEND_NULL_HANDLER,
48860   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_VAR_HANDLER,
48861   	ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
48862   	ZEND_NULL_HANDLER,
48863   	ZEND_NULL_HANDLER,
48864   	ZEND_NULL_HANDLER,
48865   	ZEND_NULL_HANDLER,
48866   	ZEND_NULL_HANDLER,
48867   	ZEND_NULL_HANDLER,
48868   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_CONST_HANDLER,
48869   	ZEND_NULL_HANDLER,
48870   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_VAR_HANDLER,
48871   	ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
48872   	ZEND_NULL_HANDLER,
48873   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
48874   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
48875   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
48876   	ZEND_NULL_HANDLER,
48877   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
48878   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
48879   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
48880   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
48881   	ZEND_NULL_HANDLER,
48882   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
48883   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
48884   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
48885   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
48886   	ZEND_NULL_HANDLER,
48887   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
48888   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER,
48889   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
48890   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
48891   	ZEND_NULL_HANDLER,
48892   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER,
48893   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
48894   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
48895   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
48896   	ZEND_NULL_HANDLER,
48897   	ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
48898   	ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
48899   	ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
48900   	ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
48901   	ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
48902   	ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
48903   	ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
48904   	ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
48905   	ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
48906   	ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
48907   	ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
48908   	ZEND_NULL_HANDLER,
48909   	ZEND_NULL_HANDLER,
48910   	ZEND_NULL_HANDLER,
48911   	ZEND_NULL_HANDLER,
48912   	ZEND_NULL_HANDLER,
48913   	ZEND_NULL_HANDLER,
48914   	ZEND_NULL_HANDLER,
48915   	ZEND_NULL_HANDLER,
48916   	ZEND_NULL_HANDLER,
48917   	ZEND_NULL_HANDLER,
48918   	ZEND_NULL_HANDLER,
48919   	ZEND_NULL_HANDLER,
48920   	ZEND_NULL_HANDLER,
48921   	ZEND_NULL_HANDLER,
48922   	ZEND_NULL_HANDLER,
48923   	ZEND_NULL_HANDLER,
48924   	ZEND_NULL_HANDLER,
48925   	ZEND_NULL_HANDLER,
48926   	ZEND_NULL_HANDLER,
48927   	ZEND_NULL_HANDLER,
48928   	ZEND_NULL_HANDLER,
48929   	ZEND_NULL_HANDLER,
48930   	ZEND_NULL_HANDLER,
48931   	ZEND_NULL_HANDLER,
48932   	ZEND_NULL_HANDLER,
48933   	ZEND_SEND_VAR_SPEC_VAR_HANDLER,
48934   	ZEND_SEND_VAR_SPEC_VAR_HANDLER,
48935   	ZEND_SEND_VAR_SPEC_VAR_HANDLER,
48936   	ZEND_SEND_VAR_SPEC_VAR_HANDLER,
48937   	ZEND_SEND_VAR_SPEC_VAR_HANDLER,
48938   	ZEND_NULL_HANDLER,
48939   	ZEND_NULL_HANDLER,
48940   	ZEND_NULL_HANDLER,
48941   	ZEND_NULL_HANDLER,
48942   	ZEND_NULL_HANDLER,
48943   	ZEND_SEND_VAR_SPEC_CV_HANDLER,
48944   	ZEND_SEND_VAR_SPEC_CV_HANDLER,
48945   	ZEND_SEND_VAR_SPEC_CV_HANDLER,
48946   	ZEND_SEND_VAR_SPEC_CV_HANDLER,
48947   	ZEND_SEND_VAR_SPEC_CV_HANDLER,
48948   	ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
48949   	ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
48950   	ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
48951   	ZEND_NULL_HANDLER,
48952   	ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
48953   	ZEND_NULL_HANDLER,
48954   	ZEND_NULL_HANDLER,
48955   	ZEND_NULL_HANDLER,
48956   	ZEND_NULL_HANDLER,
48957   	ZEND_NULL_HANDLER,
48958   	ZEND_NULL_HANDLER,
48959   	ZEND_NULL_HANDLER,
48960   	ZEND_NULL_HANDLER,
48961   	ZEND_NULL_HANDLER,
48962   	ZEND_NULL_HANDLER,
48963   	ZEND_NULL_HANDLER,
48964   	ZEND_NULL_HANDLER,
48965   	ZEND_NULL_HANDLER,
48966   	ZEND_NULL_HANDLER,
48967   	ZEND_NULL_HANDLER,
48968   	ZEND_NULL_HANDLER,
48969   	ZEND_NULL_HANDLER,
48970   	ZEND_NULL_HANDLER,
48971   	ZEND_NULL_HANDLER,
48972   	ZEND_NULL_HANDLER,
48973   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48974   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48975   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48976   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48977   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48978   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48979   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48980   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48981   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48982   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48983   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48984   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48985   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48986   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48987   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48988   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48989   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48990   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48991   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48992   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48993   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48994   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48995   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48996   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48997   	ZEND_SEND_ARRAY_SPEC_HANDLER,
48998   	ZEND_NULL_HANDLER,
48999   	ZEND_NULL_HANDLER,
49000   	ZEND_NULL_HANDLER,
49001   	ZEND_NULL_HANDLER,
49002   	ZEND_NULL_HANDLER,
49003   	ZEND_NULL_HANDLER,
49004   	ZEND_NULL_HANDLER,
49005   	ZEND_NULL_HANDLER,
49006   	ZEND_NULL_HANDLER,
49007   	ZEND_NULL_HANDLER,
49008   	ZEND_SEND_USER_SPEC_VAR_HANDLER,
49009   	ZEND_SEND_USER_SPEC_VAR_HANDLER,
49010   	ZEND_SEND_USER_SPEC_VAR_HANDLER,
49011   	ZEND_SEND_USER_SPEC_VAR_HANDLER,
49012   	ZEND_SEND_USER_SPEC_VAR_HANDLER,
49013   	ZEND_NULL_HANDLER,
49014   	ZEND_NULL_HANDLER,
49015   	ZEND_NULL_HANDLER,
49016   	ZEND_NULL_HANDLER,
49017   	ZEND_NULL_HANDLER,
49018   	ZEND_SEND_USER_SPEC_CV_HANDLER,
49019   	ZEND_SEND_USER_SPEC_CV_HANDLER,
49020   	ZEND_SEND_USER_SPEC_CV_HANDLER,
49021   	ZEND_SEND_USER_SPEC_CV_HANDLER,
49022   	ZEND_SEND_USER_SPEC_CV_HANDLER,
49023   	ZEND_STRLEN_SPEC_CONST_HANDLER,
49024   	ZEND_STRLEN_SPEC_CONST_HANDLER,
49025   	ZEND_STRLEN_SPEC_CONST_HANDLER,
49026   	ZEND_STRLEN_SPEC_CONST_HANDLER,
49027   	ZEND_STRLEN_SPEC_CONST_HANDLER,
49028   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49029   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49030   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49031   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49032   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49033   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49034   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49035   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49036   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49037   	ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
49038   	ZEND_NULL_HANDLER,
49039   	ZEND_NULL_HANDLER,
49040   	ZEND_NULL_HANDLER,
49041   	ZEND_NULL_HANDLER,
49042   	ZEND_NULL_HANDLER,
49043   	ZEND_STRLEN_SPEC_CV_HANDLER,
49044   	ZEND_STRLEN_SPEC_CV_HANDLER,
49045   	ZEND_STRLEN_SPEC_CV_HANDLER,
49046   	ZEND_STRLEN_SPEC_CV_HANDLER,
49047   	ZEND_STRLEN_SPEC_CV_HANDLER,
49048   	ZEND_DEFINED_SPEC_CONST_HANDLER,
49049   	ZEND_DEFINED_SPEC_CONST_HANDLER,
49050   	ZEND_DEFINED_SPEC_CONST_HANDLER,
49051   	ZEND_DEFINED_SPEC_CONST_HANDLER,
49052   	ZEND_DEFINED_SPEC_CONST_HANDLER,
49053   	ZEND_NULL_HANDLER,
49054   	ZEND_NULL_HANDLER,
49055   	ZEND_NULL_HANDLER,
49056   	ZEND_NULL_HANDLER,
49057   	ZEND_NULL_HANDLER,
49058   	ZEND_NULL_HANDLER,
49059   	ZEND_NULL_HANDLER,
49060   	ZEND_NULL_HANDLER,
49061   	ZEND_NULL_HANDLER,
49062   	ZEND_NULL_HANDLER,
49063   	ZEND_NULL_HANDLER,
49064   	ZEND_NULL_HANDLER,
49065   	ZEND_NULL_HANDLER,
49066   	ZEND_NULL_HANDLER,
49067   	ZEND_NULL_HANDLER,
49068   	ZEND_NULL_HANDLER,
49069   	ZEND_NULL_HANDLER,
49070   	ZEND_NULL_HANDLER,
49071   	ZEND_NULL_HANDLER,
49072   	ZEND_NULL_HANDLER,
49073   	ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
49074   	ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
49075   	ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
49076   	ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
49077   	ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
49078   	ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
49079   	ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
49080   	ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
49081   	ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
49082   	ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
49083   	ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
49084   	ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
49085   	ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
49086   	ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
49087   	ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
49088   	ZEND_NULL_HANDLER,
49089   	ZEND_NULL_HANDLER,
49090   	ZEND_NULL_HANDLER,
49091   	ZEND_NULL_HANDLER,
49092   	ZEND_NULL_HANDLER,
49093   	ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
49094   	ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
49095   	ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
49096   	ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
49097   	ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
49098   	ZEND_NULL_HANDLER,
49099   	ZEND_NULL_HANDLER,
49100   	ZEND_NULL_HANDLER,
49101   	ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
49102   	ZEND_NULL_HANDLER,
49103   	ZEND_NULL_HANDLER,
49104   	ZEND_NULL_HANDLER,
49105   	ZEND_NULL_HANDLER,
49106   	ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
49107   	ZEND_NULL_HANDLER,
49108   	ZEND_NULL_HANDLER,
49109   	ZEND_NULL_HANDLER,
49110   	ZEND_NULL_HANDLER,
49111   	ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
49112   	ZEND_NULL_HANDLER,
49113   	ZEND_NULL_HANDLER,
49114   	ZEND_NULL_HANDLER,
49115   	ZEND_NULL_HANDLER,
49116   	ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
49117   	ZEND_NULL_HANDLER,
49118   	ZEND_NULL_HANDLER,
49119   	ZEND_NULL_HANDLER,
49120   	ZEND_NULL_HANDLER,
49121   	ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
49122   	ZEND_NULL_HANDLER,
49123   	ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
49124   	ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
49125   	ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
49126   	ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
49127   	ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
49128   	ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
49129   	ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
49130   	ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
49131   	ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
49132   	ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
49133   	ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
49134   	ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
49135   	ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
49136   	ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
49137   	ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
49138   	ZEND_NULL_HANDLER,
49139   	ZEND_NULL_HANDLER,
49140   	ZEND_NULL_HANDLER,
49141   	ZEND_NULL_HANDLER,
49142   	ZEND_NULL_HANDLER,
49143   	ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
49144   	ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
49145   	ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
49146   	ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
49147   	ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
49148   	ZEND_NULL_HANDLER,
49149   	ZEND_NULL_HANDLER,
49150   	ZEND_NULL_HANDLER,
49151   	ZEND_NULL_HANDLER,
49152   	ZEND_NULL_HANDLER,
49153   	ZEND_NULL_HANDLER,
49154   	ZEND_NULL_HANDLER,
49155   	ZEND_NULL_HANDLER,
49156   	ZEND_NULL_HANDLER,
49157   	ZEND_NULL_HANDLER,
49158   	ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
49159   	ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
49160   	ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
49161   	ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
49162   	ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
49163   	ZEND_NULL_HANDLER,
49164   	ZEND_NULL_HANDLER,
49165   	ZEND_NULL_HANDLER,
49166   	ZEND_NULL_HANDLER,
49167   	ZEND_NULL_HANDLER,
49168   	ZEND_NULL_HANDLER,
49169   	ZEND_NULL_HANDLER,
49170   	ZEND_NULL_HANDLER,
49171   	ZEND_NULL_HANDLER,
49172   	ZEND_NULL_HANDLER,
49173   	ZEND_NULL_HANDLER,
49174   	ZEND_NULL_HANDLER,
49175   	ZEND_NULL_HANDLER,
49176   	ZEND_NULL_HANDLER,
49177   	ZEND_NULL_HANDLER,
49178   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49179   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49180   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49181   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49182   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49183   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49184   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49185   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49186   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49187   	ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
49188   	ZEND_NULL_HANDLER,
49189   	ZEND_NULL_HANDLER,
49190   	ZEND_NULL_HANDLER,
49191   	ZEND_NULL_HANDLER,
49192   	ZEND_NULL_HANDLER,
49193   	ZEND_NULL_HANDLER,
49194   	ZEND_NULL_HANDLER,
49195   	ZEND_NULL_HANDLER,
49196   	ZEND_NULL_HANDLER,
49197   	ZEND_NULL_HANDLER,
49198   	ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
49199   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49200   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49201   	ZEND_NULL_HANDLER,
49202   	ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
49203   	ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
49204   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49205   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49206   	ZEND_NULL_HANDLER,
49207   	ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
49208   	ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
49209   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49210   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49211   	ZEND_NULL_HANDLER,
49212   	ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
49213   	ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
49214   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49215   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49216   	ZEND_NULL_HANDLER,
49217   	ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
49218   	ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
49219   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49220   	ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
49221   	ZEND_NULL_HANDLER,
49222   	ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
49223   	ZEND_DO_ICALL_SPEC_HANDLER,
49224   	ZEND_DO_ICALL_SPEC_HANDLER,
49225   	ZEND_DO_ICALL_SPEC_HANDLER,
49226   	ZEND_DO_ICALL_SPEC_HANDLER,
49227   	ZEND_DO_ICALL_SPEC_HANDLER,
49228   	ZEND_DO_ICALL_SPEC_HANDLER,
49229   	ZEND_DO_ICALL_SPEC_HANDLER,
49230   	ZEND_DO_ICALL_SPEC_HANDLER,
49231   	ZEND_DO_ICALL_SPEC_HANDLER,
49232   	ZEND_DO_ICALL_SPEC_HANDLER,
49233   	ZEND_DO_ICALL_SPEC_HANDLER,
49234   	ZEND_DO_ICALL_SPEC_HANDLER,
49235   	ZEND_DO_ICALL_SPEC_HANDLER,
49236   	ZEND_DO_ICALL_SPEC_HANDLER,
49237   	ZEND_DO_ICALL_SPEC_HANDLER,
49238   	ZEND_DO_ICALL_SPEC_HANDLER,
49239   	ZEND_DO_ICALL_SPEC_HANDLER,
49240   	ZEND_DO_ICALL_SPEC_HANDLER,
49241   	ZEND_DO_ICALL_SPEC_HANDLER,
49242   	ZEND_DO_ICALL_SPEC_HANDLER,
49243   	ZEND_DO_ICALL_SPEC_HANDLER,
49244   	ZEND_DO_ICALL_SPEC_HANDLER,
49245   	ZEND_DO_ICALL_SPEC_HANDLER,
49246   	ZEND_DO_ICALL_SPEC_HANDLER,
49247   	ZEND_DO_ICALL_SPEC_HANDLER,
49248   	ZEND_DO_UCALL_SPEC_HANDLER,
49249   	ZEND_DO_UCALL_SPEC_HANDLER,
49250   	ZEND_DO_UCALL_SPEC_HANDLER,
49251   	ZEND_DO_UCALL_SPEC_HANDLER,
49252   	ZEND_DO_UCALL_SPEC_HANDLER,
49253   	ZEND_DO_UCALL_SPEC_HANDLER,
49254   	ZEND_DO_UCALL_SPEC_HANDLER,
49255   	ZEND_DO_UCALL_SPEC_HANDLER,
49256   	ZEND_DO_UCALL_SPEC_HANDLER,
49257   	ZEND_DO_UCALL_SPEC_HANDLER,
49258   	ZEND_DO_UCALL_SPEC_HANDLER,
49259   	ZEND_DO_UCALL_SPEC_HANDLER,
49260   	ZEND_DO_UCALL_SPEC_HANDLER,
49261   	ZEND_DO_UCALL_SPEC_HANDLER,
49262   	ZEND_DO_UCALL_SPEC_HANDLER,
49263   	ZEND_DO_UCALL_SPEC_HANDLER,
49264   	ZEND_DO_UCALL_SPEC_HANDLER,
49265   	ZEND_DO_UCALL_SPEC_HANDLER,
49266   	ZEND_DO_UCALL_SPEC_HANDLER,
49267   	ZEND_DO_UCALL_SPEC_HANDLER,
49268   	ZEND_DO_UCALL_SPEC_HANDLER,
49269   	ZEND_DO_UCALL_SPEC_HANDLER,
49270   	ZEND_DO_UCALL_SPEC_HANDLER,
49271   	ZEND_DO_UCALL_SPEC_HANDLER,
49272   	ZEND_DO_UCALL_SPEC_HANDLER,
49273   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49274   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49275   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49276   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49277   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49278   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49279   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49280   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49281   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49282   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49283   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49284   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49285   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49286   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49287   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49288   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49289   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49290   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49291   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49292   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49293   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49294   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49295   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49296   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49297   	ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
49298   	ZEND_NULL_HANDLER,
49299   	ZEND_NULL_HANDLER,
49300   	ZEND_NULL_HANDLER,
49301   	ZEND_NULL_HANDLER,
49302   	ZEND_NULL_HANDLER,
49303   	ZEND_NULL_HANDLER,
49304   	ZEND_NULL_HANDLER,
49305   	ZEND_NULL_HANDLER,
49306   	ZEND_NULL_HANDLER,
49307   	ZEND_NULL_HANDLER,
49308   	ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
49309   	ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49310   	ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49311   	ZEND_NULL_HANDLER,
49312   	ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
49313   	ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
49314   	ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49315   	ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49316   	ZEND_NULL_HANDLER,
49317   	ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
49318   	ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
49319   	ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49320   	ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49321   	ZEND_NULL_HANDLER,
49322   	ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
49323   	ZEND_NULL_HANDLER,
49324   	ZEND_NULL_HANDLER,
49325   	ZEND_NULL_HANDLER,
49326   	ZEND_NULL_HANDLER,
49327   	ZEND_NULL_HANDLER,
49328   	ZEND_NULL_HANDLER,
49329   	ZEND_NULL_HANDLER,
49330   	ZEND_NULL_HANDLER,
49331   	ZEND_NULL_HANDLER,
49332   	ZEND_NULL_HANDLER,
49333   	ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
49334   	ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49335   	ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49336   	ZEND_NULL_HANDLER,
49337   	ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER,
49338   	ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
49339   	ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49340   	ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49341   	ZEND_NULL_HANDLER,
49342   	ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
49343   	ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER,
49344   	ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49345   	ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49346   	ZEND_NULL_HANDLER,
49347   	ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER,
49348   	ZEND_NULL_HANDLER,
49349   	ZEND_NULL_HANDLER,
49350   	ZEND_NULL_HANDLER,
49351   	ZEND_NULL_HANDLER,
49352   	ZEND_NULL_HANDLER,
49353   	ZEND_NULL_HANDLER,
49354   	ZEND_NULL_HANDLER,
49355   	ZEND_NULL_HANDLER,
49356   	ZEND_NULL_HANDLER,
49357   	ZEND_NULL_HANDLER,
49358   	ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
49359   	ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49360   	ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49361   	ZEND_NULL_HANDLER,
49362   	ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
49363   	ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
49364   	ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49365   	ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49366   	ZEND_NULL_HANDLER,
49367   	ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
49368   	ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
49369   	ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49370   	ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49371   	ZEND_NULL_HANDLER,
49372   	ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
49373   	ZEND_NULL_HANDLER,
49374   	ZEND_NULL_HANDLER,
49375   	ZEND_NULL_HANDLER,
49376   	ZEND_NULL_HANDLER,
49377   	ZEND_NULL_HANDLER,
49378   	ZEND_NULL_HANDLER,
49379   	ZEND_NULL_HANDLER,
49380   	ZEND_NULL_HANDLER,
49381   	ZEND_NULL_HANDLER,
49382   	ZEND_NULL_HANDLER,
49383   	ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
49384   	ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49385   	ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49386   	ZEND_NULL_HANDLER,
49387   	ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER,
49388   	ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
49389   	ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49390   	ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49391   	ZEND_NULL_HANDLER,
49392   	ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
49393   	ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER,
49394   	ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49395   	ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
49396   	ZEND_NULL_HANDLER,
49397   	ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER,
49398   	ZEND_NULL_HANDLER,
49399   	ZEND_NULL_HANDLER,
49400   	ZEND_NULL_HANDLER,
49401   	ZEND_NULL_HANDLER,
49402   	ZEND_NULL_HANDLER,
49403   	ZEND_NULL_HANDLER,
49404   	ZEND_NULL_HANDLER,
49405   	ZEND_NULL_HANDLER,
49406   	ZEND_NULL_HANDLER,
49407   	ZEND_NULL_HANDLER,
49408   	ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER,
49409   	ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49410   	ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HANDLER,
49411   	ZEND_NULL_HANDLER,
49412   	ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER,
49413   	ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER,
49414   	ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49415   	ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49416   	ZEND_NULL_HANDLER,
49417   	ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER,
49418   	ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER,
49419   	ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HANDLER,
49420   	ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HANDLER,
49421   	ZEND_NULL_HANDLER,
49422   	ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER,
49423   	ZEND_NULL_HANDLER,
49424   	ZEND_NULL_HANDLER,
49425   	ZEND_NULL_HANDLER,
49426   	ZEND_NULL_HANDLER,
49427   	ZEND_NULL_HANDLER,
49428   	ZEND_NULL_HANDLER,
49429   	ZEND_NULL_HANDLER,
49430   	ZEND_NULL_HANDLER,
49431   	ZEND_NULL_HANDLER,
49432   	ZEND_NULL_HANDLER,
49433   	ZEND_NULL_HANDLER,
49434   	ZEND_NULL_HANDLER,
49435   	ZEND_NULL_HANDLER,
49436   	ZEND_NULL_HANDLER,
49437   	ZEND_NULL_HANDLER,
49438   	ZEND_NULL_HANDLER,
49439   	ZEND_NULL_HANDLER,
49440   	ZEND_NULL_HANDLER,
49441   	ZEND_NULL_HANDLER,
49442   	ZEND_NULL_HANDLER,
49443   	ZEND_NULL_HANDLER,
49444   	ZEND_NULL_HANDLER,
49445   	ZEND_NULL_HANDLER,
49446   	ZEND_NULL_HANDLER,
49447   	ZEND_NULL_HANDLER,
49448   	ZEND_NULL_HANDLER,
49449   	ZEND_NULL_HANDLER,
49450   	ZEND_NULL_HANDLER,
49451   	ZEND_NULL_HANDLER,
49452   	ZEND_NULL_HANDLER,
49453   	ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
49454   	ZEND_NULL_HANDLER,
49455   	ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
49456   	ZEND_NULL_HANDLER,
49457   	ZEND_NULL_HANDLER,
49458   	ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
49459   	ZEND_NULL_HANDLER,
49460   	ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
49461   	ZEND_NULL_HANDLER,
49462   	ZEND_NULL_HANDLER,
49463   	ZEND_NULL_HANDLER,
49464   	ZEND_NULL_HANDLER,
49465   	ZEND_NULL_HANDLER,
49466   	ZEND_NULL_HANDLER,
49467   	ZEND_NULL_HANDLER,
49468   	ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
49469   	ZEND_NULL_HANDLER,
49470   	ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
49471   	ZEND_NULL_HANDLER,
49472   	ZEND_NULL_HANDLER,
49473   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49474   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49475   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49476   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49477   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49478   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49479   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49480   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49481   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49482   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49483   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49484   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49485   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49486   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49487   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49488   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49489   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49490   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49491   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49492   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49493   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49494   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49495   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49496   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49497   	ZEND_DECLARE_CLASS_SPEC_HANDLER,
49498   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49499   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49500   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49501   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49502   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49503   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49504   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49505   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49506   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49507   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49508   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49509   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49510   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49511   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49512   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49513   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49514   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49515   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49516   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49517   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49518   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49519   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49520   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49521   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49522   	ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
49523   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49524   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49525   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49526   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49527   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49528   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49529   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49530   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49531   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49532   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49533   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49534   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49535   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49536   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49537   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49538   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49539   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49540   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49541   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49542   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49543   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49544   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49545   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49546   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49547   	ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
49548   	ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
49549   	ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
49550   	ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
49551   	ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
49552   	ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
49553   	ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
49554   	ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
49555   	ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
49556   	ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
49557   	ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
49558   	ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
49559   	ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
49560   	ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
49561   	ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
49562   	ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
49563   	ZEND_NULL_HANDLER,
49564   	ZEND_NULL_HANDLER,
49565   	ZEND_NULL_HANDLER,
49566   	ZEND_NULL_HANDLER,
49567   	ZEND_NULL_HANDLER,
49568   	ZEND_YIELD_FROM_SPEC_CV_HANDLER,
49569   	ZEND_YIELD_FROM_SPEC_CV_HANDLER,
49570   	ZEND_YIELD_FROM_SPEC_CV_HANDLER,
49571   	ZEND_YIELD_FROM_SPEC_CV_HANDLER,
49572   	ZEND_YIELD_FROM_SPEC_CV_HANDLER,
49573   	ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
49574   	ZEND_NULL_HANDLER,
49575   	ZEND_NULL_HANDLER,
49576   	ZEND_NULL_HANDLER,
49577   	ZEND_NULL_HANDLER,
49578   	ZEND_NULL_HANDLER,
49579   	ZEND_NULL_HANDLER,
49580   	ZEND_NULL_HANDLER,
49581   	ZEND_NULL_HANDLER,
49582   	ZEND_NULL_HANDLER,
49583   	ZEND_NULL_HANDLER,
49584   	ZEND_NULL_HANDLER,
49585   	ZEND_NULL_HANDLER,
49586   	ZEND_NULL_HANDLER,
49587   	ZEND_NULL_HANDLER,
49588   	ZEND_NULL_HANDLER,
49589   	ZEND_NULL_HANDLER,
49590   	ZEND_NULL_HANDLER,
49591   	ZEND_NULL_HANDLER,
49592   	ZEND_NULL_HANDLER,
49593   	ZEND_NULL_HANDLER,
49594   	ZEND_NULL_HANDLER,
49595   	ZEND_NULL_HANDLER,
49596   	ZEND_NULL_HANDLER,
49597   	ZEND_NULL_HANDLER,
49598   	ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
49599   	ZEND_NULL_HANDLER,
49600   	ZEND_NULL_HANDLER,
49601   	ZEND_NULL_HANDLER,
49602   	ZEND_NULL_HANDLER,
49603   	ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
49604   	ZEND_NULL_HANDLER,
49605   	ZEND_NULL_HANDLER,
49606   	ZEND_NULL_HANDLER,
49607   	ZEND_NULL_HANDLER,
49608   	ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
49609   	ZEND_NULL_HANDLER,
49610   	ZEND_NULL_HANDLER,
49611   	ZEND_NULL_HANDLER,
49612   	ZEND_NULL_HANDLER,
49613   	ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
49614   	ZEND_NULL_HANDLER,
49615   	ZEND_NULL_HANDLER,
49616   	ZEND_NULL_HANDLER,
49617   	ZEND_NULL_HANDLER,
49618   	ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
49619   	ZEND_NULL_HANDLER,
49620   	ZEND_NULL_HANDLER,
49621   	ZEND_NULL_HANDLER,
49622   	ZEND_NULL_HANDLER,
49623   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49624   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49625   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49626   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49627   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49628   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49629   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49630   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49631   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49632   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49633   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49634   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49635   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49636   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49637   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49638   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49639   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49640   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49641   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49642   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49643   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49644   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49645   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49646   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49647   	ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_HANDLER,
49648   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49649   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49650   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49651   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49652   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49653   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49654   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49655   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49656   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49657   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49658   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49659   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49660   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49661   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49662   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49663   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49664   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49665   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49666   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49667   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49668   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49669   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49670   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49671   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49672   	ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
49673   	ZEND_NULL_HANDLER,
49674   	ZEND_NULL_HANDLER,
49675   	ZEND_NULL_HANDLER,
49676   	ZEND_NULL_HANDLER,
49677   	ZEND_NULL_HANDLER,
49678   	ZEND_NULL_HANDLER,
49679   	ZEND_NULL_HANDLER,
49680   	ZEND_NULL_HANDLER,
49681   	ZEND_NULL_HANDLER,
49682   	ZEND_NULL_HANDLER,
49683   	ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER,
49684   	ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_HANDLER,
49685   	ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_HANDLER,
49686   	ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER,
49687   	ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER,
49688   	ZEND_NULL_HANDLER,
49689   	ZEND_NULL_HANDLER,
49690   	ZEND_NULL_HANDLER,
49691   	ZEND_NULL_HANDLER,
49692   	ZEND_NULL_HANDLER,
49693   	ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER,
49694   	ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_HANDLER,
49695   	ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_HANDLER,
49696   	ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER,
49697   	ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER,
49698   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
49699   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
49700   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
49701   	ZEND_NULL_HANDLER,
49702   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
49703   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
49704   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
49705   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
49706   	ZEND_NULL_HANDLER,
49707   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
49708   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
49709   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
49710   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
49711   	ZEND_NULL_HANDLER,
49712   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
49713   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
49714   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49715   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
49716   	ZEND_NULL_HANDLER,
49717   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
49718   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
49719   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
49720   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
49721   	ZEND_NULL_HANDLER,
49722   	ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
49723   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49724   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49725   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49726   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49727   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49728   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49729   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49730   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49731   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49732   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49733   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49734   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49735   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49736   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49737   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49738   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49739   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49740   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49741   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49742   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49743   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49744   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49745   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49746   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49747   	ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
49748   	ZEND_USER_OPCODE_SPEC_HANDLER,
49749   	ZEND_USER_OPCODE_SPEC_HANDLER,
49750   	ZEND_USER_OPCODE_SPEC_HANDLER,
49751   	ZEND_USER_OPCODE_SPEC_HANDLER,
49752   	ZEND_USER_OPCODE_SPEC_HANDLER,
49753   	ZEND_USER_OPCODE_SPEC_HANDLER,
49754   	ZEND_USER_OPCODE_SPEC_HANDLER,
49755   	ZEND_USER_OPCODE_SPEC_HANDLER,
49756   	ZEND_USER_OPCODE_SPEC_HANDLER,
49757   	ZEND_USER_OPCODE_SPEC_HANDLER,
49758   	ZEND_USER_OPCODE_SPEC_HANDLER,
49759   	ZEND_USER_OPCODE_SPEC_HANDLER,
49760   	ZEND_USER_OPCODE_SPEC_HANDLER,
49761   	ZEND_USER_OPCODE_SPEC_HANDLER,
49762   	ZEND_USER_OPCODE_SPEC_HANDLER,
49763   	ZEND_USER_OPCODE_SPEC_HANDLER,
49764   	ZEND_USER_OPCODE_SPEC_HANDLER,
49765   	ZEND_USER_OPCODE_SPEC_HANDLER,
49766   	ZEND_USER_OPCODE_SPEC_HANDLER,
49767   	ZEND_USER_OPCODE_SPEC_HANDLER,
49768   	ZEND_USER_OPCODE_SPEC_HANDLER,
49769   	ZEND_USER_OPCODE_SPEC_HANDLER,
49770   	ZEND_USER_OPCODE_SPEC_HANDLER,
49771   	ZEND_USER_OPCODE_SPEC_HANDLER,
49772   	ZEND_USER_OPCODE_SPEC_HANDLER,
49773   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49774   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49775   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49776   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49777   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49778   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49779   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49780   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49781   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49782   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49783   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49784   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49785   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49786   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49787   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49788   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49789   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49790   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49791   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49792   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49793   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49794   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49795   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49796   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49797   	ZEND_ASSERT_CHECK_SPEC_HANDLER,
49798   	ZEND_JMP_SET_SPEC_CONST_HANDLER,
49799   	ZEND_JMP_SET_SPEC_CONST_HANDLER,
49800   	ZEND_JMP_SET_SPEC_CONST_HANDLER,
49801   	ZEND_JMP_SET_SPEC_CONST_HANDLER,
49802   	ZEND_JMP_SET_SPEC_CONST_HANDLER,
49803   	ZEND_JMP_SET_SPEC_TMP_HANDLER,
49804   	ZEND_JMP_SET_SPEC_TMP_HANDLER,
49805   	ZEND_JMP_SET_SPEC_TMP_HANDLER,
49806   	ZEND_JMP_SET_SPEC_TMP_HANDLER,
49807   	ZEND_JMP_SET_SPEC_TMP_HANDLER,
49808   	ZEND_JMP_SET_SPEC_VAR_HANDLER,
49809   	ZEND_JMP_SET_SPEC_VAR_HANDLER,
49810   	ZEND_JMP_SET_SPEC_VAR_HANDLER,
49811   	ZEND_JMP_SET_SPEC_VAR_HANDLER,
49812   	ZEND_JMP_SET_SPEC_VAR_HANDLER,
49813   	ZEND_NULL_HANDLER,
49814   	ZEND_NULL_HANDLER,
49815   	ZEND_NULL_HANDLER,
49816   	ZEND_NULL_HANDLER,
49817   	ZEND_NULL_HANDLER,
49818   	ZEND_JMP_SET_SPEC_CV_HANDLER,
49819   	ZEND_JMP_SET_SPEC_CV_HANDLER,
49820   	ZEND_JMP_SET_SPEC_CV_HANDLER,
49821   	ZEND_JMP_SET_SPEC_CV_HANDLER,
49822   	ZEND_JMP_SET_SPEC_CV_HANDLER,
49823   	ZEND_NULL_HANDLER,
49824   	ZEND_NULL_HANDLER,
49825   	ZEND_NULL_HANDLER,
49826   	ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
49827   	ZEND_NULL_HANDLER,
49828   	ZEND_NULL_HANDLER,
49829   	ZEND_NULL_HANDLER,
49830   	ZEND_NULL_HANDLER,
49831   	ZEND_NULL_HANDLER,
49832   	ZEND_NULL_HANDLER,
49833   	ZEND_NULL_HANDLER,
49834   	ZEND_NULL_HANDLER,
49835   	ZEND_NULL_HANDLER,
49836   	ZEND_NULL_HANDLER,
49837   	ZEND_NULL_HANDLER,
49838   	ZEND_NULL_HANDLER,
49839   	ZEND_NULL_HANDLER,
49840   	ZEND_NULL_HANDLER,
49841   	ZEND_NULL_HANDLER,
49842   	ZEND_NULL_HANDLER,
49843   	ZEND_NULL_HANDLER,
49844   	ZEND_NULL_HANDLER,
49845   	ZEND_NULL_HANDLER,
49846   	ZEND_NULL_HANDLER,
49847   	ZEND_NULL_HANDLER,
49848   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49849   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49850   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49851   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49852   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49853   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49854   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49855   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49856   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49857   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49858   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49859   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49860   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49861   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49862   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49863   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49864   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49865   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49866   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49867   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49868   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49869   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49870   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49871   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49872   	ZEND_ADD_TRAIT_SPEC_HANDLER,
49873   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49874   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49875   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49876   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49877   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49878   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49879   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49880   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49881   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49882   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49883   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49884   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49885   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49886   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49887   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49888   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49889   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49890   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49891   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49892   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49893   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49894   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49895   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49896   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49897   	ZEND_BIND_TRAITS_SPEC_HANDLER,
49898   	ZEND_NULL_HANDLER,
49899   	ZEND_NULL_HANDLER,
49900   	ZEND_NULL_HANDLER,
49901   	ZEND_NULL_HANDLER,
49902   	ZEND_NULL_HANDLER,
49903   	ZEND_NULL_HANDLER,
49904   	ZEND_NULL_HANDLER,
49905   	ZEND_NULL_HANDLER,
49906   	ZEND_NULL_HANDLER,
49907   	ZEND_NULL_HANDLER,
49908   	ZEND_NULL_HANDLER,
49909   	ZEND_NULL_HANDLER,
49910   	ZEND_NULL_HANDLER,
49911   	ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
49912   	ZEND_NULL_HANDLER,
49913   	ZEND_NULL_HANDLER,
49914   	ZEND_NULL_HANDLER,
49915   	ZEND_NULL_HANDLER,
49916   	ZEND_NULL_HANDLER,
49917   	ZEND_NULL_HANDLER,
49918   	ZEND_NULL_HANDLER,
49919   	ZEND_NULL_HANDLER,
49920   	ZEND_NULL_HANDLER,
49921   	ZEND_NULL_HANDLER,
49922   	ZEND_NULL_HANDLER,
49923   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49924   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49925   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49926   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49927   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49928   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49929   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49930   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49931   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49932   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49933   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49934   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49935   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49936   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49937   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49938   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49939   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49940   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49941   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49942   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49943   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49944   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49945   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49946   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49947   	ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
49948   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49949   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49950   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49951   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49952   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49953   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49954   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49955   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49956   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49957   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49958   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49959   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49960   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49961   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49962   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49963   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49964   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49965   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49966   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49967   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49968   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49969   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49970   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49971   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49972   	ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
49973   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49974   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49975   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49976   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49977   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49978   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49979   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49980   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49981   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49982   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49983   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49984   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49985   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49986   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49987   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49988   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49989   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49990   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49991   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49992   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49993   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49994   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49995   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49996   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49997   	ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
49998   	ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
49999   	ZEND_YIELD_SPEC_CONST_TMP_HANDLER,
50000   	ZEND_YIELD_SPEC_CONST_VAR_HANDLER,
50001   	ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
50002   	ZEND_YIELD_SPEC_CONST_CV_HANDLER,
50003   	ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
50004   	ZEND_YIELD_SPEC_TMP_TMP_HANDLER,
50005   	ZEND_YIELD_SPEC_TMP_VAR_HANDLER,
50006   	ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
50007   	ZEND_YIELD_SPEC_TMP_CV_HANDLER,
50008   	ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
50009   	ZEND_YIELD_SPEC_VAR_TMP_HANDLER,
50010   	ZEND_YIELD_SPEC_VAR_VAR_HANDLER,
50011   	ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
50012   	ZEND_YIELD_SPEC_VAR_CV_HANDLER,
50013   	ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
50014   	ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER,
50015   	ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER,
50016   	ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
50017   	ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
50018   	ZEND_YIELD_SPEC_CV_CONST_HANDLER,
50019   	ZEND_YIELD_SPEC_CV_TMP_HANDLER,
50020   	ZEND_YIELD_SPEC_CV_VAR_HANDLER,
50021   	ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
50022   	ZEND_YIELD_SPEC_CV_CV_HANDLER,
50023   	ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
50024   	ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
50025   	ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
50026   	ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
50027   	ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
50028   	ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
50029   	ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
50030   	ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
50031   	ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
50032   	ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
50033   	ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
50034   	ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
50035   	ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
50036   	ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
50037   	ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
50038   	ZEND_NULL_HANDLER,
50039   	ZEND_NULL_HANDLER,
50040   	ZEND_NULL_HANDLER,
50041   	ZEND_NULL_HANDLER,
50042   	ZEND_NULL_HANDLER,
50043   	ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
50044   	ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
50045   	ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
50046   	ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
50047   	ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
50048   	ZEND_FAST_CALL_SPEC_HANDLER,
50049   	ZEND_FAST_CALL_SPEC_HANDLER,
50050   	ZEND_FAST_CALL_SPEC_HANDLER,
50051   	ZEND_FAST_CALL_SPEC_HANDLER,
50052   	ZEND_FAST_CALL_SPEC_HANDLER,
50053   	ZEND_FAST_CALL_SPEC_HANDLER,
50054   	ZEND_FAST_CALL_SPEC_HANDLER,
50055   	ZEND_FAST_CALL_SPEC_HANDLER,
50056   	ZEND_FAST_CALL_SPEC_HANDLER,
50057   	ZEND_FAST_CALL_SPEC_HANDLER,
50058   	ZEND_FAST_CALL_SPEC_HANDLER,
50059   	ZEND_FAST_CALL_SPEC_HANDLER,
50060   	ZEND_FAST_CALL_SPEC_HANDLER,
50061   	ZEND_FAST_CALL_SPEC_HANDLER,
50062   	ZEND_FAST_CALL_SPEC_HANDLER,
50063   	ZEND_FAST_CALL_SPEC_HANDLER,
50064   	ZEND_FAST_CALL_SPEC_HANDLER,
50065   	ZEND_FAST_CALL_SPEC_HANDLER,
50066   	ZEND_FAST_CALL_SPEC_HANDLER,
50067   	ZEND_FAST_CALL_SPEC_HANDLER,
50068   	ZEND_FAST_CALL_SPEC_HANDLER,
50069   	ZEND_FAST_CALL_SPEC_HANDLER,
50070   	ZEND_FAST_CALL_SPEC_HANDLER,
50071   	ZEND_FAST_CALL_SPEC_HANDLER,
50072   	ZEND_FAST_CALL_SPEC_HANDLER,
50073   	ZEND_FAST_RET_SPEC_HANDLER,
50074   	ZEND_FAST_RET_SPEC_HANDLER,
50075   	ZEND_FAST_RET_SPEC_HANDLER,
50076   	ZEND_FAST_RET_SPEC_HANDLER,
50077   	ZEND_FAST_RET_SPEC_HANDLER,
50078   	ZEND_FAST_RET_SPEC_HANDLER,
50079   	ZEND_FAST_RET_SPEC_HANDLER,
50080   	ZEND_FAST_RET_SPEC_HANDLER,
50081   	ZEND_FAST_RET_SPEC_HANDLER,
50082   	ZEND_FAST_RET_SPEC_HANDLER,
50083   	ZEND_FAST_RET_SPEC_HANDLER,
50084   	ZEND_FAST_RET_SPEC_HANDLER,
50085   	ZEND_FAST_RET_SPEC_HANDLER,
50086   	ZEND_FAST_RET_SPEC_HANDLER,
50087   	ZEND_FAST_RET_SPEC_HANDLER,
50088   	ZEND_FAST_RET_SPEC_HANDLER,
50089   	ZEND_FAST_RET_SPEC_HANDLER,
50090   	ZEND_FAST_RET_SPEC_HANDLER,
50091   	ZEND_FAST_RET_SPEC_HANDLER,
50092   	ZEND_FAST_RET_SPEC_HANDLER,
50093   	ZEND_FAST_RET_SPEC_HANDLER,
50094   	ZEND_FAST_RET_SPEC_HANDLER,
50095   	ZEND_FAST_RET_SPEC_HANDLER,
50096   	ZEND_FAST_RET_SPEC_HANDLER,
50097   	ZEND_FAST_RET_SPEC_HANDLER,
50098   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50099   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50100   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50101   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50102   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50103   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50104   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50105   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50106   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50107   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50108   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50109   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50110   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50111   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50112   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50113   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50114   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50115   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50116   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50117   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50118   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50119   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50120   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50121   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50122   	ZEND_RECV_VARIADIC_SPEC_HANDLER,
50123   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50124   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50125   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50126   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50127   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50128   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50129   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50130   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50131   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50132   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50133   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50134   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50135   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50136   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50137   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50138   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50139   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50140   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50141   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50142   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50143   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50144   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50145   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50146   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50147   	ZEND_SEND_UNPACK_SPEC_HANDLER,
50148   	ZEND_POW_SPEC_CONST_CONST_HANDLER,
50149   	ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
50150   	ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
50151   	ZEND_NULL_HANDLER,
50152   	ZEND_POW_SPEC_CONST_CV_HANDLER,
50153   	ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
50154   	ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
50155   	ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
50156   	ZEND_NULL_HANDLER,
50157   	ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
50158   	ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
50159   	ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
50160   	ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
50161   	ZEND_NULL_HANDLER,
50162   	ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
50163   	ZEND_NULL_HANDLER,
50164   	ZEND_NULL_HANDLER,
50165   	ZEND_NULL_HANDLER,
50166   	ZEND_NULL_HANDLER,
50167   	ZEND_NULL_HANDLER,
50168   	ZEND_POW_SPEC_CV_CONST_HANDLER,
50169   	ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
50170   	ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
50171   	ZEND_NULL_HANDLER,
50172   	ZEND_POW_SPEC_CV_CV_HANDLER,
50173   	ZEND_NULL_HANDLER,
50174   	ZEND_NULL_HANDLER,
50175   	ZEND_NULL_HANDLER,
50176   	ZEND_NULL_HANDLER,
50177   	ZEND_NULL_HANDLER,
50178   	ZEND_NULL_HANDLER,
50179   	ZEND_NULL_HANDLER,
50180   	ZEND_NULL_HANDLER,
50181   	ZEND_NULL_HANDLER,
50182   	ZEND_NULL_HANDLER,
50183   	ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER,
50184   	ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
50185   	ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
50186   	ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_HANDLER,
50187   	ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER,
50188   	ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_HANDLER,
50189   	ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_HANDLER,
50190   	ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_HANDLER,
50191   	ZEND_ASSIGN_POW_SPEC_UNUSED_UNUSED_HANDLER,
50192   	ZEND_ASSIGN_POW_SPEC_UNUSED_CV_HANDLER,
50193   	ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER,
50194   	ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
50195   	ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
50196   	ZEND_ASSIGN_POW_SPEC_CV_UNUSED_HANDLER,
50197   	ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER,
50198   	ZEND_NULL_HANDLER,
50199   	ZEND_NULL_HANDLER,
50200   	ZEND_NULL_HANDLER,
50201   	ZEND_NULL_HANDLER,
50202   	ZEND_NULL_HANDLER,
50203   	ZEND_NULL_HANDLER,
50204   	ZEND_NULL_HANDLER,
50205   	ZEND_NULL_HANDLER,
50206   	ZEND_NULL_HANDLER,
50207   	ZEND_NULL_HANDLER,
50208   	ZEND_NULL_HANDLER,
50209   	ZEND_NULL_HANDLER,
50210   	ZEND_NULL_HANDLER,
50211   	ZEND_NULL_HANDLER,
50212   	ZEND_NULL_HANDLER,
50213   	ZEND_NULL_HANDLER,
50214   	ZEND_NULL_HANDLER,
50215   	ZEND_NULL_HANDLER,
50216   	ZEND_NULL_HANDLER,
50217   	ZEND_NULL_HANDLER,
50218   	ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
50219   	ZEND_NULL_HANDLER,
50220   	ZEND_NULL_HANDLER,
50221   	ZEND_NULL_HANDLER,
50222   	ZEND_NULL_HANDLER,
50223   	ZEND_COALESCE_SPEC_CONST_HANDLER,
50224   	ZEND_COALESCE_SPEC_CONST_HANDLER,
50225   	ZEND_COALESCE_SPEC_CONST_HANDLER,
50226   	ZEND_COALESCE_SPEC_CONST_HANDLER,
50227   	ZEND_COALESCE_SPEC_CONST_HANDLER,
50228   	ZEND_COALESCE_SPEC_TMP_HANDLER,
50229   	ZEND_COALESCE_SPEC_TMP_HANDLER,
50230   	ZEND_COALESCE_SPEC_TMP_HANDLER,
50231   	ZEND_COALESCE_SPEC_TMP_HANDLER,
50232   	ZEND_COALESCE_SPEC_TMP_HANDLER,
50233   	ZEND_COALESCE_SPEC_VAR_HANDLER,
50234   	ZEND_COALESCE_SPEC_VAR_HANDLER,
50235   	ZEND_COALESCE_SPEC_VAR_HANDLER,
50236   	ZEND_COALESCE_SPEC_VAR_HANDLER,
50237   	ZEND_COALESCE_SPEC_VAR_HANDLER,
50238   	ZEND_NULL_HANDLER,
50239   	ZEND_NULL_HANDLER,
50240   	ZEND_NULL_HANDLER,
50241   	ZEND_NULL_HANDLER,
50242   	ZEND_NULL_HANDLER,
50243   	ZEND_COALESCE_SPEC_CV_HANDLER,
50244   	ZEND_COALESCE_SPEC_CV_HANDLER,
50245   	ZEND_COALESCE_SPEC_CV_HANDLER,
50246   	ZEND_COALESCE_SPEC_CV_HANDLER,
50247   	ZEND_COALESCE_SPEC_CV_HANDLER,
50248   	ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
50249   	ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
50250   	ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
50251   	ZEND_NULL_HANDLER,
50252   	ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
50253   	ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
50254   	ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
50255   	ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
50256   	ZEND_NULL_HANDLER,
50257   	ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
50258   	ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
50259   	ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
50260   	ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
50261   	ZEND_NULL_HANDLER,
50262   	ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
50263   	ZEND_NULL_HANDLER,
50264   	ZEND_NULL_HANDLER,
50265   	ZEND_NULL_HANDLER,
50266   	ZEND_NULL_HANDLER,
50267   	ZEND_NULL_HANDLER,
50268   	ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
50269   	ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
50270   	ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
50271   	ZEND_NULL_HANDLER,
50272   	ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
50273   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50274   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50275   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50276   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50277   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50278   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50279   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50280   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50281   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50282   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50283   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50284   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50285   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50286   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50287   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50288   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50289   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50290   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50291   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50292   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50293   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50294   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50295   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50296   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50297   	ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
50298   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50299   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50300   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50301   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50302   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50303   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50304   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50305   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50306   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50307   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50308   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50309   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50310   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50311   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50312   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50313   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50314   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50315   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50316   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50317   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50318   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50319   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50320   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50321   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50322   	ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_HANDLER,
50323   	ZEND_NULL_HANDLER
50324   };
50325   zend_opcode_handlers = labels;
50326 }
50327 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
50328 {
50329 		static const int zend_vm_decode[] = {
50330 			_UNUSED_CODE, /* 0              */
50331 			_CONST_CODE,  /* 1 = IS_CONST   */
50332 			_TMP_CODE,    /* 2 = IS_TMP_VAR */
50333 			_UNUSED_CODE, /* 3              */
50334 			_VAR_CODE,    /* 4 = IS_VAR     */
50335 			_UNUSED_CODE, /* 5              */
50336 			_UNUSED_CODE, /* 6              */
50337 			_UNUSED_CODE, /* 7              */
50338 			_UNUSED_CODE, /* 8 = IS_UNUSED  */
50339 			_UNUSED_CODE, /* 9              */
50340 			_UNUSED_CODE, /* 10             */
50341 			_UNUSED_CODE, /* 11             */
50342 			_UNUSED_CODE, /* 12             */
50343 			_UNUSED_CODE, /* 13             */
50344 			_UNUSED_CODE, /* 14             */
50345 			_UNUSED_CODE, /* 15             */
50346 			_CV_CODE      /* 16 = IS_CV     */
50347 		};
50348 		return zend_opcode_handlers[opcode * 25 + zend_vm_decode[op->op1_type] * 5 + zend_vm_decode[op->op2_type]];
50349 }
50350 
50351 ZEND_API void zend_vm_set_opcode_handler(zend_op* op)
50352 {
50353 	op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);
50354 }
50355 
50356 ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)
50357 {
50358 	int ret;
50359 #ifdef ZEND_VM_IP_GLOBAL_REG
50360 	const zend_op *orig_opline = opline;
50361 #endif
50362 #ifdef ZEND_VM_FP_GLOBAL_REG
50363 	zend_execute_data *orig_execute_data = execute_data;
50364 	execute_data = ex;
50365 #else
50366 	zend_execute_data *execute_data = ex;
50367 #endif
50368 
50369 	LOAD_OPLINE();
50370 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
50371 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
50372 	if (EXPECTED(opline)) {
50373 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
50374 		SAVE_OPLINE();
50375 	} else {
50376 		ret = -1;
50377 	}
50378 #else
50379 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
50380 	SAVE_OPLINE();
50381 #endif
50382 #ifdef ZEND_VM_FP_GLOBAL_REG
50383 	execute_data = orig_execute_data;
50384 #endif
50385 #ifdef ZEND_VM_IP_GLOBAL_REG
50386 	opline = orig_opline;
50387 #endif
50388 	return ret;
50389 }
50390 
50391