xref: /PHP-7.1/Zend/zend_vm_execute.h (revision d1b1866a)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1998-2018 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 #define SPEC_START_MASK        0x0000ffff
310 #define SPEC_RULE_OP1          0x00010000
311 #define SPEC_RULE_OP2          0x00020000
312 #define SPEC_RULE_OP_DATA      0x00040000
313 #define SPEC_RULE_RETVAL       0x00080000
314 #define SPEC_RULE_QUICK_ARG    0x00100000
315 #define SPEC_RULE_SMART_BRANCH 0x00200000
316 #define SPEC_RULE_DIM_OBJ      0x00400000
317 
318 static const uint32_t *zend_spec_handlers;
319 static const void **zend_opcode_handlers;
320 static int zend_handlers_count;
321 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);
322 
323 
324 #ifdef ZEND_VM_FP_GLOBAL_REG
325 #pragma GCC diagnostic ignored "-Wvolatile-register-var"
326 register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
327 #pragma GCC diagnostic warning "-Wvolatile-register-var"
328 #endif
329 
330 #ifdef ZEND_VM_IP_GLOBAL_REG
331 #pragma GCC diagnostic ignored "-Wvolatile-register-var"
332 register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
333 #pragma GCC diagnostic warning "-Wvolatile-register-var"
334 #endif
335 
336 #ifdef ZEND_VM_FP_GLOBAL_REG
337 # define ZEND_OPCODE_HANDLER_ARGS void
338 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
339 # define ZEND_OPCODE_HANDLER_ARGS_DC
340 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
341 #else
342 # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
343 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
344 # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
345 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
346 #endif
347 
348 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
349 # define ZEND_OPCODE_HANDLER_RET void
350 # define ZEND_VM_TAIL_CALL(call) call; return
351 # ifdef ZEND_VM_TAIL_CALL_DISPATCH
352 #  define ZEND_VM_CONTINUE()     ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
353 # else
354 #  define ZEND_VM_CONTINUE()     return
355 # endif
356 # define ZEND_VM_RETURN()        opline = NULL; return
357 #else
358 # define ZEND_OPCODE_HANDLER_RET int
359 # define ZEND_VM_TAIL_CALL(call) return call
360 # define ZEND_VM_CONTINUE()      return  0
361 # define ZEND_VM_RETURN()        return -1
362 #endif
363 
364 typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
365 
366 #undef OPLINE
367 #undef DCL_OPLINE
368 #undef USE_OPLINE
369 #undef LOAD_OPLINE
370 #undef LOAD_OPLINE_EX
371 #undef SAVE_OPLINE
372 #define DCL_OPLINE
373 #ifdef ZEND_VM_IP_GLOBAL_REG
374 # define OPLINE opline
375 # define USE_OPLINE
376 # define LOAD_OPLINE() opline = EX(opline)
377 # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
378 # define SAVE_OPLINE() EX(opline) = opline
379 #else
380 # define OPLINE EX(opline)
381 # define USE_OPLINE const zend_op *opline = EX(opline);
382 # define LOAD_OPLINE()
383 # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
384 # define SAVE_OPLINE()
385 #endif
386 #undef HANDLE_EXCEPTION
387 #undef HANDLE_EXCEPTION_LEAVE
388 #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
389 #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
390 #if defined(ZEND_VM_FP_GLOBAL_REG)
391 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
392 # define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
393 #elif defined(ZEND_VM_IP_GLOBAL_REG)
394 # define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; return 1
395 # define ZEND_VM_LEAVE()           return  2
396 #else
397 # define ZEND_VM_ENTER()           return  1
398 # define ZEND_VM_LEAVE()           return  2
399 #endif
400 #define ZEND_VM_INTERRUPT()      ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
401 #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
402 #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));
403 
404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
405 
execute_ex(zend_execute_data * ex)406 ZEND_API void execute_ex(zend_execute_data *ex)
407 {
408 	DCL_OPLINE
409 
410 #ifdef ZEND_VM_IP_GLOBAL_REG
411 	const zend_op *orig_opline = opline;
412 #endif
413 #ifdef ZEND_VM_FP_GLOBAL_REG
414 	zend_execute_data *orig_execute_data = execute_data;
415 	execute_data = ex;
416 #else
417 	zend_execute_data *execute_data = ex;
418 #endif
419 
420 
421 	LOAD_OPLINE();
422 	ZEND_VM_LOOP_INTERRUPT_CHECK();
423 
424 	while (1) {
425 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
426 			int ret;
427 #endif
428 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
429 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
430 		if (UNEXPECTED(!OPLINE)) {
431 #else
432 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
433 #endif
434 #ifdef ZEND_VM_FP_GLOBAL_REG
435 			execute_data = orig_execute_data;
436 # ifdef ZEND_VM_IP_GLOBAL_REG
437 			opline = orig_opline;
438 # endif
439 			return;
440 #else
441 			if (EXPECTED(ret > 0)) {
442 				execute_data = EG(current_execute_data);
443 				ZEND_VM_LOOP_INTERRUPT_CHECK();
444 			} else {
445 # ifdef ZEND_VM_IP_GLOBAL_REG
446 				opline = orig_opline;
447 # endif
448 				return;
449 			}
450 #endif
451 		}
452 
453 	}
454 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
455 }
456 
457 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
458 {
459 	zend_execute_data *execute_data;
460 
461 	if (EG(exception) != NULL) {
462 		return;
463 	}
464 
465 	execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
466 		(zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data)));
467 	if (EG(current_execute_data)) {
468 		execute_data->symbol_table = zend_rebuild_symbol_table();
469 	} else {
470 		execute_data->symbol_table = &EG(symbol_table);
471 	}
472 	EX(prev_execute_data) = EG(current_execute_data);
473 	i_init_execute_data(execute_data, op_array, return_value);
474 	zend_execute_ex(execute_data);
475 	zend_vm_stack_free_call_frame(execute_data);
476 }
477 
478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
479 {
480 	zend_execute_data *old_execute_data;
481 	uint32_t call_info = EX_CALL_INFO();
482 
483 	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) {
484 		i_free_compiled_variables(execute_data);
485 
486 		EG(current_execute_data) = EX(prev_execute_data);
487 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
488 			zend_object *object = Z_OBJ(execute_data->This);
489 #if 0
490 			if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
491 #else
492 			if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
493 #endif
494 				GC_REFCOUNT(object)--;
495 				zend_object_store_ctor_failed(object);
496 			}
497 			OBJ_RELEASE(object);
498 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
499 			OBJ_RELEASE((zend_object*)execute_data->func->op_array.prototype);
500 		}
501 		EG(vm_stack_top) = (zval*)execute_data;
502 		execute_data = EX(prev_execute_data);
503 
504 		if (UNEXPECTED(EG(exception) != NULL)) {
505 			const zend_op *old_opline = EX(opline);
506 			zend_throw_exception_internal(NULL);
507 			if (RETURN_VALUE_USED(old_opline)) {
508 				zval_ptr_dtor(EX_VAR(old_opline->result.var));
509 			}
510 			HANDLE_EXCEPTION_LEAVE();
511 		}
512 
513 		LOAD_NEXT_OPLINE();
514 		ZEND_VM_LEAVE();
515 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
516 		i_free_compiled_variables(execute_data);
517 
518 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
519 			zend_clean_and_cache_symbol_table(EX(symbol_table));
520 		}
521 		EG(current_execute_data) = EX(prev_execute_data);
522 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
523 			zend_object *object = Z_OBJ(execute_data->This);
524 #if 0
525 			if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) {
526 #else
527 			if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) {
528 #endif
529 				GC_REFCOUNT(object)--;
530 				zend_object_store_ctor_failed(object);
531 			}
532 			OBJ_RELEASE(object);
533 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
534 			OBJ_RELEASE((zend_object*)execute_data->func->op_array.prototype);
535 		}
536 
537 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
538 		old_execute_data = execute_data;
539 		execute_data = EX(prev_execute_data);
540 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
541 
542 		if (UNEXPECTED(EG(exception) != NULL)) {
543 			const zend_op *old_opline = EX(opline);
544 			zend_throw_exception_internal(NULL);
545 			if (RETURN_VALUE_USED(old_opline)) {
546 				zval_ptr_dtor(EX_VAR(old_opline->result.var));
547 			}
548 			HANDLE_EXCEPTION_LEAVE();
549 		}
550 
551 		LOAD_NEXT_OPLINE();
552 		ZEND_VM_LEAVE();
553 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
554 		zend_detach_symbol_table(execute_data);
555 		destroy_op_array(&EX(func)->op_array);
556 		efree_size(EX(func), sizeof(zend_op_array));
557 		old_execute_data = execute_data;
558 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
559 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
560 
561 		zend_attach_symbol_table(execute_data);
562 		if (UNEXPECTED(EG(exception) != NULL)) {
563 			zend_throw_exception_internal(NULL);
564 			HANDLE_EXCEPTION_LEAVE();
565 		}
566 
567 		LOAD_NEXT_OPLINE();
568 		ZEND_VM_LEAVE();
569 	} else {
570 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
571 			i_free_compiled_variables(execute_data);
572 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
573 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
574 					zend_clean_and_cache_symbol_table(EX(symbol_table));
575 				}
576 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
577 			}
578 			EG(current_execute_data) = EX(prev_execute_data);
579 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
580 				OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype);
581 			}
582 			ZEND_VM_RETURN();
583 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
584 			zend_array *symbol_table = EX(symbol_table);
585 
586 			zend_detach_symbol_table(execute_data);
587 			old_execute_data = EX(prev_execute_data);
588 			while (old_execute_data) {
589 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
590 					if (old_execute_data->symbol_table == symbol_table) {
591 						zend_attach_symbol_table(old_execute_data);
592 					}
593 					break;
594 				}
595 				old_execute_data = old_execute_data->prev_execute_data;
596 			}
597 			EG(current_execute_data) = EX(prev_execute_data);
598 			ZEND_VM_RETURN();
599 		}
600 	}
601 }
602 
603 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
604 {
605 	USE_OPLINE
606 
607 	ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
608 	ZEND_VM_CONTINUE();
609 }
610 
611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
612 {
613 	USE_OPLINE
614 	zend_execute_data *call = EX(call);
615 	zend_function *fbc = call->func;
616 	zval *ret;
617 	zval retval;
618 
619 	SAVE_OPLINE();
620 	EX(call) = call->prev_execute_data;
621 
622 	call->prev_execute_data = execute_data;
623 	EG(current_execute_data) = call;
624 
625 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
626 	ZVAL_NULL(ret);
627 
628 	fbc->internal_function.handler(call, ret);
629 
630 #if ZEND_DEBUG
631 	ZEND_ASSERT(
632 		EG(exception) || !call->func ||
633 		!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
634 		zend_verify_internal_return_type(call->func, ret));
635 	ZEND_ASSERT(!Z_ISREF_P(ret));
636 #endif
637 
638 	EG(current_execute_data) = call->prev_execute_data;
639 	zend_vm_stack_free_args(call);
640 	zend_vm_stack_free_call_frame(call);
641 
642 	if (!0) {
643 		zval_ptr_dtor(ret);
644 	}
645 
646 	if (UNEXPECTED(EG(exception) != NULL)) {
647 		zend_throw_exception_internal(NULL);
648 		if (0) {
649 			zval_ptr_dtor(EX_VAR(opline->result.var));
650 		}
651 		HANDLE_EXCEPTION();
652 	}
653 
654 	ZEND_VM_SET_OPCODE(opline + 1);
655 	ZEND_VM_CONTINUE();
656 }
657 
658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
659 {
660 	USE_OPLINE
661 	zend_execute_data *call = EX(call);
662 	zend_function *fbc = call->func;
663 	zval *ret;
664 	zval retval;
665 
666 	SAVE_OPLINE();
667 	EX(call) = call->prev_execute_data;
668 
669 	call->prev_execute_data = execute_data;
670 	EG(current_execute_data) = call;
671 
672 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
673 	ZVAL_NULL(ret);
674 
675 	fbc->internal_function.handler(call, ret);
676 
677 #if ZEND_DEBUG
678 	ZEND_ASSERT(
679 		EG(exception) || !call->func ||
680 		!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
681 		zend_verify_internal_return_type(call->func, ret));
682 	ZEND_ASSERT(!Z_ISREF_P(ret));
683 #endif
684 
685 	EG(current_execute_data) = call->prev_execute_data;
686 	zend_vm_stack_free_args(call);
687 	zend_vm_stack_free_call_frame(call);
688 
689 	if (!1) {
690 		zval_ptr_dtor(ret);
691 	}
692 
693 	if (UNEXPECTED(EG(exception) != NULL)) {
694 		zend_throw_exception_internal(NULL);
695 		if (1) {
696 			zval_ptr_dtor(EX_VAR(opline->result.var));
697 		}
698 		HANDLE_EXCEPTION();
699 	}
700 
701 	ZEND_VM_SET_OPCODE(opline + 1);
702 	ZEND_VM_CONTINUE();
703 }
704 
705 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
706 {
707 	USE_OPLINE
708 	zend_execute_data *call = EX(call);
709 	zend_function *fbc = call->func;
710 	zval *ret;
711 
712 	SAVE_OPLINE();
713 	EX(call) = call->prev_execute_data;
714 
715 	ret = NULL;
716 	if (0) {
717 		ret = EX_VAR(opline->result.var);
718 		ZVAL_NULL(ret);
719 	}
720 
721 	call->prev_execute_data = execute_data;
722 	i_init_func_execute_data(call, &fbc->op_array, ret);
723 
724 	ZEND_VM_ENTER();
725 }
726 
727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
728 {
729 	USE_OPLINE
730 	zend_execute_data *call = EX(call);
731 	zend_function *fbc = call->func;
732 	zval *ret;
733 
734 	SAVE_OPLINE();
735 	EX(call) = call->prev_execute_data;
736 
737 	ret = NULL;
738 	if (1) {
739 		ret = EX_VAR(opline->result.var);
740 		ZVAL_NULL(ret);
741 	}
742 
743 	call->prev_execute_data = execute_data;
744 	i_init_func_execute_data(call, &fbc->op_array, ret);
745 
746 	ZEND_VM_ENTER();
747 }
748 
749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
750 {
751 	USE_OPLINE
752 	zend_execute_data *call = EX(call);
753 	zend_function *fbc = call->func;
754 	zval *ret;
755 
756 	SAVE_OPLINE();
757 	EX(call) = call->prev_execute_data;
758 
759 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
760 		ret = NULL;
761 		if (0) {
762 			ret = EX_VAR(opline->result.var);
763 			ZVAL_NULL(ret);
764 		}
765 
766 		call->prev_execute_data = execute_data;
767 		i_init_func_execute_data(call, &fbc->op_array, ret);
768 
769 		ZEND_VM_ENTER();
770 	} else {
771 		zval retval;
772 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
773 
774 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
775 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
776 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
777 				fbc->common.scope ? "::" : "",
778 				ZSTR_VAL(fbc->common.function_name));
779 			if (UNEXPECTED(EG(exception) != NULL)) {
780 				HANDLE_EXCEPTION();
781 			}
782 		}
783 
784 		call->prev_execute_data = execute_data;
785 		EG(current_execute_data) = call;
786 
787 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
788 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
789 			zend_vm_stack_free_call_frame(call);
790 			zend_throw_exception_internal(NULL);
791 			HANDLE_EXCEPTION();
792 		}
793 
794 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
795 		ZVAL_NULL(ret);
796 
797 		fbc->internal_function.handler(call, ret);
798 
799 #if ZEND_DEBUG
800 		if (!EG(exception) && call->func) {
801 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
802 				zend_verify_internal_return_type(call->func, ret));
803 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
804 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
805 		}
806 #endif
807 
808 		EG(current_execute_data) = call->prev_execute_data;
809 		zend_vm_stack_free_args(call);
810 		zend_vm_stack_free_call_frame(call);
811 
812 		if (!0) {
813 			zval_ptr_dtor(ret);
814 		}
815 	}
816 
817 	if (UNEXPECTED(EG(exception) != NULL)) {
818 		zend_throw_exception_internal(NULL);
819 		if (0) {
820 			zval_ptr_dtor(EX_VAR(opline->result.var));
821 		}
822 		HANDLE_EXCEPTION();
823 	}
824 	ZEND_VM_SET_OPCODE(opline + 1);
825 	ZEND_VM_CONTINUE();
826 }
827 
828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
829 {
830 	USE_OPLINE
831 	zend_execute_data *call = EX(call);
832 	zend_function *fbc = call->func;
833 	zval *ret;
834 
835 	SAVE_OPLINE();
836 	EX(call) = call->prev_execute_data;
837 
838 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
839 		ret = NULL;
840 		if (1) {
841 			ret = EX_VAR(opline->result.var);
842 			ZVAL_NULL(ret);
843 		}
844 
845 		call->prev_execute_data = execute_data;
846 		i_init_func_execute_data(call, &fbc->op_array, ret);
847 
848 		ZEND_VM_ENTER();
849 	} else {
850 		zval retval;
851 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
852 
853 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
854 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
855 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
856 				fbc->common.scope ? "::" : "",
857 				ZSTR_VAL(fbc->common.function_name));
858 			if (UNEXPECTED(EG(exception) != NULL)) {
859 				HANDLE_EXCEPTION();
860 			}
861 		}
862 
863 		call->prev_execute_data = execute_data;
864 		EG(current_execute_data) = call;
865 
866 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
867 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
868 			zend_vm_stack_free_call_frame(call);
869 			zend_throw_exception_internal(NULL);
870 			HANDLE_EXCEPTION();
871 		}
872 
873 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
874 		ZVAL_NULL(ret);
875 
876 		fbc->internal_function.handler(call, ret);
877 
878 #if ZEND_DEBUG
879 		if (!EG(exception) && call->func) {
880 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
881 				zend_verify_internal_return_type(call->func, ret));
882 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
883 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
884 		}
885 #endif
886 
887 		EG(current_execute_data) = call->prev_execute_data;
888 		zend_vm_stack_free_args(call);
889 		zend_vm_stack_free_call_frame(call);
890 
891 		if (!1) {
892 			zval_ptr_dtor(ret);
893 		}
894 	}
895 
896 	if (UNEXPECTED(EG(exception) != NULL)) {
897 		zend_throw_exception_internal(NULL);
898 		if (1) {
899 			zval_ptr_dtor(EX_VAR(opline->result.var));
900 		}
901 		HANDLE_EXCEPTION();
902 	}
903 	ZEND_VM_SET_OPCODE(opline + 1);
904 	ZEND_VM_CONTINUE();
905 }
906 
907 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
908 {
909 	USE_OPLINE
910 	zend_execute_data *call = EX(call);
911 	zend_function *fbc = call->func;
912 	zend_object *object;
913 	zval *ret;
914 
915 	SAVE_OPLINE();
916 	EX(call) = call->prev_execute_data;
917 	if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
918 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
919 			zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
920 			HANDLE_EXCEPTION();
921 		}
922 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
923 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
924 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
925 				fbc->common.scope ? "::" : "",
926 				ZSTR_VAL(fbc->common.function_name));
927 			if (UNEXPECTED(EG(exception) != NULL)) {
928 				HANDLE_EXCEPTION();
929 			}
930 		}
931 	}
932 
933 	LOAD_OPLINE();
934 
935 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
936 		ret = NULL;
937 		if (0) {
938 			ret = EX_VAR(opline->result.var);
939 			ZVAL_NULL(ret);
940 		}
941 
942 		call->prev_execute_data = execute_data;
943 		i_init_func_execute_data(call, &fbc->op_array, ret);
944 
945 		if (EXPECTED(zend_execute_ex == execute_ex)) {
946 			ZEND_VM_ENTER();
947 		} else {
948 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
949 			zend_execute_ex(call);
950 		}
951 	} else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
952 		zval retval;
953 
954 		call->prev_execute_data = execute_data;
955 		EG(current_execute_data) = call;
956 
957 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
958 		  && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
959 			if (0) {
960 				ZVAL_UNDEF(EX_VAR(opline->result.var));
961 			}
962 			goto fcall_end;
963 		}
964 
965 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
966 		ZVAL_NULL(ret);
967 
968 		if (!zend_execute_internal) {
969 			/* saves one function call if zend_execute_internal is not used */
970 			fbc->internal_function.handler(call, ret);
971 		} else {
972 			zend_execute_internal(call, ret);
973 		}
974 
975 #if ZEND_DEBUG
976 		if (!EG(exception) && call->func) {
977 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
978 				zend_verify_internal_return_type(call->func, ret));
979 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
980 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
981 		}
982 #endif
983 
984 		EG(current_execute_data) = call->prev_execute_data;
985 		zend_vm_stack_free_args(call);
986 
987 		if (!0) {
988 			zval_ptr_dtor(ret);
989 		}
990 
991 	} else { /* ZEND_OVERLOADED_FUNCTION */
992 		zval retval;
993 
994 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
995 
996 		call->prev_execute_data = execute_data;
997 
998 		if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) {
999 			HANDLE_EXCEPTION();
1000 		}
1001 
1002 		if (!0) {
1003 			zval_ptr_dtor(ret);
1004 		}
1005 	}
1006 
1007 fcall_end:
1008 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1009 		object = Z_OBJ(call->This);
1010 #if 0
1011 		if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) {
1012 #else
1013 		if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) {
1014 #endif
1015 			GC_REFCOUNT(object)--;
1016 			zend_object_store_ctor_failed(object);
1017 		}
1018 		OBJ_RELEASE(object);
1019 	}
1020 
1021 	zend_vm_stack_free_call_frame(call);
1022 	if (UNEXPECTED(EG(exception) != NULL)) {
1023 		zend_throw_exception_internal(NULL);
1024 		if (0) {
1025 			zval_ptr_dtor(EX_VAR(opline->result.var));
1026 		}
1027 		HANDLE_EXCEPTION();
1028 	}
1029 
1030 	ZEND_VM_SET_OPCODE(opline + 1);
1031 	ZEND_VM_CONTINUE();
1032 }
1033 
1034 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1035 {
1036 	USE_OPLINE
1037 	zend_execute_data *call = EX(call);
1038 	zend_function *fbc = call->func;
1039 	zend_object *object;
1040 	zval *ret;
1041 
1042 	SAVE_OPLINE();
1043 	EX(call) = call->prev_execute_data;
1044 	if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
1045 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
1046 			zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
1047 			HANDLE_EXCEPTION();
1048 		}
1049 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1050 			zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
1051 				fbc->common.scope ? ZSTR_VAL(fbc->common.scope->name) : "",
1052 				fbc->common.scope ? "::" : "",
1053 				ZSTR_VAL(fbc->common.function_name));
1054 			if (UNEXPECTED(EG(exception) != NULL)) {
1055 				HANDLE_EXCEPTION();
1056 			}
1057 		}
1058 	}
1059 
1060 	LOAD_OPLINE();
1061 
1062 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1063 		ret = NULL;
1064 		if (1) {
1065 			ret = EX_VAR(opline->result.var);
1066 			ZVAL_NULL(ret);
1067 		}
1068 
1069 		call->prev_execute_data = execute_data;
1070 		i_init_func_execute_data(call, &fbc->op_array, ret);
1071 
1072 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1073 			ZEND_VM_ENTER();
1074 		} else {
1075 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1076 			zend_execute_ex(call);
1077 		}
1078 	} else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
1079 		zval retval;
1080 
1081 		call->prev_execute_data = execute_data;
1082 		EG(current_execute_data) = call;
1083 
1084 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
1085 		  && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
1086 			if (1) {
1087 				ZVAL_UNDEF(EX_VAR(opline->result.var));
1088 			}
1089 			goto fcall_end;
1090 		}
1091 
1092 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1093 		ZVAL_NULL(ret);
1094 
1095 		if (!zend_execute_internal) {
1096 			/* saves one function call if zend_execute_internal is not used */
1097 			fbc->internal_function.handler(call, ret);
1098 		} else {
1099 			zend_execute_internal(call, ret);
1100 		}
1101 
1102 #if ZEND_DEBUG
1103 		if (!EG(exception) && call->func) {
1104 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1105 				zend_verify_internal_return_type(call->func, ret));
1106 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1107 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1108 		}
1109 #endif
1110 
1111 		EG(current_execute_data) = call->prev_execute_data;
1112 		zend_vm_stack_free_args(call);
1113 
1114 		if (!1) {
1115 			zval_ptr_dtor(ret);
1116 		}
1117 
1118 	} else { /* ZEND_OVERLOADED_FUNCTION */
1119 		zval retval;
1120 
1121 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1122 
1123 		call->prev_execute_data = execute_data;
1124 
1125 		if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) {
1126 			HANDLE_EXCEPTION();
1127 		}
1128 
1129 		if (!1) {
1130 			zval_ptr_dtor(ret);
1131 		}
1132 	}
1133 
1134 fcall_end:
1135 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1136 		object = Z_OBJ(call->This);
1137 #if 0
1138 		if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) {
1139 #else
1140 		if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) {
1141 #endif
1142 			GC_REFCOUNT(object)--;
1143 			zend_object_store_ctor_failed(object);
1144 		}
1145 		OBJ_RELEASE(object);
1146 	}
1147 
1148 	zend_vm_stack_free_call_frame(call);
1149 	if (UNEXPECTED(EG(exception) != NULL)) {
1150 		zend_throw_exception_internal(NULL);
1151 		if (1) {
1152 			zval_ptr_dtor(EX_VAR(opline->result.var));
1153 		}
1154 		HANDLE_EXCEPTION();
1155 	}
1156 
1157 	ZEND_VM_SET_OPCODE(opline + 1);
1158 	ZEND_VM_CONTINUE();
1159 }
1160 
1161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1162 {
1163 	zval *return_value = EX(return_value);
1164 
1165 	if (EXPECTED(return_value)) {
1166 		USE_OPLINE
1167 		zend_generator *generator;
1168 		zend_execute_data *gen_execute_data;
1169 		uint32_t num_args, used_stack, call_info;
1170 
1171 		object_init_ex(return_value, zend_ce_generator);
1172 
1173 		/*
1174 		 * Normally the execute_data is allocated on the VM stack (because it does
1175 		 * not actually do any allocation and thus is faster). For generators
1176 		 * though this behavior would be suboptimal, because the (rather large)
1177 		 * structure would have to be copied back and forth every time execution is
1178 		 * suspended or resumed. That's why for generators the execution context
1179 		 * is allocated on heap.
1180 		 */
1181 		num_args = EX_NUM_ARGS();
1182 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
1183 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
1184 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
1185 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
1186 		} else {
1187 			used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval);
1188 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
1189 		}
1190 		memcpy(gen_execute_data, execute_data, used_stack);
1191 
1192 		/* Save execution context in generator object. */
1193 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
1194 		generator->execute_data = gen_execute_data;
1195 		generator->frozen_call_stack = NULL;
1196 		generator->execute_fake.opline = NULL;
1197 		generator->execute_fake.func = NULL;
1198 		generator->execute_fake.prev_execute_data = NULL;
1199 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
1200 
1201 		gen_execute_data->opline = opline + 1;
1202 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
1203 		gen_execute_data->return_value = (zval*)generator;
1204 		call_info = Z_TYPE_INFO(EX(This));
1205 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
1206 		 && (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))
1207 			 /* Bug #72523 */
1208 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
1209 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
1210 			Z_ADDREF(gen_execute_data->This);
1211 		}
1212 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
1213 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
1214 		gen_execute_data->prev_execute_data = NULL;
1215 
1216 		call_info = EX_CALL_INFO();
1217 		EG(current_execute_data) = EX(prev_execute_data);
1218 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
1219 			EG(vm_stack_top) = (zval*)execute_data;
1220 			execute_data = EX(prev_execute_data);
1221 			LOAD_NEXT_OPLINE();
1222 			ZEND_VM_LEAVE();
1223 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
1224 			zend_execute_data *old_execute_data = execute_data;
1225 			execute_data = EX(prev_execute_data);
1226 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1227 			LOAD_NEXT_OPLINE();
1228 			ZEND_VM_LEAVE();
1229 		} else {
1230 			ZEND_VM_RETURN();
1231 		}
1232 	} else {
1233 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1234 	}
1235 }
1236 
1237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1238 {
1239 	USE_OPLINE
1240 	zend_free_op free_op1;
1241 	zval *args;
1242 	int arg_num;
1243 
1244 	SAVE_OPLINE();
1245 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
1246 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
1247 
1248 send_again:
1249 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
1250 		HashTable *ht = Z_ARRVAL_P(args);
1251 		zval *arg, *top;
1252 		zend_string *name;
1253 
1254 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
1255 
1256 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
1257 			uint32_t i;
1258 			int separate = 0;
1259 
1260 			/* check if any of arguments are going to be passed by reference */
1261 			for (i = 0; i < zend_hash_num_elements(ht); i++) {
1262 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) {
1263 					separate = 1;
1264 					break;
1265 				}
1266 			}
1267 			if (separate) {
1268 				SEPARATE_ARRAY(args);
1269 				ht = Z_ARRVAL_P(args);
1270 			}
1271 		}
1272 
1273 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
1274 			if (name) {
1275 				zend_throw_error(NULL, "Cannot unpack array with string keys");
1276 				FREE_OP(free_op1);
1277 				HANDLE_EXCEPTION();
1278 			}
1279 
1280 			top = ZEND_CALL_ARG(EX(call), arg_num);
1281 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1282 				if (Z_REFCOUNT_P(args) == 1) {
1283 					ZVAL_MAKE_REF(arg);
1284 					Z_ADDREF_P(arg);
1285 					ZVAL_REF(top, Z_REF_P(arg));
1286 				} else {
1287 					ZVAL_DUP(top, arg);
1288 				}
1289 			} else if (Z_ISREF_P(arg)) {
1290 				ZVAL_COPY(top, Z_REFVAL_P(arg));
1291 			} else {
1292 				ZVAL_COPY(top, arg);
1293 			}
1294 
1295 			ZEND_CALL_NUM_ARGS(EX(call))++;
1296 			arg_num++;
1297 		} ZEND_HASH_FOREACH_END();
1298 
1299 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
1300 		zend_class_entry *ce = Z_OBJCE_P(args);
1301 		zend_object_iterator *iter;
1302 
1303 		if (!ce || !ce->get_iterator) {
1304 			zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
1305 		} else {
1306 
1307 			iter = ce->get_iterator(ce, args, 0);
1308 			if (UNEXPECTED(!iter)) {
1309 				FREE_OP(free_op1);
1310 				if (!EG(exception)) {
1311 					zend_throw_exception_ex(
1312 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
1313 					);
1314 				}
1315 				HANDLE_EXCEPTION();
1316 			}
1317 
1318 			if (iter->funcs->rewind) {
1319 				iter->funcs->rewind(iter);
1320 			}
1321 
1322 			for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) {
1323 				zval *arg, *top;
1324 
1325 				if (UNEXPECTED(EG(exception) != NULL)) {
1326 					break;
1327 				}
1328 
1329 				arg = iter->funcs->get_current_data(iter);
1330 				if (UNEXPECTED(EG(exception) != NULL)) {
1331 					break;
1332 				}
1333 
1334 				if (iter->funcs->get_current_key) {
1335 					zval key;
1336 					iter->funcs->get_current_key(iter, &key);
1337 					if (UNEXPECTED(EG(exception) != NULL)) {
1338 						break;
1339 					}
1340 
1341 					if (Z_TYPE(key) == IS_STRING) {
1342 						zend_throw_error(NULL,
1343 							"Cannot unpack Traversable with string keys");
1344 						zend_string_release(Z_STR(key));
1345 						break;
1346 					}
1347 
1348 					zval_dtor(&key);
1349 				}
1350 
1351 				if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1352 					zend_error(
1353 						E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
1354 						" by unpacking a Traversable, passing by-value instead", arg_num,
1355 						EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
1356 						EX(call)->func->common.scope ? "::" : "",
1357 						ZSTR_VAL(EX(call)->func->common.function_name)
1358 					);
1359 				}
1360 
1361 				ZVAL_DEREF(arg);
1362 				Z_TRY_ADDREF_P(arg);
1363 
1364 				zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
1365 				top = ZEND_CALL_ARG(EX(call), arg_num);
1366 				ZVAL_COPY_VALUE(top, arg);
1367 				ZEND_CALL_NUM_ARGS(EX(call))++;
1368 
1369 				iter->funcs->move_forward(iter);
1370 			}
1371 
1372 			zend_iterator_dtor(iter);
1373 		}
1374 	} else if (EXPECTED(Z_ISREF_P(args))) {
1375 		args = Z_REFVAL_P(args);
1376 		goto send_again;
1377 	} else {
1378 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
1379 			GET_OP1_UNDEF_CV(args, BP_VAR_R);
1380 		}
1381 		zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
1382 	}
1383 
1384 	FREE_OP(free_op1);
1385 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1386 }
1387 
1388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1389 {
1390 	USE_OPLINE
1391 	zend_free_op free_op1;
1392 	zval *args;
1393 
1394 	SAVE_OPLINE();
1395 	args = get_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
1396 
1397 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
1398 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
1399 			args = Z_REFVAL_P(args);
1400 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
1401 				goto send_array;
1402 			}
1403 		}
1404 		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)));
1405 		if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
1406 			OBJ_RELEASE((zend_object*)EX(call)->func->common.prototype);
1407 		}
1408 		if (Z_TYPE(EX(call)->This) == IS_OBJECT) {
1409 			OBJ_RELEASE(Z_OBJ(EX(call)->This));
1410 		}
1411 		EX(call)->func = (zend_function*)&zend_pass_function;
1412 		Z_OBJ(EX(call)->This) = NULL;
1413 		ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
1414 	} else {
1415 		uint32_t arg_num;
1416 		HashTable *ht;
1417 		zval *arg, *param;
1418 
1419 send_array:
1420 		ht = Z_ARRVAL_P(args);
1421 		zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
1422 
1423 		arg_num = 1;
1424 		param = ZEND_CALL_ARG(EX(call), 1);
1425 		ZEND_HASH_FOREACH_VAL(ht, arg) {
1426 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1427 				if (UNEXPECTED(!Z_ISREF_P(arg))) {
1428 					if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1429 						/* By-value send is not allowed -- emit a warning,
1430 						 * but still perform the call. */
1431 						zend_error(E_WARNING,
1432 							"Parameter %d to %s%s%s() expected to be a reference, value given",
1433 							arg_num,
1434 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
1435 							EX(call)->func->common.scope ? "::" : "",
1436 							ZSTR_VAL(EX(call)->func->common.function_name));
1437 
1438 					}
1439 				}
1440 			} else {
1441 				if (Z_ISREF_P(arg) &&
1442 				    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
1443 					/* don't separate references for __call */
1444 					arg = Z_REFVAL_P(arg);
1445 				}
1446 			}
1447 			ZVAL_COPY(param, arg);
1448 			ZEND_CALL_NUM_ARGS(EX(call))++;
1449 			arg_num++;
1450 			param++;
1451 		} ZEND_HASH_FOREACH_END();
1452 	}
1453 	FREE_OP(free_op1);
1454 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1455 }
1456 
1457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1458 {
1459 	USE_OPLINE
1460 	uint32_t arg_num = opline->op1.num;
1461 
1462 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
1463 		SAVE_OPLINE();
1464 		zend_missing_arg_error(execute_data);
1465 		HANDLE_EXCEPTION();
1466 	} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
1467 		zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
1468 
1469 		SAVE_OPLINE();
1470 		if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
1471 			HANDLE_EXCEPTION();
1472 		}
1473 	}
1474 
1475 	ZEND_VM_NEXT_OPCODE();
1476 }
1477 
1478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1479 {
1480 	USE_OPLINE
1481 	uint32_t arg_num = opline->op1.num;
1482 	uint32_t arg_count = EX_NUM_ARGS();
1483 	zval *params;
1484 
1485 	SAVE_OPLINE();
1486 
1487 	params = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
1488 
1489 	if (arg_num <= arg_count) {
1490 		zval *param;
1491 
1492 		array_init_size(params, arg_count - arg_num + 1);
1493 		zend_hash_real_init(Z_ARRVAL_P(params), 1);
1494 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
1495 			param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
1496 			if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
1497 				do {
1498 					zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
1499 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
1500 					ZEND_HASH_FILL_ADD(param);
1501 					param++;
1502 				} while (++arg_num <= arg_count);
1503 			} else {
1504 				do {
1505 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
1506 					ZEND_HASH_FILL_ADD(param);
1507 					param++;
1508 				} while (++arg_num <= arg_count);
1509 			}
1510 		} ZEND_HASH_FILL_END();
1511 	} else {
1512 		array_init(params);
1513 	}
1514 
1515 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1516 }
1517 
1518 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1519 {
1520 	USE_OPLINE
1521 
1522 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
1523 
1524 	if (EG(error_reporting)) {
1525 		do {
1526 			EG(error_reporting) = 0;
1527 			if (!EG(error_reporting_ini_entry)) {
1528 				zend_ini_entry *p = zend_hash_find_ptr(EG(ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING]);
1529 				if (p) {
1530 					EG(error_reporting_ini_entry) = p;
1531 				} else {
1532 					break;
1533 				}
1534 			}
1535 			if (!EG(error_reporting_ini_entry)->modified) {
1536 				if (!EG(modified_ini_directives)) {
1537 					ALLOC_HASHTABLE(EG(modified_ini_directives));
1538 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
1539 				}
1540 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING], EG(error_reporting_ini_entry)) != NULL)) {
1541 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
1542 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
1543 					EG(error_reporting_ini_entry)->modified = 1;
1544 				}
1545 			}
1546 		} while (0);
1547 	}
1548 	ZEND_VM_NEXT_OPCODE();
1549 }
1550 
1551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1552 {
1553 	USE_OPLINE
1554 
1555 	if (!EG(no_extensions)) {
1556 		SAVE_OPLINE();
1557 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
1558 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1559 	}
1560 	ZEND_VM_NEXT_OPCODE();
1561 }
1562 
1563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1564 {
1565 	USE_OPLINE
1566 
1567 	if (!EG(no_extensions)) {
1568 		SAVE_OPLINE();
1569 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
1570 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1571 	}
1572 	ZEND_VM_NEXT_OPCODE();
1573 }
1574 
1575 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1576 {
1577 	USE_OPLINE
1578 
1579 	if (!EG(no_extensions)) {
1580 		SAVE_OPLINE();
1581 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
1582 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1583 	}
1584 	ZEND_VM_NEXT_OPCODE();
1585 }
1586 
1587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1588 {
1589 	USE_OPLINE
1590 
1591 	SAVE_OPLINE();
1592 	Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0);
1593 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1594 }
1595 
1596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1597 {
1598 	zend_class_entry *ce;
1599 	USE_OPLINE
1600 
1601 	SAVE_OPLINE();
1602 	ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op1)));
1603 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
1604 	ZEND_ASSERT(ce != NULL);
1605 
1606 	if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
1607 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
1608 		ZEND_VM_CONTINUE();
1609 	}
1610 
1611 	if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) {
1612 		zend_verify_abstract_class(ce);
1613 	}
1614 	ce->ce_flags |= ZEND_ACC_ANON_BOUND;
1615 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1616 }
1617 
1618 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1619 {
1620 	USE_OPLINE
1621 
1622 	SAVE_OPLINE();
1623 	do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0);
1624 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1625 }
1626 
1627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1628 {
1629 	USE_OPLINE
1630 
1631 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
1632 		EG(ticks_count) = 0;
1633 		if (zend_ticks_function) {
1634 			SAVE_OPLINE();
1635 			zend_ticks_function(opline->extended_value);
1636 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1637 		}
1638 	}
1639 	ZEND_VM_NEXT_OPCODE();
1640 }
1641 
1642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1643 {
1644 	USE_OPLINE
1645 
1646 	ZEND_VM_NEXT_OPCODE();
1647 }
1648 
1649 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1650 {
1651 	USE_OPLINE
1652 
1653 	ZEND_VM_NEXT_OPCODE();
1654 }
1655 
1656 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1657 {
1658 	USE_OPLINE
1659 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
1660 	zend_class_entry *trait;
1661 
1662 	SAVE_OPLINE();
1663 	trait = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
1664 	if (UNEXPECTED(trait == NULL)) {
1665 		trait = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)),
1666 		                                 EX_CONSTANT(opline->op2) + 1,
1667 		                                 ZEND_FETCH_CLASS_TRAIT);
1668 		if (UNEXPECTED(trait == NULL)) {
1669 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1670 		}
1671 		if (!(trait->ce_flags & ZEND_ACC_TRAIT)) {
1672 			zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name));
1673 		}
1674 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), trait);
1675 	}
1676 
1677 	zend_do_implement_trait(ce, trait);
1678 
1679 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1680 }
1681 
1682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1683 {
1684 	USE_OPLINE
1685 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
1686 
1687 	SAVE_OPLINE();
1688 	zend_do_bind_traits(ce);
1689 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1690 }
1691 
1692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset, uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)
1693 {
1694 	/* May be NULL during generator closing (only finally blocks are executed) */
1695 	zend_object *ex = EG(exception);
1696 
1697 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
1698 	while (try_catch_offset != (uint32_t) -1) {
1699 		zend_try_catch_element *try_catch =
1700 			&EX(func)->op_array.try_catch_array[try_catch_offset];
1701 
1702 		if (op_num < try_catch->catch_op && ex) {
1703 			/* Go to catch block */
1704 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
1705 			ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[try_catch->catch_op]);
1706 			ZEND_VM_CONTINUE();
1707 
1708 		} else if (op_num < try_catch->finally_op) {
1709 			/* Go to finally block */
1710 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
1711 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
1712 			Z_OBJ_P(fast_call) = EG(exception);
1713 			EG(exception) = NULL;
1714 			fast_call->u2.lineno = (uint32_t)-1;
1715 			ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[try_catch->finally_op]);
1716 			ZEND_VM_CONTINUE();
1717 
1718 		} else if (op_num < try_catch->finally_end) {
1719 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
1720 
1721 			/* cleanup incomplete RETURN statement */
1722 			if (fast_call->u2.lineno != (uint32_t)-1
1723 			 && (EX(func)->op_array.opcodes[fast_call->u2.lineno].op2_type & (IS_TMP_VAR | IS_VAR))) {
1724 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[fast_call->u2.lineno].op2.var);
1725 
1726 				zval_ptr_dtor(return_value);
1727 			}
1728 
1729 			/* Chain potential exception from wrapping finally block */
1730 			if (Z_OBJ_P(fast_call)) {
1731 				if (ex) {
1732 					zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
1733 				} else {
1734 					EG(exception) = Z_OBJ_P(fast_call);
1735 				}
1736 				ex = Z_OBJ_P(fast_call);
1737 			}
1738 		}
1739 
1740 		try_catch_offset--;
1741 	}
1742 
1743 	/* Uncaught exception */
1744 	cleanup_live_vars(execute_data, op_num, 0);
1745 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
1746 		zend_generator *generator = zend_get_running_generator(execute_data);
1747 		zend_generator_close(generator, 1);
1748 		ZEND_VM_RETURN();
1749 	} else {
1750 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1751 	}
1752 }
1753 
1754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1755 {
1756 	uint32_t throw_op_num = EG(opline_before_exception) - EX(func)->op_array.opcodes;
1757 	int i, current_try_catch_offset = -1;
1758 
1759 	{
1760 		const zend_op *exc_opline = EG(opline_before_exception);
1761 		if ((exc_opline->opcode == ZEND_FREE || exc_opline->opcode == ZEND_FE_FREE)
1762 			&& exc_opline->extended_value & ZEND_FREE_ON_RETURN) {
1763 			/* exceptions thrown because of loop var destruction on return/break/...
1764 			 * are logically thrown at the end of the foreach loop, so adjust the
1765 			 * throw_op_num.
1766 			 */
1767 			throw_op_num = EX(func)->op_array.live_range[exc_opline->op2.num].end;
1768 		}
1769 	}
1770 
1771 	/* Find the innermost try/catch/finally the exception was thrown in */
1772 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
1773 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
1774 		if (try_catch->try_op > throw_op_num) {
1775 			/* further blocks will not be relevant... */
1776 			break;
1777 		}
1778 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
1779 			current_try_catch_offset = i;
1780 		}
1781 	}
1782 
1783 	cleanup_unfinished_calls(execute_data, throw_op_num);
1784 
1785 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
1786 }
1787 
1788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1789 {
1790 	USE_OPLINE
1791 
1792 	SAVE_OPLINE();
1793 	zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var)));
1794 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1795 }
1796 
1797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1798 {
1799 	USE_OPLINE
1800 	int ret;
1801 
1802 	SAVE_OPLINE();
1803 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
1804 	opline = EX(opline);
1805 
1806 	switch (ret) {
1807 		case ZEND_USER_OPCODE_CONTINUE:
1808 			ZEND_VM_CONTINUE();
1809 		case ZEND_USER_OPCODE_RETURN:
1810 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
1811 				zend_generator *generator = zend_get_running_generator(execute_data);
1812 				zend_generator_close(generator, 1);
1813 				ZEND_VM_RETURN();
1814 			} else {
1815 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1816 			}
1817 		case ZEND_USER_OPCODE_ENTER:
1818 			ZEND_VM_ENTER();
1819 		case ZEND_USER_OPCODE_LEAVE:
1820 			ZEND_VM_LEAVE();
1821 		case ZEND_USER_OPCODE_DISPATCH:
1822 			ZEND_VM_DISPATCH(opline->opcode, opline);
1823 		default:
1824 			ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
1825 	}
1826 }
1827 
1828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1829 {
1830 	USE_OPLINE
1831 	zval *fast_call = EX_VAR(opline->op1.var);
1832 	SAVE_OPLINE();
1833 
1834 	/* cleanup incomplete RETURN statement */
1835 	if (fast_call->u2.lineno != (uint32_t)-1
1836 	 && (EX(func)->op_array.opcodes[fast_call->u2.lineno].op2_type & (IS_TMP_VAR | IS_VAR))) {
1837 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[fast_call->u2.lineno].op2.var);
1838 
1839 		zval_ptr_dtor(return_value);
1840 	}
1841 
1842 	/* cleanup delayed exception */
1843 	if (Z_OBJ_P(fast_call) != NULL) {
1844 		/* discard the previously thrown exception */
1845 		OBJ_RELEASE(Z_OBJ_P(fast_call));
1846 		Z_OBJ_P(fast_call) = NULL;
1847 	}
1848 
1849 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
1850 }
1851 
1852 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1853 {
1854 	USE_OPLINE
1855 	zval *fast_call = EX_VAR(opline->result.var);
1856 
1857 	Z_OBJ_P(fast_call) = NULL;
1858 	/* set return address */
1859 	fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
1860 	ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op1));
1861 	ZEND_VM_CONTINUE();
1862 }
1863 
1864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1865 {
1866 	USE_OPLINE
1867 	zval *fast_call = EX_VAR(opline->op1.var);
1868 	uint32_t current_try_catch_offset, current_op_num;
1869 
1870 	if (fast_call->u2.lineno != (uint32_t)-1) {
1871 		const zend_op *fast_ret = EX(func)->op_array.opcodes + fast_call->u2.lineno;
1872 
1873 		ZEND_VM_SET_OPCODE(fast_ret + 1);
1874 		ZEND_VM_CONTINUE();
1875 	}
1876 
1877 	/* special case for unhandled exceptions */
1878 	EG(exception) = Z_OBJ_P(fast_call);
1879 	Z_OBJ_P(fast_call) = NULL;
1880 	current_try_catch_offset = opline->op2.num;
1881 	current_op_num = opline - EX(func)->op_array.opcodes;
1882 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
1883 }
1884 
1885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1886 {
1887 	USE_OPLINE
1888 
1889 	if (EG(assertions) <= 0) {
1890 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
1891 		if (RETURN_VALUE_USED(opline)) {
1892 			ZVAL_TRUE(EX_VAR(opline->result.var));
1893 		}
1894 		ZEND_VM_SET_OPCODE(target);
1895 		ZEND_VM_CONTINUE();
1896 	} else {
1897 		ZEND_VM_NEXT_OPCODE();
1898 	}
1899 }
1900 
1901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1902 {
1903 	uint32_t fetch_type;
1904 	zend_class_entry *called_scope, *scope;
1905 	USE_OPLINE
1906 
1907 	SAVE_OPLINE();
1908 	fetch_type = opline->extended_value;
1909 
1910 	scope = EX(func)->op_array.scope;
1911 	if (UNEXPECTED(scope == NULL)) {
1912 		zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
1913 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
1914 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
1915 		HANDLE_EXCEPTION();
1916 	}
1917 
1918 	switch (fetch_type) {
1919 		case ZEND_FETCH_CLASS_SELF:
1920 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
1921 			break;
1922 		case ZEND_FETCH_CLASS_PARENT:
1923 			if (UNEXPECTED(scope->parent == NULL)) {
1924 				zend_throw_error(NULL,
1925 					"Cannot use \"parent\" when current class scope has no parent");
1926 				HANDLE_EXCEPTION();
1927 			}
1928 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
1929 			break;
1930 		case ZEND_FETCH_CLASS_STATIC:
1931 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
1932 				called_scope = Z_OBJCE(EX(This));
1933 			} else {
1934 				called_scope = Z_CE(EX(This));
1935 			}
1936 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
1937 			break;
1938 		EMPTY_SWITCH_DEFAULT_CASE()
1939 	}
1940 	ZEND_VM_NEXT_OPCODE();
1941 }
1942 
1943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1944 {
1945 	zend_array *args;
1946 	zend_function *fbc = EX(func);
1947 	zval *ret = EX(return_value);
1948 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS);
1949 	uint32_t num_args = EX_NUM_ARGS();
1950 	zend_execute_data *call;
1951 	USE_OPLINE
1952 
1953 	args = emalloc(sizeof(zend_array));
1954 	zend_hash_init(args, num_args, NULL, ZVAL_PTR_DTOR, 0);
1955 	if (num_args) {
1956 		zval *p = ZEND_CALL_ARG(execute_data, 1);
1957 		zval *end = p + num_args;
1958 
1959 		zend_hash_real_init(args, 1);
1960 		ZEND_HASH_FILL_PACKED(args) {
1961 			do {
1962 				ZEND_HASH_FILL_ADD(p);
1963 				p++;
1964 			} while (p != end);
1965 		} ZEND_HASH_FILL_END();
1966 	}
1967 
1968 	SAVE_OPLINE();
1969 	call = execute_data;
1970 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
1971 
1972 	ZEND_ASSERT(zend_vm_calc_used_stack(2, fbc->common.prototype) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
1973 
1974 	call->func = fbc->common.prototype;
1975 	ZEND_CALL_NUM_ARGS(call) = 2;
1976 
1977 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
1978 	ZVAL_ARR(ZEND_CALL_ARG(call, 2), args);
1979 	zend_free_trampoline(fbc);
1980 	fbc = call->func;
1981 
1982 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1983 		if (UNEXPECTED(!fbc->op_array.run_time_cache)) {
1984 			init_func_run_time_cache(&fbc->op_array);
1985 		}
1986 		i_init_func_execute_data(call, &fbc->op_array, ret);
1987 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1988 			ZEND_VM_ENTER();
1989 		} else {
1990 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1991 			zend_execute_ex(call);
1992 		}
1993 	} else {
1994 		zval retval;
1995 
1996 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1997 
1998 		EG(current_execute_data) = call;
1999 
2000 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
2001 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
2002 			zend_vm_stack_free_call_frame(call);
2003 			if (ret) {
2004 				ZVAL_UNDEF(ret);
2005 			}
2006 			goto call_trampoline_end;
2007 		}
2008 
2009 		if (ret == NULL) {
2010 			ZVAL_NULL(&retval);
2011 			ret = &retval;
2012 		}
2013 
2014 		if (!zend_execute_internal) {
2015 			/* saves one function call if zend_execute_internal is not used */
2016 			fbc->internal_function.handler(call, ret);
2017 		} else {
2018 			zend_execute_internal(call, ret);
2019 		}
2020 
2021 #if ZEND_DEBUG
2022 		ZEND_ASSERT(
2023 			EG(exception) || !call->func ||
2024 			!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
2025 			zend_verify_internal_return_type(call->func, ret));
2026 #endif
2027 
2028 		EG(current_execute_data) = call->prev_execute_data;
2029 
2030 		zend_vm_stack_free_args(call);
2031 
2032 		if (ret == &retval) {
2033 			zval_ptr_dtor(ret);
2034 		}
2035 	}
2036 
2037 call_trampoline_end:
2038 	execute_data = EG(current_execute_data);
2039 
2040 	if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
2041 		ZEND_VM_RETURN();
2042 	}
2043 
2044 	opline = EX(opline);
2045 
2046 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
2047 		zend_object *object = Z_OBJ(call->This);
2048 		OBJ_RELEASE(object);
2049 	}
2050 	zend_vm_stack_free_call_frame(call);
2051 
2052 	if (UNEXPECTED(EG(exception) != NULL)) {
2053 		zend_throw_exception_internal(NULL);
2054 		if (RETURN_VALUE_USED(opline)) {
2055 			zval_ptr_dtor(EX_VAR(opline->result.var));
2056 		}
2057 		HANDLE_EXCEPTION_LEAVE();
2058 	}
2059 
2060 	ZEND_VM_INC_OPCODE();
2061 	ZEND_VM_LEAVE();
2062 }
2063 
2064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2065 {
2066 	EG(vm_interrupt) = 0;
2067 	if (EG(timed_out)) {
2068 		zend_timeout(0);
2069 	} else if (zend_interrupt_function) {
2070 		SAVE_OPLINE();
2071 		zend_interrupt_function(execute_data);
2072 		ZEND_VM_ENTER();
2073 	}
2074 	ZEND_VM_CONTINUE();
2075 }
2076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2077 {
2078 	USE_OPLINE
2079 
2080 	SAVE_OPLINE();
2081 	if (IS_CONST == IS_UNUSED) {
2082 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2083 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2084 	} else {
2085 
2086 		zval *class_name = EX_CONSTANT(opline->op2);
2087 
2088 try_class_name:
2089 		if (IS_CONST == IS_CONST) {
2090 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2091 
2092 			if (UNEXPECTED(ce == NULL)) {
2093 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2094 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2095 			}
2096 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2097 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2098 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2099 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2100 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2101 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2102 			class_name = Z_REFVAL_P(class_name);
2103 			goto try_class_name;
2104 		} else {
2105 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2106 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2107 				if (UNEXPECTED(EG(exception) != NULL)) {
2108 					HANDLE_EXCEPTION();
2109 				}
2110 			}
2111 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2112 		}
2113 
2114 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2115 	}
2116 }
2117 
2118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2119 {
2120 	USE_OPLINE
2121 	zend_function *fbc;
2122 	zval *function_name, *func;
2123 	zend_execute_data *call;
2124 
2125 	function_name = (zval*)EX_CONSTANT(opline->op2);
2126 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name));
2127 	if (UNEXPECTED(fbc == NULL)) {
2128 		func = zend_hash_find(EG(function_table), Z_STR_P(function_name+1));
2129 		if (UNEXPECTED(func == NULL)) {
2130 			SAVE_OPLINE();
2131 			zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
2132 			HANDLE_EXCEPTION();
2133 		}
2134 		fbc = Z_FUNC_P(func);
2135 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
2136 			init_func_run_time_cache(&fbc->op_array);
2137 		}
2138 		CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
2139 	}
2140 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
2141 		fbc, opline->extended_value, NULL, NULL);
2142 	call->prev_execute_data = EX(call);
2143 	EX(call) = call;
2144 
2145 	ZEND_VM_NEXT_OPCODE();
2146 }
2147 
2148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2149 {
2150 	USE_OPLINE
2151 
2152 	zval *function_name;
2153 	zend_execute_data *call;
2154 
2155 	SAVE_OPLINE();
2156 	function_name = EX_CONSTANT(opline->op2);
2157 
2158 try_function_name:
2159 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2160 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
2161 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
2162 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
2163 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
2164 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
2165 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
2166 		function_name = Z_REFVAL_P(function_name);
2167 		goto try_function_name;
2168 	} else {
2169 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2170 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2171 			if (UNEXPECTED(EG(exception) != NULL)) {
2172 				HANDLE_EXCEPTION();
2173 			}
2174 		}
2175 		zend_throw_error(NULL, "Function name must be a string");
2176 		call = NULL;
2177 	}
2178 
2179 	if (UNEXPECTED(!call)) {
2180 		HANDLE_EXCEPTION();
2181 	}
2182 
2183 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
2184 		if (UNEXPECTED(EG(exception))) {
2185 			if (call) {
2186 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2187 					zend_string_release(call->func->common.function_name);
2188 					zend_free_trampoline(call->func);
2189 				}
2190 				zend_vm_stack_free_call_frame(call);
2191 			}
2192 			HANDLE_EXCEPTION();
2193 		}
2194 	} else if (UNEXPECTED(!call)) {
2195 		HANDLE_EXCEPTION();
2196 	}
2197 
2198 	call->prev_execute_data = EX(call);
2199 	EX(call) = call;
2200 
2201 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2202 }
2203 
2204 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2205 {
2206 	USE_OPLINE
2207 	zval *func_name;
2208 	zval *func;
2209 	zend_function *fbc;
2210 	zend_execute_data *call;
2211 
2212 	func_name = EX_CONSTANT(opline->op2) + 1;
2213 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
2214 	if (UNEXPECTED(fbc == NULL)) {
2215 		func = zend_hash_find(EG(function_table), Z_STR_P(func_name));
2216 		if (func == NULL) {
2217 			func_name++;
2218 			func = zend_hash_find(EG(function_table), Z_STR_P(func_name));
2219 			if (UNEXPECTED(func == NULL)) {
2220 				SAVE_OPLINE();
2221 				zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
2222 				HANDLE_EXCEPTION();
2223 			}
2224 		}
2225 		fbc = Z_FUNC_P(func);
2226 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), fbc);
2227 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
2228 			init_func_run_time_cache(&fbc->op_array);
2229 		}
2230 	}
2231 
2232 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
2233 		fbc, opline->extended_value, NULL, NULL);
2234 	call->prev_execute_data = EX(call);
2235 	EX(call) = call;
2236 
2237 	ZEND_VM_NEXT_OPCODE();
2238 }
2239 
2240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2241 {
2242 	USE_OPLINE
2243 
2244 	zval *fname = EX_CONSTANT(opline->op2);
2245 	zval *func;
2246 	zend_function *fbc;
2247 	zend_execute_data *call;
2248 
2249 	fbc = CACHED_PTR(Z_CACHE_SLOT_P(fname));
2250 	if (UNEXPECTED(fbc == NULL)) {
2251 		func = zend_hash_find(EG(function_table), Z_STR_P(fname));
2252 		if (UNEXPECTED(func == NULL)) {
2253 		    SAVE_OPLINE();
2254 			zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(fname));
2255 			HANDLE_EXCEPTION();
2256 		}
2257 		fbc = Z_FUNC_P(func);
2258 		CACHE_PTR(Z_CACHE_SLOT_P(fname), fbc);
2259 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
2260 			init_func_run_time_cache(&fbc->op_array);
2261 		}
2262 	}
2263 
2264 	call = zend_vm_stack_push_call_frame_ex(
2265 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
2266 		fbc, opline->extended_value, NULL, NULL);
2267 	call->prev_execute_data = EX(call);
2268 	EX(call) = call;
2269 
2270 	ZEND_VM_NEXT_OPCODE();
2271 }
2272 
2273 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2274 {
2275 	USE_OPLINE
2276 	uint32_t arg_num;
2277 	zval *param;
2278 
2279 	ZEND_VM_REPEATABLE_OPCODE
2280 
2281 	arg_num = opline->op1.num;
2282 	param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
2283 	if (arg_num > EX_NUM_ARGS()) {
2284 		ZVAL_COPY(param, EX_CONSTANT(opline->op2));
2285 		if (Z_OPT_CONSTANT_P(param)) {
2286 			SAVE_OPLINE();
2287 			if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
2288 				zval_ptr_dtor(param);
2289 				ZVAL_UNDEF(param);
2290 				HANDLE_EXCEPTION();
2291 			}
2292 		}
2293 	}
2294 
2295 	if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
2296 		zval *default_value = EX_CONSTANT(opline->op2);
2297 
2298 		SAVE_OPLINE();
2299 		if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(Z_CACHE_SLOT_P(default_value))) || EG(exception))) {
2300 			HANDLE_EXCEPTION();
2301 		}
2302 	}
2303 
2304 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
2305 	ZEND_VM_NEXT_OPCODE();
2306 }
2307 
2308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2309 {
2310 	USE_OPLINE
2311 	zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var));
2312 	zend_class_entry *iface;
2313 
2314 	SAVE_OPLINE();
2315 	iface = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
2316 	if (UNEXPECTED(iface == NULL)) {
2317 		iface = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE);
2318 		if (UNEXPECTED(iface == NULL)) {
2319 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2320 		}
2321 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), iface);
2322 	}
2323 
2324 	if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) {
2325 		zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ZSTR_VAL(ce->name), ZSTR_VAL(iface->name));
2326 	}
2327 	zend_do_implement_interface(ce, iface);
2328 
2329 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2330 }
2331 
2332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2333 {
2334 	USE_OPLINE
2335 
2336 	SAVE_OPLINE();
2337 	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->op2.var)), 0);
2338 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2339 }
2340 
2341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2342 {
2343 	USE_OPLINE
2344 	zval *zce, *orig_zce;
2345 
2346 	SAVE_OPLINE();
2347 	if ((zce = zend_hash_find(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op1)))) == NULL ||
2348 	    ((orig_zce = zend_hash_find(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op1)+1))) != NULL &&
2349 	     Z_CE_P(zce) != Z_CE_P(orig_zce))) {
2350 		do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), Z_CE_P(EX_VAR(opline->op2.var)), 0);
2351 	}
2352 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2353 }
2354 
2355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2356 {
2357 	zend_class_entry *ce;
2358 	USE_OPLINE
2359 
2360 	SAVE_OPLINE();
2361 	ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(EX_CONSTANT(opline->op1)));
2362 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
2363 	ZEND_ASSERT(ce != NULL);
2364 
2365 	if (ce->ce_flags & ZEND_ACC_ANON_BOUND) {
2366 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2367 		ZEND_VM_CONTINUE();
2368 	}
2369 
2370 	zend_do_inheritance(ce, Z_CE_P(EX_VAR(opline->op2.var)));
2371 	ce->ce_flags |= ZEND_ACC_ANON_BOUND;
2372 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2373 }
2374 
2375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2376 {
2377 	USE_OPLINE
2378 
2379 	SAVE_OPLINE();
2380 	if (IS_UNUSED == IS_UNUSED) {
2381 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2382 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2383 	} else {
2384 
2385 		zval *class_name = NULL;
2386 
2387 try_class_name:
2388 		if (IS_UNUSED == IS_CONST) {
2389 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2390 
2391 			if (UNEXPECTED(ce == NULL)) {
2392 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2393 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2394 			}
2395 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2396 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2397 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2398 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2399 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2400 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2401 			class_name = Z_REFVAL_P(class_name);
2402 			goto try_class_name;
2403 		} else {
2404 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2405 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2406 				if (UNEXPECTED(EG(exception) != NULL)) {
2407 					HANDLE_EXCEPTION();
2408 				}
2409 			}
2410 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2411 		}
2412 
2413 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2414 	}
2415 }
2416 
2417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2418 {
2419 	USE_OPLINE
2420 
2421 	SAVE_OPLINE();
2422 	if (IS_CV == IS_UNUSED) {
2423 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2424 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2425 	} else {
2426 
2427 		zval *class_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
2428 
2429 try_class_name:
2430 		if (IS_CV == IS_CONST) {
2431 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2432 
2433 			if (UNEXPECTED(ce == NULL)) {
2434 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2435 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2436 			}
2437 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2438 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2439 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2440 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2441 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2442 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2443 			class_name = Z_REFVAL_P(class_name);
2444 			goto try_class_name;
2445 		} else {
2446 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2447 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2448 				if (UNEXPECTED(EG(exception) != NULL)) {
2449 					HANDLE_EXCEPTION();
2450 				}
2451 			}
2452 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2453 		}
2454 
2455 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2456 	}
2457 }
2458 
2459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2460 {
2461 	USE_OPLINE
2462 
2463 	zval *function_name;
2464 	zend_execute_data *call;
2465 
2466 	SAVE_OPLINE();
2467 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
2468 
2469 try_function_name:
2470 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2471 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
2472 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
2473 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
2474 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
2475 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
2476 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
2477 		function_name = Z_REFVAL_P(function_name);
2478 		goto try_function_name;
2479 	} else {
2480 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2481 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2482 			if (UNEXPECTED(EG(exception) != NULL)) {
2483 				HANDLE_EXCEPTION();
2484 			}
2485 		}
2486 		zend_throw_error(NULL, "Function name must be a string");
2487 		call = NULL;
2488 	}
2489 
2490 	if (UNEXPECTED(!call)) {
2491 		HANDLE_EXCEPTION();
2492 	}
2493 
2494 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
2495 		if (UNEXPECTED(EG(exception))) {
2496 			if (call) {
2497 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2498 					zend_string_release(call->func->common.function_name);
2499 					zend_free_trampoline(call->func);
2500 				}
2501 				zend_vm_stack_free_call_frame(call);
2502 			}
2503 			HANDLE_EXCEPTION();
2504 		}
2505 	} else if (UNEXPECTED(!call)) {
2506 		HANDLE_EXCEPTION();
2507 	}
2508 
2509 	call->prev_execute_data = EX(call);
2510 	EX(call) = call;
2511 
2512 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2513 }
2514 
2515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2516 {
2517 	USE_OPLINE
2518 
2519 	SAVE_OPLINE();
2520 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
2521 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->extended_value);
2522 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2523 	} else {
2524 		zend_free_op free_op2;
2525 		zval *class_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
2526 
2527 try_class_name:
2528 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
2529 			zend_class_entry *ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name));
2530 
2531 			if (UNEXPECTED(ce == NULL)) {
2532 				ce = zend_fetch_class_by_name(Z_STR_P(class_name), EX_CONSTANT(opline->op2) + 1, opline->extended_value);
2533 				CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
2534 			}
2535 			Z_CE_P(EX_VAR(opline->result.var)) = ce;
2536 		} else if (Z_TYPE_P(class_name) == IS_OBJECT) {
2537 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
2538 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
2539 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->extended_value);
2540 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
2541 			class_name = Z_REFVAL_P(class_name);
2542 			goto try_class_name;
2543 		} else {
2544 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
2545 				GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
2546 				if (UNEXPECTED(EG(exception) != NULL)) {
2547 					HANDLE_EXCEPTION();
2548 				}
2549 			}
2550 			zend_throw_error(NULL, "Class name must be a valid object or a string");
2551 		}
2552 
2553 		zval_ptr_dtor_nogc(free_op2);
2554 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2555 	}
2556 }
2557 
2558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2559 {
2560 	USE_OPLINE
2561 	zend_free_op free_op2;
2562 	zval *function_name;
2563 	zend_execute_data *call;
2564 
2565 	SAVE_OPLINE();
2566 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
2567 
2568 try_function_name:
2569 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2570 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
2571 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
2572 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
2573 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
2574 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
2575 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
2576 		function_name = Z_REFVAL_P(function_name);
2577 		goto try_function_name;
2578 	} else {
2579 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2580 			GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
2581 			if (UNEXPECTED(EG(exception) != NULL)) {
2582 				HANDLE_EXCEPTION();
2583 			}
2584 		}
2585 		zend_throw_error(NULL, "Function name must be a string");
2586 		call = NULL;
2587 	}
2588 
2589 	if (UNEXPECTED(!call)) {
2590 		HANDLE_EXCEPTION();
2591 	}
2592 
2593 	zval_ptr_dtor_nogc(free_op2);
2594 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
2595 		if (UNEXPECTED(EG(exception))) {
2596 			if (call) {
2597 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2598 					zend_string_release(call->func->common.function_name);
2599 					zend_free_trampoline(call->func);
2600 				}
2601 				zend_vm_stack_free_call_frame(call);
2602 			}
2603 			HANDLE_EXCEPTION();
2604 		}
2605 	} else if (UNEXPECTED(!call)) {
2606 		HANDLE_EXCEPTION();
2607 	}
2608 
2609 	call->prev_execute_data = EX(call);
2610 	EX(call) = call;
2611 
2612 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2613 }
2614 
2615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2616 {
2617 	USE_OPLINE
2618 
2619 
2620 	SAVE_OPLINE();
2621 	bitwise_not_function(EX_VAR(opline->result.var),
2622 		EX_CONSTANT(opline->op1));
2623 
2624 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2625 }
2626 
2627 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2628 {
2629 	USE_OPLINE
2630 	zval *val;
2631 
2632 
2633 	val = EX_CONSTANT(opline->op1);
2634 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2635 		ZVAL_FALSE(EX_VAR(opline->result.var));
2636 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2637 		ZVAL_TRUE(EX_VAR(opline->result.var));
2638 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2639 			SAVE_OPLINE();
2640 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2641 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2642 		}
2643 	} else {
2644 		SAVE_OPLINE();
2645 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
2646 
2647 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2648 	}
2649 	ZEND_VM_NEXT_OPCODE();
2650 }
2651 
2652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2653 {
2654 	USE_OPLINE
2655 
2656 	zval *z;
2657 
2658 	SAVE_OPLINE();
2659 	z = EX_CONSTANT(opline->op1);
2660 
2661 	if (Z_TYPE_P(z) == IS_STRING) {
2662 		zend_string *str = Z_STR_P(z);
2663 
2664 		if (ZSTR_LEN(str) != 0) {
2665 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
2666 		}
2667 	} else {
2668 		zend_string *str = _zval_get_string_func(z);
2669 
2670 		if (ZSTR_LEN(str) != 0) {
2671 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
2672 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
2673 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
2674 		}
2675 		zend_string_release(str);
2676 	}
2677 
2678 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2679 }
2680 
2681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2682 {
2683 	USE_OPLINE
2684 
2685 	zval *val;
2686 
2687 	val = EX_CONSTANT(opline->op1);
2688 
2689 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2690 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
2691 		ZEND_VM_CONTINUE();
2692 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2693 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2694 			SAVE_OPLINE();
2695 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2696 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2697 		} else {
2698 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2699 			ZEND_VM_CONTINUE();
2700 		}
2701 	}
2702 
2703 	SAVE_OPLINE();
2704 	if (i_zend_is_true(val)) {
2705 		opline++;
2706 	} else {
2707 		opline = OP_JMP_ADDR(opline, opline->op2);
2708 	}
2709 
2710 	ZEND_VM_JMP(opline);
2711 }
2712 
2713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2714 {
2715 	USE_OPLINE
2716 
2717 	zval *val;
2718 
2719 	val = EX_CONSTANT(opline->op1);
2720 
2721 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2722 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2723 		ZEND_VM_CONTINUE();
2724 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2725 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2726 			SAVE_OPLINE();
2727 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2728 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2729 		} else {
2730 			ZEND_VM_NEXT_OPCODE();
2731 		}
2732 	}
2733 
2734 	SAVE_OPLINE();
2735 	if (i_zend_is_true(val)) {
2736 		opline = OP_JMP_ADDR(opline, opline->op2);
2737 	} else {
2738 		opline++;
2739 	}
2740 
2741 	ZEND_VM_JMP(opline);
2742 }
2743 
2744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2745 {
2746 	USE_OPLINE
2747 
2748 	zval *val;
2749 
2750 	val = EX_CONSTANT(opline->op1);
2751 
2752 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
2753 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2754 		ZEND_VM_CONTINUE();
2755 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2756 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2757 			SAVE_OPLINE();
2758 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2759 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2760 		} else {
2761 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2762 			ZEND_VM_CONTINUE();
2763 		}
2764 	}
2765 
2766 	SAVE_OPLINE();
2767 	if (i_zend_is_true(val)) {
2768 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
2769 	} else {
2770 		opline = OP_JMP_ADDR(opline, opline->op2);
2771 	}
2772 
2773 	ZEND_VM_JMP(opline);
2774 }
2775 
2776 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2777 {
2778 	USE_OPLINE
2779 
2780 	zval *val;
2781 	int ret;
2782 
2783 	val = EX_CONSTANT(opline->op1);
2784 
2785 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2786 		ZVAL_TRUE(EX_VAR(opline->result.var));
2787 		ZEND_VM_NEXT_OPCODE();
2788 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2789 		ZVAL_FALSE(EX_VAR(opline->result.var));
2790 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2791 			SAVE_OPLINE();
2792 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2793 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
2794 		} else {
2795 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2796 			ZEND_VM_CONTINUE();
2797 		}
2798 	}
2799 
2800 	SAVE_OPLINE();
2801 	ret = i_zend_is_true(val);
2802 
2803 	if (ret) {
2804 		ZVAL_TRUE(EX_VAR(opline->result.var));
2805 		opline++;
2806 	} else {
2807 		ZVAL_FALSE(EX_VAR(opline->result.var));
2808 		opline = OP_JMP_ADDR(opline, opline->op2);
2809 	}
2810 	ZEND_VM_JMP(opline);
2811 }
2812 
2813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2814 {
2815 	USE_OPLINE
2816 
2817 	zval *val;
2818 	int ret;
2819 
2820 	val = EX_CONSTANT(opline->op1);
2821 
2822 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
2823 		ZVAL_TRUE(EX_VAR(opline->result.var));
2824 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
2825 		ZEND_VM_CONTINUE();
2826 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
2827 		ZVAL_FALSE(EX_VAR(opline->result.var));
2828 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
2829 			SAVE_OPLINE();
2830 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
2831 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2832 		} else {
2833 			ZEND_VM_NEXT_OPCODE();
2834 		}
2835 	}
2836 
2837 	SAVE_OPLINE();
2838 	ret = i_zend_is_true(val);
2839 
2840 	if (ret) {
2841 		ZVAL_TRUE(EX_VAR(opline->result.var));
2842 		opline = OP_JMP_ADDR(opline, opline->op2);
2843 	} else {
2844 		ZVAL_FALSE(EX_VAR(opline->result.var));
2845 		opline++;
2846 	}
2847 	ZEND_VM_JMP(opline);
2848 }
2849 
2850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2851 {
2852 	USE_OPLINE
2853 	zval *retval_ptr;
2854 	zval *return_value;
2855 	zend_free_op free_op1;
2856 
2857 	retval_ptr = EX_CONSTANT(opline->op1);
2858 	return_value = EX(return_value);
2859 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
2860 		SAVE_OPLINE();
2861 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
2862 		if (return_value) {
2863 			ZVAL_NULL(return_value);
2864 		}
2865 	} else if (!return_value) {
2866 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
2867 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
2868 				SAVE_OPLINE();
2869 				zval_dtor_func(Z_COUNTED_P(free_op1));
2870 			}
2871 		}
2872 	} else {
2873 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
2874 			ZVAL_COPY_VALUE(return_value, retval_ptr);
2875 			if (IS_CONST == IS_CONST) {
2876 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
2877 					Z_ADDREF_P(return_value);
2878 				}
2879 			}
2880 		} else if (IS_CONST == IS_CV) {
2881 			if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
2882 				if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
2883 					ZVAL_COPY_VALUE(return_value, retval_ptr);
2884 					if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
2885 						ZVAL_NULL(retval_ptr);
2886 					} else {
2887 						Z_ADDREF_P(return_value);
2888 					}
2889 				} else {
2890 					retval_ptr = Z_REFVAL_P(retval_ptr);
2891 					ZVAL_COPY(return_value, retval_ptr);
2892 				}
2893 			} else {
2894 				ZVAL_COPY_VALUE(return_value, retval_ptr);
2895 			}
2896 		} else /* if (IS_CONST == IS_VAR) */ {
2897 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
2898 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
2899 
2900 				retval_ptr = Z_REFVAL_P(retval_ptr);
2901 				ZVAL_COPY_VALUE(return_value, retval_ptr);
2902 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
2903 					efree_size(ref, sizeof(zend_reference));
2904 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
2905 					Z_ADDREF_P(retval_ptr);
2906 				}
2907 			} else {
2908 				ZVAL_COPY_VALUE(return_value, retval_ptr);
2909 			}
2910 		}
2911 	}
2912 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2913 }
2914 
2915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2916 {
2917 	USE_OPLINE
2918 	zval *retval_ptr;
2919 
2920 
2921 	SAVE_OPLINE();
2922 
2923 	do {
2924 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
2925 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
2926 			/* Not supposed to happen, but we'll allow it */
2927 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
2928 
2929 			retval_ptr = EX_CONSTANT(opline->op1);
2930 			if (!EX(return_value)) {
2931 
2932 			} else {
2933 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
2934 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
2935 					break;
2936 				}
2937 
2938 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
2939 				if (IS_CONST == IS_CONST) {
2940 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
2941 				}
2942 			}
2943 			break;
2944 		}
2945 
2946 		retval_ptr = NULL;
2947 
2948 		if (IS_CONST == IS_VAR) {
2949 			if (retval_ptr == &EG(uninitialized_zval) ||
2950 			    (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
2951 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
2952 				if (EX(return_value)) {
2953 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
2954 				} else {
2955 
2956 				}
2957 				break;
2958 			}
2959 		}
2960 
2961 		if (EX(return_value)) {
2962 			ZVAL_MAKE_REF(retval_ptr);
2963 			Z_ADDREF_P(retval_ptr);
2964 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
2965 		}
2966 
2967 	} while (0);
2968 
2969 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2970 }
2971 
2972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2973 {
2974 	USE_OPLINE
2975 	zval *retval;
2976 
2977 
2978 	zend_generator *generator = zend_get_running_generator(execute_data);
2979 
2980 	SAVE_OPLINE();
2981 	retval = EX_CONSTANT(opline->op1);
2982 
2983 	/* Copy return value into generator->retval */
2984 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
2985 		ZVAL_COPY_VALUE(&generator->retval, retval);
2986 		if (IS_CONST == IS_CONST) {
2987 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
2988 				Z_ADDREF(generator->retval);
2989 			}
2990 		}
2991 	} else if (IS_CONST == IS_CV) {
2992 		ZVAL_DEREF(retval);
2993 		ZVAL_COPY(&generator->retval, retval);
2994 	} else /* if (IS_CONST == IS_VAR) */ {
2995 		if (UNEXPECTED(Z_ISREF_P(retval))) {
2996 			zend_refcounted *ref = Z_COUNTED_P(retval);
2997 
2998 			retval = Z_REFVAL_P(retval);
2999 			ZVAL_COPY_VALUE(&generator->retval, retval);
3000 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
3001 				efree_size(ref, sizeof(zend_reference));
3002 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
3003 				Z_ADDREF_P(retval);
3004 			}
3005 		} else {
3006 			ZVAL_COPY_VALUE(&generator->retval, retval);
3007 		}
3008 	}
3009 
3010 	/* Close the generator to free up resources */
3011 	zend_generator_close(generator, 1);
3012 
3013 	/* Pass execution back to handling code */
3014 	ZEND_VM_RETURN();
3015 }
3016 
3017 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3018 {
3019 	USE_OPLINE
3020 	zval *value;
3021 
3022 
3023 	SAVE_OPLINE();
3024 	value = EX_CONSTANT(opline->op1);
3025 
3026 	do {
3027 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
3028 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
3029 				value = Z_REFVAL_P(value);
3030 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
3031 					break;
3032 				}
3033 			}
3034 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
3035 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
3036 				if (UNEXPECTED(EG(exception) != NULL)) {
3037 					HANDLE_EXCEPTION();
3038 				}
3039 			}
3040 			zend_throw_error(NULL, "Can only throw objects");
3041 
3042 			HANDLE_EXCEPTION();
3043 		}
3044 	} while (0);
3045 
3046 	zend_exception_save();
3047 	if (IS_CONST != IS_TMP_VAR) {
3048 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
3049 	}
3050 
3051 	zend_throw_exception_object(value);
3052 	zend_exception_restore();
3053 
3054 	HANDLE_EXCEPTION();
3055 }
3056 
3057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3058 {
3059 	USE_OPLINE
3060 	zval *value, *arg;
3061 
3062 
3063 	value = EX_CONSTANT(opline->op1);
3064 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3065 	ZVAL_COPY_VALUE(arg, value);
3066 	if (IS_CONST == IS_CONST) {
3067 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3068 			Z_ADDREF_P(arg);
3069 		}
3070 	}
3071 	ZEND_VM_NEXT_OPCODE();
3072 }
3073 
3074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3075 {
3076 	USE_OPLINE
3077 	zval *value, *arg;
3078 
3079 	uint32_t arg_num = opline->op2.num;
3080 
3081 	if (EXPECTED(0)) {
3082 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3083 			goto send_val_by_ref;
3084 		}
3085 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3086 send_val_by_ref:
3087 		SAVE_OPLINE();
3088 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
3089 
3090 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3091 		ZVAL_UNDEF(arg);
3092 		HANDLE_EXCEPTION();
3093 	}
3094 	value = EX_CONSTANT(opline->op1);
3095 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3096 	ZVAL_COPY_VALUE(arg, value);
3097 	if (IS_CONST == IS_CONST) {
3098 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3099 			Z_ADDREF_P(arg);
3100 		}
3101 	}
3102 	ZEND_VM_NEXT_OPCODE();
3103 }
3104 
3105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3106 {
3107 	USE_OPLINE
3108 	zval *value, *arg;
3109 
3110 	uint32_t arg_num = opline->op2.num;
3111 
3112 	if (EXPECTED(1)) {
3113 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3114 			goto send_val_by_ref;
3115 		}
3116 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3117 send_val_by_ref:
3118 		SAVE_OPLINE();
3119 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
3120 
3121 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3122 		ZVAL_UNDEF(arg);
3123 		HANDLE_EXCEPTION();
3124 	}
3125 	value = EX_CONSTANT(opline->op1);
3126 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3127 	ZVAL_COPY_VALUE(arg, value);
3128 	if (IS_CONST == IS_CONST) {
3129 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3130 			Z_ADDREF_P(arg);
3131 		}
3132 	}
3133 	ZEND_VM_NEXT_OPCODE();
3134 }
3135 
3136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3137 {
3138 	USE_OPLINE
3139 	zval *arg, *param;
3140 
3141 
3142 	SAVE_OPLINE();
3143 	arg = EX_CONSTANT(opline->op1);
3144 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
3145 
3146 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
3147 		zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
3148 			opline->op2.num,
3149 			EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
3150 			EX(call)->func->common.scope ? "::" : "",
3151 			ZSTR_VAL(EX(call)->func->common.function_name));
3152 	}
3153 
3154 	ZVAL_COPY(param, arg);
3155 
3156 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3157 }
3158 
3159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3160 {
3161 	USE_OPLINE
3162 	zval *val;
3163 
3164 
3165 	val = EX_CONSTANT(opline->op1);
3166 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3167 		ZVAL_TRUE(EX_VAR(opline->result.var));
3168 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3169 		ZVAL_FALSE(EX_VAR(opline->result.var));
3170 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3171 			SAVE_OPLINE();
3172 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
3173 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3174 		}
3175 	} else {
3176 		SAVE_OPLINE();
3177 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
3178 
3179 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3180 	}
3181 	ZEND_VM_NEXT_OPCODE();
3182 }
3183 
3184 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3185 {
3186 	USE_OPLINE
3187 	zval *result;
3188 	zend_function *constructor;
3189 	zend_class_entry *ce;
3190 	zend_execute_data *call;
3191 
3192 	SAVE_OPLINE();
3193 	if (IS_CONST == IS_CONST) {
3194 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
3195 		if (UNEXPECTED(ce == NULL)) {
3196 			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);
3197 			if (UNEXPECTED(ce == NULL)) {
3198 				ZEND_ASSERT(EG(exception));
3199 				HANDLE_EXCEPTION();
3200 			}
3201 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
3202 		}
3203 	} else if (IS_CONST == IS_UNUSED) {
3204 		ce = zend_fetch_class(NULL, opline->op1.num);
3205 		if (UNEXPECTED(ce == NULL)) {
3206 			ZEND_ASSERT(EG(exception));
3207 			HANDLE_EXCEPTION();
3208 		}
3209 	} else {
3210 		ce = Z_CE_P(EX_VAR(opline->op1.var));
3211 	}
3212 
3213 	result = EX_VAR(opline->result.var);
3214 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
3215 		HANDLE_EXCEPTION();
3216 	}
3217 
3218 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
3219 	if (constructor == NULL) {
3220 		if (UNEXPECTED(EG(exception))) {
3221 			zval_ptr_dtor(result);
3222 			HANDLE_EXCEPTION();
3223 		}
3224 
3225 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
3226 		 * opcode is DO_FCALL in case EXT instructions are used. */
3227 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
3228 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
3229 		}
3230 
3231 		/* Perform a dummy function call */
3232 		call = zend_vm_stack_push_call_frame(
3233 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
3234 			opline->extended_value, NULL, NULL);
3235 	} else {
3236 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
3237 			init_func_run_time_cache(&constructor->op_array);
3238 		}
3239 		/* We are not handling overloaded classes right now */
3240 		call = zend_vm_stack_push_call_frame(
3241 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
3242 			constructor,
3243 			opline->extended_value,
3244 			ce,
3245 			Z_OBJ_P(result));
3246 		Z_ADDREF_P(result);
3247 	}
3248 
3249 	call->prev_execute_data = EX(call);
3250 	EX(call) = call;
3251 	ZEND_VM_NEXT_OPCODE();
3252 }
3253 
3254 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3255 {
3256 	USE_OPLINE
3257 
3258 	zval *obj;
3259 	zend_object *clone_obj;
3260 	zend_class_entry *ce, *scope;
3261 	zend_function *clone;
3262 	zend_object_clone_obj_t clone_call;
3263 
3264 	SAVE_OPLINE();
3265 	obj = EX_CONSTANT(opline->op1);
3266 
3267 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
3268 		zend_throw_error(NULL, "Using $this when not in object context");
3269 		HANDLE_EXCEPTION();
3270 	}
3271 
3272 	do {
3273 		if (IS_CONST == IS_CONST ||
3274 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
3275 		    if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
3276 		    	obj = Z_REFVAL_P(obj);
3277 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
3278 		    		break;
3279 				}
3280 			}
3281 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
3282 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
3283 				if (UNEXPECTED(EG(exception) != NULL)) {
3284 					HANDLE_EXCEPTION();
3285 				}
3286 			}
3287 			zend_throw_error(NULL, "__clone method called on non-object");
3288 
3289 			HANDLE_EXCEPTION();
3290 		}
3291 	} while (0);
3292 
3293 	ce = Z_OBJCE_P(obj);
3294 	clone = ce->clone;
3295 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
3296 	if (UNEXPECTED(clone_call == NULL)) {
3297 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
3298 
3299 		HANDLE_EXCEPTION();
3300 	}
3301 
3302 	if (clone) {
3303 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
3304 			/* Ensure that if we're calling a private function, we're allowed to do so.
3305 			 */
3306 			scope = EX(func)->op_array.scope;
3307 			if (!zend_check_private(clone, scope, clone->common.function_name)) {
3308 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
3309 
3310 				HANDLE_EXCEPTION();
3311 			}
3312 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
3313 			/* Ensure that if we're calling a protected function, we're allowed to do so.
3314 			 */
3315 			scope = EX(func)->op_array.scope;
3316 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
3317 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
3318 
3319 				HANDLE_EXCEPTION();
3320 			}
3321 		}
3322 	}
3323 
3324 	clone_obj = clone_call(obj);
3325 	if (EXPECTED(EG(exception) == NULL)) {
3326 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
3327 	} else {
3328 		OBJ_RELEASE(clone_obj);
3329 	}
3330 
3331 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3332 }
3333 
3334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3335 {
3336 	USE_OPLINE
3337 
3338 	zval *expr;
3339 	zval *result = EX_VAR(opline->result.var);
3340 
3341 	SAVE_OPLINE();
3342 	expr = EX_CONSTANT(opline->op1);
3343 
3344 	switch (opline->extended_value) {
3345 		case IS_NULL:
3346 			/* This code is taken from convert_to_null. However, it does not seems very useful,
3347 			 * because a conversion to null always results in the same value. This could only
3348 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
3349 #if 0
3350 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3351 				ZVAL_DEREF(expr);
3352 			}
3353 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
3354 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
3355 					break;
3356 				}
3357 			}
3358 #endif
3359 
3360 			ZVAL_NULL(result);
3361 			break;
3362 		case _IS_BOOL:
3363 			ZVAL_BOOL(result, zend_is_true(expr));
3364 			break;
3365 		case IS_LONG:
3366 			ZVAL_LONG(result, zval_get_long(expr));
3367 			break;
3368 		case IS_DOUBLE:
3369 			ZVAL_DOUBLE(result, zval_get_double(expr));
3370 			break;
3371 		case IS_STRING:
3372 			ZVAL_STR(result, zval_get_string(expr));
3373 			break;
3374 		default:
3375 			if (IS_CONST & (IS_VAR|IS_CV)) {
3376 				ZVAL_DEREF(expr);
3377 			}
3378 			/* If value is already of correct type, return it directly */
3379 			if (Z_TYPE_P(expr) == opline->extended_value) {
3380 				ZVAL_COPY_VALUE(result, expr);
3381 				if (IS_CONST == IS_CONST) {
3382 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
3383 				} else if (IS_CONST != IS_TMP_VAR) {
3384 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3385 				}
3386 
3387 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3388 			}
3389 
3390 			if (opline->extended_value == IS_ARRAY) {
3391 				if (Z_TYPE_P(expr) != IS_OBJECT) {
3392 					ZVAL_NEW_ARR(result);
3393 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
3394 					if (Z_TYPE_P(expr) != IS_NULL) {
3395 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
3396 						if (IS_CONST == IS_CONST) {
3397 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
3398 						} else {
3399 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
3400 						}
3401 					}
3402 				} else {
3403 					ZVAL_COPY_VALUE(result, expr);
3404 					Z_ADDREF_P(result);
3405 					convert_to_array(result);
3406 				}
3407 			} else {
3408 				if (Z_TYPE_P(expr) != IS_ARRAY) {
3409 					object_init(result);
3410 					if (Z_TYPE_P(expr) != IS_NULL) {
3411 						expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
3412 						if (IS_CONST == IS_CONST) {
3413 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
3414 						} else {
3415 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
3416 						}
3417 					}
3418 				} else {
3419 					ZVAL_COPY(result, expr);
3420 					convert_to_object(result);
3421 				}
3422 			}
3423 	}
3424 
3425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3426 }
3427 
3428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3429 {
3430 	USE_OPLINE
3431 	zend_op_array *new_op_array;
3432 
3433 	zval *inc_filename;
3434 
3435 	SAVE_OPLINE();
3436 	inc_filename = EX_CONSTANT(opline->op1);
3437 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
3438 
3439 	if (UNEXPECTED(EG(exception) != NULL)) {
3440 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
3441 			destroy_op_array(new_op_array);
3442 			efree_size(new_op_array, sizeof(zend_op_array));
3443 		}
3444 		HANDLE_EXCEPTION();
3445 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
3446 		if (RETURN_VALUE_USED(opline)) {
3447 			ZVAL_TRUE(EX_VAR(opline->result.var));
3448 		}
3449 	} else if (EXPECTED(new_op_array != NULL)) {
3450 		zval *return_value = NULL;
3451 		zend_execute_data *call;
3452 
3453 		if (RETURN_VALUE_USED(opline)) {
3454 			return_value = EX_VAR(opline->result.var);
3455 		}
3456 
3457 		new_op_array->scope = EX(func)->op_array.scope;
3458 
3459 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
3460 			(zend_function*)new_op_array, 0,
3461 			Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
3462 			Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
3463 
3464 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
3465 			call->symbol_table = EX(symbol_table);
3466 		} else {
3467 			call->symbol_table = zend_rebuild_symbol_table();
3468 		}
3469 
3470 		call->prev_execute_data = execute_data;
3471 		i_init_code_execute_data(call, new_op_array, return_value);
3472 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3473 			ZEND_VM_ENTER();
3474 		} else {
3475 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3476 			zend_execute_ex(call);
3477 			zend_vm_stack_free_call_frame(call);
3478 		}
3479 
3480 		destroy_op_array(new_op_array);
3481 		efree_size(new_op_array, sizeof(zend_op_array));
3482 		if (UNEXPECTED(EG(exception) != NULL)) {
3483 			zend_throw_exception_internal(NULL);
3484 			HANDLE_EXCEPTION();
3485 		}
3486 	} else if (RETURN_VALUE_USED(opline)) {
3487 		ZVAL_FALSE(EX_VAR(opline->result.var));
3488 	}
3489 	ZEND_VM_SET_OPCODE(opline + 1);
3490 	ZEND_VM_CONTINUE();
3491 }
3492 
3493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3494 {
3495 	USE_OPLINE
3496 
3497 	zval *array_ptr, *result;
3498 	HashTable *fe_ht;
3499 
3500 	SAVE_OPLINE();
3501 
3502 	array_ptr = EX_CONSTANT(opline->op1);
3503 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
3504 		result = EX_VAR(opline->result.var);
3505 		ZVAL_COPY_VALUE(result, array_ptr);
3506 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
3507 			Z_ADDREF_P(array_ptr);
3508 		}
3509 		Z_FE_POS_P(result) = 0;
3510 
3511 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3512 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
3513 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
3514 			HashPosition pos = 0;
3515 			Bucket *p;
3516 
3517 			result = EX_VAR(opline->result.var);
3518 			ZVAL_COPY_VALUE(result, array_ptr);
3519 			if (IS_CONST != IS_TMP_VAR) {
3520 				Z_ADDREF_P(array_ptr);
3521 			}
3522 			if (Z_OBJ_P(array_ptr)->properties
3523 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
3524 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
3525 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
3526 				}
3527 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
3528 			}
3529 			fe_ht = Z_OBJPROP_P(array_ptr);
3530 			pos = 0;
3531 			p = fe_ht->arData;
3532 			while (1) {
3533 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3534 
3535 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3536 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3537 				}
3538 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3539 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3540 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
3541 				    (UNEXPECTED(!p->key) ||
3542 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
3543 					break;
3544 				}
3545 				pos++;
3546 				p++;
3547 			}
3548 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3549 
3550 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3551 		} else {
3552 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
3553 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
3554 			zend_bool is_empty;
3555 
3556 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3557 
3558 				if (iter) {
3559 					OBJ_RELEASE(&iter->std);
3560 				}
3561 				if (!EG(exception)) {
3562 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
3563 				}
3564 				zend_throw_exception_internal(NULL);
3565 				HANDLE_EXCEPTION();
3566 			}
3567 
3568 			iter->index = 0;
3569 			if (iter->funcs->rewind) {
3570 				iter->funcs->rewind(iter);
3571 				if (UNEXPECTED(EG(exception) != NULL)) {
3572 					OBJ_RELEASE(&iter->std);
3573 
3574 					HANDLE_EXCEPTION();
3575 				}
3576 			}
3577 
3578 			is_empty = iter->funcs->valid(iter) != SUCCESS;
3579 
3580 			if (UNEXPECTED(EG(exception) != NULL)) {
3581 				OBJ_RELEASE(&iter->std);
3582 
3583 				HANDLE_EXCEPTION();
3584 			}
3585 			iter->index = -1; /* will be set to 0 before using next handler */
3586 
3587 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
3588 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3589 
3590 			if (is_empty) {
3591 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3592 			} else {
3593 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3594 			}
3595 		}
3596 	} else {
3597 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
3598 		ZVAL_UNDEF(EX_VAR(opline->result.var));
3599 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3600 
3601 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3602 	}
3603 }
3604 
3605 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3606 {
3607 	USE_OPLINE
3608 
3609 	zval *array_ptr, *array_ref;
3610 	HashTable *fe_ht;
3611 	HashPosition pos = 0;
3612 	Bucket *p;
3613 
3614 	SAVE_OPLINE();
3615 
3616 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3617 		array_ref = array_ptr = NULL;
3618 		if (Z_ISREF_P(array_ref)) {
3619 			array_ptr = Z_REFVAL_P(array_ref);
3620 		}
3621 	} else {
3622 		array_ref = array_ptr = EX_CONSTANT(opline->op1);
3623 	}
3624 
3625 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
3626 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3627 			if (array_ptr == array_ref) {
3628 				ZVAL_NEW_REF(array_ref, array_ref);
3629 				array_ptr = Z_REFVAL_P(array_ref);
3630 			}
3631 			Z_ADDREF_P(array_ref);
3632 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
3633 		} else {
3634 			array_ref = EX_VAR(opline->result.var);
3635 			ZVAL_NEW_REF(array_ref, array_ptr);
3636 			array_ptr = Z_REFVAL_P(array_ref);
3637 		}
3638 		if (IS_CONST == IS_CONST) {
3639 			zval_copy_ctor_func(array_ptr);
3640 		} else {
3641 			SEPARATE_ARRAY(array_ptr);
3642 		}
3643 		fe_ht = Z_ARRVAL_P(array_ptr);
3644 		p = fe_ht->arData;
3645 		while (1) {
3646 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3647 
3648 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3649 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3650 			}
3651 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3652 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3653 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
3654 				break;
3655 			}
3656 			pos++;
3657 			p++;
3658 		}
3659 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3660 
3661 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3662 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
3663 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
3664 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
3665 				if (array_ptr == array_ref) {
3666 					ZVAL_NEW_REF(array_ref, array_ref);
3667 					array_ptr = Z_REFVAL_P(array_ref);
3668 				}
3669 				Z_ADDREF_P(array_ref);
3670 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
3671 			} else {
3672 				array_ptr = EX_VAR(opline->result.var);
3673 				ZVAL_COPY_VALUE(array_ptr, array_ref);
3674 			}
3675 			if (Z_OBJ_P(array_ptr)->properties
3676 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
3677 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
3678 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
3679 				}
3680 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
3681 			}
3682 			fe_ht = Z_OBJPROP_P(array_ptr);
3683 			p = fe_ht->arData;
3684 			while (1) {
3685 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
3686 
3687 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3688 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3689 				}
3690 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
3691 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
3692 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
3693 				    (UNEXPECTED(!p->key) ||
3694 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
3695 					break;
3696 				}
3697 				pos++;
3698 				p++;
3699 			}
3700 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
3701 
3702 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3703 		} else {
3704 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
3705 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
3706 			zend_bool is_empty;
3707 
3708 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3709 				if (IS_CONST == IS_VAR) {
3710 
3711 				} else {
3712 
3713 				}
3714 				if (!EG(exception)) {
3715 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
3716 				}
3717 				zend_throw_exception_internal(NULL);
3718 				HANDLE_EXCEPTION();
3719 			}
3720 
3721 			iter->index = 0;
3722 			if (iter->funcs->rewind) {
3723 				iter->funcs->rewind(iter);
3724 				if (UNEXPECTED(EG(exception) != NULL)) {
3725 					OBJ_RELEASE(&iter->std);
3726 					if (IS_CONST == IS_VAR) {
3727 
3728 					} else {
3729 
3730 					}
3731 					HANDLE_EXCEPTION();
3732 				}
3733 			}
3734 
3735 			is_empty = iter->funcs->valid(iter) != SUCCESS;
3736 
3737 			if (UNEXPECTED(EG(exception) != NULL)) {
3738 				OBJ_RELEASE(&iter->std);
3739 				if (IS_CONST == IS_VAR) {
3740 
3741 				} else {
3742 
3743 				}
3744 				HANDLE_EXCEPTION();
3745 			}
3746 			iter->index = -1; /* will be set to 0 before using next handler */
3747 
3748 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
3749 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3750 
3751 			if (IS_CONST == IS_VAR) {
3752 
3753 			} else {
3754 
3755 			}
3756 			if (is_empty) {
3757 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3758 			} else {
3759 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3760 			}
3761 		}
3762 	} else {
3763 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
3764 		ZVAL_UNDEF(EX_VAR(opline->result.var));
3765 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3766 		if (IS_CONST == IS_VAR) {
3767 
3768 		} else {
3769 
3770 		}
3771 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3772 	}
3773 }
3774 
3775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3776 {
3777 	USE_OPLINE
3778 
3779 	SAVE_OPLINE();
3780 	if (IS_CONST != IS_UNUSED) {
3781 
3782 		zval *ptr = EX_CONSTANT(opline->op1);
3783 
3784 		do {
3785 			if (Z_TYPE_P(ptr) == IS_LONG) {
3786 				EG(exit_status) = Z_LVAL_P(ptr);
3787 			} else {
3788 				if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
3789 					ptr = Z_REFVAL_P(ptr);
3790 					if (Z_TYPE_P(ptr) == IS_LONG) {
3791 						EG(exit_status) = Z_LVAL_P(ptr);
3792 						break;
3793 					}
3794 				}
3795 				zend_print_variable(ptr);
3796 			}
3797 		} while (0);
3798 
3799 	}
3800 	zend_bailout();
3801 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
3802 }
3803 
3804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3805 {
3806 	USE_OPLINE
3807 
3808 	zval *value;
3809 	zval *ref = NULL;
3810 
3811 	SAVE_OPLINE();
3812 	value = EX_CONSTANT(opline->op1);
3813 
3814 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
3815 		if (IS_CONST == IS_VAR) {
3816 			ref = value;
3817 		}
3818 		value = Z_REFVAL_P(value);
3819 	}
3820 	if (i_zend_is_true(value)) {
3821 		zval *result = EX_VAR(opline->result.var);
3822 
3823 		ZVAL_COPY_VALUE(result, value);
3824 		if (IS_CONST == IS_CONST) {
3825 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
3826 		} else if (IS_CONST == IS_CV) {
3827 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3828 		} else if (IS_CONST == IS_VAR && ref) {
3829 			zend_reference *r = Z_REF_P(ref);
3830 
3831 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
3832 				efree_size(r, sizeof(zend_reference));
3833 			} else if (Z_OPT_REFCOUNTED_P(result)) {
3834 				Z_ADDREF_P(result);
3835 			}
3836 		}
3837 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3838 	}
3839 
3840 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3841 }
3842 
3843 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3844 {
3845 	USE_OPLINE
3846 
3847 	zval *value;
3848 	zval *ref = NULL;
3849 
3850 	SAVE_OPLINE();
3851 	value = EX_CONSTANT(opline->op1);
3852 
3853 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
3854 		if (IS_CONST == IS_VAR) {
3855 			ref = value;
3856 		}
3857 		value = Z_REFVAL_P(value);
3858 	}
3859 
3860 	if (Z_TYPE_P(value) > IS_NULL) {
3861 		zval *result = EX_VAR(opline->result.var);
3862 		ZVAL_COPY_VALUE(result, value);
3863 		if (IS_CONST == IS_CONST) {
3864 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
3865 		} else if (IS_CONST == IS_CV) {
3866 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3867 		} else if (IS_CONST == IS_VAR && ref) {
3868 			zend_reference *r = Z_REF_P(ref);
3869 
3870 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
3871 				efree_size(r, sizeof(zend_reference));
3872 			} else if (Z_OPT_REFCOUNTED_P(result)) {
3873 				Z_ADDREF_P(result);
3874 			}
3875 		}
3876 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
3877 	}
3878 
3879 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3880 }
3881 
3882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3883 {
3884 	USE_OPLINE
3885 
3886 	zval *value;
3887 	zval *result = EX_VAR(opline->result.var);
3888 
3889 	value = EX_CONSTANT(opline->op1);
3890 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
3891 		SAVE_OPLINE();
3892 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
3893 		ZVAL_NULL(result);
3894 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3895 	}
3896 
3897 	if (IS_CONST == IS_CV) {
3898 		ZVAL_DEREF(value);
3899 		ZVAL_COPY(result, value);
3900 	} else if (IS_CONST == IS_VAR) {
3901 		if (UNEXPECTED(Z_ISREF_P(value))) {
3902 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
3903 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
3904 				efree_size(Z_REF_P(value), sizeof(zend_reference));
3905 			} else if (Z_OPT_REFCOUNTED_P(result)) {
3906 				Z_ADDREF_P(result);
3907 			}
3908 		} else {
3909 			ZVAL_COPY_VALUE(result, value);
3910 		}
3911 	} else {
3912 		ZVAL_COPY_VALUE(result, value);
3913 		if (IS_CONST == IS_CONST) {
3914 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
3915 				Z_ADDREF_P(result);
3916 			}
3917 		}
3918 	}
3919 	ZEND_VM_NEXT_OPCODE();
3920 }
3921 
3922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3923 {
3924 	USE_OPLINE
3925 
3926 	zend_generator *generator = zend_get_running_generator(execute_data);
3927 
3928 	zval *val;
3929 
3930 
3931 	SAVE_OPLINE();
3932 	val = EX_CONSTANT(opline->op1);
3933 
3934 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
3935 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
3936 
3937 		HANDLE_EXCEPTION();
3938 	}
3939 
3940 	if (Z_TYPE_P(val) == IS_ARRAY) {
3941 		ZVAL_COPY_VALUE(&generator->values, val);
3942 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
3943 			Z_ADDREF_P(val);
3944 		}
3945 		Z_FE_POS(generator->values) = 0;
3946 
3947 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
3948 		zend_class_entry *ce = Z_OBJCE_P(val);
3949 		if (ce == zend_ce_generator) {
3950 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
3951 
3952 			if (IS_CONST != IS_TMP_VAR) {
3953 				Z_ADDREF_P(val);
3954 			}
3955 
3956 			if (Z_ISUNDEF(new_gen->retval)) {
3957 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
3958 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
3959 					zval_ptr_dtor(val);
3960 					HANDLE_EXCEPTION();
3961 				} else {
3962 					zend_generator_yield_from(generator, new_gen);
3963 				}
3964 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
3965 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
3966 				zval_ptr_dtor(val);
3967 				HANDLE_EXCEPTION();
3968 			} else {
3969 				if (RETURN_VALUE_USED(opline)) {
3970 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
3971 				}
3972 				ZEND_VM_NEXT_OPCODE();
3973 			}
3974 		} else {
3975 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
3976 
3977 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
3978 				if (!EG(exception)) {
3979 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
3980 				}
3981 				HANDLE_EXCEPTION();
3982 			}
3983 
3984 			iter->index = 0;
3985 			if (iter->funcs->rewind) {
3986 				iter->funcs->rewind(iter);
3987 				if (UNEXPECTED(EG(exception) != NULL)) {
3988 					OBJ_RELEASE(&iter->std);
3989 					HANDLE_EXCEPTION();
3990 				}
3991 			}
3992 
3993 			ZVAL_OBJ(&generator->values, &iter->std);
3994 		}
3995 	} else {
3996 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
3997 		HANDLE_EXCEPTION();
3998 	}
3999 
4000 	/* This is the default return value
4001 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
4002 	if (RETURN_VALUE_USED(opline)) {
4003 		ZVAL_NULL(EX_VAR(opline->result.var));
4004 	}
4005 
4006 	/* This generator has no send target (though the generator we delegate to might have one) */
4007 	generator->send_target = NULL;
4008 
4009 	/* We increment to the next op, so we are at the correct position when the
4010 	 * generator is resumed. */
4011 	ZEND_VM_INC_OPCODE();
4012 
4013 	/* The GOTO VM uses a local opline variable. We need to set the opline
4014 	 * variable in execute_data so we don't resume at an old position. */
4015 	SAVE_OPLINE();
4016 
4017 	ZEND_VM_RETURN();
4018 }
4019 
4020 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4021 {
4022 	USE_OPLINE
4023 	zval *value;
4024 
4025 
4026 	SAVE_OPLINE();
4027 	value = EX_CONSTANT(opline->op1);
4028 try_strlen:
4029 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
4030 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
4031 	} else {
4032 		zend_bool strict;
4033 
4034 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4035 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
4036 		}
4037 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
4038 			value = Z_REFVAL_P(value);
4039 			goto try_strlen;
4040 		}
4041 		strict = EX_USES_STRICT_TYPES();
4042 		do {
4043 			if (EXPECTED(!strict)) {
4044 				zend_string *str;
4045 				zval tmp;
4046 
4047 				ZVAL_COPY(&tmp, value);
4048 				if (zend_parse_arg_str_weak(&tmp, &str)) {
4049 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
4050 					zval_ptr_dtor(&tmp);
4051 					break;
4052 				}
4053 				zval_ptr_dtor(&tmp);
4054 			}
4055 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
4056 			ZVAL_NULL(EX_VAR(opline->result.var));
4057 		} while (0);
4058 	}
4059 
4060 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4061 }
4062 
4063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4064 {
4065 	USE_OPLINE
4066 	zval *value;
4067 	int result = 0;
4068 
4069 
4070 	SAVE_OPLINE();
4071 	value = EX_CONSTANT(opline->op1);
4072 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
4073 		if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4074 			zend_class_entry *ce = Z_OBJCE_P(value);
4075 
4076 			if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
4077 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
4078 				result = 1;
4079 			}
4080 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
4081 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
4082 
4083 			if (EXPECTED(type_name != NULL)) {
4084 				result = 1;
4085 			}
4086 		} else {
4087 			result = 1;
4088 		}
4089 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
4090 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
4091 		result = 1;
4092 	}
4093 
4094 	ZEND_VM_SMART_BRANCH(result, 1);
4095 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4096 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4097 }
4098 
4099 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4100 {
4101 	USE_OPLINE
4102 	zend_constant *c;
4103 	int result;
4104 
4105 	if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
4106 		result = 1;
4107 	} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op1), 0)) == NULL) {
4108 		result = 0;
4109 	} else {
4110 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), c);
4111 		result = 1;
4112 	}
4113 	ZEND_VM_SMART_BRANCH(result, 0);
4114 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4115 	ZEND_VM_NEXT_OPCODE();
4116 }
4117 
4118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4119 {
4120 	USE_OPLINE
4121 
4122 	zval *value;
4123 
4124 	value = EX_CONSTANT(opline->op1);
4125 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
4126 	ZEND_VM_NEXT_OPCODE();
4127 }
4128 
4129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4130 {
4131 	USE_OPLINE
4132 
4133 	zval *value;
4134 
4135 	value = EX_CONSTANT(opline->op1);
4136 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
4137 	ZEND_VM_NEXT_OPCODE();
4138 }
4139 
4140 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4141 {
4142 	USE_OPLINE
4143 
4144 	zval *op1, *op2, *result;
4145 
4146 	op1 = EX_CONSTANT(opline->op1);
4147 	op2 = EX_CONSTANT(opline->op2);
4148 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4149 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4150 			result = EX_VAR(opline->result.var);
4151 			fast_long_add_function(result, op1, op2);
4152 			ZEND_VM_NEXT_OPCODE();
4153 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4154 			result = EX_VAR(opline->result.var);
4155 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
4156 			ZEND_VM_NEXT_OPCODE();
4157 		}
4158 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4159 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4160 			result = EX_VAR(opline->result.var);
4161 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
4162 			ZEND_VM_NEXT_OPCODE();
4163 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4164 			result = EX_VAR(opline->result.var);
4165 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
4166 			ZEND_VM_NEXT_OPCODE();
4167 		}
4168 	}
4169 
4170 	SAVE_OPLINE();
4171 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4172 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4173 	}
4174 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4175 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4176 	}
4177 	add_function(EX_VAR(opline->result.var), op1, op2);
4178 
4179 
4180 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4181 }
4182 
4183 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4184 {
4185 	USE_OPLINE
4186 
4187 	zval *op1, *op2, *result;
4188 
4189 	op1 = EX_CONSTANT(opline->op1);
4190 	op2 = EX_CONSTANT(opline->op2);
4191 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4192 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4193 			result = EX_VAR(opline->result.var);
4194 			fast_long_sub_function(result, op1, op2);
4195 			ZEND_VM_NEXT_OPCODE();
4196 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4197 			result = EX_VAR(opline->result.var);
4198 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
4199 			ZEND_VM_NEXT_OPCODE();
4200 		}
4201 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4202 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4203 			result = EX_VAR(opline->result.var);
4204 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
4205 			ZEND_VM_NEXT_OPCODE();
4206 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4207 			result = EX_VAR(opline->result.var);
4208 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
4209 			ZEND_VM_NEXT_OPCODE();
4210 		}
4211 	}
4212 
4213 	SAVE_OPLINE();
4214 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4215 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4216 	}
4217 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4218 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4219 	}
4220 	sub_function(EX_VAR(opline->result.var), op1, op2);
4221 
4222 
4223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4224 }
4225 
4226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4227 {
4228 	USE_OPLINE
4229 
4230 	zval *op1, *op2, *result;
4231 
4232 	op1 = EX_CONSTANT(opline->op1);
4233 	op2 = EX_CONSTANT(opline->op2);
4234 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4235 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4236 			zend_long overflow;
4237 
4238 			result = EX_VAR(opline->result.var);
4239 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
4240 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
4241 			ZEND_VM_NEXT_OPCODE();
4242 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4243 			result = EX_VAR(opline->result.var);
4244 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
4245 			ZEND_VM_NEXT_OPCODE();
4246 		}
4247 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4248 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4249 			result = EX_VAR(opline->result.var);
4250 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
4251 			ZEND_VM_NEXT_OPCODE();
4252 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4253 			result = EX_VAR(opline->result.var);
4254 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
4255 			ZEND_VM_NEXT_OPCODE();
4256 		}
4257 	}
4258 
4259 	SAVE_OPLINE();
4260 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4261 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4262 	}
4263 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4264 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4265 	}
4266 	mul_function(EX_VAR(opline->result.var), op1, op2);
4267 
4268 
4269 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4270 }
4271 
4272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4273 {
4274 	USE_OPLINE
4275 
4276 	zval *op1, *op2;
4277 
4278 	SAVE_OPLINE();
4279 	op1 = EX_CONSTANT(opline->op1);
4280 	op2 = EX_CONSTANT(opline->op2);
4281 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
4282 
4283 
4284 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4285 }
4286 
4287 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4288 {
4289 	USE_OPLINE
4290 
4291 	zval *op1, *op2, *result;
4292 
4293 	op1 = EX_CONSTANT(opline->op1);
4294 	op2 = EX_CONSTANT(opline->op2);
4295 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4296 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4297 			result = EX_VAR(opline->result.var);
4298 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
4299 				SAVE_OPLINE();
4300 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
4301 				HANDLE_EXCEPTION();
4302 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
4303 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
4304 				ZVAL_LONG(result, 0);
4305 			} else {
4306 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
4307 			}
4308 			ZEND_VM_NEXT_OPCODE();
4309 		}
4310 	}
4311 
4312 	SAVE_OPLINE();
4313 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4314 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4315 	}
4316 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4317 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4318 	}
4319 	mod_function(EX_VAR(opline->result.var), op1, op2);
4320 
4321 
4322 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4323 }
4324 
4325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4326 {
4327 	USE_OPLINE
4328 
4329 	zval *op1, *op2;
4330 
4331 	op1 = EX_CONSTANT(opline->op1);
4332 	op2 = EX_CONSTANT(opline->op2);
4333 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4334 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
4335 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
4336 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
4337 		ZEND_VM_NEXT_OPCODE();
4338 	}
4339 
4340 	SAVE_OPLINE();
4341 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4342 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4343 	}
4344 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4345 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4346 	}
4347 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
4348 
4349 
4350 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4351 }
4352 
4353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4354 {
4355 	USE_OPLINE
4356 
4357 	zval *op1, *op2;
4358 
4359 	op1 = EX_CONSTANT(opline->op1);
4360 	op2 = EX_CONSTANT(opline->op2);
4361 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4362 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
4363 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
4364 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
4365 		ZEND_VM_NEXT_OPCODE();
4366 	}
4367 
4368 	SAVE_OPLINE();
4369 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4370 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4371 	}
4372 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4373 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4374 	}
4375 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
4376 
4377 
4378 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4379 }
4380 
4381 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4382 {
4383 	USE_OPLINE
4384 
4385 	zval *op1, *op2;
4386 
4387 	SAVE_OPLINE();
4388 	op1 = EX_CONSTANT(opline->op1);
4389 	op2 = EX_CONSTANT(opline->op2);
4390 	pow_function(EX_VAR(opline->result.var), op1, op2);
4391 
4392 
4393 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4394 }
4395 
4396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4397 {
4398 	USE_OPLINE
4399 
4400 	zval *op1, *op2;
4401 
4402 	SAVE_OPLINE();
4403 	op1 = EX_CONSTANT(opline->op1);
4404 	op2 = EX_CONSTANT(opline->op2);
4405 
4406 	do {
4407 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
4408 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
4409 			zend_string *op1_str = Z_STR_P(op1);
4410 			zend_string *op2_str = Z_STR_P(op2);
4411 			zend_string *str;
4412 
4413 			if (IS_CONST != IS_CONST) {
4414 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
4415 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
4416 
4417 					break;
4418 				}
4419 			}
4420 			if (IS_CONST != IS_CONST) {
4421 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
4422 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
4423 
4424 					break;
4425 				}
4426 			}
4427 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
4428 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
4429 			    size_t len = ZSTR_LEN(op1_str);
4430 
4431 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
4432 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
4433 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
4434 				break;
4435 			} else {
4436 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
4437 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
4438 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
4439 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
4440 			}
4441 		} else {
4442 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4443 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4444 			}
4445 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4446 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4447 			}
4448 			concat_function(EX_VAR(opline->result.var), op1, op2);
4449 		}
4450 
4451 	} while (0);
4452 
4453 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4454 }
4455 
4456 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4457 {
4458 	USE_OPLINE
4459 
4460 	zval *op1, *op2;
4461 	int result;
4462 
4463 	SAVE_OPLINE();
4464 	op1 = EX_CONSTANT(opline->op1);
4465 	op2 = EX_CONSTANT(opline->op2);
4466 	result = fast_is_identical_function(op1, op2);
4467 
4468 
4469 	ZEND_VM_SMART_BRANCH(result, 1);
4470 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4472 }
4473 
4474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4475 {
4476 	USE_OPLINE
4477 
4478 	zval *op1, *op2;
4479 	int result;
4480 
4481 	SAVE_OPLINE();
4482 	op1 = EX_CONSTANT(opline->op1);
4483 	op2 = EX_CONSTANT(opline->op2);
4484 	result = fast_is_not_identical_function(op1, op2);
4485 
4486 
4487 	ZEND_VM_SMART_BRANCH(result, 1);
4488 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4489 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4490 }
4491 
4492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4493 {
4494 	USE_OPLINE
4495 
4496 	zval *op1, *op2, *result;
4497 
4498 	op1 = EX_CONSTANT(opline->op1);
4499 	op2 = EX_CONSTANT(opline->op2);
4500 	do {
4501 		int result;
4502 
4503 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
4504 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4505 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
4506 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4507 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
4508 			} else {
4509 				break;
4510 			}
4511 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
4512 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4513 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
4514 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4515 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
4516 			} else {
4517 				break;
4518 			}
4519 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
4520 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
4521 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
4522 					result = 1;
4523 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
4524 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
4525 						result = 0;
4526 					} else {
4527 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
4528 					}
4529 				} else {
4530 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
4531 				}
4532 
4533 
4534 			} else {
4535 				break;
4536 			}
4537 		} else {
4538 			break;
4539 		}
4540 		ZEND_VM_SMART_BRANCH(result, 0);
4541 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4542 		ZEND_VM_NEXT_OPCODE();
4543 	} while (0);
4544 
4545 	SAVE_OPLINE();
4546 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4547 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4548 	}
4549 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4550 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4551 	}
4552 	result = EX_VAR(opline->result.var);
4553 	compare_function(result, op1, op2);
4554 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
4555 
4556 
4557 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4558 }
4559 
4560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4561 {
4562 	USE_OPLINE
4563 
4564 	zval *op1, *op2, *result;
4565 
4566 	op1 = EX_CONSTANT(opline->op1);
4567 	op2 = EX_CONSTANT(opline->op2);
4568 	do {
4569 		int result;
4570 
4571 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
4572 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4573 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
4574 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4575 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
4576 			} else {
4577 				break;
4578 			}
4579 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
4580 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4581 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
4582 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4583 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
4584 			} else {
4585 				break;
4586 			}
4587 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
4588 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
4589 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
4590 					result = 0;
4591 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
4592 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
4593 						result = 1;
4594 					} else {
4595 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
4596 					}
4597 				} else {
4598 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
4599 				}
4600 
4601 
4602 			} else {
4603 				break;
4604 			}
4605 		} else {
4606 			break;
4607 		}
4608 		ZEND_VM_SMART_BRANCH(result, 0);
4609 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4610 		ZEND_VM_NEXT_OPCODE();
4611 	} while (0);
4612 
4613 	SAVE_OPLINE();
4614 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
4615 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4616 	}
4617 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
4618 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4619 	}
4620 	result = EX_VAR(opline->result.var);
4621 	compare_function(result, op1, op2);
4622 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
4623 
4624 
4625 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4626 }
4627 
4628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4629 {
4630 	USE_OPLINE
4631 
4632 	zval *op1, *op2, *result;
4633 
4634 	op1 = EX_CONSTANT(opline->op1);
4635 	op2 = EX_CONSTANT(opline->op2);
4636 	do {
4637 		int result;
4638 
4639 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4640 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4641 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
4642 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4643 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
4644 			} else {
4645 				break;
4646 			}
4647 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4648 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4649 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
4650 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4651 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
4652 			} else {
4653 				break;
4654 			}
4655 		} else {
4656 			break;
4657 		}
4658 		ZEND_VM_SMART_BRANCH(result, 0);
4659 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4660 		ZEND_VM_NEXT_OPCODE();
4661 	} while (0);
4662 
4663 	SAVE_OPLINE();
4664 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4665 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4666 	}
4667 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4668 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4669 	}
4670 	result = EX_VAR(opline->result.var);
4671 	compare_function(result, op1, op2);
4672 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
4673 
4674 
4675 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4676 }
4677 
4678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4679 {
4680 	USE_OPLINE
4681 
4682 	zval *op1, *op2, *result;
4683 
4684 	op1 = EX_CONSTANT(opline->op1);
4685 	op2 = EX_CONSTANT(opline->op2);
4686 	do {
4687 		int result;
4688 
4689 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4690 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4691 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
4692 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4693 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
4694 			} else {
4695 				break;
4696 			}
4697 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4698 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4699 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
4700 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4701 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
4702 			} else {
4703 				break;
4704 			}
4705 		} else {
4706 			break;
4707 		}
4708 		ZEND_VM_SMART_BRANCH(result, 0);
4709 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4710 		ZEND_VM_NEXT_OPCODE();
4711 	} while (0);
4712 
4713 	SAVE_OPLINE();
4714 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4715 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4716 	}
4717 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4718 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4719 	}
4720 	result = EX_VAR(opline->result.var);
4721 	compare_function(result, op1, op2);
4722 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
4723 
4724 
4725 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4726 }
4727 
4728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4729 {
4730 	USE_OPLINE
4731 
4732 	zval *op1, *op2;
4733 
4734 	SAVE_OPLINE();
4735 	op1 = EX_CONSTANT(opline->op1);
4736 	op2 = EX_CONSTANT(opline->op2);
4737 	compare_function(EX_VAR(opline->result.var), op1, op2);
4738 
4739 
4740 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4741 }
4742 
4743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4744 {
4745 	USE_OPLINE
4746 
4747 	zval *op1, *op2;
4748 
4749 	op1 = EX_CONSTANT(opline->op1);
4750 	op2 = EX_CONSTANT(opline->op2);
4751 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4752 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4753 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
4754 		ZEND_VM_NEXT_OPCODE();
4755 	}
4756 
4757 	SAVE_OPLINE();
4758 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4759 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4760 	}
4761 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4762 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4763 	}
4764 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
4765 
4766 
4767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4768 }
4769 
4770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4771 {
4772 	USE_OPLINE
4773 
4774 	zval *op1, *op2;
4775 
4776 	op1 = EX_CONSTANT(opline->op1);
4777 	op2 = EX_CONSTANT(opline->op2);
4778 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4779 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4780 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
4781 		ZEND_VM_NEXT_OPCODE();
4782 	}
4783 
4784 	SAVE_OPLINE();
4785 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4786 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4787 	}
4788 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4789 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4790 	}
4791 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
4792 
4793 
4794 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4795 }
4796 
4797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4798 {
4799 	USE_OPLINE
4800 
4801 	zval *op1, *op2;
4802 
4803 	op1 = EX_CONSTANT(opline->op1);
4804 	op2 = EX_CONSTANT(opline->op2);
4805 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4806 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4807 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
4808 		ZEND_VM_NEXT_OPCODE();
4809 	}
4810 
4811 	SAVE_OPLINE();
4812 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
4813 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
4814 	}
4815 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
4816 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
4817 	}
4818 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
4819 
4820 
4821 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4822 }
4823 
4824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4825 {
4826 	USE_OPLINE
4827 
4828 	zval *op1, *op2;
4829 
4830 	SAVE_OPLINE();
4831 	op1 = EX_CONSTANT(opline->op1);
4832 	op2 = EX_CONSTANT(opline->op2);
4833 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
4834 
4835 
4836 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4837 }
4838 
4839 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
4840 {
4841 	USE_OPLINE
4842 
4843 	zval *varname;
4844 	zval *retval;
4845 	zend_string *name;
4846 	zend_class_entry *ce;
4847 
4848 	SAVE_OPLINE();
4849 	varname = EX_CONSTANT(opline->op1);
4850 
4851  	if (IS_CONST == IS_CONST) {
4852 		name = Z_STR_P(varname);
4853 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
4854 		name = Z_STR_P(varname);
4855 		zend_string_addref(name);
4856 	} else {
4857 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
4858 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
4859 		}
4860 		name = zval_get_string(varname);
4861 	}
4862 
4863 	if (IS_CONST == IS_CONST) {
4864 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
4865 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
4866 
4867 			/* check if static properties were destoyed */
4868 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
4869 				if (type == BP_VAR_IS) {
4870 					retval = &EG(uninitialized_zval);
4871 				} else {
4872 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
4873 
4874 					HANDLE_EXCEPTION();
4875 				}
4876 			}
4877 
4878 			goto fetch_static_prop_return;
4879 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
4880 			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);
4881 			if (UNEXPECTED(ce == NULL)) {
4882 				ZEND_ASSERT(EG(exception));
4883 				if (IS_CONST != IS_CONST) {
4884 					zend_string_release(name);
4885 				}
4886 
4887 				HANDLE_EXCEPTION();
4888 			}
4889 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
4890 		}
4891 	} else {
4892 		if (IS_CONST == IS_UNUSED) {
4893 			ce = zend_fetch_class(NULL, opline->op2.num);
4894 			if (UNEXPECTED(ce == NULL)) {
4895 				ZEND_ASSERT(EG(exception));
4896 				if (IS_CONST != IS_CONST) {
4897 					zend_string_release(name);
4898 				}
4899 
4900 				HANDLE_EXCEPTION();
4901 			}
4902 		} else {
4903 			ce = Z_CE_P(EX_VAR(opline->op2.var));
4904 		}
4905 		if (IS_CONST == IS_CONST &&
4906 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
4907 
4908 			/* check if static properties were destoyed */
4909 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
4910 				if (type == BP_VAR_IS) {
4911 					retval = &EG(uninitialized_zval);
4912 				} else {
4913 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
4914 
4915 					HANDLE_EXCEPTION();
4916 				}
4917 			}
4918 
4919 			goto fetch_static_prop_return;
4920 		}
4921 	}
4922 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
4923 	if (UNEXPECTED(retval == NULL)) {
4924 		if (type == BP_VAR_IS) {
4925 			retval = &EG(uninitialized_zval);
4926 		} else {
4927 			ZEND_ASSERT(EG(exception));
4928 			if (IS_CONST != IS_CONST) {
4929 				zend_string_release(name);
4930 			}
4931 
4932 			HANDLE_EXCEPTION();
4933 		}
4934 	} else if (IS_CONST == IS_CONST) {
4935 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
4936 	}
4937 
4938 	if (IS_CONST != IS_CONST) {
4939 		zend_string_release(name);
4940 	}
4941 
4942 fetch_static_prop_return:
4943 	if (type == BP_VAR_R || type == BP_VAR_IS) {
4944 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
4945 	} else {
4946 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
4947 	}
4948 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4949 }
4950 
4951 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4952 {
4953 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4954 }
4955 
4956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4957 {
4958 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4959 }
4960 
4961 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4962 {
4963 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4964 }
4965 
4966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4967 {
4968 	USE_OPLINE
4969 
4970 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
4971 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4972 	} else {
4973 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4974 	}
4975 }
4976 
4977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4978 {
4979 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4980 }
4981 
4982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4983 {
4984 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4985 }
4986 
4987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4988 {
4989 	USE_OPLINE
4990 
4991 	zval *container, *dim, *value, *result;
4992 
4993 	SAVE_OPLINE();
4994 	container = EX_CONSTANT(opline->op1);
4995 	dim = EX_CONSTANT(opline->op2);
4996 	if (IS_CONST != IS_CONST) {
4997 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
4998 fetch_dim_r_array:
4999 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
5000 			result = EX_VAR(opline->result.var);
5001 			ZVAL_COPY_UNREF(result, value);
5002 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
5003 			container = Z_REFVAL_P(container);
5004 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
5005 				goto fetch_dim_r_array;
5006 			} else {
5007 				goto fetch_dim_r_slow;
5008 			}
5009 		} else {
5010 fetch_dim_r_slow:
5011 			result = EX_VAR(opline->result.var);
5012 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
5013 		}
5014 	} else {
5015 		result = EX_VAR(opline->result.var);
5016 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
5017 	}
5018 
5019 
5020 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5021 }
5022 
5023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5024 {
5025 	USE_OPLINE
5026 
5027 	zval *container;
5028 
5029 	SAVE_OPLINE();
5030 	container = EX_CONSTANT(opline->op1);
5031 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5032 
5033 
5034 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5035 }
5036 
5037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5038 {
5039 	USE_OPLINE
5040 	zval *container;
5041 	zend_free_op free_op1;
5042 
5043 	SAVE_OPLINE();
5044 
5045 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
5046         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
5047             zend_throw_error(NULL, "Cannot use temporary expression in write context");
5048 
5049 
5050 			HANDLE_EXCEPTION();
5051         }
5052 		container = NULL;
5053 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5054 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
5055 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
5056 		}
5057 
5058 
5059 	} else {
5060 		if (IS_CONST == IS_UNUSED) {
5061 			zend_throw_error(NULL, "Cannot use [] for reading");
5062 
5063 
5064 			HANDLE_EXCEPTION();
5065 		}
5066 		container = EX_CONSTANT(opline->op1);
5067 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
5068 
5069 
5070 	}
5071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5072 }
5073 
5074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5075 {
5076 	USE_OPLINE
5077 
5078 	zval *container;
5079 
5080 	zval *offset;
5081 
5082 	SAVE_OPLINE();
5083 	container = EX_CONSTANT(opline->op1);
5084 
5085 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5086 		zend_throw_error(NULL, "Using $this when not in object context");
5087 
5088 		HANDLE_EXCEPTION();
5089 	}
5090 
5091 	offset = EX_CONSTANT(opline->op2);
5092 
5093 	if (IS_CONST == IS_CONST ||
5094 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5095 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5096 			container = Z_REFVAL_P(container);
5097 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
5098 				goto fetch_obj_r_no_object;
5099 			}
5100 		} else {
5101 			goto fetch_obj_r_no_object;
5102 		}
5103 	}
5104 
5105 	/* here we are sure we are dealing with an object */
5106 	do {
5107 		zend_object *zobj = Z_OBJ_P(container);
5108 		zval *retval;
5109 
5110 		if (IS_CONST == IS_CONST &&
5111 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
5112 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
5113 
5114 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
5115 				retval = OBJ_PROP(zobj, prop_offset);
5116 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
5117 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
5118 					break;
5119 				}
5120 			} else if (EXPECTED(zobj->properties != NULL)) {
5121 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
5122 				if (EXPECTED(retval)) {
5123 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
5124 					break;
5125 				}
5126 			}
5127 		}
5128 
5129 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
5130 fetch_obj_r_no_object:
5131 			zend_error(E_NOTICE, "Trying to get property of non-object");
5132 			ZVAL_NULL(EX_VAR(opline->result.var));
5133 		} else {
5134 			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));
5135 
5136 			if (retval != EX_VAR(opline->result.var)) {
5137 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
5138 			}
5139 		}
5140 	} while (0);
5141 
5142 
5143 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5144 }
5145 
5146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5147 {
5148 	USE_OPLINE
5149 
5150 	zval *container;
5151 
5152 	zval *offset;
5153 
5154 	SAVE_OPLINE();
5155 	container = EX_CONSTANT(opline->op1);
5156 
5157 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5158 		zend_throw_error(NULL, "Using $this when not in object context");
5159 
5160 		HANDLE_EXCEPTION();
5161 	}
5162 
5163 	offset  = EX_CONSTANT(opline->op2);
5164 
5165 	if (IS_CONST == IS_CONST ||
5166 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5167 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5168 			container = Z_REFVAL_P(container);
5169 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
5170 				goto fetch_obj_is_no_object;
5171 			}
5172 		} else {
5173 			goto fetch_obj_is_no_object;
5174 		}
5175 	}
5176 
5177 	/* here we are sure we are dealing with an object */
5178 	do {
5179 		zend_object *zobj = Z_OBJ_P(container);
5180 		zval *retval;
5181 
5182 		if (IS_CONST == IS_CONST &&
5183 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
5184 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
5185 
5186 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
5187 				retval = OBJ_PROP(zobj, prop_offset);
5188 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
5189 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5190 					break;
5191 				}
5192 			} else if (EXPECTED(zobj->properties != NULL)) {
5193 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
5194 				if (EXPECTED(retval)) {
5195 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
5196 					break;
5197 				}
5198 			}
5199 		}
5200 
5201 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
5202 fetch_obj_is_no_object:
5203 			ZVAL_NULL(EX_VAR(opline->result.var));
5204 		} else {
5205 
5206 			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));
5207 
5208 			if (retval != EX_VAR(opline->result.var)) {
5209 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
5210 			}
5211 		}
5212 	} while (0);
5213 
5214 
5215 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5216 }
5217 
5218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5219 {
5220 	USE_OPLINE
5221 	zval *container;
5222 
5223 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
5224 		/* Behave like FETCH_OBJ_W */
5225 		zend_free_op free_op1;
5226 		zval *property;
5227 
5228 		SAVE_OPLINE();
5229 		property = EX_CONSTANT(opline->op2);
5230 		container = NULL;
5231 
5232 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5233 			zend_throw_error(NULL, "Using $this when not in object context");
5234 
5235 			HANDLE_EXCEPTION();
5236 		}
5237 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
5238 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
5239 
5240 
5241 			HANDLE_EXCEPTION();
5242 		}
5243 		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);
5244 
5245 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
5246 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
5247 		}
5248 
5249 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5250 	} else {
5251 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5252 	}
5253 }
5254 
5255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5256 {
5257 	USE_OPLINE
5258 
5259 	zval *container;
5260 
5261 	SAVE_OPLINE();
5262 	container = EX_CONSTANT(opline->op1);
5263 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
5264 
5265 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5266 }
5267 
5268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5269 {
5270 	USE_OPLINE
5271 
5272 	zval *op1, *op2;
5273 	zend_string *op1_str, *op2_str, *str;
5274 
5275 	SAVE_OPLINE();
5276 	op1 = EX_CONSTANT(opline->op1);
5277 	if (IS_CONST == IS_CONST) {
5278 		op1_str = Z_STR_P(op1);
5279 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5280 		op1_str = zend_string_copy(Z_STR_P(op1));
5281 	} else {
5282 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
5283 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
5284 		}
5285 		op1_str = _zval_get_string_func(op1);
5286 	}
5287 	op2 = EX_CONSTANT(opline->op2);
5288 	if (IS_CONST == IS_CONST) {
5289 		op2_str = Z_STR_P(op2);
5290 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5291 		op2_str = zend_string_copy(Z_STR_P(op2));
5292 	} else {
5293 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
5294 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
5295 		}
5296 		op2_str = _zval_get_string_func(op2);
5297 	}
5298 	do {
5299 		if (IS_CONST != IS_CONST) {
5300 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
5301 				if (IS_CONST == IS_CONST) {
5302 					zend_string_addref(op2_str);
5303 				}
5304 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
5305 				zend_string_release(op1_str);
5306 				break;
5307 			}
5308 		}
5309 		if (IS_CONST != IS_CONST) {
5310 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
5311 				if (IS_CONST == IS_CONST) {
5312 					zend_string_addref(op1_str);
5313 				}
5314 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
5315 				zend_string_release(op2_str);
5316 				break;
5317 			}
5318 		}
5319 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
5320 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
5321 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
5322 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
5323 		if (IS_CONST != IS_CONST) {
5324 			zend_string_release(op1_str);
5325 		}
5326 		if (IS_CONST != IS_CONST) {
5327 			zend_string_release(op2_str);
5328 		}
5329 	} while (0);
5330 
5331 
5332 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5333 }
5334 
5335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5336 {
5337 	USE_OPLINE
5338 	zval *function_name;
5339 
5340 	zval *object;
5341 	zend_function *fbc;
5342 	zend_class_entry *called_scope;
5343 	zend_object *obj;
5344 	zend_execute_data *call;
5345 	uint32_t call_info;
5346 
5347 	SAVE_OPLINE();
5348 
5349 	function_name = EX_CONSTANT(opline->op2);
5350 
5351 	if (IS_CONST != IS_CONST &&
5352 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5353 		do {
5354 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
5355 				function_name = Z_REFVAL_P(function_name);
5356 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5357 					break;
5358 				}
5359 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5360 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
5361 				if (UNEXPECTED(EG(exception) != NULL)) {
5362 					HANDLE_EXCEPTION();
5363 				}
5364 			}
5365 			zend_throw_error(NULL, "Method name must be a string");
5366 
5367 
5368 			HANDLE_EXCEPTION();
5369 		} while (0);
5370 	}
5371 
5372 	object = EX_CONSTANT(opline->op1);
5373 
5374 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
5375 		zend_throw_error(NULL, "Using $this when not in object context");
5376 
5377 		HANDLE_EXCEPTION();
5378 	}
5379 
5380 	if (IS_CONST != IS_UNUSED) {
5381 		do {
5382 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
5383 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
5384 					object = Z_REFVAL_P(object);
5385 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
5386 						break;
5387 					}
5388 				}
5389 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
5390 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
5391 					if (UNEXPECTED(EG(exception) != NULL)) {
5392 
5393 						HANDLE_EXCEPTION();
5394 					}
5395 				}
5396 				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)));
5397 
5398 
5399 				HANDLE_EXCEPTION();
5400 			}
5401 		} while (0);
5402 	}
5403 
5404 	obj = Z_OBJ_P(object);
5405 	called_scope = obj->ce;
5406 
5407 	if (IS_CONST != IS_CONST ||
5408 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
5409 	    zend_object *orig_obj = obj;
5410 
5411 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
5412 			zend_throw_error(NULL, "Object does not support method calls");
5413 
5414 
5415 			HANDLE_EXCEPTION();
5416 		}
5417 
5418 		/* First, locate the function. */
5419 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
5420 		if (UNEXPECTED(fbc == NULL)) {
5421 			if (EXPECTED(!EG(exception))) {
5422 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
5423 			}
5424 
5425 
5426 			HANDLE_EXCEPTION();
5427 		}
5428 		if (IS_CONST == IS_CONST &&
5429 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5430 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
5431 		    EXPECTED(obj == orig_obj)) {
5432 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
5433 		}
5434 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
5435 			init_func_run_time_cache(&fbc->op_array);
5436 		}
5437 	}
5438 
5439 	call_info = ZEND_CALL_NESTED_FUNCTION;
5440 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
5441 		obj = NULL;
5442 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
5443 		/* CV may be changed indirectly (e.g. when it's a reference) */
5444 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
5445 		GC_REFCOUNT(obj)++; /* For $this pointer */
5446 	}
5447 
5448 
5449 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
5450 		HANDLE_EXCEPTION();
5451 	}
5452 
5453 	call = zend_vm_stack_push_call_frame(call_info,
5454 		fbc, opline->extended_value, called_scope, obj);
5455 	call->prev_execute_data = EX(call);
5456 	EX(call) = call;
5457 
5458 	ZEND_VM_NEXT_OPCODE();
5459 }
5460 
5461 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5462 {
5463 	USE_OPLINE
5464 	zval *function_name;
5465 	zend_class_entry *ce;
5466 	zend_object *object;
5467 	zend_function *fbc;
5468 	zend_execute_data *call;
5469 
5470 	SAVE_OPLINE();
5471 
5472 	if (IS_CONST == IS_CONST) {
5473 		/* no function found. try a static method in class */
5474 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5475 		if (UNEXPECTED(ce == NULL)) {
5476 			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);
5477 			if (UNEXPECTED(ce == NULL)) {
5478 				ZEND_ASSERT(EG(exception));
5479 				HANDLE_EXCEPTION();
5480 			}
5481 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
5482 		}
5483 	} else if (IS_CONST == IS_UNUSED) {
5484 		ce = zend_fetch_class(NULL, opline->op1.num);
5485 		if (UNEXPECTED(ce == NULL)) {
5486 			ZEND_ASSERT(EG(exception));
5487 
5488 			HANDLE_EXCEPTION();
5489 		}
5490 	} else {
5491 		ce = Z_CE_P(EX_VAR(opline->op1.var));
5492 	}
5493 
5494 	if (IS_CONST == IS_CONST &&
5495 	    IS_CONST == IS_CONST &&
5496 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
5497 		/* nothing to do */
5498 	} else if (IS_CONST != IS_CONST &&
5499 	           IS_CONST == IS_CONST &&
5500 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
5501 		/* do nothing */
5502 	} else if (IS_CONST != IS_UNUSED) {
5503 
5504 
5505 		function_name = EX_CONSTANT(opline->op2);
5506 		if (IS_CONST != IS_CONST) {
5507 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5508 				do {
5509 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
5510 						function_name = Z_REFVAL_P(function_name);
5511 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5512 							break;
5513 						}
5514 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5515 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
5516 						if (UNEXPECTED(EG(exception) != NULL)) {
5517 							HANDLE_EXCEPTION();
5518 						}
5519 					}
5520 					zend_throw_error(NULL, "Function name must be a string");
5521 
5522 					HANDLE_EXCEPTION();
5523 				} while (0);
5524  			}
5525 		}
5526 
5527 		if (ce->get_static_method) {
5528 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
5529 		} else {
5530 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
5531 		}
5532 		if (UNEXPECTED(fbc == NULL)) {
5533 			if (EXPECTED(!EG(exception))) {
5534 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
5535 			}
5536 
5537 			HANDLE_EXCEPTION();
5538 		}
5539 		if (IS_CONST == IS_CONST &&
5540 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5541 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
5542 			if (IS_CONST == IS_CONST) {
5543 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
5544 			} else {
5545 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
5546 			}
5547 		}
5548 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
5549 			init_func_run_time_cache(&fbc->op_array);
5550 		}
5551 		if (IS_CONST != IS_CONST) {
5552 
5553 		}
5554 	} else {
5555 		if (UNEXPECTED(ce->constructor == NULL)) {
5556 			zend_throw_error(NULL, "Cannot call constructor");
5557 			HANDLE_EXCEPTION();
5558 		}
5559 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
5560 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
5561 			HANDLE_EXCEPTION();
5562 		}
5563 		fbc = ce->constructor;
5564 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
5565 			init_func_run_time_cache(&fbc->op_array);
5566 		}
5567 	}
5568 
5569 	object = NULL;
5570 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
5571 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
5572 			object = Z_OBJ(EX(This));
5573 			ce = object->ce;
5574 		} else {
5575 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
5576 				/* Allowed for PHP 4 compatibility. */
5577 				zend_error(
5578 					E_DEPRECATED,
5579 					"Non-static method %s::%s() should not be called statically",
5580 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
5581 				if (UNEXPECTED(EG(exception) != NULL)) {
5582 					HANDLE_EXCEPTION();
5583 				}
5584 			} else {
5585 				/* An internal function assumes $this is present and won't check that.
5586 				 * So PHP would crash by allowing the call. */
5587 				zend_throw_error(
5588 					zend_ce_error,
5589 					"Non-static method %s::%s() cannot be called statically",
5590 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
5591 				HANDLE_EXCEPTION();
5592 			}
5593 		}
5594 	}
5595 
5596 	if (IS_CONST == IS_UNUSED) {
5597 		/* previous opcode is ZEND_FETCH_CLASS */
5598 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
5599 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
5600 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
5601 				ce = Z_OBJCE(EX(This));
5602 			} else {
5603 				ce = Z_CE(EX(This));
5604 			}
5605 		}
5606 	}
5607 
5608 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
5609 		fbc, opline->extended_value, ce, object);
5610 	call->prev_execute_data = EX(call);
5611 	EX(call) = call;
5612 
5613 	ZEND_VM_NEXT_OPCODE();
5614 }
5615 
5616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5617 {
5618 	USE_OPLINE
5619 
5620 	zval *function_name;
5621 	zend_fcall_info_cache fcc;
5622 	char *error = NULL;
5623 	zend_function *func;
5624 	zend_class_entry *called_scope;
5625 	zend_object *object;
5626 	zend_execute_data *call;
5627 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
5628 
5629 	SAVE_OPLINE();
5630 	function_name = EX_CONSTANT(opline->op2);
5631 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
5632 		func = fcc.function_handler;
5633 		called_scope = fcc.called_scope;
5634 		object = fcc.object;
5635 		if (error) {
5636 			efree(error);
5637 			/* This is the only soft error is_callable() can generate */
5638 			zend_error(E_DEPRECATED,
5639 				"Non-static method %s::%s() should not be called statically",
5640 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
5641 			if (UNEXPECTED(EG(exception) != NULL)) {
5642 
5643 				HANDLE_EXCEPTION();
5644 			}
5645 		}
5646 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
5647 			/* Delay closure destruction until its invocation */
5648 			if (IS_CONST & (IS_VAR|IS_CV)) {
5649 				ZVAL_DEREF(function_name);
5650 			}
5651 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
5652 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
5653 			call_info |= ZEND_CALL_CLOSURE;
5654 		} else if (object) {
5655 			call_info |= ZEND_CALL_RELEASE_THIS;
5656 			GC_REFCOUNT(object)++; /* For $this pointer */
5657 		}
5658 
5659 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
5660 			if (call_info & ZEND_CALL_CLOSURE) {
5661 				zend_object_release((zend_object*)func->common.prototype);
5662 			}
5663 			if (call_info & ZEND_CALL_RELEASE_THIS) {
5664 				zend_object_release(object);
5665 			}
5666 			HANDLE_EXCEPTION();
5667 		}
5668 
5669 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
5670 			init_func_run_time_cache(&func->op_array);
5671 		}
5672 	} else {
5673 		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);
5674 		efree(error);
5675 
5676 		if (UNEXPECTED(EG(exception))) {
5677 			HANDLE_EXCEPTION();
5678 		}
5679 		func = (zend_function*)&zend_pass_function;
5680 		called_scope = NULL;
5681 		object = NULL;
5682 	}
5683 
5684 	call = zend_vm_stack_push_call_frame(call_info,
5685 		func, opline->extended_value, called_scope, object);
5686 	call->prev_execute_data = EX(call);
5687 	EX(call) = call;
5688 
5689 	ZEND_VM_NEXT_OPCODE();
5690 }
5691 
5692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5693 {
5694 	USE_OPLINE
5695 
5696 	zval *op1, *op2, *result;
5697 
5698 	op1 = EX_CONSTANT(opline->op1);
5699 	op2 = EX_CONSTANT(opline->op2);
5700 	do {
5701 		int result;
5702 
5703 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5704 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5705 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
5706 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5707 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
5708 			} else {
5709 				break;
5710 			}
5711 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5712 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5713 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
5714 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5715 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
5716 			} else {
5717 				break;
5718 			}
5719 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5720 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5721 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
5722 					result = 1;
5723 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
5724 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
5725 						result = 0;
5726 					} else {
5727 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
5728 					}
5729 				} else {
5730 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
5731 				}
5732 
5733 			} else {
5734 				break;
5735 			}
5736 		} else {
5737 			break;
5738 		}
5739 		ZEND_VM_SMART_BRANCH(result, 0);
5740 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
5741 		ZEND_VM_NEXT_OPCODE();
5742 	} while (0);
5743 
5744 	SAVE_OPLINE();
5745 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
5746 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
5747 	}
5748 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
5749 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
5750 	}
5751 	result = EX_VAR(opline->result.var);
5752 	compare_function(result, op1, op2);
5753 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
5754 
5755 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5756 }
5757 
5758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5759 {
5760 	zend_class_entry *ce, *scope;
5761 	zend_class_constant *c;
5762 	zval *value;
5763 	USE_OPLINE
5764 
5765 	SAVE_OPLINE();
5766 
5767 	do {
5768 		if (IS_CONST == IS_CONST) {
5769 			if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
5770 				value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
5771 #ifdef ZTS
5772 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5773 #endif
5774 				break;
5775 			} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
5776 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5777 			} else {
5778 				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);
5779 				if (UNEXPECTED(ce == NULL)) {
5780 					ZEND_ASSERT(EG(exception));
5781 					HANDLE_EXCEPTION();
5782 				}
5783 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
5784 			}
5785 		} else {
5786 			if (IS_CONST == IS_UNUSED) {
5787 				ce = zend_fetch_class(NULL, opline->op1.num);
5788 				if (UNEXPECTED(ce == NULL)) {
5789 					ZEND_ASSERT(EG(exception));
5790 					HANDLE_EXCEPTION();
5791 				}
5792 			} else {
5793 				ce = Z_CE_P(EX_VAR(opline->op1.var));
5794 			}
5795 			if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
5796 				break;
5797 			}
5798 		}
5799 
5800 		if (EXPECTED((c = zend_hash_find_ptr(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
5801 			scope = EX(func)->op_array.scope;
5802 			if (!zend_verify_const_access(c, scope)) {
5803 				zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
5804 				HANDLE_EXCEPTION();
5805 			}
5806 			value = &c->value;
5807 			if (Z_CONSTANT_P(value)) {
5808 				zval_update_constant_ex(value, c->ce);
5809 				if (UNEXPECTED(EG(exception) != NULL)) {
5810 					HANDLE_EXCEPTION();
5811 				}
5812 			}
5813 			if (IS_CONST == IS_CONST) {
5814 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
5815 			} else {
5816 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
5817 			}
5818 		} else {
5819 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
5820 			HANDLE_EXCEPTION();
5821 		}
5822 	} while (0);
5823 
5824 #ifdef ZTS
5825 	if (ce->type == ZEND_INTERNAL_CLASS) {
5826 		ZVAL_DUP(EX_VAR(opline->result.var), value);
5827 	} else {
5828 		ZVAL_COPY(EX_VAR(opline->result.var), value);
5829 	}
5830 #else
5831 	ZVAL_COPY(EX_VAR(opline->result.var), value);
5832 #endif
5833 
5834 	ZEND_VM_NEXT_OPCODE();
5835 }
5836 
5837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5838 {
5839 	USE_OPLINE
5840 
5841 	zval *expr_ptr, new_expr;
5842 
5843 	SAVE_OPLINE();
5844 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
5845 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
5846 		expr_ptr = NULL;
5847 		ZVAL_MAKE_REF(expr_ptr);
5848 		Z_ADDREF_P(expr_ptr);
5849 
5850 	} else {
5851 		expr_ptr = EX_CONSTANT(opline->op1);
5852 		if (IS_CONST == IS_TMP_VAR) {
5853 			/* pass */
5854 		} else if (IS_CONST == IS_CONST) {
5855 			if (Z_REFCOUNTED_P(expr_ptr)) {
5856 				Z_ADDREF_P(expr_ptr);
5857 			}
5858 		} else if (IS_CONST == IS_CV) {
5859 			ZVAL_DEREF(expr_ptr);
5860 			if (Z_REFCOUNTED_P(expr_ptr)) {
5861 				Z_ADDREF_P(expr_ptr);
5862 			}
5863 		} else /* if (IS_CONST == IS_VAR) */ {
5864 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
5865 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
5866 
5867 				expr_ptr = Z_REFVAL_P(expr_ptr);
5868 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
5869 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
5870 					expr_ptr = &new_expr;
5871 					efree_size(ref, sizeof(zend_reference));
5872 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
5873 					Z_ADDREF_P(expr_ptr);
5874 				}
5875 			}
5876 		}
5877 	}
5878 
5879 	if (IS_CONST != IS_UNUSED) {
5880 
5881 		zval *offset = EX_CONSTANT(opline->op2);
5882 		zend_string *str;
5883 		zend_ulong hval;
5884 
5885 add_again:
5886 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
5887 			str = Z_STR_P(offset);
5888 			if (IS_CONST != IS_CONST) {
5889 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
5890 					goto num_index;
5891 				}
5892 			}
5893 str_index:
5894 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
5895 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
5896 			hval = Z_LVAL_P(offset);
5897 num_index:
5898 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
5899 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
5900 			offset = Z_REFVAL_P(offset);
5901 			goto add_again;
5902 		} else if (Z_TYPE_P(offset) == IS_NULL) {
5903 			str = ZSTR_EMPTY_ALLOC();
5904 			goto str_index;
5905 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
5906 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
5907 			goto num_index;
5908 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
5909 			hval = 0;
5910 			goto num_index;
5911 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
5912 			hval = 1;
5913 			goto num_index;
5914 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
5915 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
5916 			str = ZSTR_EMPTY_ALLOC();
5917 			goto str_index;
5918 		} else {
5919 			zend_error(E_WARNING, "Illegal offset type");
5920 			zval_ptr_dtor(expr_ptr);
5921 		}
5922 
5923 	} else {
5924 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
5925 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
5926 			zval_ptr_dtor(expr_ptr);
5927 		}
5928 	}
5929 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5930 }
5931 
5932 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5933 {
5934 	zval *array;
5935 	uint32_t size;
5936 	USE_OPLINE
5937 
5938 	array = EX_VAR(opline->result.var);
5939 	if (IS_CONST != IS_UNUSED) {
5940 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
5941 	} else {
5942 		size = 0;
5943 	}
5944 	ZVAL_NEW_ARR(array);
5945 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
5946 
5947 	if (IS_CONST != IS_UNUSED) {
5948 		/* Explicitly initialize array as not-packed if flag is set */
5949 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
5950 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
5951 		}
5952 	}
5953 
5954 	if (IS_CONST == IS_UNUSED) {
5955 		ZEND_VM_NEXT_OPCODE();
5956 #if 0 || (IS_CONST != IS_UNUSED)
5957 	} else {
5958 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5959 #endif
5960 	}
5961 }
5962 
5963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5964 {
5965 	USE_OPLINE
5966 	zval tmp, *varname;
5967 	zend_class_entry *ce;
5968 
5969 
5970 	SAVE_OPLINE();
5971 
5972 	varname = EX_CONSTANT(opline->op1);
5973 
5974 	ZVAL_UNDEF(&tmp);
5975 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
5976 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
5977 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
5978 		}
5979 		ZVAL_STR(&tmp, zval_get_string(varname));
5980 		varname = &tmp;
5981 	}
5982 
5983 	if (IS_CONST == IS_CONST) {
5984 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
5985 		if (UNEXPECTED(ce == NULL)) {
5986 			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);
5987 			if (UNEXPECTED(ce == NULL)) {
5988 				ZEND_ASSERT(EG(exception));
5989 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
5990 					zend_string_release(Z_STR(tmp));
5991 				}
5992 
5993 				HANDLE_EXCEPTION();
5994 			}
5995 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
5996 		}
5997 	} else if (IS_CONST == IS_UNUSED) {
5998 		ce = zend_fetch_class(NULL, opline->op2.num);
5999 		if (UNEXPECTED(ce == NULL)) {
6000 			ZEND_ASSERT(EG(exception));
6001 			if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6002 				zend_string_release(Z_STR(tmp));
6003 			}
6004 
6005 			HANDLE_EXCEPTION();
6006 		}
6007 	} else {
6008 		ce = Z_CE_P(EX_VAR(opline->op2.var));
6009 	}
6010 	zend_std_unset_static_property(ce, Z_STR_P(varname));
6011 
6012 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6013 		zend_string_release(Z_STR(tmp));
6014 	}
6015 
6016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6017 }
6018 
6019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6020 {
6021 	USE_OPLINE
6022 	zval *value;
6023 	int result;
6024 
6025 	zval tmp, *varname;
6026 	zend_class_entry *ce;
6027 
6028 	SAVE_OPLINE();
6029 	varname = EX_CONSTANT(opline->op1);
6030 	ZVAL_UNDEF(&tmp);
6031 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
6032 		ZVAL_STR(&tmp, zval_get_string(varname));
6033 		varname = &tmp;
6034 	}
6035 
6036 	if (IS_CONST == IS_CONST) {
6037 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
6038 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
6039 
6040 			/* check if static properties were destoyed */
6041 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6042 				value = NULL;
6043 			}
6044 
6045 			goto is_static_prop_return;
6046 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
6047 			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);
6048 			if (UNEXPECTED(ce == NULL)) {
6049 				ZEND_ASSERT(EG(exception));
6050 				HANDLE_EXCEPTION();
6051 			}
6052 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6053 		}
6054 	} else {
6055 		if (IS_CONST == IS_UNUSED) {
6056 			ce = zend_fetch_class(NULL, opline->op2.num);
6057 			if (UNEXPECTED(ce == NULL)) {
6058 				ZEND_ASSERT(EG(exception));
6059 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6060 					zend_string_release(Z_STR(tmp));
6061 				}
6062 
6063 				HANDLE_EXCEPTION();
6064 			}
6065 		} else {
6066 			ce = Z_CE_P(EX_VAR(opline->op2.var));
6067 		}
6068 		if (IS_CONST == IS_CONST &&
6069 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
6070 
6071 			/* check if static properties were destoyed */
6072 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6073 				value = NULL;
6074 			}
6075 
6076 			goto is_static_prop_return;
6077 		}
6078 	}
6079 
6080 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
6081 
6082 	if (IS_CONST == IS_CONST && value) {
6083 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
6084 	}
6085 
6086 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6087 		zend_string_release(Z_STR(tmp));
6088 	}
6089 
6090 is_static_prop_return:
6091 	if (opline->extended_value & ZEND_ISSET) {
6092 		result = value && Z_TYPE_P(value) > IS_NULL &&
6093 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6094 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6095 		result = !value || !i_zend_is_true(value);
6096 	}
6097 
6098 	ZEND_VM_SMART_BRANCH(result, 1);
6099 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6100 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6101 }
6102 
6103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6104 {
6105 	USE_OPLINE
6106 
6107 	zval *container;
6108 	int result;
6109 	zend_ulong hval;
6110 	zval *offset;
6111 
6112 	SAVE_OPLINE();
6113 	container = EX_CONSTANT(opline->op1);
6114 	offset = EX_CONSTANT(opline->op2);
6115 
6116 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6117 		HashTable *ht;
6118 		zval *value;
6119 		zend_string *str;
6120 
6121 isset_dim_obj_array:
6122 		ht = Z_ARRVAL_P(container);
6123 isset_again:
6124 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6125 			str = Z_STR_P(offset);
6126 			if (IS_CONST != IS_CONST) {
6127 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6128 					goto num_index_prop;
6129 				}
6130 			}
6131 str_index_prop:
6132 			value = zend_hash_find_ind(ht, str);
6133 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6134 			hval = Z_LVAL_P(offset);
6135 num_index_prop:
6136 			value = zend_hash_index_find(ht, hval);
6137 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
6138 			offset = Z_REFVAL_P(offset);
6139 			goto isset_again;
6140 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
6141 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
6142 			goto num_index_prop;
6143 		} else if (Z_TYPE_P(offset) == IS_NULL) {
6144 			str = ZSTR_EMPTY_ALLOC();
6145 			goto str_index_prop;
6146 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
6147 			hval = 0;
6148 			goto num_index_prop;
6149 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
6150 			hval = 1;
6151 			goto num_index_prop;
6152 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
6153 			hval = Z_RES_HANDLE_P(offset);
6154 			goto num_index_prop;
6155 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
6156 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
6157 			str = ZSTR_EMPTY_ALLOC();
6158 			goto str_index_prop;
6159 		} else {
6160 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
6161 			goto isset_not_found;
6162 		}
6163 
6164 		if (opline->extended_value & ZEND_ISSET) {
6165 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
6166 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
6167 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6168 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6169 			result = (value == NULL || !i_zend_is_true(value));
6170 		}
6171 		goto isset_dim_obj_exit;
6172 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6173 		container = Z_REFVAL_P(container);
6174 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6175 			goto isset_dim_obj_array;
6176 		}
6177 	}
6178 
6179 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
6180 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
6181 	}
6182 
6183 	if ((IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
6184 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
6185 			result =
6186 				((opline->extended_value & ZEND_ISSET) == 0) ^
6187 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
6188 		} else {
6189 			zend_error(E_NOTICE, "Trying to check element of non-array");
6190 			goto isset_not_found;
6191 		}
6192 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
6193 		zend_long lval;
6194 
6195 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6196 			lval = Z_LVAL_P(offset);
6197 isset_str_offset:
6198 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
6199 				lval += (zend_long)Z_STRLEN_P(container);
6200 			}
6201 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
6202 				if (opline->extended_value & ZEND_ISSET) {
6203 					result = 1;
6204 				} else {
6205 					result = (Z_STRVAL_P(container)[lval] == '0');
6206 				}
6207 			} else {
6208 				goto isset_not_found;
6209 			}
6210 		} else {
6211 			if (IS_CONST & (IS_CV|IS_VAR)) {
6212 				ZVAL_DEREF(offset);
6213 			}
6214 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
6215 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
6216 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
6217 				lval = zval_get_long(offset);
6218 				goto isset_str_offset;
6219 			}
6220 			goto isset_not_found;
6221 		}
6222 	} else {
6223 isset_not_found:
6224 		result = ((opline->extended_value & ZEND_ISSET) == 0);
6225 	}
6226 
6227 isset_dim_obj_exit:
6228 
6229 
6230 	ZEND_VM_SMART_BRANCH(result, 1);
6231 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6233 }
6234 
6235 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6236 {
6237 	USE_OPLINE
6238 
6239 	zval *container;
6240 	int result;
6241 	zval *offset;
6242 
6243 	SAVE_OPLINE();
6244 	container = EX_CONSTANT(opline->op1);
6245 
6246 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6247 		zend_throw_error(NULL, "Using $this when not in object context");
6248 
6249 		HANDLE_EXCEPTION();
6250 	}
6251 
6252 	offset = EX_CONSTANT(opline->op2);
6253 
6254 	if (IS_CONST == IS_CONST ||
6255 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6256 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6257 			container = Z_REFVAL_P(container);
6258 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
6259 				goto isset_no_object;
6260 			}
6261 		} else {
6262 			goto isset_no_object;
6263 		}
6264 	}
6265 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
6266 		zend_error(E_NOTICE, "Trying to check property of non-object");
6267 isset_no_object:
6268 		result = ((opline->extended_value & ZEND_ISSET) == 0);
6269 	} else {
6270 		result =
6271 			((opline->extended_value & ZEND_ISSET) == 0) ^
6272 			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));
6273 	}
6274 
6275 
6276 	ZEND_VM_SMART_BRANCH(result, 1);
6277 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6278 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6279 }
6280 
6281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6282 {
6283 	USE_OPLINE
6284 
6285 	zval *name;
6286 	zval *val;
6287 	zend_constant c;
6288 
6289 	SAVE_OPLINE();
6290 	name  = EX_CONSTANT(opline->op1);
6291 	val   = EX_CONSTANT(opline->op2);
6292 
6293 	ZVAL_COPY(&c.value, val);
6294 	if (Z_OPT_CONSTANT(c.value)) {
6295 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
6296 			zval_ptr_dtor(&c.value);
6297 
6298 
6299 			HANDLE_EXCEPTION();
6300 		}
6301 	}
6302 	c.flags = CONST_CS; /* non persistent, case sensetive */
6303 	c.name = zend_string_dup(Z_STR_P(name), 0);
6304 	c.module_number = PHP_USER_CONSTANT;
6305 
6306 	if (zend_register_constant(&c) == FAILURE) {
6307 	}
6308 
6309 
6310 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6311 }
6312 
6313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6314 {
6315 	USE_OPLINE
6316 
6317 	zend_generator *generator = zend_get_running_generator(execute_data);
6318 
6319 	SAVE_OPLINE();
6320 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6321 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
6322 
6323 
6324 		HANDLE_EXCEPTION();
6325 	}
6326 
6327 	/* Destroy the previously yielded value */
6328 	zval_ptr_dtor(&generator->value);
6329 
6330 	/* Destroy the previously yielded key */
6331 	zval_ptr_dtor(&generator->key);
6332 
6333 	/* Set the new yielded value */
6334 	if (IS_CONST != IS_UNUSED) {
6335 
6336 
6337 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
6338 			/* Constants and temporary variables aren't yieldable by reference,
6339 			 * but we still allow them with a notice. */
6340 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
6341 				zval *value;
6342 
6343 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6344 
6345 				value = EX_CONSTANT(opline->op1);
6346 				ZVAL_COPY_VALUE(&generator->value, value);
6347 				if (IS_CONST == IS_CONST) {
6348 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6349 						Z_ADDREF(generator->value);
6350 					}
6351 				}
6352 			} else {
6353 				zval *value_ptr = NULL;
6354 
6355 				/* If a function call result is yielded and the function did
6356 				 * not return by reference we throw a notice. */
6357 				if (IS_CONST == IS_VAR &&
6358 				    (value_ptr == &EG(uninitialized_zval) ||
6359 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
6360 				      !Z_ISREF_P(value_ptr)))) {
6361 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6362 				} else {
6363 					ZVAL_MAKE_REF(value_ptr);
6364 				}
6365 				ZVAL_COPY(&generator->value, value_ptr);
6366 
6367 			}
6368 		} else {
6369 			zval *value = EX_CONSTANT(opline->op1);
6370 
6371 			/* Consts, temporary variables and references need copying */
6372 			if (IS_CONST == IS_CONST) {
6373 				ZVAL_COPY_VALUE(&generator->value, value);
6374 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6375 					Z_ADDREF(generator->value);
6376 				}
6377 			} else if (IS_CONST == IS_TMP_VAR) {
6378 				ZVAL_COPY_VALUE(&generator->value, value);
6379             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
6380 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
6381 
6382 			} else {
6383 				ZVAL_COPY_VALUE(&generator->value, value);
6384 				if (IS_CONST == IS_CV) {
6385 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
6386 				}
6387 			}
6388 		}
6389 	} else {
6390 		/* If no value was specified yield null */
6391 		ZVAL_NULL(&generator->value);
6392 	}
6393 
6394 	/* Set the new yielded key */
6395 	if (IS_CONST != IS_UNUSED) {
6396 
6397 		zval *key = EX_CONSTANT(opline->op2);
6398 
6399 		/* Consts, temporary variables and references need copying */
6400 		if (IS_CONST == IS_CONST) {
6401 			ZVAL_COPY_VALUE(&generator->key, key);
6402 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
6403 				Z_ADDREF(generator->key);
6404 			}
6405 		} else if (IS_CONST == IS_TMP_VAR) {
6406 			ZVAL_COPY_VALUE(&generator->key, key);
6407 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
6408 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
6409 
6410 		} else {
6411 			ZVAL_COPY_VALUE(&generator->key, key);
6412 			if (IS_CONST == IS_CV) {
6413 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
6414 			}
6415 		}
6416 
6417 		if (Z_TYPE(generator->key) == IS_LONG
6418 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
6419 		) {
6420 			generator->largest_used_integer_key = Z_LVAL(generator->key);
6421 		}
6422 	} else {
6423 		/* If no key was specified we use auto-increment keys */
6424 		generator->largest_used_integer_key++;
6425 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
6426 	}
6427 
6428 	if (RETURN_VALUE_USED(opline)) {
6429 		/* If the return value of yield is used set the send
6430 		 * target and initialize it to NULL */
6431 		generator->send_target = EX_VAR(opline->result.var);
6432 		ZVAL_NULL(generator->send_target);
6433 	} else {
6434 		generator->send_target = NULL;
6435 	}
6436 
6437 	/* We increment to the next op, so we are at the correct position when the
6438 	 * generator is resumed. */
6439 	ZEND_VM_INC_OPCODE();
6440 
6441 	/* The GOTO VM uses a local opline variable. We need to set the opline
6442 	 * variable in execute_data so we don't resume at an old position. */
6443 	SAVE_OPLINE();
6444 
6445 	ZEND_VM_RETURN();
6446 }
6447 
6448 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6449 {
6450 	USE_OPLINE
6451 
6452 	zval *container, *dim, *value;
6453 	zend_long offset;
6454 
6455 	container = EX_CONSTANT(opline->op1);
6456 	dim = EX_CONSTANT(opline->op2);
6457 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6458 fetch_dim_r_index_array:
6459 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
6460 			offset = Z_LVAL_P(dim);
6461 		} else {
6462 			offset = zval_get_long(dim);
6463 		}
6464 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
6465 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
6466 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6467 			SAVE_OPLINE();
6468 
6469 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6470 		} else {
6471 			ZEND_VM_NEXT_OPCODE();
6472 		}
6473 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
6474 		container = Z_REFVAL_P(container);
6475 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6476 			goto fetch_dim_r_index_array;
6477 		} else {
6478 			goto fetch_dim_r_index_slow;
6479 		}
6480 	} else {
6481 fetch_dim_r_index_slow:
6482 		SAVE_OPLINE();
6483 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
6484 
6485 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6486 	}
6487 
6488 fetch_dim_r_index_undef:
6489 	ZVAL_NULL(EX_VAR(opline->result.var));
6490 	SAVE_OPLINE();
6491 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
6492 
6493 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6494 }
6495 
6496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6497 {
6498 	USE_OPLINE
6499 	zend_free_op free_op2;
6500 	zval *op1, *op2;
6501 	int result;
6502 
6503 	SAVE_OPLINE();
6504 	op1 = EX_CONSTANT(opline->op1);
6505 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6506 	result = fast_is_identical_function(op1, op2);
6507 
6508 	zval_ptr_dtor_nogc(free_op2);
6509 	ZEND_VM_SMART_BRANCH(result, 1);
6510 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6511 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6512 }
6513 
6514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6515 {
6516 	USE_OPLINE
6517 	zend_free_op free_op2;
6518 	zval *op1, *op2;
6519 	int result;
6520 
6521 	SAVE_OPLINE();
6522 	op1 = EX_CONSTANT(opline->op1);
6523 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6524 	result = fast_is_not_identical_function(op1, op2);
6525 
6526 	zval_ptr_dtor_nogc(free_op2);
6527 	ZEND_VM_SMART_BRANCH(result, 1);
6528 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6529 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6530 }
6531 
6532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6533 {
6534 	USE_OPLINE
6535 
6536 	zend_generator *generator = zend_get_running_generator(execute_data);
6537 
6538 	SAVE_OPLINE();
6539 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6540 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
6541 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
6542 
6543 		HANDLE_EXCEPTION();
6544 	}
6545 
6546 	/* Destroy the previously yielded value */
6547 	zval_ptr_dtor(&generator->value);
6548 
6549 	/* Destroy the previously yielded key */
6550 	zval_ptr_dtor(&generator->key);
6551 
6552 	/* Set the new yielded value */
6553 	if (IS_CONST != IS_UNUSED) {
6554 
6555 
6556 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
6557 			/* Constants and temporary variables aren't yieldable by reference,
6558 			 * but we still allow them with a notice. */
6559 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
6560 				zval *value;
6561 
6562 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6563 
6564 				value = EX_CONSTANT(opline->op1);
6565 				ZVAL_COPY_VALUE(&generator->value, value);
6566 				if (IS_CONST == IS_CONST) {
6567 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6568 						Z_ADDREF(generator->value);
6569 					}
6570 				}
6571 			} else {
6572 				zval *value_ptr = NULL;
6573 
6574 				/* If a function call result is yielded and the function did
6575 				 * not return by reference we throw a notice. */
6576 				if (IS_CONST == IS_VAR &&
6577 				    (value_ptr == &EG(uninitialized_zval) ||
6578 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
6579 				      !Z_ISREF_P(value_ptr)))) {
6580 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6581 				} else {
6582 					ZVAL_MAKE_REF(value_ptr);
6583 				}
6584 				ZVAL_COPY(&generator->value, value_ptr);
6585 
6586 			}
6587 		} else {
6588 			zval *value = EX_CONSTANT(opline->op1);
6589 
6590 			/* Consts, temporary variables and references need copying */
6591 			if (IS_CONST == IS_CONST) {
6592 				ZVAL_COPY_VALUE(&generator->value, value);
6593 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6594 					Z_ADDREF(generator->value);
6595 				}
6596 			} else if (IS_CONST == IS_TMP_VAR) {
6597 				ZVAL_COPY_VALUE(&generator->value, value);
6598             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
6599 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
6600 
6601 			} else {
6602 				ZVAL_COPY_VALUE(&generator->value, value);
6603 				if (IS_CONST == IS_CV) {
6604 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
6605 				}
6606 			}
6607 		}
6608 	} else {
6609 		/* If no value was specified yield null */
6610 		ZVAL_NULL(&generator->value);
6611 	}
6612 
6613 	/* Set the new yielded key */
6614 	if (IS_TMP_VAR != IS_UNUSED) {
6615 		zend_free_op free_op2;
6616 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
6617 
6618 		/* Consts, temporary variables and references need copying */
6619 		if (IS_TMP_VAR == IS_CONST) {
6620 			ZVAL_COPY_VALUE(&generator->key, key);
6621 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
6622 				Z_ADDREF(generator->key);
6623 			}
6624 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
6625 			ZVAL_COPY_VALUE(&generator->key, key);
6626 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
6627 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
6628 
6629 		} else {
6630 			ZVAL_COPY_VALUE(&generator->key, key);
6631 			if (IS_TMP_VAR == IS_CV) {
6632 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
6633 			}
6634 		}
6635 
6636 		if (Z_TYPE(generator->key) == IS_LONG
6637 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
6638 		) {
6639 			generator->largest_used_integer_key = Z_LVAL(generator->key);
6640 		}
6641 	} else {
6642 		/* If no key was specified we use auto-increment keys */
6643 		generator->largest_used_integer_key++;
6644 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
6645 	}
6646 
6647 	if (RETURN_VALUE_USED(opline)) {
6648 		/* If the return value of yield is used set the send
6649 		 * target and initialize it to NULL */
6650 		generator->send_target = EX_VAR(opline->result.var);
6651 		ZVAL_NULL(generator->send_target);
6652 	} else {
6653 		generator->send_target = NULL;
6654 	}
6655 
6656 	/* We increment to the next op, so we are at the correct position when the
6657 	 * generator is resumed. */
6658 	ZEND_VM_INC_OPCODE();
6659 
6660 	/* The GOTO VM uses a local opline variable. We need to set the opline
6661 	 * variable in execute_data so we don't resume at an old position. */
6662 	SAVE_OPLINE();
6663 
6664 	ZEND_VM_RETURN();
6665 }
6666 
6667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6668 {
6669 	USE_OPLINE
6670 	zend_free_op free_op2;
6671 	zval *op1, *op2;
6672 	int result;
6673 
6674 	SAVE_OPLINE();
6675 	op1 = EX_CONSTANT(opline->op1);
6676 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
6677 	result = fast_is_identical_function(op1, op2);
6678 
6679 	zval_ptr_dtor_nogc(free_op2);
6680 	ZEND_VM_SMART_BRANCH(result, 1);
6681 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6682 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6683 }
6684 
6685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6686 {
6687 	USE_OPLINE
6688 	zend_free_op free_op2;
6689 	zval *op1, *op2;
6690 	int result;
6691 
6692 	SAVE_OPLINE();
6693 	op1 = EX_CONSTANT(opline->op1);
6694 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
6695 	result = fast_is_not_identical_function(op1, op2);
6696 
6697 	zval_ptr_dtor_nogc(free_op2);
6698 	ZEND_VM_SMART_BRANCH(result, 1);
6699 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6700 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6701 }
6702 
6703 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
6704 {
6705 	USE_OPLINE
6706 
6707 	zval *varname;
6708 	zval *retval;
6709 	zend_string *name;
6710 	zend_class_entry *ce;
6711 
6712 	SAVE_OPLINE();
6713 	varname = EX_CONSTANT(opline->op1);
6714 
6715  	if (IS_CONST == IS_CONST) {
6716 		name = Z_STR_P(varname);
6717 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
6718 		name = Z_STR_P(varname);
6719 		zend_string_addref(name);
6720 	} else {
6721 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
6722 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
6723 		}
6724 		name = zval_get_string(varname);
6725 	}
6726 
6727 	if (IS_VAR == IS_CONST) {
6728 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
6729 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
6730 
6731 			/* check if static properties were destoyed */
6732 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6733 				if (type == BP_VAR_IS) {
6734 					retval = &EG(uninitialized_zval);
6735 				} else {
6736 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
6737 
6738 					HANDLE_EXCEPTION();
6739 				}
6740 			}
6741 
6742 			goto fetch_static_prop_return;
6743 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
6744 			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);
6745 			if (UNEXPECTED(ce == NULL)) {
6746 				ZEND_ASSERT(EG(exception));
6747 				if (IS_CONST != IS_CONST) {
6748 					zend_string_release(name);
6749 				}
6750 
6751 				HANDLE_EXCEPTION();
6752 			}
6753 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6754 		}
6755 	} else {
6756 		if (IS_VAR == IS_UNUSED) {
6757 			ce = zend_fetch_class(NULL, opline->op2.num);
6758 			if (UNEXPECTED(ce == NULL)) {
6759 				ZEND_ASSERT(EG(exception));
6760 				if (IS_CONST != IS_CONST) {
6761 					zend_string_release(name);
6762 				}
6763 
6764 				HANDLE_EXCEPTION();
6765 			}
6766 		} else {
6767 			ce = Z_CE_P(EX_VAR(opline->op2.var));
6768 		}
6769 		if (IS_CONST == IS_CONST &&
6770 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
6771 
6772 			/* check if static properties were destoyed */
6773 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6774 				if (type == BP_VAR_IS) {
6775 					retval = &EG(uninitialized_zval);
6776 				} else {
6777 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
6778 
6779 					HANDLE_EXCEPTION();
6780 				}
6781 			}
6782 
6783 			goto fetch_static_prop_return;
6784 		}
6785 	}
6786 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
6787 	if (UNEXPECTED(retval == NULL)) {
6788 		if (type == BP_VAR_IS) {
6789 			retval = &EG(uninitialized_zval);
6790 		} else {
6791 			ZEND_ASSERT(EG(exception));
6792 			if (IS_CONST != IS_CONST) {
6793 				zend_string_release(name);
6794 			}
6795 
6796 			HANDLE_EXCEPTION();
6797 		}
6798 	} else if (IS_CONST == IS_CONST) {
6799 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
6800 	}
6801 
6802 	if (IS_CONST != IS_CONST) {
6803 		zend_string_release(name);
6804 	}
6805 
6806 fetch_static_prop_return:
6807 	if (type == BP_VAR_R || type == BP_VAR_IS) {
6808 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
6809 	} else {
6810 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
6811 	}
6812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6813 }
6814 
6815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6816 {
6817 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6818 }
6819 
6820 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6821 {
6822 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6823 }
6824 
6825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6826 {
6827 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6828 }
6829 
6830 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6831 {
6832 	USE_OPLINE
6833 
6834 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
6835 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6836 	} else {
6837 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6838 	}
6839 }
6840 
6841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6842 {
6843 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6844 }
6845 
6846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6847 {
6848 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6849 }
6850 
6851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6852 {
6853 	USE_OPLINE
6854 	zval tmp, *varname;
6855 	zend_class_entry *ce;
6856 
6857 
6858 	SAVE_OPLINE();
6859 
6860 	varname = EX_CONSTANT(opline->op1);
6861 
6862 	ZVAL_UNDEF(&tmp);
6863 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
6864 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
6865 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
6866 		}
6867 		ZVAL_STR(&tmp, zval_get_string(varname));
6868 		varname = &tmp;
6869 	}
6870 
6871 	if (IS_VAR == IS_CONST) {
6872 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
6873 		if (UNEXPECTED(ce == NULL)) {
6874 			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);
6875 			if (UNEXPECTED(ce == NULL)) {
6876 				ZEND_ASSERT(EG(exception));
6877 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6878 					zend_string_release(Z_STR(tmp));
6879 				}
6880 
6881 				HANDLE_EXCEPTION();
6882 			}
6883 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6884 		}
6885 	} else if (IS_VAR == IS_UNUSED) {
6886 		ce = zend_fetch_class(NULL, opline->op2.num);
6887 		if (UNEXPECTED(ce == NULL)) {
6888 			ZEND_ASSERT(EG(exception));
6889 			if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6890 				zend_string_release(Z_STR(tmp));
6891 			}
6892 
6893 			HANDLE_EXCEPTION();
6894 		}
6895 	} else {
6896 		ce = Z_CE_P(EX_VAR(opline->op2.var));
6897 	}
6898 	zend_std_unset_static_property(ce, Z_STR_P(varname));
6899 
6900 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6901 		zend_string_release(Z_STR(tmp));
6902 	}
6903 
6904 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6905 }
6906 
6907 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6908 {
6909 	USE_OPLINE
6910 	zval *value;
6911 	int result;
6912 
6913 	zval tmp, *varname;
6914 	zend_class_entry *ce;
6915 
6916 	SAVE_OPLINE();
6917 	varname = EX_CONSTANT(opline->op1);
6918 	ZVAL_UNDEF(&tmp);
6919 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
6920 		ZVAL_STR(&tmp, zval_get_string(varname));
6921 		varname = &tmp;
6922 	}
6923 
6924 	if (IS_VAR == IS_CONST) {
6925 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
6926 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
6927 
6928 			/* check if static properties were destoyed */
6929 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6930 				value = NULL;
6931 			}
6932 
6933 			goto is_static_prop_return;
6934 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
6935 			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);
6936 			if (UNEXPECTED(ce == NULL)) {
6937 				ZEND_ASSERT(EG(exception));
6938 				HANDLE_EXCEPTION();
6939 			}
6940 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
6941 		}
6942 	} else {
6943 		if (IS_VAR == IS_UNUSED) {
6944 			ce = zend_fetch_class(NULL, opline->op2.num);
6945 			if (UNEXPECTED(ce == NULL)) {
6946 				ZEND_ASSERT(EG(exception));
6947 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6948 					zend_string_release(Z_STR(tmp));
6949 				}
6950 
6951 				HANDLE_EXCEPTION();
6952 			}
6953 		} else {
6954 			ce = Z_CE_P(EX_VAR(opline->op2.var));
6955 		}
6956 		if (IS_CONST == IS_CONST &&
6957 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
6958 
6959 			/* check if static properties were destoyed */
6960 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
6961 				value = NULL;
6962 			}
6963 
6964 			goto is_static_prop_return;
6965 		}
6966 	}
6967 
6968 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
6969 
6970 	if (IS_CONST == IS_CONST && value) {
6971 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
6972 	}
6973 
6974 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
6975 		zend_string_release(Z_STR(tmp));
6976 	}
6977 
6978 is_static_prop_return:
6979 	if (opline->extended_value & ZEND_ISSET) {
6980 		result = value && Z_TYPE_P(value) > IS_NULL &&
6981 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6982 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
6983 		result = !value || !i_zend_is_true(value);
6984 	}
6985 
6986 	ZEND_VM_SMART_BRANCH(result, 1);
6987 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6988 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6989 }
6990 
6991 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6992 {
6993 	USE_OPLINE
6994 
6995 	zend_generator *generator = zend_get_running_generator(execute_data);
6996 
6997 	SAVE_OPLINE();
6998 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6999 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
7000 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
7001 
7002 		HANDLE_EXCEPTION();
7003 	}
7004 
7005 	/* Destroy the previously yielded value */
7006 	zval_ptr_dtor(&generator->value);
7007 
7008 	/* Destroy the previously yielded key */
7009 	zval_ptr_dtor(&generator->key);
7010 
7011 	/* Set the new yielded value */
7012 	if (IS_CONST != IS_UNUSED) {
7013 
7014 
7015 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7016 			/* Constants and temporary variables aren't yieldable by reference,
7017 			 * but we still allow them with a notice. */
7018 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
7019 				zval *value;
7020 
7021 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7022 
7023 				value = EX_CONSTANT(opline->op1);
7024 				ZVAL_COPY_VALUE(&generator->value, value);
7025 				if (IS_CONST == IS_CONST) {
7026 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7027 						Z_ADDREF(generator->value);
7028 					}
7029 				}
7030 			} else {
7031 				zval *value_ptr = NULL;
7032 
7033 				/* If a function call result is yielded and the function did
7034 				 * not return by reference we throw a notice. */
7035 				if (IS_CONST == IS_VAR &&
7036 				    (value_ptr == &EG(uninitialized_zval) ||
7037 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
7038 				      !Z_ISREF_P(value_ptr)))) {
7039 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7040 				} else {
7041 					ZVAL_MAKE_REF(value_ptr);
7042 				}
7043 				ZVAL_COPY(&generator->value, value_ptr);
7044 
7045 			}
7046 		} else {
7047 			zval *value = EX_CONSTANT(opline->op1);
7048 
7049 			/* Consts, temporary variables and references need copying */
7050 			if (IS_CONST == IS_CONST) {
7051 				ZVAL_COPY_VALUE(&generator->value, value);
7052 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7053 					Z_ADDREF(generator->value);
7054 				}
7055 			} else if (IS_CONST == IS_TMP_VAR) {
7056 				ZVAL_COPY_VALUE(&generator->value, value);
7057             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7058 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7059 
7060 			} else {
7061 				ZVAL_COPY_VALUE(&generator->value, value);
7062 				if (IS_CONST == IS_CV) {
7063 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7064 				}
7065 			}
7066 		}
7067 	} else {
7068 		/* If no value was specified yield null */
7069 		ZVAL_NULL(&generator->value);
7070 	}
7071 
7072 	/* Set the new yielded key */
7073 	if (IS_VAR != IS_UNUSED) {
7074 		zend_free_op free_op2;
7075 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
7076 
7077 		/* Consts, temporary variables and references need copying */
7078 		if (IS_VAR == IS_CONST) {
7079 			ZVAL_COPY_VALUE(&generator->key, key);
7080 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
7081 				Z_ADDREF(generator->key);
7082 			}
7083 		} else if (IS_VAR == IS_TMP_VAR) {
7084 			ZVAL_COPY_VALUE(&generator->key, key);
7085 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
7086 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
7087 			zval_ptr_dtor_nogc(free_op2);
7088 		} else {
7089 			ZVAL_COPY_VALUE(&generator->key, key);
7090 			if (IS_VAR == IS_CV) {
7091 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
7092 			}
7093 		}
7094 
7095 		if (Z_TYPE(generator->key) == IS_LONG
7096 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7097 		) {
7098 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7099 		}
7100 	} else {
7101 		/* If no key was specified we use auto-increment keys */
7102 		generator->largest_used_integer_key++;
7103 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
7104 	}
7105 
7106 	if (RETURN_VALUE_USED(opline)) {
7107 		/* If the return value of yield is used set the send
7108 		 * target and initialize it to NULL */
7109 		generator->send_target = EX_VAR(opline->result.var);
7110 		ZVAL_NULL(generator->send_target);
7111 	} else {
7112 		generator->send_target = NULL;
7113 	}
7114 
7115 	/* We increment to the next op, so we are at the correct position when the
7116 	 * generator is resumed. */
7117 	ZEND_VM_INC_OPCODE();
7118 
7119 	/* The GOTO VM uses a local opline variable. We need to set the opline
7120 	 * variable in execute_data so we don't resume at an old position. */
7121 	SAVE_OPLINE();
7122 
7123 	ZEND_VM_RETURN();
7124 }
7125 
7126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
7127 {
7128 	USE_OPLINE
7129 
7130 	zval *varname;
7131 	zval *retval;
7132 	zend_string *name;
7133 	HashTable *target_symbol_table;
7134 
7135 	SAVE_OPLINE();
7136 	varname = EX_CONSTANT(opline->op1);
7137 
7138  	if (IS_CONST == IS_CONST) {
7139 		name = Z_STR_P(varname);
7140 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
7141 		name = Z_STR_P(varname);
7142 		zend_string_addref(name);
7143 	} else {
7144 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7145 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7146 		}
7147 		name = zval_get_string(varname);
7148 	}
7149 
7150 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7151 	retval = zend_hash_find(target_symbol_table, name);
7152 	if (retval == NULL) {
7153 		if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
7154 			zval *result;
7155 
7156 fetch_this:
7157 			result = EX_VAR(opline->result.var);
7158 			switch (type) {
7159 				case BP_VAR_R:
7160 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
7161 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
7162 						Z_ADDREF_P(result);
7163 					} else {
7164 						ZVAL_NULL(result);
7165 						zend_error(E_NOTICE,"Undefined variable: this");
7166 					}
7167 					break;
7168 				case BP_VAR_IS:
7169 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
7170 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
7171 						Z_ADDREF_P(result);
7172 					} else {
7173 						ZVAL_NULL(result);
7174 					}
7175 					break;
7176 				case BP_VAR_RW:
7177 				case BP_VAR_W:
7178 					zend_throw_error(NULL, "Cannot re-assign $this");
7179 					break;
7180 				case BP_VAR_UNSET:
7181 					zend_throw_error(NULL, "Cannot unset $this");
7182 					break;
7183 				EMPTY_SWITCH_DEFAULT_CASE()
7184 			}
7185 			if (IS_CONST != IS_CONST) {
7186 				zend_string_release(name);
7187 			}
7188 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7189 		}
7190 		switch (type) {
7191 			case BP_VAR_R:
7192 			case BP_VAR_UNSET:
7193 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7194 				/* break missing intentionally */
7195 			case BP_VAR_IS:
7196 				retval = &EG(uninitialized_zval);
7197 				break;
7198 			case BP_VAR_RW:
7199 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7200 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
7201 				break;
7202 			case BP_VAR_W:
7203 				retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
7204 				break;
7205 			EMPTY_SWITCH_DEFAULT_CASE()
7206 		}
7207 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
7208 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
7209 		retval = Z_INDIRECT_P(retval);
7210 		if (Z_TYPE_P(retval) == IS_UNDEF) {
7211 			if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
7212 				goto fetch_this;
7213 			}
7214 			switch (type) {
7215 				case BP_VAR_R:
7216 				case BP_VAR_UNSET:
7217 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7218 					/* break missing intentionally */
7219 				case BP_VAR_IS:
7220 					retval = &EG(uninitialized_zval);
7221 					break;
7222 				case BP_VAR_RW:
7223 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
7224 					/* break missing intentionally */
7225 				case BP_VAR_W:
7226 					ZVAL_NULL(retval);
7227 					break;
7228 				EMPTY_SWITCH_DEFAULT_CASE()
7229 			}
7230 		}
7231 	}
7232 
7233 	if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
7234 
7235 	}
7236 
7237 	if (IS_CONST != IS_CONST) {
7238 		zend_string_release(name);
7239 	}
7240 
7241 	ZEND_ASSERT(retval != NULL);
7242 	if (type == BP_VAR_R || type == BP_VAR_IS) {
7243 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
7244 	} else {
7245 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
7246 	}
7247 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7248 }
7249 
7250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7251 {
7252 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7253 }
7254 
7255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7256 {
7257 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7258 }
7259 
7260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7261 {
7262 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7263 }
7264 
7265 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7266 {
7267 	USE_OPLINE
7268 
7269 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7270 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7271 	} else {
7272 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7273 	}
7274 }
7275 
7276 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7277 {
7278 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7279 }
7280 
7281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7282 {
7283 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7284 }
7285 
7286 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
7287 {
7288 	USE_OPLINE
7289 
7290 	zval *varname;
7291 	zval *retval;
7292 	zend_string *name;
7293 	zend_class_entry *ce;
7294 
7295 	SAVE_OPLINE();
7296 	varname = EX_CONSTANT(opline->op1);
7297 
7298  	if (IS_CONST == IS_CONST) {
7299 		name = Z_STR_P(varname);
7300 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
7301 		name = Z_STR_P(varname);
7302 		zend_string_addref(name);
7303 	} else {
7304 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7305 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7306 		}
7307 		name = zval_get_string(varname);
7308 	}
7309 
7310 	if (IS_UNUSED == IS_CONST) {
7311 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
7312 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
7313 
7314 			/* check if static properties were destoyed */
7315 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7316 				if (type == BP_VAR_IS) {
7317 					retval = &EG(uninitialized_zval);
7318 				} else {
7319 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
7320 
7321 					HANDLE_EXCEPTION();
7322 				}
7323 			}
7324 
7325 			goto fetch_static_prop_return;
7326 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
7327 			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);
7328 			if (UNEXPECTED(ce == NULL)) {
7329 				ZEND_ASSERT(EG(exception));
7330 				if (IS_CONST != IS_CONST) {
7331 					zend_string_release(name);
7332 				}
7333 
7334 				HANDLE_EXCEPTION();
7335 			}
7336 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
7337 		}
7338 	} else {
7339 		if (IS_UNUSED == IS_UNUSED) {
7340 			ce = zend_fetch_class(NULL, opline->op2.num);
7341 			if (UNEXPECTED(ce == NULL)) {
7342 				ZEND_ASSERT(EG(exception));
7343 				if (IS_CONST != IS_CONST) {
7344 					zend_string_release(name);
7345 				}
7346 
7347 				HANDLE_EXCEPTION();
7348 			}
7349 		} else {
7350 			ce = Z_CE_P(EX_VAR(opline->op2.var));
7351 		}
7352 		if (IS_CONST == IS_CONST &&
7353 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
7354 
7355 			/* check if static properties were destoyed */
7356 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7357 				if (type == BP_VAR_IS) {
7358 					retval = &EG(uninitialized_zval);
7359 				} else {
7360 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
7361 
7362 					HANDLE_EXCEPTION();
7363 				}
7364 			}
7365 
7366 			goto fetch_static_prop_return;
7367 		}
7368 	}
7369 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
7370 	if (UNEXPECTED(retval == NULL)) {
7371 		if (type == BP_VAR_IS) {
7372 			retval = &EG(uninitialized_zval);
7373 		} else {
7374 			ZEND_ASSERT(EG(exception));
7375 			if (IS_CONST != IS_CONST) {
7376 				zend_string_release(name);
7377 			}
7378 
7379 			HANDLE_EXCEPTION();
7380 		}
7381 	} else if (IS_CONST == IS_CONST) {
7382 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
7383 	}
7384 
7385 	if (IS_CONST != IS_CONST) {
7386 		zend_string_release(name);
7387 	}
7388 
7389 fetch_static_prop_return:
7390 	if (type == BP_VAR_R || type == BP_VAR_IS) {
7391 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
7392 	} else {
7393 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
7394 	}
7395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7396 }
7397 
7398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7399 {
7400 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7401 }
7402 
7403 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7404 {
7405 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7406 }
7407 
7408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7409 {
7410 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7411 }
7412 
7413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7414 {
7415 	USE_OPLINE
7416 
7417 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7418 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7419 	} else {
7420 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7421 	}
7422 }
7423 
7424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7425 {
7426 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7427 }
7428 
7429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7430 {
7431 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7432 }
7433 
7434 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7435 {
7436 	USE_OPLINE
7437 	zval *container;
7438 	zend_free_op free_op1;
7439 
7440 	SAVE_OPLINE();
7441 
7442 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
7443         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
7444             zend_throw_error(NULL, "Cannot use temporary expression in write context");
7445 
7446 
7447 			HANDLE_EXCEPTION();
7448         }
7449 		container = NULL;
7450 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
7451 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
7452 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
7453 		}
7454 
7455 
7456 	} else {
7457 		if (IS_UNUSED == IS_UNUSED) {
7458 			zend_throw_error(NULL, "Cannot use [] for reading");
7459 
7460 
7461 			HANDLE_EXCEPTION();
7462 		}
7463 		container = EX_CONSTANT(opline->op1);
7464 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
7465 
7466 
7467 	}
7468 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7469 }
7470 
7471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7472 {
7473 	USE_OPLINE
7474 	zval *function_name;
7475 	zend_class_entry *ce;
7476 	zend_object *object;
7477 	zend_function *fbc;
7478 	zend_execute_data *call;
7479 
7480 	SAVE_OPLINE();
7481 
7482 	if (IS_CONST == IS_CONST) {
7483 		/* no function found. try a static method in class */
7484 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
7485 		if (UNEXPECTED(ce == NULL)) {
7486 			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);
7487 			if (UNEXPECTED(ce == NULL)) {
7488 				ZEND_ASSERT(EG(exception));
7489 				HANDLE_EXCEPTION();
7490 			}
7491 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
7492 		}
7493 	} else if (IS_CONST == IS_UNUSED) {
7494 		ce = zend_fetch_class(NULL, opline->op1.num);
7495 		if (UNEXPECTED(ce == NULL)) {
7496 			ZEND_ASSERT(EG(exception));
7497 
7498 			HANDLE_EXCEPTION();
7499 		}
7500 	} else {
7501 		ce = Z_CE_P(EX_VAR(opline->op1.var));
7502 	}
7503 
7504 	if (IS_CONST == IS_CONST &&
7505 	    IS_UNUSED == IS_CONST &&
7506 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
7507 		/* nothing to do */
7508 	} else if (IS_CONST != IS_CONST &&
7509 	           IS_UNUSED == IS_CONST &&
7510 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
7511 		/* do nothing */
7512 	} else if (IS_UNUSED != IS_UNUSED) {
7513 
7514 
7515 		function_name = NULL;
7516 		if (IS_UNUSED != IS_CONST) {
7517 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
7518 				do {
7519 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
7520 						function_name = Z_REFVAL_P(function_name);
7521 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
7522 							break;
7523 						}
7524 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
7525 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
7526 						if (UNEXPECTED(EG(exception) != NULL)) {
7527 							HANDLE_EXCEPTION();
7528 						}
7529 					}
7530 					zend_throw_error(NULL, "Function name must be a string");
7531 
7532 					HANDLE_EXCEPTION();
7533 				} while (0);
7534  			}
7535 		}
7536 
7537 		if (ce->get_static_method) {
7538 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
7539 		} else {
7540 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
7541 		}
7542 		if (UNEXPECTED(fbc == NULL)) {
7543 			if (EXPECTED(!EG(exception))) {
7544 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
7545 			}
7546 
7547 			HANDLE_EXCEPTION();
7548 		}
7549 		if (IS_UNUSED == IS_CONST &&
7550 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
7551 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
7552 			if (IS_CONST == IS_CONST) {
7553 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
7554 			} else {
7555 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
7556 			}
7557 		}
7558 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
7559 			init_func_run_time_cache(&fbc->op_array);
7560 		}
7561 		if (IS_UNUSED != IS_CONST) {
7562 
7563 		}
7564 	} else {
7565 		if (UNEXPECTED(ce->constructor == NULL)) {
7566 			zend_throw_error(NULL, "Cannot call constructor");
7567 			HANDLE_EXCEPTION();
7568 		}
7569 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
7570 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
7571 			HANDLE_EXCEPTION();
7572 		}
7573 		fbc = ce->constructor;
7574 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
7575 			init_func_run_time_cache(&fbc->op_array);
7576 		}
7577 	}
7578 
7579 	object = NULL;
7580 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
7581 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
7582 			object = Z_OBJ(EX(This));
7583 			ce = object->ce;
7584 		} else {
7585 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
7586 				/* Allowed for PHP 4 compatibility. */
7587 				zend_error(
7588 					E_DEPRECATED,
7589 					"Non-static method %s::%s() should not be called statically",
7590 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
7591 				if (UNEXPECTED(EG(exception) != NULL)) {
7592 					HANDLE_EXCEPTION();
7593 				}
7594 			} else {
7595 				/* An internal function assumes $this is present and won't check that.
7596 				 * So PHP would crash by allowing the call. */
7597 				zend_throw_error(
7598 					zend_ce_error,
7599 					"Non-static method %s::%s() cannot be called statically",
7600 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
7601 				HANDLE_EXCEPTION();
7602 			}
7603 		}
7604 	}
7605 
7606 	if (IS_CONST == IS_UNUSED) {
7607 		/* previous opcode is ZEND_FETCH_CLASS */
7608 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
7609 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
7610 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
7611 				ce = Z_OBJCE(EX(This));
7612 			} else {
7613 				ce = Z_CE(EX(This));
7614 			}
7615 		}
7616 	}
7617 
7618 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
7619 		fbc, opline->extended_value, ce, object);
7620 	call->prev_execute_data = EX(call);
7621 	EX(call) = call;
7622 
7623 	ZEND_VM_NEXT_OPCODE();
7624 }
7625 
7626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7627 {
7628 	USE_OPLINE
7629 
7630 	SAVE_OPLINE();
7631 	if (IS_CONST == IS_UNUSED) {
7632 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
7633 	} else {
7634 /* prevents "undefined variable opline" errors */
7635 #if 0 || (IS_CONST != IS_UNUSED)
7636 		zval *retval_ref, *retval_ptr;
7637 
7638 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
7639 
7640 		retval_ref = retval_ptr = EX_CONSTANT(opline->op1);
7641 
7642 		if (IS_CONST == IS_CONST) {
7643 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
7644 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
7645 		} else if (IS_CONST == IS_VAR) {
7646 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
7647 				retval_ptr = Z_INDIRECT_P(retval_ptr);
7648 			}
7649 			ZVAL_DEREF(retval_ptr);
7650 		} else if (IS_CONST == IS_CV) {
7651 			ZVAL_DEREF(retval_ptr);
7652 		}
7653 
7654 		if (UNEXPECTED(!ret_info->class_name
7655 			&& ret_info->type_hint != IS_CALLABLE
7656 			&& ret_info->type_hint != IS_ITERABLE
7657 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
7658 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
7659 			&& retval_ref != retval_ptr)
7660 		) {
7661 			/* A cast might happen - unwrap the reference if this is a by-value return */
7662 			if (Z_REFCOUNT_P(retval_ref) == 1) {
7663 				ZVAL_UNREF(retval_ref);
7664 			} else {
7665 				Z_DELREF_P(retval_ref);
7666 				ZVAL_COPY(retval_ref, retval_ptr);
7667 			}
7668 			retval_ptr = retval_ref;
7669 		}
7670 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
7671 
7672 		if (UNEXPECTED(EG(exception) != NULL)) {
7673 			if (IS_CONST == IS_CONST) {
7674 				zval_ptr_dtor_nogc(retval_ptr);
7675 			}
7676 		}
7677 #endif
7678 	}
7679 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7680 }
7681 
7682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7683 {
7684 	USE_OPLINE
7685 
7686 	zval *expr_ptr, new_expr;
7687 
7688 	SAVE_OPLINE();
7689 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
7690 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
7691 		expr_ptr = NULL;
7692 		ZVAL_MAKE_REF(expr_ptr);
7693 		Z_ADDREF_P(expr_ptr);
7694 
7695 	} else {
7696 		expr_ptr = EX_CONSTANT(opline->op1);
7697 		if (IS_CONST == IS_TMP_VAR) {
7698 			/* pass */
7699 		} else if (IS_CONST == IS_CONST) {
7700 			if (Z_REFCOUNTED_P(expr_ptr)) {
7701 				Z_ADDREF_P(expr_ptr);
7702 			}
7703 		} else if (IS_CONST == IS_CV) {
7704 			ZVAL_DEREF(expr_ptr);
7705 			if (Z_REFCOUNTED_P(expr_ptr)) {
7706 				Z_ADDREF_P(expr_ptr);
7707 			}
7708 		} else /* if (IS_CONST == IS_VAR) */ {
7709 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
7710 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
7711 
7712 				expr_ptr = Z_REFVAL_P(expr_ptr);
7713 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
7714 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7715 					expr_ptr = &new_expr;
7716 					efree_size(ref, sizeof(zend_reference));
7717 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
7718 					Z_ADDREF_P(expr_ptr);
7719 				}
7720 			}
7721 		}
7722 	}
7723 
7724 	if (IS_UNUSED != IS_UNUSED) {
7725 
7726 		zval *offset = NULL;
7727 		zend_string *str;
7728 		zend_ulong hval;
7729 
7730 add_again:
7731 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7732 			str = Z_STR_P(offset);
7733 			if (IS_UNUSED != IS_CONST) {
7734 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7735 					goto num_index;
7736 				}
7737 			}
7738 str_index:
7739 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
7740 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7741 			hval = Z_LVAL_P(offset);
7742 num_index:
7743 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
7744 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
7745 			offset = Z_REFVAL_P(offset);
7746 			goto add_again;
7747 		} else if (Z_TYPE_P(offset) == IS_NULL) {
7748 			str = ZSTR_EMPTY_ALLOC();
7749 			goto str_index;
7750 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
7751 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
7752 			goto num_index;
7753 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
7754 			hval = 0;
7755 			goto num_index;
7756 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
7757 			hval = 1;
7758 			goto num_index;
7759 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
7760 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
7761 			str = ZSTR_EMPTY_ALLOC();
7762 			goto str_index;
7763 		} else {
7764 			zend_error(E_WARNING, "Illegal offset type");
7765 			zval_ptr_dtor(expr_ptr);
7766 		}
7767 
7768 	} else {
7769 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7770 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
7771 			zval_ptr_dtor(expr_ptr);
7772 		}
7773 	}
7774 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7775 }
7776 
7777 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7778 {
7779 	zval *array;
7780 	uint32_t size;
7781 	USE_OPLINE
7782 
7783 	array = EX_VAR(opline->result.var);
7784 	if (IS_CONST != IS_UNUSED) {
7785 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
7786 	} else {
7787 		size = 0;
7788 	}
7789 	ZVAL_NEW_ARR(array);
7790 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
7791 
7792 	if (IS_CONST != IS_UNUSED) {
7793 		/* Explicitly initialize array as not-packed if flag is set */
7794 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
7795 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
7796 		}
7797 	}
7798 
7799 	if (IS_CONST == IS_UNUSED) {
7800 		ZEND_VM_NEXT_OPCODE();
7801 #if 0 || (IS_CONST != IS_UNUSED)
7802 	} else {
7803 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7804 #endif
7805 	}
7806 }
7807 
7808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7809 {
7810 	USE_OPLINE
7811 	zval tmp, *varname;
7812 	HashTable *target_symbol_table;
7813 
7814 
7815 	SAVE_OPLINE();
7816 	if (IS_CONST == IS_CV &&
7817 	    (opline->extended_value & ZEND_QUICK_SET)) {
7818 		zval *var = EX_VAR(opline->op1.var);
7819 
7820 		if (Z_REFCOUNTED_P(var)) {
7821 			zend_refcounted *garbage = Z_COUNTED_P(var);
7822 
7823 			if (!--GC_REFCOUNT(garbage)) {
7824 				ZVAL_UNDEF(var);
7825 				zval_dtor_func(garbage);
7826 			} else {
7827 				zval *z = var;
7828 				ZVAL_DEREF(z);
7829 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
7830 					ZVAL_UNDEF(var);
7831 					gc_possible_root(Z_COUNTED_P(z));
7832 				} else {
7833 					ZVAL_UNDEF(var);
7834 				}
7835 			}
7836 		} else {
7837 			ZVAL_UNDEF(var);
7838 		}
7839 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7840 	}
7841 
7842 	varname = EX_CONSTANT(opline->op1);
7843 
7844 	ZVAL_UNDEF(&tmp);
7845 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7846 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7847 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7848 		}
7849 		ZVAL_STR(&tmp, zval_get_string(varname));
7850 		varname = &tmp;
7851 	}
7852 
7853 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7854 	zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
7855 
7856 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7857 		zend_string_release(Z_STR(tmp));
7858 	}
7859 
7860 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7861 }
7862 
7863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7864 {
7865 	USE_OPLINE
7866 	zval tmp, *varname;
7867 	zend_class_entry *ce;
7868 
7869 
7870 	SAVE_OPLINE();
7871 
7872 	varname = EX_CONSTANT(opline->op1);
7873 
7874 	ZVAL_UNDEF(&tmp);
7875 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7876 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
7877 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
7878 		}
7879 		ZVAL_STR(&tmp, zval_get_string(varname));
7880 		varname = &tmp;
7881 	}
7882 
7883 	if (IS_UNUSED == IS_CONST) {
7884 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
7885 		if (UNEXPECTED(ce == NULL)) {
7886 			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);
7887 			if (UNEXPECTED(ce == NULL)) {
7888 				ZEND_ASSERT(EG(exception));
7889 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7890 					zend_string_release(Z_STR(tmp));
7891 				}
7892 
7893 				HANDLE_EXCEPTION();
7894 			}
7895 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
7896 		}
7897 	} else if (IS_UNUSED == IS_UNUSED) {
7898 		ce = zend_fetch_class(NULL, opline->op2.num);
7899 		if (UNEXPECTED(ce == NULL)) {
7900 			ZEND_ASSERT(EG(exception));
7901 			if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7902 				zend_string_release(Z_STR(tmp));
7903 			}
7904 
7905 			HANDLE_EXCEPTION();
7906 		}
7907 	} else {
7908 		ce = Z_CE_P(EX_VAR(opline->op2.var));
7909 	}
7910 	zend_std_unset_static_property(ce, Z_STR_P(varname));
7911 
7912 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7913 		zend_string_release(Z_STR(tmp));
7914 	}
7915 
7916 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7917 }
7918 
7919 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7920 {
7921 	USE_OPLINE
7922 	zval *value;
7923 	int result;
7924 
7925 	if (IS_CONST == IS_CV &&
7926 	    (opline->extended_value & ZEND_QUICK_SET)) {
7927 		value = EX_VAR(opline->op1.var);
7928 		if (opline->extended_value & ZEND_ISSET) {
7929 			result =
7930 				Z_TYPE_P(value) > IS_NULL &&
7931 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7932 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
7933 			SAVE_OPLINE();
7934 			result = !i_zend_is_true(value);
7935 			if (UNEXPECTED(EG(exception))) {
7936 				HANDLE_EXCEPTION();
7937 			}
7938 		}
7939 		ZEND_VM_SMART_BRANCH(result, 0);
7940 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
7941 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
7942 		ZEND_VM_CONTINUE();
7943 	} else {
7944 
7945 		zval tmp, *varname;
7946 		HashTable *target_symbol_table;
7947 
7948 		SAVE_OPLINE();
7949 		varname = EX_CONSTANT(opline->op1);
7950 		ZVAL_UNDEF(&tmp);
7951 		if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7952 			ZVAL_STR(&tmp, zval_get_string(varname));
7953 			varname = &tmp;
7954 		}
7955 
7956 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
7957 		value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
7958 
7959 		if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
7960 			zend_string_release(Z_STR(tmp));
7961 		}
7962 
7963 		if (opline->extended_value & ZEND_ISSET) {
7964 			result = value && Z_TYPE_P(value) > IS_NULL &&
7965 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7966 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
7967 			result = !value || !i_zend_is_true(value);
7968 		}
7969 
7970 		ZEND_VM_SMART_BRANCH(result, 1);
7971 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
7972 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7973 	}
7974 }
7975 
7976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7977 {
7978 	USE_OPLINE
7979 	zval *value;
7980 	int result;
7981 
7982 	zval tmp, *varname;
7983 	zend_class_entry *ce;
7984 
7985 	SAVE_OPLINE();
7986 	varname = EX_CONSTANT(opline->op1);
7987 	ZVAL_UNDEF(&tmp);
7988 	if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
7989 		ZVAL_STR(&tmp, zval_get_string(varname));
7990 		varname = &tmp;
7991 	}
7992 
7993 	if (IS_UNUSED == IS_CONST) {
7994 		if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
7995 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
7996 
7997 			/* check if static properties were destoyed */
7998 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
7999 				value = NULL;
8000 			}
8001 
8002 			goto is_static_prop_return;
8003 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
8004 			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);
8005 			if (UNEXPECTED(ce == NULL)) {
8006 				ZEND_ASSERT(EG(exception));
8007 				HANDLE_EXCEPTION();
8008 			}
8009 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
8010 		}
8011 	} else {
8012 		if (IS_UNUSED == IS_UNUSED) {
8013 			ce = zend_fetch_class(NULL, opline->op2.num);
8014 			if (UNEXPECTED(ce == NULL)) {
8015 				ZEND_ASSERT(EG(exception));
8016 				if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
8017 					zend_string_release(Z_STR(tmp));
8018 				}
8019 
8020 				HANDLE_EXCEPTION();
8021 			}
8022 		} else {
8023 			ce = Z_CE_P(EX_VAR(opline->op2.var));
8024 		}
8025 		if (IS_CONST == IS_CONST &&
8026 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
8027 
8028 			/* check if static properties were destoyed */
8029 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
8030 				value = NULL;
8031 			}
8032 
8033 			goto is_static_prop_return;
8034 		}
8035 	}
8036 
8037 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
8038 
8039 	if (IS_CONST == IS_CONST && value) {
8040 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
8041 	}
8042 
8043 	if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
8044 		zend_string_release(Z_STR(tmp));
8045 	}
8046 
8047 is_static_prop_return:
8048 	if (opline->extended_value & ZEND_ISSET) {
8049 		result = value && Z_TYPE_P(value) > IS_NULL &&
8050 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
8051 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
8052 		result = !value || !i_zend_is_true(value);
8053 	}
8054 
8055 	ZEND_VM_SMART_BRANCH(result, 1);
8056 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8057 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8058 }
8059 
8060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8061 {
8062 	USE_OPLINE
8063 	zval *zfunc;
8064 	zval *object;
8065 	zend_class_entry *called_scope;
8066 
8067 	SAVE_OPLINE();
8068 
8069 	zfunc = zend_hash_find(EG(function_table), Z_STR_P(EX_CONSTANT(opline->op1)));
8070 	ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION);
8071 
8072 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
8073 		called_scope = Z_OBJCE(EX(This));
8074 		if (UNEXPECTED((Z_FUNC_P(zfunc)->common.fn_flags & ZEND_ACC_STATIC) ||
8075 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
8076 			object = NULL;
8077 		} else {
8078 			object = &EX(This);
8079 		}
8080 	} else {
8081 		called_scope = Z_CE(EX(This));
8082 		object = NULL;
8083 	}
8084 	zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
8085 		EX(func)->op_array.scope, called_scope, object);
8086 
8087 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8088 }
8089 
8090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8091 {
8092 	USE_OPLINE
8093 
8094 	zend_generator *generator = zend_get_running_generator(execute_data);
8095 
8096 	SAVE_OPLINE();
8097 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
8098 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
8099 
8100 
8101 		HANDLE_EXCEPTION();
8102 	}
8103 
8104 	/* Destroy the previously yielded value */
8105 	zval_ptr_dtor(&generator->value);
8106 
8107 	/* Destroy the previously yielded key */
8108 	zval_ptr_dtor(&generator->key);
8109 
8110 	/* Set the new yielded value */
8111 	if (IS_CONST != IS_UNUSED) {
8112 
8113 
8114 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
8115 			/* Constants and temporary variables aren't yieldable by reference,
8116 			 * but we still allow them with a notice. */
8117 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
8118 				zval *value;
8119 
8120 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8121 
8122 				value = EX_CONSTANT(opline->op1);
8123 				ZVAL_COPY_VALUE(&generator->value, value);
8124 				if (IS_CONST == IS_CONST) {
8125 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8126 						Z_ADDREF(generator->value);
8127 					}
8128 				}
8129 			} else {
8130 				zval *value_ptr = NULL;
8131 
8132 				/* If a function call result is yielded and the function did
8133 				 * not return by reference we throw a notice. */
8134 				if (IS_CONST == IS_VAR &&
8135 				    (value_ptr == &EG(uninitialized_zval) ||
8136 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
8137 				      !Z_ISREF_P(value_ptr)))) {
8138 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8139 				} else {
8140 					ZVAL_MAKE_REF(value_ptr);
8141 				}
8142 				ZVAL_COPY(&generator->value, value_ptr);
8143 
8144 			}
8145 		} else {
8146 			zval *value = EX_CONSTANT(opline->op1);
8147 
8148 			/* Consts, temporary variables and references need copying */
8149 			if (IS_CONST == IS_CONST) {
8150 				ZVAL_COPY_VALUE(&generator->value, value);
8151 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8152 					Z_ADDREF(generator->value);
8153 				}
8154 			} else if (IS_CONST == IS_TMP_VAR) {
8155 				ZVAL_COPY_VALUE(&generator->value, value);
8156             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
8157 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
8158 
8159 			} else {
8160 				ZVAL_COPY_VALUE(&generator->value, value);
8161 				if (IS_CONST == IS_CV) {
8162 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
8163 				}
8164 			}
8165 		}
8166 	} else {
8167 		/* If no value was specified yield null */
8168 		ZVAL_NULL(&generator->value);
8169 	}
8170 
8171 	/* Set the new yielded key */
8172 	if (IS_UNUSED != IS_UNUSED) {
8173 
8174 		zval *key = NULL;
8175 
8176 		/* Consts, temporary variables and references need copying */
8177 		if (IS_UNUSED == IS_CONST) {
8178 			ZVAL_COPY_VALUE(&generator->key, key);
8179 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
8180 				Z_ADDREF(generator->key);
8181 			}
8182 		} else if (IS_UNUSED == IS_TMP_VAR) {
8183 			ZVAL_COPY_VALUE(&generator->key, key);
8184 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
8185 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
8186 
8187 		} else {
8188 			ZVAL_COPY_VALUE(&generator->key, key);
8189 			if (IS_UNUSED == IS_CV) {
8190 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
8191 			}
8192 		}
8193 
8194 		if (Z_TYPE(generator->key) == IS_LONG
8195 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
8196 		) {
8197 			generator->largest_used_integer_key = Z_LVAL(generator->key);
8198 		}
8199 	} else {
8200 		/* If no key was specified we use auto-increment keys */
8201 		generator->largest_used_integer_key++;
8202 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
8203 	}
8204 
8205 	if (RETURN_VALUE_USED(opline)) {
8206 		/* If the return value of yield is used set the send
8207 		 * target and initialize it to NULL */
8208 		generator->send_target = EX_VAR(opline->result.var);
8209 		ZVAL_NULL(generator->send_target);
8210 	} else {
8211 		generator->send_target = NULL;
8212 	}
8213 
8214 	/* We increment to the next op, so we are at the correct position when the
8215 	 * generator is resumed. */
8216 	ZEND_VM_INC_OPCODE();
8217 
8218 	/* The GOTO VM uses a local opline variable. We need to set the opline
8219 	 * variable in execute_data so we don't resume at an old position. */
8220 	SAVE_OPLINE();
8221 
8222 	ZEND_VM_RETURN();
8223 }
8224 
8225 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8226 {
8227 	USE_OPLINE
8228 
8229 	zval *op1, *op2, *result;
8230 
8231 	op1 = EX_CONSTANT(opline->op1);
8232 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8233 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8234 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8235 			result = EX_VAR(opline->result.var);
8236 			fast_long_add_function(result, op1, op2);
8237 			ZEND_VM_NEXT_OPCODE();
8238 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8239 			result = EX_VAR(opline->result.var);
8240 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
8241 			ZEND_VM_NEXT_OPCODE();
8242 		}
8243 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8244 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8245 			result = EX_VAR(opline->result.var);
8246 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
8247 			ZEND_VM_NEXT_OPCODE();
8248 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8249 			result = EX_VAR(opline->result.var);
8250 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
8251 			ZEND_VM_NEXT_OPCODE();
8252 		}
8253 	}
8254 
8255 	SAVE_OPLINE();
8256 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8257 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8258 	}
8259 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8260 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8261 	}
8262 	add_function(EX_VAR(opline->result.var), op1, op2);
8263 
8264 
8265 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8266 }
8267 
8268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8269 {
8270 	USE_OPLINE
8271 
8272 	zval *op1, *op2, *result;
8273 
8274 	op1 = EX_CONSTANT(opline->op1);
8275 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8276 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8277 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8278 			result = EX_VAR(opline->result.var);
8279 			fast_long_sub_function(result, op1, op2);
8280 			ZEND_VM_NEXT_OPCODE();
8281 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8282 			result = EX_VAR(opline->result.var);
8283 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
8284 			ZEND_VM_NEXT_OPCODE();
8285 		}
8286 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8287 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8288 			result = EX_VAR(opline->result.var);
8289 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
8290 			ZEND_VM_NEXT_OPCODE();
8291 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8292 			result = EX_VAR(opline->result.var);
8293 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
8294 			ZEND_VM_NEXT_OPCODE();
8295 		}
8296 	}
8297 
8298 	SAVE_OPLINE();
8299 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8300 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8301 	}
8302 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8303 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8304 	}
8305 	sub_function(EX_VAR(opline->result.var), op1, op2);
8306 
8307 
8308 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8309 }
8310 
8311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8312 {
8313 	USE_OPLINE
8314 
8315 	zval *op1, *op2, *result;
8316 
8317 	op1 = EX_CONSTANT(opline->op1);
8318 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8319 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8320 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8321 			zend_long overflow;
8322 
8323 			result = EX_VAR(opline->result.var);
8324 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
8325 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
8326 			ZEND_VM_NEXT_OPCODE();
8327 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8328 			result = EX_VAR(opline->result.var);
8329 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
8330 			ZEND_VM_NEXT_OPCODE();
8331 		}
8332 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8333 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8334 			result = EX_VAR(opline->result.var);
8335 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
8336 			ZEND_VM_NEXT_OPCODE();
8337 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8338 			result = EX_VAR(opline->result.var);
8339 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
8340 			ZEND_VM_NEXT_OPCODE();
8341 		}
8342 	}
8343 
8344 	SAVE_OPLINE();
8345 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8346 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8347 	}
8348 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8349 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8350 	}
8351 	mul_function(EX_VAR(opline->result.var), op1, op2);
8352 
8353 
8354 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8355 }
8356 
8357 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8358 {
8359 	USE_OPLINE
8360 
8361 	zval *op1, *op2;
8362 
8363 	SAVE_OPLINE();
8364 	op1 = EX_CONSTANT(opline->op1);
8365 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8366 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
8367 
8368 
8369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8370 }
8371 
8372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8373 {
8374 	USE_OPLINE
8375 
8376 	zval *op1, *op2, *result;
8377 
8378 	op1 = EX_CONSTANT(opline->op1);
8379 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8380 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8381 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8382 			result = EX_VAR(opline->result.var);
8383 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
8384 				SAVE_OPLINE();
8385 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
8386 				HANDLE_EXCEPTION();
8387 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
8388 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
8389 				ZVAL_LONG(result, 0);
8390 			} else {
8391 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
8392 			}
8393 			ZEND_VM_NEXT_OPCODE();
8394 		}
8395 	}
8396 
8397 	SAVE_OPLINE();
8398 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8399 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8400 	}
8401 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8402 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8403 	}
8404 	mod_function(EX_VAR(opline->result.var), op1, op2);
8405 
8406 
8407 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8408 }
8409 
8410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8411 {
8412 	USE_OPLINE
8413 
8414 	zval *op1, *op2;
8415 
8416 	op1 = EX_CONSTANT(opline->op1);
8417 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8418 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8419 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8420 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8421 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
8422 		ZEND_VM_NEXT_OPCODE();
8423 	}
8424 
8425 	SAVE_OPLINE();
8426 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8427 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8428 	}
8429 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8430 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8431 	}
8432 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
8433 
8434 
8435 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8436 }
8437 
8438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8439 {
8440 	USE_OPLINE
8441 
8442 	zval *op1, *op2;
8443 
8444 	op1 = EX_CONSTANT(opline->op1);
8445 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8446 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8447 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8448 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8449 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
8450 		ZEND_VM_NEXT_OPCODE();
8451 	}
8452 
8453 	SAVE_OPLINE();
8454 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8455 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8456 	}
8457 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8458 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8459 	}
8460 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
8461 
8462 
8463 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8464 }
8465 
8466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8467 {
8468 	USE_OPLINE
8469 
8470 	zval *op1, *op2;
8471 
8472 	SAVE_OPLINE();
8473 	op1 = EX_CONSTANT(opline->op1);
8474 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8475 	pow_function(EX_VAR(opline->result.var), op1, op2);
8476 
8477 
8478 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8479 }
8480 
8481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8482 {
8483 	USE_OPLINE
8484 
8485 	zval *op1, *op2;
8486 
8487 	SAVE_OPLINE();
8488 	op1 = EX_CONSTANT(opline->op1);
8489 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8490 
8491 	do {
8492 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8493 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8494 			zend_string *op1_str = Z_STR_P(op1);
8495 			zend_string *op2_str = Z_STR_P(op2);
8496 			zend_string *str;
8497 
8498 			if (IS_CONST != IS_CONST) {
8499 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8500 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8501 
8502 					break;
8503 				}
8504 			}
8505 			if (IS_CV != IS_CONST) {
8506 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8507 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8508 
8509 					break;
8510 				}
8511 			}
8512 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8513 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8514 			    size_t len = ZSTR_LEN(op1_str);
8515 
8516 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8517 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8518 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8519 				break;
8520 			} else {
8521 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8522 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8523 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8524 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8525 			}
8526 		} else {
8527 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8528 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8529 			}
8530 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8531 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8532 			}
8533 			concat_function(EX_VAR(opline->result.var), op1, op2);
8534 		}
8535 
8536 	} while (0);
8537 
8538 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8539 }
8540 
8541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8542 {
8543 	USE_OPLINE
8544 
8545 	zval *op1, *op2;
8546 	int result;
8547 
8548 	SAVE_OPLINE();
8549 	op1 = EX_CONSTANT(opline->op1);
8550 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
8551 	result = fast_is_identical_function(op1, op2);
8552 
8553 
8554 	ZEND_VM_SMART_BRANCH(result, 1);
8555 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8556 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8557 }
8558 
8559 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8560 {
8561 	USE_OPLINE
8562 
8563 	zval *op1, *op2;
8564 	int result;
8565 
8566 	SAVE_OPLINE();
8567 	op1 = EX_CONSTANT(opline->op1);
8568 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
8569 	result = fast_is_not_identical_function(op1, op2);
8570 
8571 
8572 	ZEND_VM_SMART_BRANCH(result, 1);
8573 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8574 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8575 }
8576 
8577 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8578 {
8579 	USE_OPLINE
8580 
8581 	zval *op1, *op2, *result;
8582 
8583 	op1 = EX_CONSTANT(opline->op1);
8584 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8585 	do {
8586 		int result;
8587 
8588 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8589 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8590 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
8591 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8592 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
8593 			} else {
8594 				break;
8595 			}
8596 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
8597 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8598 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
8599 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8600 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
8601 			} else {
8602 				break;
8603 			}
8604 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8605 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8606 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
8607 					result = 1;
8608 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
8609 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
8610 						result = 0;
8611 					} else {
8612 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
8613 					}
8614 				} else {
8615 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
8616 				}
8617 
8618 
8619 			} else {
8620 				break;
8621 			}
8622 		} else {
8623 			break;
8624 		}
8625 		ZEND_VM_SMART_BRANCH(result, 0);
8626 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8627 		ZEND_VM_NEXT_OPCODE();
8628 	} while (0);
8629 
8630 	SAVE_OPLINE();
8631 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8632 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8633 	}
8634 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8635 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8636 	}
8637 	result = EX_VAR(opline->result.var);
8638 	compare_function(result, op1, op2);
8639 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
8640 
8641 
8642 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8643 }
8644 
8645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8646 {
8647 	USE_OPLINE
8648 
8649 	zval *op1, *op2, *result;
8650 
8651 	op1 = EX_CONSTANT(opline->op1);
8652 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8653 	do {
8654 		int result;
8655 
8656 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
8657 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8658 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
8659 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8660 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
8661 			} else {
8662 				break;
8663 			}
8664 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
8665 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
8666 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
8667 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
8668 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
8669 			} else {
8670 				break;
8671 			}
8672 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
8673 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
8674 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
8675 					result = 0;
8676 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
8677 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
8678 						result = 1;
8679 					} else {
8680 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
8681 					}
8682 				} else {
8683 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
8684 				}
8685 
8686 
8687 			} else {
8688 				break;
8689 			}
8690 		} else {
8691 			break;
8692 		}
8693 		ZEND_VM_SMART_BRANCH(result, 0);
8694 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8695 		ZEND_VM_NEXT_OPCODE();
8696 	} while (0);
8697 
8698 	SAVE_OPLINE();
8699 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8700 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8701 	}
8702 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8703 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8704 	}
8705 	result = EX_VAR(opline->result.var);
8706 	compare_function(result, op1, op2);
8707 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
8708 
8709 
8710 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8711 }
8712 
8713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8714 {
8715 	USE_OPLINE
8716 
8717 	zval *op1, *op2, *result;
8718 
8719 	op1 = EX_CONSTANT(opline->op1);
8720 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8721 	do {
8722 		int result;
8723 
8724 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8725 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8726 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8727 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8728 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
8729 			} else {
8730 				break;
8731 			}
8732 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8733 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8734 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8735 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8736 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
8737 			} else {
8738 				break;
8739 			}
8740 		} else {
8741 			break;
8742 		}
8743 		ZEND_VM_SMART_BRANCH(result, 0);
8744 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8745 		ZEND_VM_NEXT_OPCODE();
8746 	} while (0);
8747 
8748 	SAVE_OPLINE();
8749 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8750 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8751 	}
8752 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8753 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8754 	}
8755 	result = EX_VAR(opline->result.var);
8756 	compare_function(result, op1, op2);
8757 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
8758 
8759 
8760 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8761 }
8762 
8763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8764 {
8765 	USE_OPLINE
8766 
8767 	zval *op1, *op2, *result;
8768 
8769 	op1 = EX_CONSTANT(opline->op1);
8770 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8771 	do {
8772 		int result;
8773 
8774 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8775 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8776 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8777 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8778 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
8779 			} else {
8780 				break;
8781 			}
8782 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8783 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8784 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8785 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8786 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
8787 			} else {
8788 				break;
8789 			}
8790 		} else {
8791 			break;
8792 		}
8793 		ZEND_VM_SMART_BRANCH(result, 0);
8794 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
8795 		ZEND_VM_NEXT_OPCODE();
8796 	} while (0);
8797 
8798 	SAVE_OPLINE();
8799 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8800 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8801 	}
8802 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8803 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8804 	}
8805 	result = EX_VAR(opline->result.var);
8806 	compare_function(result, op1, op2);
8807 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
8808 
8809 
8810 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8811 }
8812 
8813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8814 {
8815 	USE_OPLINE
8816 
8817 	zval *op1, *op2;
8818 
8819 	SAVE_OPLINE();
8820 	op1 = EX_CONSTANT(opline->op1);
8821 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8822 	compare_function(EX_VAR(opline->result.var), op1, op2);
8823 
8824 
8825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8826 }
8827 
8828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8829 {
8830 	USE_OPLINE
8831 
8832 	zval *op1, *op2;
8833 
8834 	op1 = EX_CONSTANT(opline->op1);
8835 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8836 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8837 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8838 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
8839 		ZEND_VM_NEXT_OPCODE();
8840 	}
8841 
8842 	SAVE_OPLINE();
8843 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8844 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8845 	}
8846 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8847 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8848 	}
8849 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
8850 
8851 
8852 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8853 }
8854 
8855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8856 {
8857 	USE_OPLINE
8858 
8859 	zval *op1, *op2;
8860 
8861 	op1 = EX_CONSTANT(opline->op1);
8862 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8863 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8864 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8865 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
8866 		ZEND_VM_NEXT_OPCODE();
8867 	}
8868 
8869 	SAVE_OPLINE();
8870 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8871 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8872 	}
8873 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8874 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8875 	}
8876 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
8877 
8878 
8879 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8880 }
8881 
8882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8883 {
8884 	USE_OPLINE
8885 
8886 	zval *op1, *op2;
8887 
8888 	op1 = EX_CONSTANT(opline->op1);
8889 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8890 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8891 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8892 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
8893 		ZEND_VM_NEXT_OPCODE();
8894 	}
8895 
8896 	SAVE_OPLINE();
8897 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
8898 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
8899 	}
8900 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
8901 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
8902 	}
8903 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
8904 
8905 
8906 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8907 }
8908 
8909 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8910 {
8911 	USE_OPLINE
8912 
8913 	zval *op1, *op2;
8914 
8915 	SAVE_OPLINE();
8916 	op1 = EX_CONSTANT(opline->op1);
8917 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
8918 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
8919 
8920 
8921 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8922 }
8923 
8924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8925 {
8926 	USE_OPLINE
8927 
8928 	zval *container, *dim, *value, *result;
8929 
8930 	SAVE_OPLINE();
8931 	container = EX_CONSTANT(opline->op1);
8932 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
8933 	if (IS_CONST != IS_CONST) {
8934 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8935 fetch_dim_r_array:
8936 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
8937 			result = EX_VAR(opline->result.var);
8938 			ZVAL_COPY_UNREF(result, value);
8939 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8940 			container = Z_REFVAL_P(container);
8941 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8942 				goto fetch_dim_r_array;
8943 			} else {
8944 				goto fetch_dim_r_slow;
8945 			}
8946 		} else {
8947 fetch_dim_r_slow:
8948 			result = EX_VAR(opline->result.var);
8949 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
8950 		}
8951 	} else {
8952 		result = EX_VAR(opline->result.var);
8953 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
8954 	}
8955 
8956 
8957 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8958 }
8959 
8960 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8961 {
8962 	USE_OPLINE
8963 
8964 	zval *container;
8965 
8966 	SAVE_OPLINE();
8967 	container = EX_CONSTANT(opline->op1);
8968 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
8969 
8970 
8971 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8972 }
8973 
8974 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8975 {
8976 	USE_OPLINE
8977 	zval *container;
8978 	zend_free_op free_op1;
8979 
8980 	SAVE_OPLINE();
8981 
8982 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
8983         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8984             zend_throw_error(NULL, "Cannot use temporary expression in write context");
8985 
8986 
8987 			HANDLE_EXCEPTION();
8988         }
8989 		container = NULL;
8990 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
8991 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
8992 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
8993 		}
8994 
8995 
8996 	} else {
8997 		if (IS_CV == IS_UNUSED) {
8998 			zend_throw_error(NULL, "Cannot use [] for reading");
8999 
9000 
9001 			HANDLE_EXCEPTION();
9002 		}
9003 		container = EX_CONSTANT(opline->op1);
9004 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
9005 
9006 
9007 	}
9008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9009 }
9010 
9011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9012 {
9013 	USE_OPLINE
9014 
9015 	zval *container;
9016 
9017 	zval *offset;
9018 
9019 	SAVE_OPLINE();
9020 	container = EX_CONSTANT(opline->op1);
9021 
9022 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
9023 		zend_throw_error(NULL, "Using $this when not in object context");
9024 
9025 		HANDLE_EXCEPTION();
9026 	}
9027 
9028 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9029 
9030 	if (IS_CONST == IS_CONST ||
9031 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9032 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9033 			container = Z_REFVAL_P(container);
9034 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9035 				goto fetch_obj_r_no_object;
9036 			}
9037 		} else {
9038 			goto fetch_obj_r_no_object;
9039 		}
9040 	}
9041 
9042 	/* here we are sure we are dealing with an object */
9043 	do {
9044 		zend_object *zobj = Z_OBJ_P(container);
9045 		zval *retval;
9046 
9047 		if (IS_CV == IS_CONST &&
9048 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
9049 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
9050 
9051 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
9052 				retval = OBJ_PROP(zobj, prop_offset);
9053 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
9054 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
9055 					break;
9056 				}
9057 			} else if (EXPECTED(zobj->properties != NULL)) {
9058 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
9059 				if (EXPECTED(retval)) {
9060 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
9061 					break;
9062 				}
9063 			}
9064 		}
9065 
9066 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
9067 fetch_obj_r_no_object:
9068 			zend_error(E_NOTICE, "Trying to get property of non-object");
9069 			ZVAL_NULL(EX_VAR(opline->result.var));
9070 		} else {
9071 			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));
9072 
9073 			if (retval != EX_VAR(opline->result.var)) {
9074 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
9075 			}
9076 		}
9077 	} while (0);
9078 
9079 
9080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9081 }
9082 
9083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_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_TYPE_P(container) == IS_UNDEF)) {
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_is_no_object;
9108 			}
9109 		} else {
9110 			goto fetch_obj_is_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_is_no_object:
9140 			ZVAL_NULL(EX_VAR(opline->result.var));
9141 		} else {
9142 
9143 			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));
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_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9156 {
9157 	USE_OPLINE
9158 	zval *container;
9159 
9160 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
9161 		/* Behave like FETCH_OBJ_W */
9162 		zend_free_op free_op1;
9163 		zval *property;
9164 
9165 		SAVE_OPLINE();
9166 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9167 		container = NULL;
9168 
9169 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
9170 			zend_throw_error(NULL, "Using $this when not in object context");
9171 
9172 			HANDLE_EXCEPTION();
9173 		}
9174 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9175 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
9176 
9177 
9178 			HANDLE_EXCEPTION();
9179 		}
9180 		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);
9181 
9182 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
9183 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
9184 		}
9185 
9186 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9187 	} else {
9188 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9189 	}
9190 }
9191 
9192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9193 {
9194 	USE_OPLINE
9195 
9196 	zval *container;
9197 
9198 	SAVE_OPLINE();
9199 	container = EX_CONSTANT(opline->op1);
9200 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
9201 
9202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9203 }
9204 
9205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9206 {
9207 	USE_OPLINE
9208 
9209 	zval *op1, *op2;
9210 	zend_string *op1_str, *op2_str, *str;
9211 
9212 	SAVE_OPLINE();
9213 	op1 = EX_CONSTANT(opline->op1);
9214 	if (IS_CONST == IS_CONST) {
9215 		op1_str = Z_STR_P(op1);
9216 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9217 		op1_str = zend_string_copy(Z_STR_P(op1));
9218 	} else {
9219 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9220 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
9221 		}
9222 		op1_str = _zval_get_string_func(op1);
9223 	}
9224 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9225 	if (IS_CV == IS_CONST) {
9226 		op2_str = Z_STR_P(op2);
9227 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9228 		op2_str = zend_string_copy(Z_STR_P(op2));
9229 	} else {
9230 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9231 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
9232 		}
9233 		op2_str = _zval_get_string_func(op2);
9234 	}
9235 	do {
9236 		if (IS_CONST != IS_CONST) {
9237 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9238 				if (IS_CV == IS_CONST) {
9239 					zend_string_addref(op2_str);
9240 				}
9241 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9242 				zend_string_release(op1_str);
9243 				break;
9244 			}
9245 		}
9246 		if (IS_CV != IS_CONST) {
9247 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9248 				if (IS_CONST == IS_CONST) {
9249 					zend_string_addref(op1_str);
9250 				}
9251 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9252 				zend_string_release(op2_str);
9253 				break;
9254 			}
9255 		}
9256 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9257 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9258 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9259 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9260 		if (IS_CONST != IS_CONST) {
9261 			zend_string_release(op1_str);
9262 		}
9263 		if (IS_CV != IS_CONST) {
9264 			zend_string_release(op2_str);
9265 		}
9266 	} while (0);
9267 
9268 
9269 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9270 }
9271 
9272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9273 {
9274 	USE_OPLINE
9275 	zval *function_name;
9276 
9277 	zval *object;
9278 	zend_function *fbc;
9279 	zend_class_entry *called_scope;
9280 	zend_object *obj;
9281 	zend_execute_data *call;
9282 	uint32_t call_info;
9283 
9284 	SAVE_OPLINE();
9285 
9286 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9287 
9288 	if (IS_CV != IS_CONST &&
9289 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9290 		do {
9291 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
9292 				function_name = Z_REFVAL_P(function_name);
9293 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9294 					break;
9295 				}
9296 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9297 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
9298 				if (UNEXPECTED(EG(exception) != NULL)) {
9299 					HANDLE_EXCEPTION();
9300 				}
9301 			}
9302 			zend_throw_error(NULL, "Method name must be a string");
9303 
9304 
9305 			HANDLE_EXCEPTION();
9306 		} while (0);
9307 	}
9308 
9309 	object = EX_CONSTANT(opline->op1);
9310 
9311 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9312 		zend_throw_error(NULL, "Using $this when not in object context");
9313 
9314 		HANDLE_EXCEPTION();
9315 	}
9316 
9317 	if (IS_CONST != IS_UNUSED) {
9318 		do {
9319 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
9320 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
9321 					object = Z_REFVAL_P(object);
9322 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9323 						break;
9324 					}
9325 				}
9326 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9327 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
9328 					if (UNEXPECTED(EG(exception) != NULL)) {
9329 
9330 						HANDLE_EXCEPTION();
9331 					}
9332 				}
9333 				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)));
9334 
9335 
9336 				HANDLE_EXCEPTION();
9337 			}
9338 		} while (0);
9339 	}
9340 
9341 	obj = Z_OBJ_P(object);
9342 	called_scope = obj->ce;
9343 
9344 	if (IS_CV != IS_CONST ||
9345 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
9346 	    zend_object *orig_obj = obj;
9347 
9348 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
9349 			zend_throw_error(NULL, "Object does not support method calls");
9350 
9351 
9352 			HANDLE_EXCEPTION();
9353 		}
9354 
9355 		/* First, locate the function. */
9356 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
9357 		if (UNEXPECTED(fbc == NULL)) {
9358 			if (EXPECTED(!EG(exception))) {
9359 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
9360 			}
9361 
9362 
9363 			HANDLE_EXCEPTION();
9364 		}
9365 		if (IS_CV == IS_CONST &&
9366 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
9367 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9368 		    EXPECTED(obj == orig_obj)) {
9369 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
9370 		}
9371 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
9372 			init_func_run_time_cache(&fbc->op_array);
9373 		}
9374 	}
9375 
9376 	call_info = ZEND_CALL_NESTED_FUNCTION;
9377 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
9378 		obj = NULL;
9379 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
9380 		/* CV may be changed indirectly (e.g. when it's a reference) */
9381 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
9382 		GC_REFCOUNT(obj)++; /* For $this pointer */
9383 	}
9384 
9385 
9386 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
9387 		HANDLE_EXCEPTION();
9388 	}
9389 
9390 	call = zend_vm_stack_push_call_frame(call_info,
9391 		fbc, opline->extended_value, called_scope, obj);
9392 	call->prev_execute_data = EX(call);
9393 	EX(call) = call;
9394 
9395 	ZEND_VM_NEXT_OPCODE();
9396 }
9397 
9398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9399 {
9400 	USE_OPLINE
9401 	zval *function_name;
9402 	zend_class_entry *ce;
9403 	zend_object *object;
9404 	zend_function *fbc;
9405 	zend_execute_data *call;
9406 
9407 	SAVE_OPLINE();
9408 
9409 	if (IS_CONST == IS_CONST) {
9410 		/* no function found. try a static method in class */
9411 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
9412 		if (UNEXPECTED(ce == NULL)) {
9413 			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);
9414 			if (UNEXPECTED(ce == NULL)) {
9415 				ZEND_ASSERT(EG(exception));
9416 				HANDLE_EXCEPTION();
9417 			}
9418 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
9419 		}
9420 	} else if (IS_CONST == IS_UNUSED) {
9421 		ce = zend_fetch_class(NULL, opline->op1.num);
9422 		if (UNEXPECTED(ce == NULL)) {
9423 			ZEND_ASSERT(EG(exception));
9424 
9425 			HANDLE_EXCEPTION();
9426 		}
9427 	} else {
9428 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9429 	}
9430 
9431 	if (IS_CONST == IS_CONST &&
9432 	    IS_CV == IS_CONST &&
9433 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
9434 		/* nothing to do */
9435 	} else if (IS_CONST != IS_CONST &&
9436 	           IS_CV == IS_CONST &&
9437 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
9438 		/* do nothing */
9439 	} else if (IS_CV != IS_UNUSED) {
9440 
9441 
9442 		function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9443 		if (IS_CV != IS_CONST) {
9444 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9445 				do {
9446 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9447 						function_name = Z_REFVAL_P(function_name);
9448 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9449 							break;
9450 						}
9451 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9452 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
9453 						if (UNEXPECTED(EG(exception) != NULL)) {
9454 							HANDLE_EXCEPTION();
9455 						}
9456 					}
9457 					zend_throw_error(NULL, "Function name must be a string");
9458 
9459 					HANDLE_EXCEPTION();
9460 				} while (0);
9461  			}
9462 		}
9463 
9464 		if (ce->get_static_method) {
9465 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9466 		} else {
9467 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
9468 		}
9469 		if (UNEXPECTED(fbc == NULL)) {
9470 			if (EXPECTED(!EG(exception))) {
9471 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
9472 			}
9473 
9474 			HANDLE_EXCEPTION();
9475 		}
9476 		if (IS_CV == IS_CONST &&
9477 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
9478 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
9479 			if (IS_CONST == IS_CONST) {
9480 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
9481 			} else {
9482 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
9483 			}
9484 		}
9485 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
9486 			init_func_run_time_cache(&fbc->op_array);
9487 		}
9488 		if (IS_CV != IS_CONST) {
9489 
9490 		}
9491 	} else {
9492 		if (UNEXPECTED(ce->constructor == NULL)) {
9493 			zend_throw_error(NULL, "Cannot call constructor");
9494 			HANDLE_EXCEPTION();
9495 		}
9496 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9497 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9498 			HANDLE_EXCEPTION();
9499 		}
9500 		fbc = ce->constructor;
9501 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
9502 			init_func_run_time_cache(&fbc->op_array);
9503 		}
9504 	}
9505 
9506 	object = NULL;
9507 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9508 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9509 			object = Z_OBJ(EX(This));
9510 			ce = object->ce;
9511 		} else {
9512 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
9513 				/* Allowed for PHP 4 compatibility. */
9514 				zend_error(
9515 					E_DEPRECATED,
9516 					"Non-static method %s::%s() should not be called statically",
9517 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
9518 				if (UNEXPECTED(EG(exception) != NULL)) {
9519 					HANDLE_EXCEPTION();
9520 				}
9521 			} else {
9522 				/* An internal function assumes $this is present and won't check that.
9523 				 * So PHP would crash by allowing the call. */
9524 				zend_throw_error(
9525 					zend_ce_error,
9526 					"Non-static method %s::%s() cannot be called statically",
9527 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
9528 				HANDLE_EXCEPTION();
9529 			}
9530 		}
9531 	}
9532 
9533 	if (IS_CONST == IS_UNUSED) {
9534 		/* previous opcode is ZEND_FETCH_CLASS */
9535 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9536 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
9537 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9538 				ce = Z_OBJCE(EX(This));
9539 			} else {
9540 				ce = Z_CE(EX(This));
9541 			}
9542 		}
9543 	}
9544 
9545 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
9546 		fbc, opline->extended_value, ce, object);
9547 	call->prev_execute_data = EX(call);
9548 	EX(call) = call;
9549 
9550 	ZEND_VM_NEXT_OPCODE();
9551 }
9552 
9553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9554 {
9555 	USE_OPLINE
9556 
9557 	zval *function_name;
9558 	zend_fcall_info_cache fcc;
9559 	char *error = NULL;
9560 	zend_function *func;
9561 	zend_class_entry *called_scope;
9562 	zend_object *object;
9563 	zend_execute_data *call;
9564 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
9565 
9566 	SAVE_OPLINE();
9567 	function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
9568 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9569 		func = fcc.function_handler;
9570 		called_scope = fcc.called_scope;
9571 		object = fcc.object;
9572 		if (error) {
9573 			efree(error);
9574 			/* This is the only soft error is_callable() can generate */
9575 			zend_error(E_DEPRECATED,
9576 				"Non-static method %s::%s() should not be called statically",
9577 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
9578 			if (UNEXPECTED(EG(exception) != NULL)) {
9579 
9580 				HANDLE_EXCEPTION();
9581 			}
9582 		}
9583 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9584 			/* Delay closure destruction until its invocation */
9585 			if (IS_CV & (IS_VAR|IS_CV)) {
9586 				ZVAL_DEREF(function_name);
9587 			}
9588 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
9589 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
9590 			call_info |= ZEND_CALL_CLOSURE;
9591 		} else if (object) {
9592 			call_info |= ZEND_CALL_RELEASE_THIS;
9593 			GC_REFCOUNT(object)++; /* For $this pointer */
9594 		}
9595 
9596 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9597 			if (call_info & ZEND_CALL_CLOSURE) {
9598 				zend_object_release((zend_object*)func->common.prototype);
9599 			}
9600 			if (call_info & ZEND_CALL_RELEASE_THIS) {
9601 				zend_object_release(object);
9602 			}
9603 			HANDLE_EXCEPTION();
9604 		}
9605 
9606 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
9607 			init_func_run_time_cache(&func->op_array);
9608 		}
9609 	} else {
9610 		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);
9611 		efree(error);
9612 
9613 		if (UNEXPECTED(EG(exception))) {
9614 			HANDLE_EXCEPTION();
9615 		}
9616 		func = (zend_function*)&zend_pass_function;
9617 		called_scope = NULL;
9618 		object = NULL;
9619 	}
9620 
9621 	call = zend_vm_stack_push_call_frame(call_info,
9622 		func, opline->extended_value, called_scope, object);
9623 	call->prev_execute_data = EX(call);
9624 	EX(call) = call;
9625 
9626 	ZEND_VM_NEXT_OPCODE();
9627 }
9628 
9629 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9630 {
9631 	USE_OPLINE
9632 	zend_class_entry *ce, *catch_ce;
9633 	zend_object *exception;
9634 	zval *ex;
9635 
9636 	SAVE_OPLINE();
9637 	/* Check whether an exception has been thrown, if not, jump over code */
9638 	zend_exception_restore();
9639 	if (EG(exception) == NULL) {
9640 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
9641 		ZEND_VM_CONTINUE();
9642 	}
9643 	catch_ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
9644 	if (UNEXPECTED(catch_ce == NULL)) {
9645 		catch_ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
9646 
9647 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), catch_ce);
9648 	}
9649 	ce = EG(exception)->ce;
9650 
9651 #ifdef HAVE_DTRACE
9652 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
9653 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
9654 	}
9655 #endif /* HAVE_DTRACE */
9656 
9657 	if (ce != catch_ce) {
9658 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
9659 			if (opline->result.num) {
9660 				zend_throw_exception_internal(NULL);
9661 				HANDLE_EXCEPTION();
9662 			}
9663 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
9664 			ZEND_VM_CONTINUE();
9665 		}
9666 	}
9667 
9668 	exception = EG(exception);
9669 	ex = EX_VAR(opline->op2.var);
9670 	if (UNEXPECTED(Z_ISREF_P(ex))) {
9671 		ex = Z_REFVAL_P(ex);
9672 	}
9673 	zval_ptr_dtor(ex);
9674 	ZVAL_OBJ(ex, EG(exception));
9675 	if (UNEXPECTED(EG(exception) != exception)) {
9676 		GC_REFCOUNT(EG(exception))++;
9677 		HANDLE_EXCEPTION();
9678 	} else {
9679 		EG(exception) = NULL;
9680 		ZEND_VM_NEXT_OPCODE();
9681 	}
9682 }
9683 
9684 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9685 {
9686 	USE_OPLINE
9687 
9688 	zval *op1, *op2, *result;
9689 
9690 	op1 = EX_CONSTANT(opline->op1);
9691 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9692 	do {
9693 		int result;
9694 
9695 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
9696 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
9697 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
9698 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
9699 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
9700 			} else {
9701 				break;
9702 			}
9703 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
9704 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
9705 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
9706 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
9707 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
9708 			} else {
9709 				break;
9710 			}
9711 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9712 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9713 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
9714 					result = 1;
9715 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
9716 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
9717 						result = 0;
9718 					} else {
9719 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
9720 					}
9721 				} else {
9722 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
9723 				}
9724 
9725 			} else {
9726 				break;
9727 			}
9728 		} else {
9729 			break;
9730 		}
9731 		ZEND_VM_SMART_BRANCH(result, 0);
9732 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
9733 		ZEND_VM_NEXT_OPCODE();
9734 	} while (0);
9735 
9736 	SAVE_OPLINE();
9737 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9738 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
9739 	}
9740 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9741 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
9742 	}
9743 	result = EX_VAR(opline->result.var);
9744 	compare_function(result, op1, op2);
9745 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
9746 
9747 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9748 }
9749 
9750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9751 {
9752 	USE_OPLINE
9753 
9754 	zval *expr_ptr, new_expr;
9755 
9756 	SAVE_OPLINE();
9757 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9758 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9759 		expr_ptr = NULL;
9760 		ZVAL_MAKE_REF(expr_ptr);
9761 		Z_ADDREF_P(expr_ptr);
9762 
9763 	} else {
9764 		expr_ptr = EX_CONSTANT(opline->op1);
9765 		if (IS_CONST == IS_TMP_VAR) {
9766 			/* pass */
9767 		} else if (IS_CONST == IS_CONST) {
9768 			if (Z_REFCOUNTED_P(expr_ptr)) {
9769 				Z_ADDREF_P(expr_ptr);
9770 			}
9771 		} else if (IS_CONST == IS_CV) {
9772 			ZVAL_DEREF(expr_ptr);
9773 			if (Z_REFCOUNTED_P(expr_ptr)) {
9774 				Z_ADDREF_P(expr_ptr);
9775 			}
9776 		} else /* if (IS_CONST == IS_VAR) */ {
9777 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9778 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9779 
9780 				expr_ptr = Z_REFVAL_P(expr_ptr);
9781 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
9782 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9783 					expr_ptr = &new_expr;
9784 					efree_size(ref, sizeof(zend_reference));
9785 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9786 					Z_ADDREF_P(expr_ptr);
9787 				}
9788 			}
9789 		}
9790 	}
9791 
9792 	if (IS_CV != IS_UNUSED) {
9793 
9794 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9795 		zend_string *str;
9796 		zend_ulong hval;
9797 
9798 add_again:
9799 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9800 			str = Z_STR_P(offset);
9801 			if (IS_CV != IS_CONST) {
9802 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9803 					goto num_index;
9804 				}
9805 			}
9806 str_index:
9807 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9808 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9809 			hval = Z_LVAL_P(offset);
9810 num_index:
9811 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9812 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9813 			offset = Z_REFVAL_P(offset);
9814 			goto add_again;
9815 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9816 			str = ZSTR_EMPTY_ALLOC();
9817 			goto str_index;
9818 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9819 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9820 			goto num_index;
9821 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9822 			hval = 0;
9823 			goto num_index;
9824 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9825 			hval = 1;
9826 			goto num_index;
9827 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9828 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
9829 			str = ZSTR_EMPTY_ALLOC();
9830 			goto str_index;
9831 		} else {
9832 			zend_error(E_WARNING, "Illegal offset type");
9833 			zval_ptr_dtor(expr_ptr);
9834 		}
9835 
9836 	} else {
9837 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9838 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
9839 			zval_ptr_dtor(expr_ptr);
9840 		}
9841 	}
9842 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9843 }
9844 
9845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9846 {
9847 	zval *array;
9848 	uint32_t size;
9849 	USE_OPLINE
9850 
9851 	array = EX_VAR(opline->result.var);
9852 	if (IS_CONST != IS_UNUSED) {
9853 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9854 	} else {
9855 		size = 0;
9856 	}
9857 	ZVAL_NEW_ARR(array);
9858 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
9859 
9860 	if (IS_CONST != IS_UNUSED) {
9861 		/* Explicitly initialize array as not-packed if flag is set */
9862 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9863 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
9864 		}
9865 	}
9866 
9867 	if (IS_CONST == IS_UNUSED) {
9868 		ZEND_VM_NEXT_OPCODE();
9869 #if 0 || (IS_CONST != IS_UNUSED)
9870 	} else {
9871 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9872 #endif
9873 	}
9874 }
9875 
9876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9877 {
9878 	USE_OPLINE
9879 
9880 	zval *container;
9881 	int result;
9882 	zend_ulong hval;
9883 	zval *offset;
9884 
9885 	SAVE_OPLINE();
9886 	container = EX_CONSTANT(opline->op1);
9887 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
9888 
9889 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9890 		HashTable *ht;
9891 		zval *value;
9892 		zend_string *str;
9893 
9894 isset_dim_obj_array:
9895 		ht = Z_ARRVAL_P(container);
9896 isset_again:
9897 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9898 			str = Z_STR_P(offset);
9899 			if (IS_CV != IS_CONST) {
9900 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9901 					goto num_index_prop;
9902 				}
9903 			}
9904 str_index_prop:
9905 			value = zend_hash_find_ind(ht, str);
9906 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9907 			hval = Z_LVAL_P(offset);
9908 num_index_prop:
9909 			value = zend_hash_index_find(ht, hval);
9910 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
9911 			offset = Z_REFVAL_P(offset);
9912 			goto isset_again;
9913 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9914 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9915 			goto num_index_prop;
9916 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9917 			str = ZSTR_EMPTY_ALLOC();
9918 			goto str_index_prop;
9919 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9920 			hval = 0;
9921 			goto num_index_prop;
9922 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9923 			hval = 1;
9924 			goto num_index_prop;
9925 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9926 			hval = Z_RES_HANDLE_P(offset);
9927 			goto num_index_prop;
9928 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9929 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
9930 			str = ZSTR_EMPTY_ALLOC();
9931 			goto str_index_prop;
9932 		} else {
9933 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
9934 			goto isset_not_found;
9935 		}
9936 
9937 		if (opline->extended_value & ZEND_ISSET) {
9938 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
9939 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
9940 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
9941 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
9942 			result = (value == NULL || !i_zend_is_true(value));
9943 		}
9944 		goto isset_dim_obj_exit;
9945 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9946 		container = Z_REFVAL_P(container);
9947 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9948 			goto isset_dim_obj_array;
9949 		}
9950 	}
9951 
9952 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
9953 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
9954 	}
9955 
9956 	if ((IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
9957 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
9958 			result =
9959 				((opline->extended_value & ZEND_ISSET) == 0) ^
9960 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
9961 		} else {
9962 			zend_error(E_NOTICE, "Trying to check element of non-array");
9963 			goto isset_not_found;
9964 		}
9965 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
9966 		zend_long lval;
9967 
9968 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9969 			lval = Z_LVAL_P(offset);
9970 isset_str_offset:
9971 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
9972 				lval += (zend_long)Z_STRLEN_P(container);
9973 			}
9974 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
9975 				if (opline->extended_value & ZEND_ISSET) {
9976 					result = 1;
9977 				} else {
9978 					result = (Z_STRVAL_P(container)[lval] == '0');
9979 				}
9980 			} else {
9981 				goto isset_not_found;
9982 			}
9983 		} else {
9984 			if (IS_CV & (IS_CV|IS_VAR)) {
9985 				ZVAL_DEREF(offset);
9986 			}
9987 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
9988 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
9989 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
9990 				lval = zval_get_long(offset);
9991 				goto isset_str_offset;
9992 			}
9993 			goto isset_not_found;
9994 		}
9995 	} else {
9996 isset_not_found:
9997 		result = ((opline->extended_value & ZEND_ISSET) == 0);
9998 	}
9999 
10000 isset_dim_obj_exit:
10001 
10002 
10003 	ZEND_VM_SMART_BRANCH(result, 1);
10004 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
10005 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10006 }
10007 
10008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10009 {
10010 	USE_OPLINE
10011 
10012 	zval *container;
10013 	int result;
10014 	zval *offset;
10015 
10016 	SAVE_OPLINE();
10017 	container = EX_CONSTANT(opline->op1);
10018 
10019 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10020 		zend_throw_error(NULL, "Using $this when not in object context");
10021 
10022 		HANDLE_EXCEPTION();
10023 	}
10024 
10025 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
10026 
10027 	if (IS_CONST == IS_CONST ||
10028 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10029 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10030 			container = Z_REFVAL_P(container);
10031 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
10032 				goto isset_no_object;
10033 			}
10034 		} else {
10035 			goto isset_no_object;
10036 		}
10037 	}
10038 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
10039 		zend_error(E_NOTICE, "Trying to check property of non-object");
10040 isset_no_object:
10041 		result = ((opline->extended_value & ZEND_ISSET) == 0);
10042 	} else {
10043 		result =
10044 			((opline->extended_value & ZEND_ISSET) == 0) ^
10045 			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));
10046 	}
10047 
10048 
10049 	ZEND_VM_SMART_BRANCH(result, 1);
10050 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
10051 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10052 }
10053 
10054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10055 {
10056 	USE_OPLINE
10057 
10058 	zend_generator *generator = zend_get_running_generator(execute_data);
10059 
10060 	SAVE_OPLINE();
10061 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10062 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
10063 
10064 
10065 		HANDLE_EXCEPTION();
10066 	}
10067 
10068 	/* Destroy the previously yielded value */
10069 	zval_ptr_dtor(&generator->value);
10070 
10071 	/* Destroy the previously yielded key */
10072 	zval_ptr_dtor(&generator->key);
10073 
10074 	/* Set the new yielded value */
10075 	if (IS_CONST != IS_UNUSED) {
10076 
10077 
10078 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10079 			/* Constants and temporary variables aren't yieldable by reference,
10080 			 * but we still allow them with a notice. */
10081 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
10082 				zval *value;
10083 
10084 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10085 
10086 				value = EX_CONSTANT(opline->op1);
10087 				ZVAL_COPY_VALUE(&generator->value, value);
10088 				if (IS_CONST == IS_CONST) {
10089 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10090 						Z_ADDREF(generator->value);
10091 					}
10092 				}
10093 			} else {
10094 				zval *value_ptr = NULL;
10095 
10096 				/* If a function call result is yielded and the function did
10097 				 * not return by reference we throw a notice. */
10098 				if (IS_CONST == IS_VAR &&
10099 				    (value_ptr == &EG(uninitialized_zval) ||
10100 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
10101 				      !Z_ISREF_P(value_ptr)))) {
10102 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10103 				} else {
10104 					ZVAL_MAKE_REF(value_ptr);
10105 				}
10106 				ZVAL_COPY(&generator->value, value_ptr);
10107 
10108 			}
10109 		} else {
10110 			zval *value = EX_CONSTANT(opline->op1);
10111 
10112 			/* Consts, temporary variables and references need copying */
10113 			if (IS_CONST == IS_CONST) {
10114 				ZVAL_COPY_VALUE(&generator->value, value);
10115 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10116 					Z_ADDREF(generator->value);
10117 				}
10118 			} else if (IS_CONST == IS_TMP_VAR) {
10119 				ZVAL_COPY_VALUE(&generator->value, value);
10120             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10121 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10122 
10123 			} else {
10124 				ZVAL_COPY_VALUE(&generator->value, value);
10125 				if (IS_CONST == IS_CV) {
10126 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10127 				}
10128 			}
10129 		}
10130 	} else {
10131 		/* If no value was specified yield null */
10132 		ZVAL_NULL(&generator->value);
10133 	}
10134 
10135 	/* Set the new yielded key */
10136 	if (IS_CV != IS_UNUSED) {
10137 
10138 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
10139 
10140 		/* Consts, temporary variables and references need copying */
10141 		if (IS_CV == IS_CONST) {
10142 			ZVAL_COPY_VALUE(&generator->key, key);
10143 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
10144 				Z_ADDREF(generator->key);
10145 			}
10146 		} else if (IS_CV == IS_TMP_VAR) {
10147 			ZVAL_COPY_VALUE(&generator->key, key);
10148 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
10149 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
10150 
10151 		} else {
10152 			ZVAL_COPY_VALUE(&generator->key, key);
10153 			if (IS_CV == IS_CV) {
10154 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
10155 			}
10156 		}
10157 
10158 		if (Z_TYPE(generator->key) == IS_LONG
10159 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10160 		) {
10161 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10162 		}
10163 	} else {
10164 		/* If no key was specified we use auto-increment keys */
10165 		generator->largest_used_integer_key++;
10166 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10167 	}
10168 
10169 	if (RETURN_VALUE_USED(opline)) {
10170 		/* If the return value of yield is used set the send
10171 		 * target and initialize it to NULL */
10172 		generator->send_target = EX_VAR(opline->result.var);
10173 		ZVAL_NULL(generator->send_target);
10174 	} else {
10175 		generator->send_target = NULL;
10176 	}
10177 
10178 	/* We increment to the next op, so we are at the correct position when the
10179 	 * generator is resumed. */
10180 	ZEND_VM_INC_OPCODE();
10181 
10182 	/* The GOTO VM uses a local opline variable. We need to set the opline
10183 	 * variable in execute_data so we don't resume at an old position. */
10184 	SAVE_OPLINE();
10185 
10186 	ZEND_VM_RETURN();
10187 }
10188 
10189 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10190 {
10191 	USE_OPLINE
10192 
10193 	zval *container, *dim, *value;
10194 	zend_long offset;
10195 
10196 	container = EX_CONSTANT(opline->op1);
10197 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
10198 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10199 fetch_dim_r_index_array:
10200 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
10201 			offset = Z_LVAL_P(dim);
10202 		} else {
10203 			offset = zval_get_long(dim);
10204 		}
10205 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
10206 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
10207 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10208 			SAVE_OPLINE();
10209 
10210 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10211 		} else {
10212 			ZEND_VM_NEXT_OPCODE();
10213 		}
10214 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
10215 		container = Z_REFVAL_P(container);
10216 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10217 			goto fetch_dim_r_index_array;
10218 		} else {
10219 			goto fetch_dim_r_index_slow;
10220 		}
10221 	} else {
10222 fetch_dim_r_index_slow:
10223 		SAVE_OPLINE();
10224 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
10225 
10226 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10227 	}
10228 
10229 fetch_dim_r_index_undef:
10230 	ZVAL_NULL(EX_VAR(opline->result.var));
10231 	SAVE_OPLINE();
10232 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
10233 
10234 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10235 }
10236 
10237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10238 {
10239 	USE_OPLINE
10240 	zend_free_op free_op2;
10241 	zval *op1, *op2, *result;
10242 
10243 	op1 = EX_CONSTANT(opline->op1);
10244 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10245 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10246 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10247 			result = EX_VAR(opline->result.var);
10248 			fast_long_add_function(result, op1, op2);
10249 			ZEND_VM_NEXT_OPCODE();
10250 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10251 			result = EX_VAR(opline->result.var);
10252 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
10253 			ZEND_VM_NEXT_OPCODE();
10254 		}
10255 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10256 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10257 			result = EX_VAR(opline->result.var);
10258 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
10259 			ZEND_VM_NEXT_OPCODE();
10260 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10261 			result = EX_VAR(opline->result.var);
10262 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
10263 			ZEND_VM_NEXT_OPCODE();
10264 		}
10265 	}
10266 
10267 	SAVE_OPLINE();
10268 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10269 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10270 	}
10271 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10272 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10273 	}
10274 	add_function(EX_VAR(opline->result.var), op1, op2);
10275 
10276 	zval_ptr_dtor_nogc(free_op2);
10277 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10278 }
10279 
10280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10281 {
10282 	USE_OPLINE
10283 	zend_free_op free_op2;
10284 	zval *op1, *op2, *result;
10285 
10286 	op1 = EX_CONSTANT(opline->op1);
10287 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10288 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10289 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10290 			result = EX_VAR(opline->result.var);
10291 			fast_long_sub_function(result, op1, op2);
10292 			ZEND_VM_NEXT_OPCODE();
10293 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10294 			result = EX_VAR(opline->result.var);
10295 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
10296 			ZEND_VM_NEXT_OPCODE();
10297 		}
10298 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10299 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10300 			result = EX_VAR(opline->result.var);
10301 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
10302 			ZEND_VM_NEXT_OPCODE();
10303 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10304 			result = EX_VAR(opline->result.var);
10305 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
10306 			ZEND_VM_NEXT_OPCODE();
10307 		}
10308 	}
10309 
10310 	SAVE_OPLINE();
10311 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10312 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10313 	}
10314 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10315 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10316 	}
10317 	sub_function(EX_VAR(opline->result.var), op1, op2);
10318 
10319 	zval_ptr_dtor_nogc(free_op2);
10320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10321 }
10322 
10323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10324 {
10325 	USE_OPLINE
10326 	zend_free_op free_op2;
10327 	zval *op1, *op2, *result;
10328 
10329 	op1 = EX_CONSTANT(opline->op1);
10330 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10331 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10332 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10333 			zend_long overflow;
10334 
10335 			result = EX_VAR(opline->result.var);
10336 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
10337 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
10338 			ZEND_VM_NEXT_OPCODE();
10339 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10340 			result = EX_VAR(opline->result.var);
10341 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
10342 			ZEND_VM_NEXT_OPCODE();
10343 		}
10344 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10345 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10346 			result = EX_VAR(opline->result.var);
10347 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
10348 			ZEND_VM_NEXT_OPCODE();
10349 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10350 			result = EX_VAR(opline->result.var);
10351 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
10352 			ZEND_VM_NEXT_OPCODE();
10353 		}
10354 	}
10355 
10356 	SAVE_OPLINE();
10357 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10358 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10359 	}
10360 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10361 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10362 	}
10363 	mul_function(EX_VAR(opline->result.var), op1, op2);
10364 
10365 	zval_ptr_dtor_nogc(free_op2);
10366 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10367 }
10368 
10369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10370 {
10371 	USE_OPLINE
10372 	zend_free_op free_op2;
10373 	zval *op1, *op2;
10374 
10375 	SAVE_OPLINE();
10376 	op1 = EX_CONSTANT(opline->op1);
10377 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10378 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
10379 
10380 	zval_ptr_dtor_nogc(free_op2);
10381 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10382 }
10383 
10384 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10385 {
10386 	USE_OPLINE
10387 	zend_free_op free_op2;
10388 	zval *op1, *op2, *result;
10389 
10390 	op1 = EX_CONSTANT(opline->op1);
10391 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10392 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10393 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10394 			result = EX_VAR(opline->result.var);
10395 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
10396 				SAVE_OPLINE();
10397 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
10398 				HANDLE_EXCEPTION();
10399 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
10400 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
10401 				ZVAL_LONG(result, 0);
10402 			} else {
10403 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
10404 			}
10405 			ZEND_VM_NEXT_OPCODE();
10406 		}
10407 	}
10408 
10409 	SAVE_OPLINE();
10410 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10411 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10412 	}
10413 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10414 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10415 	}
10416 	mod_function(EX_VAR(opline->result.var), op1, op2);
10417 
10418 	zval_ptr_dtor_nogc(free_op2);
10419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10420 }
10421 
10422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10423 {
10424 	USE_OPLINE
10425 	zend_free_op free_op2;
10426 	zval *op1, *op2;
10427 
10428 	op1 = EX_CONSTANT(opline->op1);
10429 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10430 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
10431 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
10432 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
10433 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
10434 		ZEND_VM_NEXT_OPCODE();
10435 	}
10436 
10437 	SAVE_OPLINE();
10438 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10439 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10440 	}
10441 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10442 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10443 	}
10444 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
10445 
10446 	zval_ptr_dtor_nogc(free_op2);
10447 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10448 }
10449 
10450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10451 {
10452 	USE_OPLINE
10453 	zend_free_op free_op2;
10454 	zval *op1, *op2;
10455 
10456 	op1 = EX_CONSTANT(opline->op1);
10457 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10458 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
10459 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
10460 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
10461 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
10462 		ZEND_VM_NEXT_OPCODE();
10463 	}
10464 
10465 	SAVE_OPLINE();
10466 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10467 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10468 	}
10469 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10470 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10471 	}
10472 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
10473 
10474 	zval_ptr_dtor_nogc(free_op2);
10475 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10476 }
10477 
10478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10479 {
10480 	USE_OPLINE
10481 	zend_free_op free_op2;
10482 	zval *op1, *op2;
10483 
10484 	SAVE_OPLINE();
10485 	op1 = EX_CONSTANT(opline->op1);
10486 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10487 	pow_function(EX_VAR(opline->result.var), op1, op2);
10488 
10489 	zval_ptr_dtor_nogc(free_op2);
10490 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10491 }
10492 
10493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10494 {
10495 	USE_OPLINE
10496 	zend_free_op free_op2;
10497 	zval *op1, *op2;
10498 
10499 	SAVE_OPLINE();
10500 	op1 = EX_CONSTANT(opline->op1);
10501 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10502 
10503 	do {
10504 		if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
10505 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
10506 			zend_string *op1_str = Z_STR_P(op1);
10507 			zend_string *op2_str = Z_STR_P(op2);
10508 			zend_string *str;
10509 
10510 			if (IS_CONST != IS_CONST) {
10511 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10512 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
10513 
10514 					break;
10515 				}
10516 			}
10517 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
10518 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10519 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
10520 
10521 					break;
10522 				}
10523 			}
10524 			if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
10525 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
10526 			    size_t len = ZSTR_LEN(op1_str);
10527 
10528 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
10529 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10530 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10531 				break;
10532 			} else {
10533 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10534 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10535 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10536 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10537 			}
10538 		} else {
10539 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10540 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10541 			}
10542 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10543 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10544 			}
10545 			concat_function(EX_VAR(opline->result.var), op1, op2);
10546 		}
10547 
10548 	} while (0);
10549 	zval_ptr_dtor_nogc(free_op2);
10550 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10551 }
10552 
10553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10554 {
10555 	USE_OPLINE
10556 	zend_free_op free_op2;
10557 	zval *op1, *op2, *result;
10558 
10559 	op1 = EX_CONSTANT(opline->op1);
10560 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10561 	do {
10562 		int result;
10563 
10564 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
10565 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10566 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
10567 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10568 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
10569 			} else {
10570 				break;
10571 			}
10572 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
10573 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10574 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
10575 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10576 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
10577 			} else {
10578 				break;
10579 			}
10580 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
10581 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
10582 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
10583 					result = 1;
10584 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
10585 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
10586 						result = 0;
10587 					} else {
10588 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
10589 					}
10590 				} else {
10591 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
10592 				}
10593 
10594 				zval_ptr_dtor_nogc(free_op2);
10595 			} else {
10596 				break;
10597 			}
10598 		} else {
10599 			break;
10600 		}
10601 		ZEND_VM_SMART_BRANCH(result, 0);
10602 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10603 		ZEND_VM_NEXT_OPCODE();
10604 	} while (0);
10605 
10606 	SAVE_OPLINE();
10607 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10608 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10609 	}
10610 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10611 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10612 	}
10613 	result = EX_VAR(opline->result.var);
10614 	compare_function(result, op1, op2);
10615 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
10616 
10617 	zval_ptr_dtor_nogc(free_op2);
10618 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10619 }
10620 
10621 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10622 {
10623 	USE_OPLINE
10624 	zend_free_op free_op2;
10625 	zval *op1, *op2, *result;
10626 
10627 	op1 = EX_CONSTANT(opline->op1);
10628 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10629 	do {
10630 		int result;
10631 
10632 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
10633 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10634 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
10635 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10636 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
10637 			} else {
10638 				break;
10639 			}
10640 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
10641 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
10642 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
10643 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
10644 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
10645 			} else {
10646 				break;
10647 			}
10648 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
10649 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
10650 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
10651 					result = 0;
10652 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
10653 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
10654 						result = 1;
10655 					} else {
10656 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
10657 					}
10658 				} else {
10659 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
10660 				}
10661 
10662 				zval_ptr_dtor_nogc(free_op2);
10663 			} else {
10664 				break;
10665 			}
10666 		} else {
10667 			break;
10668 		}
10669 		ZEND_VM_SMART_BRANCH(result, 0);
10670 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10671 		ZEND_VM_NEXT_OPCODE();
10672 	} while (0);
10673 
10674 	SAVE_OPLINE();
10675 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10676 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10677 	}
10678 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10679 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10680 	}
10681 	result = EX_VAR(opline->result.var);
10682 	compare_function(result, op1, op2);
10683 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
10684 
10685 	zval_ptr_dtor_nogc(free_op2);
10686 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10687 }
10688 
10689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10690 {
10691 	USE_OPLINE
10692 	zend_free_op free_op2;
10693 	zval *op1, *op2, *result;
10694 
10695 	op1 = EX_CONSTANT(opline->op1);
10696 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10697 	do {
10698 		int result;
10699 
10700 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10701 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10702 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
10703 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10704 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
10705 			} else {
10706 				break;
10707 			}
10708 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10709 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10710 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
10711 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10712 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
10713 			} else {
10714 				break;
10715 			}
10716 		} else {
10717 			break;
10718 		}
10719 		ZEND_VM_SMART_BRANCH(result, 0);
10720 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10721 		ZEND_VM_NEXT_OPCODE();
10722 	} while (0);
10723 
10724 	SAVE_OPLINE();
10725 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10726 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10727 	}
10728 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10729 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10730 	}
10731 	result = EX_VAR(opline->result.var);
10732 	compare_function(result, op1, op2);
10733 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
10734 
10735 	zval_ptr_dtor_nogc(free_op2);
10736 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10737 }
10738 
10739 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10740 {
10741 	USE_OPLINE
10742 	zend_free_op free_op2;
10743 	zval *op1, *op2, *result;
10744 
10745 	op1 = EX_CONSTANT(opline->op1);
10746 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10747 	do {
10748 		int result;
10749 
10750 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
10751 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10752 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
10753 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10754 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
10755 			} else {
10756 				break;
10757 			}
10758 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
10759 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
10760 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
10761 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10762 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
10763 			} else {
10764 				break;
10765 			}
10766 		} else {
10767 			break;
10768 		}
10769 		ZEND_VM_SMART_BRANCH(result, 0);
10770 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
10771 		ZEND_VM_NEXT_OPCODE();
10772 	} while (0);
10773 
10774 	SAVE_OPLINE();
10775 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10776 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10777 	}
10778 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10779 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10780 	}
10781 	result = EX_VAR(opline->result.var);
10782 	compare_function(result, op1, op2);
10783 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
10784 
10785 	zval_ptr_dtor_nogc(free_op2);
10786 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10787 }
10788 
10789 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10790 {
10791 	USE_OPLINE
10792 	zend_free_op free_op2;
10793 	zval *op1, *op2;
10794 
10795 	SAVE_OPLINE();
10796 	op1 = EX_CONSTANT(opline->op1);
10797 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10798 	compare_function(EX_VAR(opline->result.var), op1, op2);
10799 
10800 	zval_ptr_dtor_nogc(free_op2);
10801 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10802 }
10803 
10804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10805 {
10806 	USE_OPLINE
10807 	zend_free_op free_op2;
10808 	zval *op1, *op2;
10809 
10810 	op1 = EX_CONSTANT(opline->op1);
10811 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10812 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
10813 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10814 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
10815 		ZEND_VM_NEXT_OPCODE();
10816 	}
10817 
10818 	SAVE_OPLINE();
10819 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10820 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10821 	}
10822 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10823 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10824 	}
10825 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
10826 
10827 	zval_ptr_dtor_nogc(free_op2);
10828 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10829 }
10830 
10831 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10832 {
10833 	USE_OPLINE
10834 	zend_free_op free_op2;
10835 	zval *op1, *op2;
10836 
10837 	op1 = EX_CONSTANT(opline->op1);
10838 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10839 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
10840 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10841 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
10842 		ZEND_VM_NEXT_OPCODE();
10843 	}
10844 
10845 	SAVE_OPLINE();
10846 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10847 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10848 	}
10849 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10850 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10851 	}
10852 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
10853 
10854 	zval_ptr_dtor_nogc(free_op2);
10855 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10856 }
10857 
10858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10859 {
10860 	USE_OPLINE
10861 	zend_free_op free_op2;
10862 	zval *op1, *op2;
10863 
10864 	op1 = EX_CONSTANT(opline->op1);
10865 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10866 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
10867 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
10868 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
10869 		ZEND_VM_NEXT_OPCODE();
10870 	}
10871 
10872 	SAVE_OPLINE();
10873 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
10874 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
10875 	}
10876 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
10877 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
10878 	}
10879 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
10880 
10881 	zval_ptr_dtor_nogc(free_op2);
10882 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10883 }
10884 
10885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10886 {
10887 	USE_OPLINE
10888 	zend_free_op free_op2;
10889 	zval *op1, *op2;
10890 
10891 	SAVE_OPLINE();
10892 	op1 = EX_CONSTANT(opline->op1);
10893 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10894 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
10895 
10896 	zval_ptr_dtor_nogc(free_op2);
10897 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10898 }
10899 
10900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10901 {
10902 	USE_OPLINE
10903 	zend_free_op free_op2;
10904 	zval *container, *dim, *value, *result;
10905 
10906 	SAVE_OPLINE();
10907 	container = EX_CONSTANT(opline->op1);
10908 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
10909 	if (IS_CONST != IS_CONST) {
10910 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10911 fetch_dim_r_array:
10912 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
10913 			result = EX_VAR(opline->result.var);
10914 			ZVAL_COPY_UNREF(result, value);
10915 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
10916 			container = Z_REFVAL_P(container);
10917 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10918 				goto fetch_dim_r_array;
10919 			} else {
10920 				goto fetch_dim_r_slow;
10921 			}
10922 		} else {
10923 fetch_dim_r_slow:
10924 			result = EX_VAR(opline->result.var);
10925 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
10926 		}
10927 	} else {
10928 		result = EX_VAR(opline->result.var);
10929 		zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
10930 	}
10931 	zval_ptr_dtor_nogc(free_op2);
10932 
10933 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10934 }
10935 
10936 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10937 {
10938 	USE_OPLINE
10939 	zend_free_op free_op2;
10940 	zval *container;
10941 
10942 	SAVE_OPLINE();
10943 	container = EX_CONSTANT(opline->op1);
10944 	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));
10945 	zval_ptr_dtor_nogc(free_op2);
10946 
10947 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10948 }
10949 
10950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10951 {
10952 	USE_OPLINE
10953 	zval *container;
10954 	zend_free_op free_op1, free_op2;
10955 
10956 	SAVE_OPLINE();
10957 
10958 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
10959         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10960             zend_throw_error(NULL, "Cannot use temporary expression in write context");
10961 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10962 
10963 			HANDLE_EXCEPTION();
10964         }
10965 		container = NULL;
10966 		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));
10967 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
10968 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
10969 		}
10970 		zval_ptr_dtor_nogc(free_op2);
10971 
10972 	} else {
10973 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
10974 			zend_throw_error(NULL, "Cannot use [] for reading");
10975 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10976 
10977 			HANDLE_EXCEPTION();
10978 		}
10979 		container = EX_CONSTANT(opline->op1);
10980 		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));
10981 		zval_ptr_dtor_nogc(free_op2);
10982 
10983 	}
10984 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10985 }
10986 
10987 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10988 {
10989 	USE_OPLINE
10990 
10991 	zval *container;
10992 	zend_free_op free_op2;
10993 	zval *offset;
10994 
10995 	SAVE_OPLINE();
10996 	container = EX_CONSTANT(opline->op1);
10997 
10998 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10999 		zend_throw_error(NULL, "Using $this when not in object context");
11000 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11001 		HANDLE_EXCEPTION();
11002 	}
11003 
11004 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11005 
11006 	if (IS_CONST == IS_CONST ||
11007 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11008 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11009 			container = Z_REFVAL_P(container);
11010 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11011 				goto fetch_obj_r_no_object;
11012 			}
11013 		} else {
11014 			goto fetch_obj_r_no_object;
11015 		}
11016 	}
11017 
11018 	/* here we are sure we are dealing with an object */
11019 	do {
11020 		zend_object *zobj = Z_OBJ_P(container);
11021 		zval *retval;
11022 
11023 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11024 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
11025 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
11026 
11027 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
11028 				retval = OBJ_PROP(zobj, prop_offset);
11029 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11030 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
11031 					break;
11032 				}
11033 			} else if (EXPECTED(zobj->properties != NULL)) {
11034 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
11035 				if (EXPECTED(retval)) {
11036 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
11037 					break;
11038 				}
11039 			}
11040 		}
11041 
11042 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
11043 fetch_obj_r_no_object:
11044 			zend_error(E_NOTICE, "Trying to get property of non-object");
11045 			ZVAL_NULL(EX_VAR(opline->result.var));
11046 		} else {
11047 			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));
11048 
11049 			if (retval != EX_VAR(opline->result.var)) {
11050 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
11051 			}
11052 		}
11053 	} while (0);
11054 
11055 	zval_ptr_dtor_nogc(free_op2);
11056 
11057 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11058 }
11059 
11060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11061 {
11062 	USE_OPLINE
11063 
11064 	zval *container;
11065 	zend_free_op free_op2;
11066 	zval *offset;
11067 
11068 	SAVE_OPLINE();
11069 	container = EX_CONSTANT(opline->op1);
11070 
11071 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11072 		zend_throw_error(NULL, "Using $this when not in object context");
11073 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11074 		HANDLE_EXCEPTION();
11075 	}
11076 
11077 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11078 
11079 	if (IS_CONST == IS_CONST ||
11080 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11081 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11082 			container = Z_REFVAL_P(container);
11083 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11084 				goto fetch_obj_is_no_object;
11085 			}
11086 		} else {
11087 			goto fetch_obj_is_no_object;
11088 		}
11089 	}
11090 
11091 	/* here we are sure we are dealing with an object */
11092 	do {
11093 		zend_object *zobj = Z_OBJ_P(container);
11094 		zval *retval;
11095 
11096 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11097 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
11098 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
11099 
11100 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
11101 				retval = OBJ_PROP(zobj, prop_offset);
11102 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11103 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
11104 					break;
11105 				}
11106 			} else if (EXPECTED(zobj->properties != NULL)) {
11107 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
11108 				if (EXPECTED(retval)) {
11109 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
11110 					break;
11111 				}
11112 			}
11113 		}
11114 
11115 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
11116 fetch_obj_is_no_object:
11117 			ZVAL_NULL(EX_VAR(opline->result.var));
11118 		} else {
11119 
11120 			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));
11121 
11122 			if (retval != EX_VAR(opline->result.var)) {
11123 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
11124 			}
11125 		}
11126 	} while (0);
11127 
11128 	zval_ptr_dtor_nogc(free_op2);
11129 
11130 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11131 }
11132 
11133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11134 {
11135 	USE_OPLINE
11136 	zval *container;
11137 
11138 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
11139 		/* Behave like FETCH_OBJ_W */
11140 		zend_free_op free_op1, free_op2;
11141 		zval *property;
11142 
11143 		SAVE_OPLINE();
11144 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11145 		container = NULL;
11146 
11147 		if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11148 			zend_throw_error(NULL, "Using $this when not in object context");
11149 			zval_ptr_dtor_nogc(free_op2);
11150 			HANDLE_EXCEPTION();
11151 		}
11152 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11153 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
11154 			zval_ptr_dtor_nogc(free_op2);
11155 
11156 			HANDLE_EXCEPTION();
11157 		}
11158 		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);
11159 		zval_ptr_dtor_nogc(free_op2);
11160 		if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
11161 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
11162 		}
11163 
11164 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11165 	} else {
11166 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11167 	}
11168 }
11169 
11170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11171 {
11172 	USE_OPLINE
11173 	zend_free_op free_op2;
11174 	zval *container;
11175 
11176 	SAVE_OPLINE();
11177 	container = EX_CONSTANT(opline->op1);
11178 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
11179 	zval_ptr_dtor_nogc(free_op2);
11180 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11181 }
11182 
11183 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11184 {
11185 	USE_OPLINE
11186 	zend_free_op free_op2;
11187 	zval *op1, *op2;
11188 	zend_string *op1_str, *op2_str, *str;
11189 
11190 	SAVE_OPLINE();
11191 	op1 = EX_CONSTANT(opline->op1);
11192 	if (IS_CONST == IS_CONST) {
11193 		op1_str = Z_STR_P(op1);
11194 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11195 		op1_str = zend_string_copy(Z_STR_P(op1));
11196 	} else {
11197 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11198 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
11199 		}
11200 		op1_str = _zval_get_string_func(op1);
11201 	}
11202 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11203 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
11204 		op2_str = Z_STR_P(op2);
11205 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11206 		op2_str = zend_string_copy(Z_STR_P(op2));
11207 	} else {
11208 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11209 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
11210 		}
11211 		op2_str = _zval_get_string_func(op2);
11212 	}
11213 	do {
11214 		if (IS_CONST != IS_CONST) {
11215 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11216 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
11217 					zend_string_addref(op2_str);
11218 				}
11219 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11220 				zend_string_release(op1_str);
11221 				break;
11222 			}
11223 		}
11224 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11225 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11226 				if (IS_CONST == IS_CONST) {
11227 					zend_string_addref(op1_str);
11228 				}
11229 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11230 				zend_string_release(op2_str);
11231 				break;
11232 			}
11233 		}
11234 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11235 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11236 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11237 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11238 		if (IS_CONST != IS_CONST) {
11239 			zend_string_release(op1_str);
11240 		}
11241 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11242 			zend_string_release(op2_str);
11243 		}
11244 	} while (0);
11245 
11246 	zval_ptr_dtor_nogc(free_op2);
11247 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11248 }
11249 
11250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11251 {
11252 	USE_OPLINE
11253 	zval *function_name;
11254 	zend_free_op free_op2;
11255 	zval *object;
11256 	zend_function *fbc;
11257 	zend_class_entry *called_scope;
11258 	zend_object *obj;
11259 	zend_execute_data *call;
11260 	uint32_t call_info;
11261 
11262 	SAVE_OPLINE();
11263 
11264 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11265 
11266 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
11267 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11268 		do {
11269 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11270 				function_name = Z_REFVAL_P(function_name);
11271 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11272 					break;
11273 				}
11274 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11275 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
11276 				if (UNEXPECTED(EG(exception) != NULL)) {
11277 					HANDLE_EXCEPTION();
11278 				}
11279 			}
11280 			zend_throw_error(NULL, "Method name must be a string");
11281 			zval_ptr_dtor_nogc(free_op2);
11282 
11283 			HANDLE_EXCEPTION();
11284 		} while (0);
11285 	}
11286 
11287 	object = EX_CONSTANT(opline->op1);
11288 
11289 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11290 		zend_throw_error(NULL, "Using $this when not in object context");
11291 		zval_ptr_dtor_nogc(free_op2);
11292 		HANDLE_EXCEPTION();
11293 	}
11294 
11295 	if (IS_CONST != IS_UNUSED) {
11296 		do {
11297 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
11298 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11299 					object = Z_REFVAL_P(object);
11300 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11301 						break;
11302 					}
11303 				}
11304 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11305 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
11306 					if (UNEXPECTED(EG(exception) != NULL)) {
11307 						zval_ptr_dtor_nogc(free_op2);
11308 						HANDLE_EXCEPTION();
11309 					}
11310 				}
11311 				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)));
11312 				zval_ptr_dtor_nogc(free_op2);
11313 
11314 				HANDLE_EXCEPTION();
11315 			}
11316 		} while (0);
11317 	}
11318 
11319 	obj = Z_OBJ_P(object);
11320 	called_scope = obj->ce;
11321 
11322 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
11323 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
11324 	    zend_object *orig_obj = obj;
11325 
11326 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
11327 			zend_throw_error(NULL, "Object does not support method calls");
11328 			zval_ptr_dtor_nogc(free_op2);
11329 
11330 			HANDLE_EXCEPTION();
11331 		}
11332 
11333 		/* First, locate the function. */
11334 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
11335 		if (UNEXPECTED(fbc == NULL)) {
11336 			if (EXPECTED(!EG(exception))) {
11337 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
11338 			}
11339 			zval_ptr_dtor_nogc(free_op2);
11340 
11341 			HANDLE_EXCEPTION();
11342 		}
11343 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11344 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
11345 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11346 		    EXPECTED(obj == orig_obj)) {
11347 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
11348 		}
11349 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
11350 			init_func_run_time_cache(&fbc->op_array);
11351 		}
11352 	}
11353 
11354 	call_info = ZEND_CALL_NESTED_FUNCTION;
11355 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
11356 		obj = NULL;
11357 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
11358 		/* CV may be changed indirectly (e.g. when it's a reference) */
11359 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
11360 		GC_REFCOUNT(obj)++; /* For $this pointer */
11361 	}
11362 
11363 	zval_ptr_dtor_nogc(free_op2);
11364 
11365 	if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
11366 		HANDLE_EXCEPTION();
11367 	}
11368 
11369 	call = zend_vm_stack_push_call_frame(call_info,
11370 		fbc, opline->extended_value, called_scope, obj);
11371 	call->prev_execute_data = EX(call);
11372 	EX(call) = call;
11373 
11374 	ZEND_VM_NEXT_OPCODE();
11375 }
11376 
11377 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11378 {
11379 	USE_OPLINE
11380 	zval *function_name;
11381 	zend_class_entry *ce;
11382 	zend_object *object;
11383 	zend_function *fbc;
11384 	zend_execute_data *call;
11385 
11386 	SAVE_OPLINE();
11387 
11388 	if (IS_CONST == IS_CONST) {
11389 		/* no function found. try a static method in class */
11390 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
11391 		if (UNEXPECTED(ce == NULL)) {
11392 			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);
11393 			if (UNEXPECTED(ce == NULL)) {
11394 				ZEND_ASSERT(EG(exception));
11395 				HANDLE_EXCEPTION();
11396 			}
11397 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
11398 		}
11399 	} else if (IS_CONST == IS_UNUSED) {
11400 		ce = zend_fetch_class(NULL, opline->op1.num);
11401 		if (UNEXPECTED(ce == NULL)) {
11402 			ZEND_ASSERT(EG(exception));
11403 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11404 			HANDLE_EXCEPTION();
11405 		}
11406 	} else {
11407 		ce = Z_CE_P(EX_VAR(opline->op1.var));
11408 	}
11409 
11410 	if (IS_CONST == IS_CONST &&
11411 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
11412 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
11413 		/* nothing to do */
11414 	} else if (IS_CONST != IS_CONST &&
11415 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
11416 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
11417 		/* do nothing */
11418 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
11419 		zend_free_op free_op2;
11420 
11421 		function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11422 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11423 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11424 				do {
11425 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
11426 						function_name = Z_REFVAL_P(function_name);
11427 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11428 							break;
11429 						}
11430 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11431 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
11432 						if (UNEXPECTED(EG(exception) != NULL)) {
11433 							HANDLE_EXCEPTION();
11434 						}
11435 					}
11436 					zend_throw_error(NULL, "Function name must be a string");
11437 					zval_ptr_dtor_nogc(free_op2);
11438 					HANDLE_EXCEPTION();
11439 				} while (0);
11440  			}
11441 		}
11442 
11443 		if (ce->get_static_method) {
11444 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
11445 		} else {
11446 			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));
11447 		}
11448 		if (UNEXPECTED(fbc == NULL)) {
11449 			if (EXPECTED(!EG(exception))) {
11450 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
11451 			}
11452 			zval_ptr_dtor_nogc(free_op2);
11453 			HANDLE_EXCEPTION();
11454 		}
11455 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
11456 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
11457 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
11458 			if (IS_CONST == IS_CONST) {
11459 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
11460 			} else {
11461 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
11462 			}
11463 		}
11464 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
11465 			init_func_run_time_cache(&fbc->op_array);
11466 		}
11467 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11468 			zval_ptr_dtor_nogc(free_op2);
11469 		}
11470 	} else {
11471 		if (UNEXPECTED(ce->constructor == NULL)) {
11472 			zend_throw_error(NULL, "Cannot call constructor");
11473 			HANDLE_EXCEPTION();
11474 		}
11475 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
11476 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
11477 			HANDLE_EXCEPTION();
11478 		}
11479 		fbc = ce->constructor;
11480 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
11481 			init_func_run_time_cache(&fbc->op_array);
11482 		}
11483 	}
11484 
11485 	object = NULL;
11486 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
11487 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
11488 			object = Z_OBJ(EX(This));
11489 			ce = object->ce;
11490 		} else {
11491 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
11492 				/* Allowed for PHP 4 compatibility. */
11493 				zend_error(
11494 					E_DEPRECATED,
11495 					"Non-static method %s::%s() should not be called statically",
11496 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
11497 				if (UNEXPECTED(EG(exception) != NULL)) {
11498 					HANDLE_EXCEPTION();
11499 				}
11500 			} else {
11501 				/* An internal function assumes $this is present and won't check that.
11502 				 * So PHP would crash by allowing the call. */
11503 				zend_throw_error(
11504 					zend_ce_error,
11505 					"Non-static method %s::%s() cannot be called statically",
11506 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
11507 				HANDLE_EXCEPTION();
11508 			}
11509 		}
11510 	}
11511 
11512 	if (IS_CONST == IS_UNUSED) {
11513 		/* previous opcode is ZEND_FETCH_CLASS */
11514 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
11515 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
11516 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
11517 				ce = Z_OBJCE(EX(This));
11518 			} else {
11519 				ce = Z_CE(EX(This));
11520 			}
11521 		}
11522 	}
11523 
11524 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
11525 		fbc, opline->extended_value, ce, object);
11526 	call->prev_execute_data = EX(call);
11527 	EX(call) = call;
11528 
11529 	ZEND_VM_NEXT_OPCODE();
11530 }
11531 
11532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11533 {
11534 	USE_OPLINE
11535 	zend_free_op free_op2;
11536 	zval *function_name;
11537 	zend_fcall_info_cache fcc;
11538 	char *error = NULL;
11539 	zend_function *func;
11540 	zend_class_entry *called_scope;
11541 	zend_object *object;
11542 	zend_execute_data *call;
11543 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
11544 
11545 	SAVE_OPLINE();
11546 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11547 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
11548 		func = fcc.function_handler;
11549 		called_scope = fcc.called_scope;
11550 		object = fcc.object;
11551 		if (error) {
11552 			efree(error);
11553 			/* This is the only soft error is_callable() can generate */
11554 			zend_error(E_DEPRECATED,
11555 				"Non-static method %s::%s() should not be called statically",
11556 				ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
11557 			if (UNEXPECTED(EG(exception) != NULL)) {
11558 				zval_ptr_dtor_nogc(free_op2);
11559 				HANDLE_EXCEPTION();
11560 			}
11561 		}
11562 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
11563 			/* Delay closure destruction until its invocation */
11564 			if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) {
11565 				ZVAL_DEREF(function_name);
11566 			}
11567 			ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
11568 			GC_REFCOUNT((zend_object*)func->common.prototype)++;
11569 			call_info |= ZEND_CALL_CLOSURE;
11570 		} else if (object) {
11571 			call_info |= ZEND_CALL_RELEASE_THIS;
11572 			GC_REFCOUNT(object)++; /* For $this pointer */
11573 		}
11574 
11575 		zval_ptr_dtor_nogc(free_op2);
11576 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
11577 			if (call_info & ZEND_CALL_CLOSURE) {
11578 				zend_object_release((zend_object*)func->common.prototype);
11579 			}
11580 			if (call_info & ZEND_CALL_RELEASE_THIS) {
11581 				zend_object_release(object);
11582 			}
11583 			HANDLE_EXCEPTION();
11584 		}
11585 
11586 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) {
11587 			init_func_run_time_cache(&func->op_array);
11588 		}
11589 	} else {
11590 		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);
11591 		efree(error);
11592 		zval_ptr_dtor_nogc(free_op2);
11593 		if (UNEXPECTED(EG(exception))) {
11594 			HANDLE_EXCEPTION();
11595 		}
11596 		func = (zend_function*)&zend_pass_function;
11597 		called_scope = NULL;
11598 		object = NULL;
11599 	}
11600 
11601 	call = zend_vm_stack_push_call_frame(call_info,
11602 		func, opline->extended_value, called_scope, object);
11603 	call->prev_execute_data = EX(call);
11604 	EX(call) = call;
11605 
11606 	ZEND_VM_NEXT_OPCODE();
11607 }
11608 
11609 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11610 {
11611 	USE_OPLINE
11612 	zend_free_op free_op2;
11613 	zval *op1, *op2, *result;
11614 
11615 	op1 = EX_CONSTANT(opline->op1);
11616 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11617 	do {
11618 		int result;
11619 
11620 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
11621 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
11622 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
11623 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
11624 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
11625 			} else {
11626 				break;
11627 			}
11628 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
11629 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
11630 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
11631 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
11632 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
11633 			} else {
11634 				break;
11635 			}
11636 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11637 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11638 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
11639 					result = 1;
11640 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
11641 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
11642 						result = 0;
11643 					} else {
11644 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
11645 					}
11646 				} else {
11647 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
11648 				}
11649 				zval_ptr_dtor_nogc(free_op2);
11650 			} else {
11651 				break;
11652 			}
11653 		} else {
11654 			break;
11655 		}
11656 		ZEND_VM_SMART_BRANCH(result, 0);
11657 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
11658 		ZEND_VM_NEXT_OPCODE();
11659 	} while (0);
11660 
11661 	SAVE_OPLINE();
11662 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11663 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
11664 	}
11665 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11666 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
11667 	}
11668 	result = EX_VAR(opline->result.var);
11669 	compare_function(result, op1, op2);
11670 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
11671 	zval_ptr_dtor_nogc(free_op2);
11672 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11673 }
11674 
11675 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11676 {
11677 	USE_OPLINE
11678 
11679 	zval *expr_ptr, new_expr;
11680 
11681 	SAVE_OPLINE();
11682 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
11683 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
11684 		expr_ptr = NULL;
11685 		ZVAL_MAKE_REF(expr_ptr);
11686 		Z_ADDREF_P(expr_ptr);
11687 
11688 	} else {
11689 		expr_ptr = EX_CONSTANT(opline->op1);
11690 		if (IS_CONST == IS_TMP_VAR) {
11691 			/* pass */
11692 		} else if (IS_CONST == IS_CONST) {
11693 			if (Z_REFCOUNTED_P(expr_ptr)) {
11694 				Z_ADDREF_P(expr_ptr);
11695 			}
11696 		} else if (IS_CONST == IS_CV) {
11697 			ZVAL_DEREF(expr_ptr);
11698 			if (Z_REFCOUNTED_P(expr_ptr)) {
11699 				Z_ADDREF_P(expr_ptr);
11700 			}
11701 		} else /* if (IS_CONST == IS_VAR) */ {
11702 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
11703 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
11704 
11705 				expr_ptr = Z_REFVAL_P(expr_ptr);
11706 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
11707 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
11708 					expr_ptr = &new_expr;
11709 					efree_size(ref, sizeof(zend_reference));
11710 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
11711 					Z_ADDREF_P(expr_ptr);
11712 				}
11713 			}
11714 		}
11715 	}
11716 
11717 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
11718 		zend_free_op free_op2;
11719 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11720 		zend_string *str;
11721 		zend_ulong hval;
11722 
11723 add_again:
11724 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11725 			str = Z_STR_P(offset);
11726 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11727 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11728 					goto num_index;
11729 				}
11730 			}
11731 str_index:
11732 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
11733 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11734 			hval = Z_LVAL_P(offset);
11735 num_index:
11736 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
11737 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
11738 			offset = Z_REFVAL_P(offset);
11739 			goto add_again;
11740 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11741 			str = ZSTR_EMPTY_ALLOC();
11742 			goto str_index;
11743 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11744 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
11745 			goto num_index;
11746 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11747 			hval = 0;
11748 			goto num_index;
11749 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11750 			hval = 1;
11751 			goto num_index;
11752 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11753 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11754 			str = ZSTR_EMPTY_ALLOC();
11755 			goto str_index;
11756 		} else {
11757 			zend_error(E_WARNING, "Illegal offset type");
11758 			zval_ptr_dtor(expr_ptr);
11759 		}
11760 		zval_ptr_dtor_nogc(free_op2);
11761 	} else {
11762 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
11763 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
11764 			zval_ptr_dtor(expr_ptr);
11765 		}
11766 	}
11767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11768 }
11769 
11770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11771 {
11772 	zval *array;
11773 	uint32_t size;
11774 	USE_OPLINE
11775 
11776 	array = EX_VAR(opline->result.var);
11777 	if (IS_CONST != IS_UNUSED) {
11778 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
11779 	} else {
11780 		size = 0;
11781 	}
11782 	ZVAL_NEW_ARR(array);
11783 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
11784 
11785 	if (IS_CONST != IS_UNUSED) {
11786 		/* Explicitly initialize array as not-packed if flag is set */
11787 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
11788 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
11789 		}
11790 	}
11791 
11792 	if (IS_CONST == IS_UNUSED) {
11793 		ZEND_VM_NEXT_OPCODE();
11794 #if 0 || (IS_CONST != IS_UNUSED)
11795 	} else {
11796 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11797 #endif
11798 	}
11799 }
11800 
11801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11802 {
11803 	USE_OPLINE
11804 	zend_free_op free_op2;
11805 	zval *container;
11806 	int result;
11807 	zend_ulong hval;
11808 	zval *offset;
11809 
11810 	SAVE_OPLINE();
11811 	container = EX_CONSTANT(opline->op1);
11812 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11813 
11814 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11815 		HashTable *ht;
11816 		zval *value;
11817 		zend_string *str;
11818 
11819 isset_dim_obj_array:
11820 		ht = Z_ARRVAL_P(container);
11821 isset_again:
11822 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
11823 			str = Z_STR_P(offset);
11824 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
11825 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
11826 					goto num_index_prop;
11827 				}
11828 			}
11829 str_index_prop:
11830 			value = zend_hash_find_ind(ht, str);
11831 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11832 			hval = Z_LVAL_P(offset);
11833 num_index_prop:
11834 			value = zend_hash_index_find(ht, hval);
11835 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
11836 			offset = Z_REFVAL_P(offset);
11837 			goto isset_again;
11838 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
11839 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
11840 			goto num_index_prop;
11841 		} else if (Z_TYPE_P(offset) == IS_NULL) {
11842 			str = ZSTR_EMPTY_ALLOC();
11843 			goto str_index_prop;
11844 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
11845 			hval = 0;
11846 			goto num_index_prop;
11847 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
11848 			hval = 1;
11849 			goto num_index_prop;
11850 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
11851 			hval = Z_RES_HANDLE_P(offset);
11852 			goto num_index_prop;
11853 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
11854 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11855 			str = ZSTR_EMPTY_ALLOC();
11856 			goto str_index_prop;
11857 		} else {
11858 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
11859 			goto isset_not_found;
11860 		}
11861 
11862 		if (opline->extended_value & ZEND_ISSET) {
11863 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
11864 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
11865 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
11866 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
11867 			result = (value == NULL || !i_zend_is_true(value));
11868 		}
11869 		goto isset_dim_obj_exit;
11870 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11871 		container = Z_REFVAL_P(container);
11872 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11873 			goto isset_dim_obj_array;
11874 		}
11875 	}
11876 
11877 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
11878 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
11879 	}
11880 
11881 	if ((IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
11882 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
11883 			result =
11884 				((opline->extended_value & ZEND_ISSET) == 0) ^
11885 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
11886 		} else {
11887 			zend_error(E_NOTICE, "Trying to check element of non-array");
11888 			goto isset_not_found;
11889 		}
11890 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
11891 		zend_long lval;
11892 
11893 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
11894 			lval = Z_LVAL_P(offset);
11895 isset_str_offset:
11896 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
11897 				lval += (zend_long)Z_STRLEN_P(container);
11898 			}
11899 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
11900 				if (opline->extended_value & ZEND_ISSET) {
11901 					result = 1;
11902 				} else {
11903 					result = (Z_STRVAL_P(container)[lval] == '0');
11904 				}
11905 			} else {
11906 				goto isset_not_found;
11907 			}
11908 		} else {
11909 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
11910 				ZVAL_DEREF(offset);
11911 			}
11912 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
11913 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
11914 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
11915 				lval = zval_get_long(offset);
11916 				goto isset_str_offset;
11917 			}
11918 			goto isset_not_found;
11919 		}
11920 	} else {
11921 isset_not_found:
11922 		result = ((opline->extended_value & ZEND_ISSET) == 0);
11923 	}
11924 
11925 isset_dim_obj_exit:
11926 	zval_ptr_dtor_nogc(free_op2);
11927 
11928 	ZEND_VM_SMART_BRANCH(result, 1);
11929 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11931 }
11932 
11933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11934 {
11935 	USE_OPLINE
11936 	zend_free_op free_op2;
11937 	zval *container;
11938 	int result;
11939 	zval *offset;
11940 
11941 	SAVE_OPLINE();
11942 	container = EX_CONSTANT(opline->op1);
11943 
11944 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11945 		zend_throw_error(NULL, "Using $this when not in object context");
11946 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
11947 		HANDLE_EXCEPTION();
11948 	}
11949 
11950 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11951 
11952 	if (IS_CONST == IS_CONST ||
11953 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11954 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11955 			container = Z_REFVAL_P(container);
11956 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11957 				goto isset_no_object;
11958 			}
11959 		} else {
11960 			goto isset_no_object;
11961 		}
11962 	}
11963 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
11964 		zend_error(E_NOTICE, "Trying to check property of non-object");
11965 isset_no_object:
11966 		result = ((opline->extended_value & ZEND_ISSET) == 0);
11967 	} else {
11968 		result =
11969 			((opline->extended_value & ZEND_ISSET) == 0) ^
11970 			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));
11971 	}
11972 
11973 	zval_ptr_dtor_nogc(free_op2);
11974 
11975 	ZEND_VM_SMART_BRANCH(result, 1);
11976 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11977 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11978 }
11979 
11980 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11981 {
11982 	USE_OPLINE
11983 	zend_free_op free_op2;
11984 	zval *container, *dim, *value;
11985 	zend_long offset;
11986 
11987 	container = EX_CONSTANT(opline->op1);
11988 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
11989 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11990 fetch_dim_r_index_array:
11991 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
11992 			offset = Z_LVAL_P(dim);
11993 		} else {
11994 			offset = zval_get_long(dim);
11995 		}
11996 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
11997 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
11998 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11999 			SAVE_OPLINE();
12000 
12001 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12002 		} else {
12003 			ZEND_VM_NEXT_OPCODE();
12004 		}
12005 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
12006 		container = Z_REFVAL_P(container);
12007 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
12008 			goto fetch_dim_r_index_array;
12009 		} else {
12010 			goto fetch_dim_r_index_slow;
12011 		}
12012 	} else {
12013 fetch_dim_r_index_slow:
12014 		SAVE_OPLINE();
12015 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
12016 
12017 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12018 	}
12019 
12020 fetch_dim_r_index_undef:
12021 	ZVAL_NULL(EX_VAR(opline->result.var));
12022 	SAVE_OPLINE();
12023 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
12024 
12025 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12026 }
12027 
12028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12029 {
12030 	USE_OPLINE
12031 	zval *op1, *op2, *result;
12032 
12033 	op1 = EX_CONSTANT(opline->op1);
12034 	op2 = EX_VAR(opline->op2.var);
12035 	result = EX_VAR(opline->result.var);
12036 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
12037 	ZEND_VM_NEXT_OPCODE();
12038 }
12039 
12040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12041 {
12042 	USE_OPLINE
12043 	zval *op1, *op2, *result;
12044 
12045 	op1 = EX_CONSTANT(opline->op1);
12046 	op2 = EX_VAR(opline->op2.var);
12047 	result = EX_VAR(opline->result.var);
12048 	fast_long_add_function(result, op1, op2);
12049 	ZEND_VM_NEXT_OPCODE();
12050 }
12051 
12052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12053 {
12054 	USE_OPLINE
12055 	zval *op1, *op2, *result;
12056 
12057 	op1 = EX_CONSTANT(opline->op1);
12058 	op2 = EX_VAR(opline->op2.var);
12059 	result = EX_VAR(opline->result.var);
12060 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
12061 	ZEND_VM_NEXT_OPCODE();
12062 }
12063 
12064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12065 {
12066 	USE_OPLINE
12067 	zval *op1, *op2, *result;
12068 
12069 	op1 = EX_CONSTANT(opline->op1);
12070 	op2 = EX_VAR(opline->op2.var);
12071 	result = EX_VAR(opline->result.var);
12072 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
12073 	ZEND_VM_NEXT_OPCODE();
12074 }
12075 
12076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12077 {
12078 	USE_OPLINE
12079 	zval *op1, *op2, *result;
12080 
12081 	op1 = EX_CONSTANT(opline->op1);
12082 	op2 = EX_VAR(opline->op2.var);
12083 	result = EX_VAR(opline->result.var);
12084 	fast_long_sub_function(result, op1, op2);
12085 	ZEND_VM_NEXT_OPCODE();
12086 }
12087 
12088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12089 {
12090 	USE_OPLINE
12091 	zval *op1, *op2, *result;
12092 
12093 	op1 = EX_CONSTANT(opline->op1);
12094 	op2 = EX_VAR(opline->op2.var);
12095 	result = EX_VAR(opline->result.var);
12096 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
12097 	ZEND_VM_NEXT_OPCODE();
12098 }
12099 
12100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12101 {
12102 	USE_OPLINE
12103 	zval *op1, *op2, *result;
12104 
12105 	op1 = EX_CONSTANT(opline->op1);
12106 	op2 = EX_VAR(opline->op2.var);
12107 	result = EX_VAR(opline->result.var);
12108 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
12109 	ZEND_VM_NEXT_OPCODE();
12110 }
12111 
12112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12113 {
12114 	USE_OPLINE
12115 	zval *op1, *op2, *result;
12116 	zend_long overflow;
12117 
12118 	op1 = EX_CONSTANT(opline->op1);
12119 	op2 = EX_VAR(opline->op2.var);
12120 	result = EX_VAR(opline->result.var);
12121 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12122 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12123 	ZEND_VM_NEXT_OPCODE();
12124 }
12125 
12126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12127 {
12128 	USE_OPLINE
12129 	zval *op1, *op2, *result;
12130 
12131 	op1 = EX_CONSTANT(opline->op1);
12132 	op2 = EX_VAR(opline->op2.var);
12133 	result = EX_VAR(opline->result.var);
12134 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
12135 	ZEND_VM_NEXT_OPCODE();
12136 }
12137 
12138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12139 {
12140 	USE_OPLINE
12141 	zval *op1, *op2;
12142 	int result;
12143 
12144 	op1 = EX_CONSTANT(opline->op1);
12145 	op2 = EX_VAR(opline->op2.var);
12146 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12147 
12148 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12149 	ZEND_VM_NEXT_OPCODE();
12150 }
12151 
12152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12153 {
12154 	USE_OPLINE
12155 	zval *op1, *op2;
12156 	int result;
12157 
12158 	op1 = EX_CONSTANT(opline->op1);
12159 	op2 = EX_VAR(opline->op2.var);
12160 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12161 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12162 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12163 	ZEND_VM_NEXT_OPCODE();
12164 }
12165 
12166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12167 {
12168 	USE_OPLINE
12169 	zval *op1, *op2;
12170 	int result;
12171 
12172 	op1 = EX_CONSTANT(opline->op1);
12173 	op2 = EX_VAR(opline->op2.var);
12174 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12175 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12176 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12177 	ZEND_VM_NEXT_OPCODE();
12178 }
12179 
12180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12181 {
12182 	USE_OPLINE
12183 	zval *op1, *op2;
12184 	int result;
12185 
12186 	op1 = EX_CONSTANT(opline->op1);
12187 	op2 = EX_VAR(opline->op2.var);
12188 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12189 
12190 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12191 	ZEND_VM_NEXT_OPCODE();
12192 }
12193 
12194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12195 {
12196 	USE_OPLINE
12197 	zval *op1, *op2;
12198 	int result;
12199 
12200 	op1 = EX_CONSTANT(opline->op1);
12201 	op2 = EX_VAR(opline->op2.var);
12202 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12203 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12204 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12205 	ZEND_VM_NEXT_OPCODE();
12206 }
12207 
12208 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12209 {
12210 	USE_OPLINE
12211 	zval *op1, *op2;
12212 	int result;
12213 
12214 	op1 = EX_CONSTANT(opline->op1);
12215 	op2 = EX_VAR(opline->op2.var);
12216 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12217 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12218 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12219 	ZEND_VM_NEXT_OPCODE();
12220 }
12221 
12222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12223 {
12224 	USE_OPLINE
12225 	zval *op1, *op2;
12226 	int result;
12227 
12228 	op1 = EX_CONSTANT(opline->op1);
12229 	op2 = EX_VAR(opline->op2.var);
12230 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12231 
12232 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12233 	ZEND_VM_NEXT_OPCODE();
12234 }
12235 
12236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12237 {
12238 	USE_OPLINE
12239 	zval *op1, *op2;
12240 	int result;
12241 
12242 	op1 = EX_CONSTANT(opline->op1);
12243 	op2 = EX_VAR(opline->op2.var);
12244 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12245 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12246 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12247 	ZEND_VM_NEXT_OPCODE();
12248 }
12249 
12250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12251 {
12252 	USE_OPLINE
12253 	zval *op1, *op2;
12254 	int result;
12255 
12256 	op1 = EX_CONSTANT(opline->op1);
12257 	op2 = EX_VAR(opline->op2.var);
12258 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12259 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12260 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12261 	ZEND_VM_NEXT_OPCODE();
12262 }
12263 
12264 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12265 {
12266 	USE_OPLINE
12267 	zval *op1, *op2;
12268 	int result;
12269 
12270 	op1 = EX_CONSTANT(opline->op1);
12271 	op2 = EX_VAR(opline->op2.var);
12272 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12273 
12274 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12275 	ZEND_VM_NEXT_OPCODE();
12276 }
12277 
12278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12279 {
12280 	USE_OPLINE
12281 	zval *op1, *op2;
12282 	int result;
12283 
12284 	op1 = EX_CONSTANT(opline->op1);
12285 	op2 = EX_VAR(opline->op2.var);
12286 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12287 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12288 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12289 	ZEND_VM_NEXT_OPCODE();
12290 }
12291 
12292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12293 {
12294 	USE_OPLINE
12295 	zval *op1, *op2;
12296 	int result;
12297 
12298 	op1 = EX_CONSTANT(opline->op1);
12299 	op2 = EX_VAR(opline->op2.var);
12300 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12301 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12302 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12303 	ZEND_VM_NEXT_OPCODE();
12304 }
12305 
12306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12307 {
12308 	USE_OPLINE
12309 	zval *op1, *op2;
12310 	int result;
12311 
12312 	op1 = EX_CONSTANT(opline->op1);
12313 	op2 = EX_VAR(opline->op2.var);
12314 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12315 
12316 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12317 	ZEND_VM_NEXT_OPCODE();
12318 }
12319 
12320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12321 {
12322 	USE_OPLINE
12323 	zval *op1, *op2;
12324 	int result;
12325 
12326 	op1 = EX_CONSTANT(opline->op1);
12327 	op2 = EX_VAR(opline->op2.var);
12328 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12329 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12330 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12331 	ZEND_VM_NEXT_OPCODE();
12332 }
12333 
12334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12335 {
12336 	USE_OPLINE
12337 	zval *op1, *op2;
12338 	int result;
12339 
12340 	op1 = EX_CONSTANT(opline->op1);
12341 	op2 = EX_VAR(opline->op2.var);
12342 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12343 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12344 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12345 	ZEND_VM_NEXT_OPCODE();
12346 }
12347 
12348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12349 {
12350 	USE_OPLINE
12351 	zval *op1, *op2;
12352 	int result;
12353 
12354 	op1 = EX_CONSTANT(opline->op1);
12355 	op2 = EX_VAR(opline->op2.var);
12356 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12357 
12358 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12359 	ZEND_VM_NEXT_OPCODE();
12360 }
12361 
12362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12363 {
12364 	USE_OPLINE
12365 	zval *op1, *op2;
12366 	int result;
12367 
12368 	op1 = EX_CONSTANT(opline->op1);
12369 	op2 = EX_VAR(opline->op2.var);
12370 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12371 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12372 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12373 	ZEND_VM_NEXT_OPCODE();
12374 }
12375 
12376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12377 {
12378 	USE_OPLINE
12379 	zval *op1, *op2;
12380 	int result;
12381 
12382 	op1 = EX_CONSTANT(opline->op1);
12383 	op2 = EX_VAR(opline->op2.var);
12384 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12385 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12386 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12387 	ZEND_VM_NEXT_OPCODE();
12388 }
12389 
12390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12391 {
12392 	USE_OPLINE
12393 	zval *op1, *op2;
12394 	int result;
12395 
12396 	op1 = EX_CONSTANT(opline->op1);
12397 	op2 = EX_VAR(opline->op2.var);
12398 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12399 
12400 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12401 	ZEND_VM_NEXT_OPCODE();
12402 }
12403 
12404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12405 {
12406 	USE_OPLINE
12407 	zval *op1, *op2;
12408 	int result;
12409 
12410 	op1 = EX_CONSTANT(opline->op1);
12411 	op2 = EX_VAR(opline->op2.var);
12412 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12413 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12414 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12415 	ZEND_VM_NEXT_OPCODE();
12416 }
12417 
12418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12419 {
12420 	USE_OPLINE
12421 	zval *op1, *op2;
12422 	int result;
12423 
12424 	op1 = EX_CONSTANT(opline->op1);
12425 	op2 = EX_VAR(opline->op2.var);
12426 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12427 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12428 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12429 	ZEND_VM_NEXT_OPCODE();
12430 }
12431 
12432 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12433 {
12434 	USE_OPLINE
12435 	zval *op1, *op2;
12436 	int result;
12437 
12438 	op1 = EX_CONSTANT(opline->op1);
12439 	op2 = EX_VAR(opline->op2.var);
12440 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12441 
12442 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12443 	ZEND_VM_NEXT_OPCODE();
12444 }
12445 
12446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12447 {
12448 	USE_OPLINE
12449 	zval *op1, *op2;
12450 	int result;
12451 
12452 	op1 = EX_CONSTANT(opline->op1);
12453 	op2 = EX_VAR(opline->op2.var);
12454 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12455 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12456 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12457 	ZEND_VM_NEXT_OPCODE();
12458 }
12459 
12460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12461 {
12462 	USE_OPLINE
12463 	zval *op1, *op2;
12464 	int result;
12465 
12466 	op1 = EX_CONSTANT(opline->op1);
12467 	op2 = EX_VAR(opline->op2.var);
12468 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12469 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12470 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12471 	ZEND_VM_NEXT_OPCODE();
12472 }
12473 
12474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12475 {
12476 	USE_OPLINE
12477 	zval *retval_ptr;
12478 	zval *return_value;
12479 	zend_free_op free_op1;
12480 
12481 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12482 	return_value = EX(return_value);
12483 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
12484 		SAVE_OPLINE();
12485 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
12486 		if (return_value) {
12487 			ZVAL_NULL(return_value);
12488 		}
12489 	} else if (!return_value) {
12490 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
12491 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
12492 				SAVE_OPLINE();
12493 				zval_dtor_func(Z_COUNTED_P(free_op1));
12494 			}
12495 		}
12496 	} else {
12497 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
12498 			ZVAL_COPY_VALUE(return_value, retval_ptr);
12499 			if (IS_TMP_VAR == IS_CONST) {
12500 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
12501 					Z_ADDREF_P(return_value);
12502 				}
12503 			}
12504 		} else if (IS_TMP_VAR == IS_CV) {
12505 			if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
12506 				if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
12507 					ZVAL_COPY_VALUE(return_value, retval_ptr);
12508 					if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
12509 						ZVAL_NULL(retval_ptr);
12510 					} else {
12511 						Z_ADDREF_P(return_value);
12512 					}
12513 				} else {
12514 					retval_ptr = Z_REFVAL_P(retval_ptr);
12515 					ZVAL_COPY(return_value, retval_ptr);
12516 				}
12517 			} else {
12518 				ZVAL_COPY_VALUE(return_value, retval_ptr);
12519 			}
12520 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
12521 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
12522 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
12523 
12524 				retval_ptr = Z_REFVAL_P(retval_ptr);
12525 				ZVAL_COPY_VALUE(return_value, retval_ptr);
12526 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
12527 					efree_size(ref, sizeof(zend_reference));
12528 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
12529 					Z_ADDREF_P(retval_ptr);
12530 				}
12531 			} else {
12532 				ZVAL_COPY_VALUE(return_value, retval_ptr);
12533 			}
12534 		}
12535 	}
12536 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12537 }
12538 
12539 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12540 {
12541 	USE_OPLINE
12542 	zval *retval_ptr;
12543 	zend_free_op free_op1;
12544 
12545 	SAVE_OPLINE();
12546 
12547 	do {
12548 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
12549 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
12550 			/* Not supposed to happen, but we'll allow it */
12551 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
12552 
12553 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12554 			if (!EX(return_value)) {
12555 				zval_ptr_dtor_nogc(free_op1);
12556 			} else {
12557 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
12558 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
12559 					break;
12560 				}
12561 
12562 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
12563 				if (IS_TMP_VAR == IS_CONST) {
12564 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
12565 				}
12566 			}
12567 			break;
12568 		}
12569 
12570 		retval_ptr = NULL;
12571 
12572 		if (IS_TMP_VAR == IS_VAR) {
12573 			if (retval_ptr == &EG(uninitialized_zval) ||
12574 			    (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
12575 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
12576 				if (EX(return_value)) {
12577 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
12578 				} else {
12579 
12580 				}
12581 				break;
12582 			}
12583 		}
12584 
12585 		if (EX(return_value)) {
12586 			ZVAL_MAKE_REF(retval_ptr);
12587 			Z_ADDREF_P(retval_ptr);
12588 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
12589 		}
12590 
12591 	} while (0);
12592 
12593 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12594 }
12595 
12596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12597 {
12598 	USE_OPLINE
12599 	zval *retval;
12600 	zend_free_op free_op1;
12601 
12602 	zend_generator *generator = zend_get_running_generator(execute_data);
12603 
12604 	SAVE_OPLINE();
12605 	retval = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12606 
12607 	/* Copy return value into generator->retval */
12608 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
12609 		ZVAL_COPY_VALUE(&generator->retval, retval);
12610 		if (IS_TMP_VAR == IS_CONST) {
12611 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
12612 				Z_ADDREF(generator->retval);
12613 			}
12614 		}
12615 	} else if (IS_TMP_VAR == IS_CV) {
12616 		ZVAL_DEREF(retval);
12617 		ZVAL_COPY(&generator->retval, retval);
12618 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
12619 		if (UNEXPECTED(Z_ISREF_P(retval))) {
12620 			zend_refcounted *ref = Z_COUNTED_P(retval);
12621 
12622 			retval = Z_REFVAL_P(retval);
12623 			ZVAL_COPY_VALUE(&generator->retval, retval);
12624 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
12625 				efree_size(ref, sizeof(zend_reference));
12626 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
12627 				Z_ADDREF_P(retval);
12628 			}
12629 		} else {
12630 			ZVAL_COPY_VALUE(&generator->retval, retval);
12631 		}
12632 	}
12633 
12634 	/* Close the generator to free up resources */
12635 	zend_generator_close(generator, 1);
12636 
12637 	/* Pass execution back to handling code */
12638 	ZEND_VM_RETURN();
12639 }
12640 
12641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12642 {
12643 	USE_OPLINE
12644 	zval *value;
12645 	zend_free_op free_op1;
12646 
12647 	SAVE_OPLINE();
12648 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12649 
12650 	do {
12651 		if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
12652 			if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12653 				value = Z_REFVAL_P(value);
12654 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
12655 					break;
12656 				}
12657 			}
12658 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
12659 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
12660 				if (UNEXPECTED(EG(exception) != NULL)) {
12661 					HANDLE_EXCEPTION();
12662 				}
12663 			}
12664 			zend_throw_error(NULL, "Can only throw objects");
12665 			zval_ptr_dtor_nogc(free_op1);
12666 			HANDLE_EXCEPTION();
12667 		}
12668 	} while (0);
12669 
12670 	zend_exception_save();
12671 	if (IS_TMP_VAR != IS_TMP_VAR) {
12672 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12673 	}
12674 
12675 	zend_throw_exception_object(value);
12676 	zend_exception_restore();
12677 
12678 	HANDLE_EXCEPTION();
12679 }
12680 
12681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12682 {
12683 	USE_OPLINE
12684 	zval *value, *arg;
12685 	zend_free_op free_op1;
12686 	uint32_t arg_num = opline->op2.num;
12687 
12688 	if (EXPECTED(0)) {
12689 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12690 			goto send_val_by_ref;
12691 		}
12692 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12693 send_val_by_ref:
12694 		SAVE_OPLINE();
12695 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
12696 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
12697 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12698 		ZVAL_UNDEF(arg);
12699 		HANDLE_EXCEPTION();
12700 	}
12701 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12702 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12703 	ZVAL_COPY_VALUE(arg, value);
12704 	if (IS_TMP_VAR == IS_CONST) {
12705 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
12706 			Z_ADDREF_P(arg);
12707 		}
12708 	}
12709 	ZEND_VM_NEXT_OPCODE();
12710 }
12711 
12712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12713 {
12714 	USE_OPLINE
12715 	zval *value, *arg;
12716 	zend_free_op free_op1;
12717 	uint32_t arg_num = opline->op2.num;
12718 
12719 	if (EXPECTED(1)) {
12720 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12721 			goto send_val_by_ref;
12722 		}
12723 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
12724 send_val_by_ref:
12725 		SAVE_OPLINE();
12726 		zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
12727 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
12728 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12729 		ZVAL_UNDEF(arg);
12730 		HANDLE_EXCEPTION();
12731 	}
12732 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12733 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
12734 	ZVAL_COPY_VALUE(arg, value);
12735 	if (IS_TMP_VAR == IS_CONST) {
12736 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
12737 			Z_ADDREF_P(arg);
12738 		}
12739 	}
12740 	ZEND_VM_NEXT_OPCODE();
12741 }
12742 
12743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12744 {
12745 	USE_OPLINE
12746 	zval *arg, *param;
12747 	zend_free_op free_op1;
12748 
12749 	SAVE_OPLINE();
12750 	arg = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12751 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
12752 
12753 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
12754 		zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
12755 			opline->op2.num,
12756 			EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
12757 			EX(call)->func->common.scope ? "::" : "",
12758 			ZSTR_VAL(EX(call)->func->common.function_name));
12759 	}
12760 
12761 	ZVAL_COPY(param, arg);
12762 
12763 	zval_ptr_dtor_nogc(free_op1);
12764 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12765 }
12766 
12767 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12768 {
12769 	USE_OPLINE
12770 	zend_free_op free_op1;
12771 	zval *expr;
12772 	zval *result = EX_VAR(opline->result.var);
12773 
12774 	SAVE_OPLINE();
12775 	expr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12776 
12777 	switch (opline->extended_value) {
12778 		case IS_NULL:
12779 			/* This code is taken from convert_to_null. However, it does not seems very useful,
12780 			 * because a conversion to null always results in the same value. This could only
12781 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
12782 #if 0
12783 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12784 				ZVAL_DEREF(expr);
12785 			}
12786 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
12787 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
12788 					break;
12789 				}
12790 			}
12791 #endif
12792 
12793 			ZVAL_NULL(result);
12794 			break;
12795 		case _IS_BOOL:
12796 			ZVAL_BOOL(result, zend_is_true(expr));
12797 			break;
12798 		case IS_LONG:
12799 			ZVAL_LONG(result, zval_get_long(expr));
12800 			break;
12801 		case IS_DOUBLE:
12802 			ZVAL_DOUBLE(result, zval_get_double(expr));
12803 			break;
12804 		case IS_STRING:
12805 			ZVAL_STR(result, zval_get_string(expr));
12806 			break;
12807 		default:
12808 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
12809 				ZVAL_DEREF(expr);
12810 			}
12811 			/* If value is already of correct type, return it directly */
12812 			if (Z_TYPE_P(expr) == opline->extended_value) {
12813 				ZVAL_COPY_VALUE(result, expr);
12814 				if (IS_TMP_VAR == IS_CONST) {
12815 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
12816 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
12817 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
12818 				}
12819 
12820 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12821 			}
12822 
12823 			if (opline->extended_value == IS_ARRAY) {
12824 				if (Z_TYPE_P(expr) != IS_OBJECT) {
12825 					ZVAL_NEW_ARR(result);
12826 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
12827 					if (Z_TYPE_P(expr) != IS_NULL) {
12828 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
12829 						if (IS_TMP_VAR == IS_CONST) {
12830 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
12831 						} else {
12832 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
12833 						}
12834 					}
12835 				} else {
12836 					ZVAL_COPY_VALUE(result, expr);
12837 					Z_ADDREF_P(result);
12838 					convert_to_array(result);
12839 				}
12840 			} else {
12841 				if (Z_TYPE_P(expr) != IS_ARRAY) {
12842 					object_init(result);
12843 					if (Z_TYPE_P(expr) != IS_NULL) {
12844 						expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
12845 						if (IS_TMP_VAR == IS_CONST) {
12846 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
12847 						} else {
12848 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
12849 						}
12850 					}
12851 				} else {
12852 					ZVAL_COPY(result, expr);
12853 					convert_to_object(result);
12854 				}
12855 			}
12856 	}
12857 
12858 	zval_ptr_dtor_nogc(free_op1);
12859 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12860 }
12861 
12862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12863 {
12864 	USE_OPLINE
12865 	zend_free_op free_op1;
12866 	zval *array_ptr, *result;
12867 	HashTable *fe_ht;
12868 
12869 	SAVE_OPLINE();
12870 
12871 	array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12872 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
12873 		result = EX_VAR(opline->result.var);
12874 		ZVAL_COPY_VALUE(result, array_ptr);
12875 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
12876 			Z_ADDREF_P(array_ptr);
12877 		}
12878 		Z_FE_POS_P(result) = 0;
12879 
12880 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12881 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
12882 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
12883 			HashPosition pos = 0;
12884 			Bucket *p;
12885 
12886 			result = EX_VAR(opline->result.var);
12887 			ZVAL_COPY_VALUE(result, array_ptr);
12888 			if (IS_TMP_VAR != IS_TMP_VAR) {
12889 				Z_ADDREF_P(array_ptr);
12890 			}
12891 			if (Z_OBJ_P(array_ptr)->properties
12892 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
12893 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
12894 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
12895 				}
12896 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
12897 			}
12898 			fe_ht = Z_OBJPROP_P(array_ptr);
12899 			pos = 0;
12900 			p = fe_ht->arData;
12901 			while (1) {
12902 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
12903 
12904 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12905 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12906 				}
12907 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
12908 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
12909 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
12910 				    (UNEXPECTED(!p->key) ||
12911 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
12912 					break;
12913 				}
12914 				pos++;
12915 				p++;
12916 			}
12917 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
12918 
12919 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12920 		} else {
12921 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
12922 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
12923 			zend_bool is_empty;
12924 
12925 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
12926 				zval_ptr_dtor_nogc(free_op1);
12927 				if (iter) {
12928 					OBJ_RELEASE(&iter->std);
12929 				}
12930 				if (!EG(exception)) {
12931 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
12932 				}
12933 				zend_throw_exception_internal(NULL);
12934 				HANDLE_EXCEPTION();
12935 			}
12936 
12937 			iter->index = 0;
12938 			if (iter->funcs->rewind) {
12939 				iter->funcs->rewind(iter);
12940 				if (UNEXPECTED(EG(exception) != NULL)) {
12941 					OBJ_RELEASE(&iter->std);
12942 					zval_ptr_dtor_nogc(free_op1);
12943 					HANDLE_EXCEPTION();
12944 				}
12945 			}
12946 
12947 			is_empty = iter->funcs->valid(iter) != SUCCESS;
12948 
12949 			if (UNEXPECTED(EG(exception) != NULL)) {
12950 				OBJ_RELEASE(&iter->std);
12951 				zval_ptr_dtor_nogc(free_op1);
12952 				HANDLE_EXCEPTION();
12953 			}
12954 			iter->index = -1; /* will be set to 0 before using next handler */
12955 
12956 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
12957 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12958 
12959 			zval_ptr_dtor_nogc(free_op1);
12960 			if (is_empty) {
12961 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12962 			} else {
12963 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12964 			}
12965 		}
12966 	} else {
12967 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
12968 		ZVAL_UNDEF(EX_VAR(opline->result.var));
12969 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
12970 		zval_ptr_dtor_nogc(free_op1);
12971 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
12972 	}
12973 }
12974 
12975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12976 {
12977 	USE_OPLINE
12978 	zend_free_op free_op1;
12979 	zval *array_ptr, *array_ref;
12980 	HashTable *fe_ht;
12981 	HashPosition pos = 0;
12982 	Bucket *p;
12983 
12984 	SAVE_OPLINE();
12985 
12986 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12987 		array_ref = array_ptr = NULL;
12988 		if (Z_ISREF_P(array_ref)) {
12989 			array_ptr = Z_REFVAL_P(array_ref);
12990 		}
12991 	} else {
12992 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
12993 	}
12994 
12995 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
12996 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
12997 			if (array_ptr == array_ref) {
12998 				ZVAL_NEW_REF(array_ref, array_ref);
12999 				array_ptr = Z_REFVAL_P(array_ref);
13000 			}
13001 			Z_ADDREF_P(array_ref);
13002 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
13003 		} else {
13004 			array_ref = EX_VAR(opline->result.var);
13005 			ZVAL_NEW_REF(array_ref, array_ptr);
13006 			array_ptr = Z_REFVAL_P(array_ref);
13007 		}
13008 		if (IS_TMP_VAR == IS_CONST) {
13009 			zval_copy_ctor_func(array_ptr);
13010 		} else {
13011 			SEPARATE_ARRAY(array_ptr);
13012 		}
13013 		fe_ht = Z_ARRVAL_P(array_ptr);
13014 		p = fe_ht->arData;
13015 		while (1) {
13016 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
13017 
13018 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
13019 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13020 			}
13021 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
13022 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
13023 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
13024 				break;
13025 			}
13026 			pos++;
13027 			p++;
13028 		}
13029 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
13030 
13031 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13032 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
13033 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
13034 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
13035 				if (array_ptr == array_ref) {
13036 					ZVAL_NEW_REF(array_ref, array_ref);
13037 					array_ptr = Z_REFVAL_P(array_ref);
13038 				}
13039 				Z_ADDREF_P(array_ref);
13040 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
13041 			} else {
13042 				array_ptr = EX_VAR(opline->result.var);
13043 				ZVAL_COPY_VALUE(array_ptr, array_ref);
13044 			}
13045 			if (Z_OBJ_P(array_ptr)->properties
13046 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
13047 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
13048 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
13049 				}
13050 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
13051 			}
13052 			fe_ht = Z_OBJPROP_P(array_ptr);
13053 			p = fe_ht->arData;
13054 			while (1) {
13055 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
13056 
13057 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
13058 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13059 				}
13060 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
13061 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
13062 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
13063 				    (UNEXPECTED(!p->key) ||
13064 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
13065 					break;
13066 				}
13067 				pos++;
13068 				p++;
13069 			}
13070 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
13071 
13072 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13073 		} else {
13074 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
13075 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
13076 			zend_bool is_empty;
13077 
13078 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
13079 				if (IS_TMP_VAR == IS_VAR) {
13080 
13081 				} else {
13082 					zval_ptr_dtor_nogc(free_op1);
13083 				}
13084 				if (!EG(exception)) {
13085 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
13086 				}
13087 				zend_throw_exception_internal(NULL);
13088 				HANDLE_EXCEPTION();
13089 			}
13090 
13091 			iter->index = 0;
13092 			if (iter->funcs->rewind) {
13093 				iter->funcs->rewind(iter);
13094 				if (UNEXPECTED(EG(exception) != NULL)) {
13095 					OBJ_RELEASE(&iter->std);
13096 					if (IS_TMP_VAR == IS_VAR) {
13097 
13098 					} else {
13099 						zval_ptr_dtor_nogc(free_op1);
13100 					}
13101 					HANDLE_EXCEPTION();
13102 				}
13103 			}
13104 
13105 			is_empty = iter->funcs->valid(iter) != SUCCESS;
13106 
13107 			if (UNEXPECTED(EG(exception) != NULL)) {
13108 				OBJ_RELEASE(&iter->std);
13109 				if (IS_TMP_VAR == IS_VAR) {
13110 
13111 				} else {
13112 					zval_ptr_dtor_nogc(free_op1);
13113 				}
13114 				HANDLE_EXCEPTION();
13115 			}
13116 			iter->index = -1; /* will be set to 0 before using next handler */
13117 
13118 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
13119 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
13120 
13121 			if (IS_TMP_VAR == IS_VAR) {
13122 
13123 			} else {
13124 				zval_ptr_dtor_nogc(free_op1);
13125 			}
13126 			if (is_empty) {
13127 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13128 			} else {
13129 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13130 			}
13131 		}
13132 	} else {
13133 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
13134 		ZVAL_UNDEF(EX_VAR(opline->result.var));
13135 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
13136 		if (IS_TMP_VAR == IS_VAR) {
13137 
13138 		} else {
13139 			zval_ptr_dtor_nogc(free_op1);
13140 		}
13141 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13142 	}
13143 }
13144 
13145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13146 {
13147 	USE_OPLINE
13148 
13149 	if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) {
13150 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
13151 	}
13152 	ZEND_VM_NEXT_OPCODE();
13153 }
13154 
13155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13156 {
13157 	USE_OPLINE
13158 	zend_free_op free_op1;
13159 	zval *value;
13160 	zval *ref = NULL;
13161 
13162 	SAVE_OPLINE();
13163 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13164 
13165 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
13166 		if (IS_TMP_VAR == IS_VAR) {
13167 			ref = value;
13168 		}
13169 		value = Z_REFVAL_P(value);
13170 	}
13171 	if (i_zend_is_true(value)) {
13172 		zval *result = EX_VAR(opline->result.var);
13173 
13174 		ZVAL_COPY_VALUE(result, value);
13175 		if (IS_TMP_VAR == IS_CONST) {
13176 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
13177 		} else if (IS_TMP_VAR == IS_CV) {
13178 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
13179 		} else if (IS_TMP_VAR == IS_VAR && ref) {
13180 			zend_reference *r = Z_REF_P(ref);
13181 
13182 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
13183 				efree_size(r, sizeof(zend_reference));
13184 			} else if (Z_OPT_REFCOUNTED_P(result)) {
13185 				Z_ADDREF_P(result);
13186 			}
13187 		}
13188 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13189 	}
13190 
13191 	zval_ptr_dtor_nogc(free_op1);
13192 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13193 }
13194 
13195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13196 {
13197 	USE_OPLINE
13198 	zend_free_op free_op1;
13199 	zval *value;
13200 	zval *ref = NULL;
13201 
13202 	SAVE_OPLINE();
13203 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13204 
13205 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
13206 		if (IS_TMP_VAR == IS_VAR) {
13207 			ref = value;
13208 		}
13209 		value = Z_REFVAL_P(value);
13210 	}
13211 
13212 	if (Z_TYPE_P(value) > IS_NULL) {
13213 		zval *result = EX_VAR(opline->result.var);
13214 		ZVAL_COPY_VALUE(result, value);
13215 		if (IS_TMP_VAR == IS_CONST) {
13216 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
13217 		} else if (IS_TMP_VAR == IS_CV) {
13218 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
13219 		} else if (IS_TMP_VAR == IS_VAR && ref) {
13220 			zend_reference *r = Z_REF_P(ref);
13221 
13222 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
13223 				efree_size(r, sizeof(zend_reference));
13224 			} else if (Z_OPT_REFCOUNTED_P(result)) {
13225 				Z_ADDREF_P(result);
13226 			}
13227 		}
13228 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
13229 	}
13230 
13231 	zval_ptr_dtor_nogc(free_op1);
13232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13233 }
13234 
13235 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13236 {
13237 	USE_OPLINE
13238 	zend_free_op free_op1;
13239 	zval *value;
13240 	zval *result = EX_VAR(opline->result.var);
13241 
13242 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13243 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
13244 		SAVE_OPLINE();
13245 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
13246 		ZVAL_NULL(result);
13247 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13248 	}
13249 
13250 	if (IS_TMP_VAR == IS_CV) {
13251 		ZVAL_DEREF(value);
13252 		ZVAL_COPY(result, value);
13253 	} else if (IS_TMP_VAR == IS_VAR) {
13254 		if (UNEXPECTED(Z_ISREF_P(value))) {
13255 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
13256 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
13257 				efree_size(Z_REF_P(value), sizeof(zend_reference));
13258 			} else if (Z_OPT_REFCOUNTED_P(result)) {
13259 				Z_ADDREF_P(result);
13260 			}
13261 		} else {
13262 			ZVAL_COPY_VALUE(result, value);
13263 		}
13264 	} else {
13265 		ZVAL_COPY_VALUE(result, value);
13266 		if (IS_TMP_VAR == IS_CONST) {
13267 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
13268 				Z_ADDREF_P(result);
13269 			}
13270 		}
13271 	}
13272 	ZEND_VM_NEXT_OPCODE();
13273 }
13274 
13275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13276 {
13277 	USE_OPLINE
13278 
13279 	zend_generator *generator = zend_get_running_generator(execute_data);
13280 
13281 	zval *val;
13282 	zend_free_op free_op1;
13283 
13284 	SAVE_OPLINE();
13285 	val = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13286 
13287 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13288 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
13289 		zval_ptr_dtor_nogc(free_op1);
13290 		HANDLE_EXCEPTION();
13291 	}
13292 
13293 	if (Z_TYPE_P(val) == IS_ARRAY) {
13294 		ZVAL_COPY_VALUE(&generator->values, val);
13295 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
13296 			Z_ADDREF_P(val);
13297 		}
13298 		Z_FE_POS(generator->values) = 0;
13299 
13300 	} else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
13301 		zend_class_entry *ce = Z_OBJCE_P(val);
13302 		if (ce == zend_ce_generator) {
13303 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
13304 
13305 			if (IS_TMP_VAR != IS_TMP_VAR) {
13306 				Z_ADDREF_P(val);
13307 			}
13308 
13309 			if (Z_ISUNDEF(new_gen->retval)) {
13310 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
13311 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
13312 					zval_ptr_dtor(val);
13313 					HANDLE_EXCEPTION();
13314 				} else {
13315 					zend_generator_yield_from(generator, new_gen);
13316 				}
13317 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
13318 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
13319 				zval_ptr_dtor(val);
13320 				HANDLE_EXCEPTION();
13321 			} else {
13322 				if (RETURN_VALUE_USED(opline)) {
13323 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
13324 				}
13325 				ZEND_VM_NEXT_OPCODE();
13326 			}
13327 		} else {
13328 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
13329 			zval_ptr_dtor_nogc(free_op1);
13330 
13331 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
13332 				if (!EG(exception)) {
13333 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
13334 				}
13335 				HANDLE_EXCEPTION();
13336 			}
13337 
13338 			iter->index = 0;
13339 			if (iter->funcs->rewind) {
13340 				iter->funcs->rewind(iter);
13341 				if (UNEXPECTED(EG(exception) != NULL)) {
13342 					OBJ_RELEASE(&iter->std);
13343 					HANDLE_EXCEPTION();
13344 				}
13345 			}
13346 
13347 			ZVAL_OBJ(&generator->values, &iter->std);
13348 		}
13349 	} else {
13350 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
13351 		HANDLE_EXCEPTION();
13352 	}
13353 
13354 	/* This is the default return value
13355 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
13356 	if (RETURN_VALUE_USED(opline)) {
13357 		ZVAL_NULL(EX_VAR(opline->result.var));
13358 	}
13359 
13360 	/* This generator has no send target (though the generator we delegate to might have one) */
13361 	generator->send_target = NULL;
13362 
13363 	/* We increment to the next op, so we are at the correct position when the
13364 	 * generator is resumed. */
13365 	ZEND_VM_INC_OPCODE();
13366 
13367 	/* The GOTO VM uses a local opline variable. We need to set the opline
13368 	 * variable in execute_data so we don't resume at an old position. */
13369 	SAVE_OPLINE();
13370 
13371 	ZEND_VM_RETURN();
13372 }
13373 
13374 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13375 {
13376 	USE_OPLINE
13377 	zval *value;
13378 	int result = 0;
13379 	zend_free_op free_op1;
13380 
13381 	SAVE_OPLINE();
13382 	value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13383 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
13384 		if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
13385 			zend_class_entry *ce = Z_OBJCE_P(value);
13386 
13387 			if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
13388 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
13389 				result = 1;
13390 			}
13391 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
13392 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
13393 
13394 			if (EXPECTED(type_name != NULL)) {
13395 				result = 1;
13396 			}
13397 		} else {
13398 			result = 1;
13399 		}
13400 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
13401 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
13402 		result = 1;
13403 	}
13404 	zval_ptr_dtor_nogc(free_op1);
13405 	ZEND_VM_SMART_BRANCH(result, 1);
13406 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13407 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13408 }
13409 
13410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13411 {
13412 	USE_OPLINE
13413 	zend_free_op free_op1;
13414 	zval *op1, *op2;
13415 	int result;
13416 
13417 	SAVE_OPLINE();
13418 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13419 	op2 = EX_CONSTANT(opline->op2);
13420 	result = fast_is_identical_function(op1, op2);
13421 	zval_ptr_dtor_nogc(free_op1);
13422 
13423 	ZEND_VM_SMART_BRANCH(result, 1);
13424 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13426 }
13427 
13428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13429 {
13430 	USE_OPLINE
13431 	zend_free_op free_op1;
13432 	zval *op1, *op2;
13433 	int result;
13434 
13435 	SAVE_OPLINE();
13436 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13437 	op2 = EX_CONSTANT(opline->op2);
13438 	result = fast_is_not_identical_function(op1, op2);
13439 	zval_ptr_dtor_nogc(free_op1);
13440 
13441 	ZEND_VM_SMART_BRANCH(result, 1);
13442 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13443 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13444 }
13445 
13446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13447 {
13448 	USE_OPLINE
13449 	zval *container;
13450 	zend_free_op free_op1;
13451 
13452 	SAVE_OPLINE();
13453 
13454 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
13455         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
13456             zend_throw_error(NULL, "Cannot use temporary expression in write context");
13457 
13458 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13459 			HANDLE_EXCEPTION();
13460         }
13461 		container = NULL;
13462 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
13463 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
13464 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
13465 		}
13466 
13467 
13468 	} else {
13469 		if (IS_CONST == IS_UNUSED) {
13470 			zend_throw_error(NULL, "Cannot use [] for reading");
13471 
13472 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13473 			HANDLE_EXCEPTION();
13474 		}
13475 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13476 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
13477 
13478 		zval_ptr_dtor_nogc(free_op1);
13479 	}
13480 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13481 }
13482 
13483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13484 {
13485 	USE_OPLINE
13486 	zend_free_op free_op1;
13487 	zval *container;
13488 
13489 	zval *offset;
13490 
13491 	SAVE_OPLINE();
13492 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13493 
13494 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
13495 		zend_throw_error(NULL, "Using $this when not in object context");
13496 
13497 		HANDLE_EXCEPTION();
13498 	}
13499 
13500 	offset = EX_CONSTANT(opline->op2);
13501 
13502 	if (IS_TMP_VAR == IS_CONST ||
13503 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
13504 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
13505 			container = Z_REFVAL_P(container);
13506 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
13507 				goto fetch_obj_r_no_object;
13508 			}
13509 		} else {
13510 			goto fetch_obj_r_no_object;
13511 		}
13512 	}
13513 
13514 	/* here we are sure we are dealing with an object */
13515 	do {
13516 		zend_object *zobj = Z_OBJ_P(container);
13517 		zval *retval;
13518 
13519 		if (IS_CONST == IS_CONST &&
13520 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
13521 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
13522 
13523 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
13524 				retval = OBJ_PROP(zobj, prop_offset);
13525 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
13526 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
13527 					break;
13528 				}
13529 			} else if (EXPECTED(zobj->properties != NULL)) {
13530 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
13531 				if (EXPECTED(retval)) {
13532 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
13533 					break;
13534 				}
13535 			}
13536 		}
13537 
13538 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
13539 fetch_obj_r_no_object:
13540 			zend_error(E_NOTICE, "Trying to get property of non-object");
13541 			ZVAL_NULL(EX_VAR(opline->result.var));
13542 		} else {
13543 			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));
13544 
13545 			if (retval != EX_VAR(opline->result.var)) {
13546 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
13547 			}
13548 		}
13549 	} while (0);
13550 
13551 	zval_ptr_dtor_nogc(free_op1);
13552 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13553 }
13554 
13555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13556 {
13557 	USE_OPLINE
13558 	zval *container;
13559 
13560 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
13561 		/* Behave like FETCH_OBJ_W */
13562 		zend_free_op free_op1;
13563 		zval *property;
13564 
13565 		SAVE_OPLINE();
13566 		property = EX_CONSTANT(opline->op2);
13567 		container = NULL;
13568 
13569 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
13570 			zend_throw_error(NULL, "Using $this when not in object context");
13571 
13572 			HANDLE_EXCEPTION();
13573 		}
13574 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
13575 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
13576 
13577 
13578 			HANDLE_EXCEPTION();
13579 		}
13580 		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);
13581 
13582 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
13583 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
13584 		}
13585 
13586 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13587 	} else {
13588 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13589 	}
13590 }
13591 
13592 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13593 {
13594 	USE_OPLINE
13595 
13596 	zend_string **rope;
13597 	zval *var;
13598 
13599 	/* op1 and result are the same */
13600 	rope = (zend_string**)EX_VAR(opline->op1.var);
13601 	if (IS_CONST == IS_CONST) {
13602 		var = EX_CONSTANT(opline->op2);
13603 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13604 	} else {
13605 		var = EX_CONSTANT(opline->op2);
13606 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
13607 			if (IS_CONST == IS_CV) {
13608 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13609 			} else {
13610 				rope[opline->extended_value] = Z_STR_P(var);
13611 			}
13612 		} else {
13613 			SAVE_OPLINE();
13614 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
13615 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
13616 			}
13617 			rope[opline->extended_value] = _zval_get_string_func(var);
13618 
13619 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13620 		}
13621 	}
13622 	ZEND_VM_NEXT_OPCODE();
13623 }
13624 
13625 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13626 {
13627 	USE_OPLINE
13628 
13629 	zend_string **rope;
13630 	zval *var, *ret;
13631 	uint32_t i;
13632 	size_t len = 0;
13633 	char *target;
13634 
13635 	rope = (zend_string**)EX_VAR(opline->op1.var);
13636 	if (IS_CONST == IS_CONST) {
13637 		var = EX_CONSTANT(opline->op2);
13638 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13639 	} else {
13640 		var = EX_CONSTANT(opline->op2);
13641 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
13642 			if (IS_CONST == IS_CV) {
13643 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
13644 			} else {
13645 				rope[opline->extended_value] = Z_STR_P(var);
13646 			}
13647 		} else {
13648 			SAVE_OPLINE();
13649 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
13650 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
13651 			}
13652 			rope[opline->extended_value] = _zval_get_string_func(var);
13653 
13654 			if (UNEXPECTED(EG(exception))) {
13655 				for (i = 0; i <= opline->extended_value; i++) {
13656 					zend_string_release(rope[i]);
13657 				}
13658 				HANDLE_EXCEPTION();
13659 			}
13660 		}
13661 	}
13662 	for (i = 0; i <= opline->extended_value; i++) {
13663 		len += ZSTR_LEN(rope[i]);
13664 	}
13665 	ret = EX_VAR(opline->result.var);
13666 	ZVAL_STR(ret, zend_string_alloc(len, 0));
13667 	target = Z_STRVAL_P(ret);
13668 	for (i = 0; i <= opline->extended_value; i++) {
13669 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
13670 		target += ZSTR_LEN(rope[i]);
13671 		zend_string_release(rope[i]);
13672 	}
13673 	*target = '\0';
13674 
13675 	ZEND_VM_NEXT_OPCODE();
13676 }
13677 
13678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13679 {
13680 	USE_OPLINE
13681 	zend_free_op free_op1;
13682 	zval *expr_ptr, new_expr;
13683 
13684 	SAVE_OPLINE();
13685 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
13686 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
13687 		expr_ptr = NULL;
13688 		ZVAL_MAKE_REF(expr_ptr);
13689 		Z_ADDREF_P(expr_ptr);
13690 
13691 	} else {
13692 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13693 		if (IS_TMP_VAR == IS_TMP_VAR) {
13694 			/* pass */
13695 		} else if (IS_TMP_VAR == IS_CONST) {
13696 			if (Z_REFCOUNTED_P(expr_ptr)) {
13697 				Z_ADDREF_P(expr_ptr);
13698 			}
13699 		} else if (IS_TMP_VAR == IS_CV) {
13700 			ZVAL_DEREF(expr_ptr);
13701 			if (Z_REFCOUNTED_P(expr_ptr)) {
13702 				Z_ADDREF_P(expr_ptr);
13703 			}
13704 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
13705 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
13706 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
13707 
13708 				expr_ptr = Z_REFVAL_P(expr_ptr);
13709 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
13710 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
13711 					expr_ptr = &new_expr;
13712 					efree_size(ref, sizeof(zend_reference));
13713 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
13714 					Z_ADDREF_P(expr_ptr);
13715 				}
13716 			}
13717 		}
13718 	}
13719 
13720 	if (IS_CONST != IS_UNUSED) {
13721 
13722 		zval *offset = EX_CONSTANT(opline->op2);
13723 		zend_string *str;
13724 		zend_ulong hval;
13725 
13726 add_again:
13727 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
13728 			str = Z_STR_P(offset);
13729 			if (IS_CONST != IS_CONST) {
13730 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
13731 					goto num_index;
13732 				}
13733 			}
13734 str_index:
13735 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
13736 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
13737 			hval = Z_LVAL_P(offset);
13738 num_index:
13739 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
13740 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
13741 			offset = Z_REFVAL_P(offset);
13742 			goto add_again;
13743 		} else if (Z_TYPE_P(offset) == IS_NULL) {
13744 			str = ZSTR_EMPTY_ALLOC();
13745 			goto str_index;
13746 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
13747 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
13748 			goto num_index;
13749 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
13750 			hval = 0;
13751 			goto num_index;
13752 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
13753 			hval = 1;
13754 			goto num_index;
13755 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
13756 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
13757 			str = ZSTR_EMPTY_ALLOC();
13758 			goto str_index;
13759 		} else {
13760 			zend_error(E_WARNING, "Illegal offset type");
13761 			zval_ptr_dtor(expr_ptr);
13762 		}
13763 
13764 	} else {
13765 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
13766 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
13767 			zval_ptr_dtor(expr_ptr);
13768 		}
13769 	}
13770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13771 }
13772 
13773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13774 {
13775 	zval *array;
13776 	uint32_t size;
13777 	USE_OPLINE
13778 
13779 	array = EX_VAR(opline->result.var);
13780 	if (IS_TMP_VAR != IS_UNUSED) {
13781 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
13782 	} else {
13783 		size = 0;
13784 	}
13785 	ZVAL_NEW_ARR(array);
13786 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
13787 
13788 	if (IS_TMP_VAR != IS_UNUSED) {
13789 		/* Explicitly initialize array as not-packed if flag is set */
13790 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
13791 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
13792 		}
13793 	}
13794 
13795 	if (IS_TMP_VAR == IS_UNUSED) {
13796 		ZEND_VM_NEXT_OPCODE();
13797 #if 0 || (IS_TMP_VAR != IS_UNUSED)
13798 	} else {
13799 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13800 #endif
13801 	}
13802 }
13803 
13804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13805 {
13806 	USE_OPLINE
13807 
13808 	zend_generator *generator = zend_get_running_generator(execute_data);
13809 
13810 	SAVE_OPLINE();
13811 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13812 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13813 
13814 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13815 		HANDLE_EXCEPTION();
13816 	}
13817 
13818 	/* Destroy the previously yielded value */
13819 	zval_ptr_dtor(&generator->value);
13820 
13821 	/* Destroy the previously yielded key */
13822 	zval_ptr_dtor(&generator->key);
13823 
13824 	/* Set the new yielded value */
13825 	if (IS_TMP_VAR != IS_UNUSED) {
13826 		zend_free_op free_op1;
13827 
13828 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
13829 			/* Constants and temporary variables aren't yieldable by reference,
13830 			 * but we still allow them with a notice. */
13831 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
13832 				zval *value;
13833 
13834 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13835 
13836 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13837 				ZVAL_COPY_VALUE(&generator->value, value);
13838 				if (IS_TMP_VAR == IS_CONST) {
13839 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
13840 						Z_ADDREF(generator->value);
13841 					}
13842 				}
13843 			} else {
13844 				zval *value_ptr = NULL;
13845 
13846 				/* If a function call result is yielded and the function did
13847 				 * not return by reference we throw a notice. */
13848 				if (IS_TMP_VAR == IS_VAR &&
13849 				    (value_ptr == &EG(uninitialized_zval) ||
13850 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
13851 				      !Z_ISREF_P(value_ptr)))) {
13852 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
13853 				} else {
13854 					ZVAL_MAKE_REF(value_ptr);
13855 				}
13856 				ZVAL_COPY(&generator->value, value_ptr);
13857 
13858 			}
13859 		} else {
13860 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13861 
13862 			/* Consts, temporary variables and references need copying */
13863 			if (IS_TMP_VAR == IS_CONST) {
13864 				ZVAL_COPY_VALUE(&generator->value, value);
13865 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
13866 					Z_ADDREF(generator->value);
13867 				}
13868 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
13869 				ZVAL_COPY_VALUE(&generator->value, value);
13870             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
13871 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
13872 
13873 			} else {
13874 				ZVAL_COPY_VALUE(&generator->value, value);
13875 				if (IS_TMP_VAR == IS_CV) {
13876 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
13877 				}
13878 			}
13879 		}
13880 	} else {
13881 		/* If no value was specified yield null */
13882 		ZVAL_NULL(&generator->value);
13883 	}
13884 
13885 	/* Set the new yielded key */
13886 	if (IS_CONST != IS_UNUSED) {
13887 
13888 		zval *key = EX_CONSTANT(opline->op2);
13889 
13890 		/* Consts, temporary variables and references need copying */
13891 		if (IS_CONST == IS_CONST) {
13892 			ZVAL_COPY_VALUE(&generator->key, key);
13893 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
13894 				Z_ADDREF(generator->key);
13895 			}
13896 		} else if (IS_CONST == IS_TMP_VAR) {
13897 			ZVAL_COPY_VALUE(&generator->key, key);
13898 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
13899 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
13900 
13901 		} else {
13902 			ZVAL_COPY_VALUE(&generator->key, key);
13903 			if (IS_CONST == IS_CV) {
13904 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
13905 			}
13906 		}
13907 
13908 		if (Z_TYPE(generator->key) == IS_LONG
13909 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
13910 		) {
13911 			generator->largest_used_integer_key = Z_LVAL(generator->key);
13912 		}
13913 	} else {
13914 		/* If no key was specified we use auto-increment keys */
13915 		generator->largest_used_integer_key++;
13916 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
13917 	}
13918 
13919 	if (RETURN_VALUE_USED(opline)) {
13920 		/* If the return value of yield is used set the send
13921 		 * target and initialize it to NULL */
13922 		generator->send_target = EX_VAR(opline->result.var);
13923 		ZVAL_NULL(generator->send_target);
13924 	} else {
13925 		generator->send_target = NULL;
13926 	}
13927 
13928 	/* We increment to the next op, so we are at the correct position when the
13929 	 * generator is resumed. */
13930 	ZEND_VM_INC_OPCODE();
13931 
13932 	/* The GOTO VM uses a local opline variable. We need to set the opline
13933 	 * variable in execute_data so we don't resume at an old position. */
13934 	SAVE_OPLINE();
13935 
13936 	ZEND_VM_RETURN();
13937 }
13938 
13939 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13940 {
13941 	USE_OPLINE
13942 	zend_free_op free_op1, free_op2;
13943 	zval *op1, *op2;
13944 	int result;
13945 
13946 	SAVE_OPLINE();
13947 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13948 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
13949 	result = fast_is_identical_function(op1, op2);
13950 	zval_ptr_dtor_nogc(free_op1);
13951 	zval_ptr_dtor_nogc(free_op2);
13952 	ZEND_VM_SMART_BRANCH(result, 1);
13953 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13954 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13955 }
13956 
13957 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13958 {
13959 	USE_OPLINE
13960 	zend_free_op free_op1, free_op2;
13961 	zval *op1, *op2;
13962 	int result;
13963 
13964 	SAVE_OPLINE();
13965 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
13966 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
13967 	result = fast_is_not_identical_function(op1, op2);
13968 	zval_ptr_dtor_nogc(free_op1);
13969 	zval_ptr_dtor_nogc(free_op2);
13970 	ZEND_VM_SMART_BRANCH(result, 1);
13971 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13972 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13973 }
13974 
13975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13976 {
13977 	USE_OPLINE
13978 
13979 	zend_generator *generator = zend_get_running_generator(execute_data);
13980 
13981 	SAVE_OPLINE();
13982 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
13983 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
13984 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
13985 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13986 		HANDLE_EXCEPTION();
13987 	}
13988 
13989 	/* Destroy the previously yielded value */
13990 	zval_ptr_dtor(&generator->value);
13991 
13992 	/* Destroy the previously yielded key */
13993 	zval_ptr_dtor(&generator->key);
13994 
13995 	/* Set the new yielded value */
13996 	if (IS_TMP_VAR != IS_UNUSED) {
13997 		zend_free_op free_op1;
13998 
13999 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
14000 			/* Constants and temporary variables aren't yieldable by reference,
14001 			 * but we still allow them with a notice. */
14002 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
14003 				zval *value;
14004 
14005 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14006 
14007 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14008 				ZVAL_COPY_VALUE(&generator->value, value);
14009 				if (IS_TMP_VAR == IS_CONST) {
14010 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14011 						Z_ADDREF(generator->value);
14012 					}
14013 				}
14014 			} else {
14015 				zval *value_ptr = NULL;
14016 
14017 				/* If a function call result is yielded and the function did
14018 				 * not return by reference we throw a notice. */
14019 				if (IS_TMP_VAR == IS_VAR &&
14020 				    (value_ptr == &EG(uninitialized_zval) ||
14021 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
14022 				      !Z_ISREF_P(value_ptr)))) {
14023 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14024 				} else {
14025 					ZVAL_MAKE_REF(value_ptr);
14026 				}
14027 				ZVAL_COPY(&generator->value, value_ptr);
14028 
14029 			}
14030 		} else {
14031 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14032 
14033 			/* Consts, temporary variables and references need copying */
14034 			if (IS_TMP_VAR == IS_CONST) {
14035 				ZVAL_COPY_VALUE(&generator->value, value);
14036 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14037 					Z_ADDREF(generator->value);
14038 				}
14039 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
14040 				ZVAL_COPY_VALUE(&generator->value, value);
14041             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14042 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
14043 
14044 			} else {
14045 				ZVAL_COPY_VALUE(&generator->value, value);
14046 				if (IS_TMP_VAR == IS_CV) {
14047 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
14048 				}
14049 			}
14050 		}
14051 	} else {
14052 		/* If no value was specified yield null */
14053 		ZVAL_NULL(&generator->value);
14054 	}
14055 
14056 	/* Set the new yielded key */
14057 	if (IS_TMP_VAR != IS_UNUSED) {
14058 		zend_free_op free_op2;
14059 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
14060 
14061 		/* Consts, temporary variables and references need copying */
14062 		if (IS_TMP_VAR == IS_CONST) {
14063 			ZVAL_COPY_VALUE(&generator->key, key);
14064 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
14065 				Z_ADDREF(generator->key);
14066 			}
14067 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
14068 			ZVAL_COPY_VALUE(&generator->key, key);
14069 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
14070 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
14071 
14072 		} else {
14073 			ZVAL_COPY_VALUE(&generator->key, key);
14074 			if (IS_TMP_VAR == IS_CV) {
14075 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
14076 			}
14077 		}
14078 
14079 		if (Z_TYPE(generator->key) == IS_LONG
14080 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
14081 		) {
14082 			generator->largest_used_integer_key = Z_LVAL(generator->key);
14083 		}
14084 	} else {
14085 		/* If no key was specified we use auto-increment keys */
14086 		generator->largest_used_integer_key++;
14087 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
14088 	}
14089 
14090 	if (RETURN_VALUE_USED(opline)) {
14091 		/* If the return value of yield is used set the send
14092 		 * target and initialize it to NULL */
14093 		generator->send_target = EX_VAR(opline->result.var);
14094 		ZVAL_NULL(generator->send_target);
14095 	} else {
14096 		generator->send_target = NULL;
14097 	}
14098 
14099 	/* We increment to the next op, so we are at the correct position when the
14100 	 * generator is resumed. */
14101 	ZEND_VM_INC_OPCODE();
14102 
14103 	/* The GOTO VM uses a local opline variable. We need to set the opline
14104 	 * variable in execute_data so we don't resume at an old position. */
14105 	SAVE_OPLINE();
14106 
14107 	ZEND_VM_RETURN();
14108 }
14109 
14110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14111 {
14112 	USE_OPLINE
14113 	zend_free_op free_op1, free_op2;
14114 	zval *op1, *op2;
14115 	int result;
14116 
14117 	SAVE_OPLINE();
14118 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14119 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
14120 	result = fast_is_identical_function(op1, op2);
14121 	zval_ptr_dtor_nogc(free_op1);
14122 	zval_ptr_dtor_nogc(free_op2);
14123 	ZEND_VM_SMART_BRANCH(result, 1);
14124 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14125 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14126 }
14127 
14128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14129 {
14130 	USE_OPLINE
14131 	zend_free_op free_op1, free_op2;
14132 	zval *op1, *op2;
14133 	int result;
14134 
14135 	SAVE_OPLINE();
14136 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14137 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
14138 	result = fast_is_not_identical_function(op1, op2);
14139 	zval_ptr_dtor_nogc(free_op1);
14140 	zval_ptr_dtor_nogc(free_op2);
14141 	ZEND_VM_SMART_BRANCH(result, 1);
14142 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14143 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14144 }
14145 
14146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14147 {
14148 	USE_OPLINE
14149 
14150 	zend_generator *generator = zend_get_running_generator(execute_data);
14151 
14152 	SAVE_OPLINE();
14153 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14154 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
14155 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14156 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14157 		HANDLE_EXCEPTION();
14158 	}
14159 
14160 	/* Destroy the previously yielded value */
14161 	zval_ptr_dtor(&generator->value);
14162 
14163 	/* Destroy the previously yielded key */
14164 	zval_ptr_dtor(&generator->key);
14165 
14166 	/* Set the new yielded value */
14167 	if (IS_TMP_VAR != IS_UNUSED) {
14168 		zend_free_op free_op1;
14169 
14170 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
14171 			/* Constants and temporary variables aren't yieldable by reference,
14172 			 * but we still allow them with a notice. */
14173 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
14174 				zval *value;
14175 
14176 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14177 
14178 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14179 				ZVAL_COPY_VALUE(&generator->value, value);
14180 				if (IS_TMP_VAR == IS_CONST) {
14181 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14182 						Z_ADDREF(generator->value);
14183 					}
14184 				}
14185 			} else {
14186 				zval *value_ptr = NULL;
14187 
14188 				/* If a function call result is yielded and the function did
14189 				 * not return by reference we throw a notice. */
14190 				if (IS_TMP_VAR == IS_VAR &&
14191 				    (value_ptr == &EG(uninitialized_zval) ||
14192 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
14193 				      !Z_ISREF_P(value_ptr)))) {
14194 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14195 				} else {
14196 					ZVAL_MAKE_REF(value_ptr);
14197 				}
14198 				ZVAL_COPY(&generator->value, value_ptr);
14199 
14200 			}
14201 		} else {
14202 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14203 
14204 			/* Consts, temporary variables and references need copying */
14205 			if (IS_TMP_VAR == IS_CONST) {
14206 				ZVAL_COPY_VALUE(&generator->value, value);
14207 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14208 					Z_ADDREF(generator->value);
14209 				}
14210 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
14211 				ZVAL_COPY_VALUE(&generator->value, value);
14212             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14213 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
14214 
14215 			} else {
14216 				ZVAL_COPY_VALUE(&generator->value, value);
14217 				if (IS_TMP_VAR == IS_CV) {
14218 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
14219 				}
14220 			}
14221 		}
14222 	} else {
14223 		/* If no value was specified yield null */
14224 		ZVAL_NULL(&generator->value);
14225 	}
14226 
14227 	/* Set the new yielded key */
14228 	if (IS_VAR != IS_UNUSED) {
14229 		zend_free_op free_op2;
14230 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
14231 
14232 		/* Consts, temporary variables and references need copying */
14233 		if (IS_VAR == IS_CONST) {
14234 			ZVAL_COPY_VALUE(&generator->key, key);
14235 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
14236 				Z_ADDREF(generator->key);
14237 			}
14238 		} else if (IS_VAR == IS_TMP_VAR) {
14239 			ZVAL_COPY_VALUE(&generator->key, key);
14240 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
14241 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
14242 			zval_ptr_dtor_nogc(free_op2);
14243 		} else {
14244 			ZVAL_COPY_VALUE(&generator->key, key);
14245 			if (IS_VAR == IS_CV) {
14246 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
14247 			}
14248 		}
14249 
14250 		if (Z_TYPE(generator->key) == IS_LONG
14251 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
14252 		) {
14253 			generator->largest_used_integer_key = Z_LVAL(generator->key);
14254 		}
14255 	} else {
14256 		/* If no key was specified we use auto-increment keys */
14257 		generator->largest_used_integer_key++;
14258 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
14259 	}
14260 
14261 	if (RETURN_VALUE_USED(opline)) {
14262 		/* If the return value of yield is used set the send
14263 		 * target and initialize it to NULL */
14264 		generator->send_target = EX_VAR(opline->result.var);
14265 		ZVAL_NULL(generator->send_target);
14266 	} else {
14267 		generator->send_target = NULL;
14268 	}
14269 
14270 	/* We increment to the next op, so we are at the correct position when the
14271 	 * generator is resumed. */
14272 	ZEND_VM_INC_OPCODE();
14273 
14274 	/* The GOTO VM uses a local opline variable. We need to set the opline
14275 	 * variable in execute_data so we don't resume at an old position. */
14276 	SAVE_OPLINE();
14277 
14278 	ZEND_VM_RETURN();
14279 }
14280 
14281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14282 {
14283 	USE_OPLINE
14284 	zval *container;
14285 	zend_free_op free_op1;
14286 
14287 	SAVE_OPLINE();
14288 
14289 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14290         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
14291             zend_throw_error(NULL, "Cannot use temporary expression in write context");
14292 
14293 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14294 			HANDLE_EXCEPTION();
14295         }
14296 		container = NULL;
14297 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
14298 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14299 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
14300 		}
14301 
14302 
14303 	} else {
14304 		if (IS_UNUSED == IS_UNUSED) {
14305 			zend_throw_error(NULL, "Cannot use [] for reading");
14306 
14307 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14308 			HANDLE_EXCEPTION();
14309 		}
14310 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14311 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
14312 
14313 		zval_ptr_dtor_nogc(free_op1);
14314 	}
14315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14316 }
14317 
14318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14319 {
14320 	USE_OPLINE
14321 
14322 	SAVE_OPLINE();
14323 	if (IS_TMP_VAR == IS_UNUSED) {
14324 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
14325 	} else {
14326 /* prevents "undefined variable opline" errors */
14327 #if 0 || (IS_TMP_VAR != IS_UNUSED)
14328 		zval *retval_ref, *retval_ptr;
14329 		zend_free_op free_op1;
14330 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
14331 
14332 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14333 
14334 		if (IS_TMP_VAR == IS_CONST) {
14335 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
14336 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
14337 		} else if (IS_TMP_VAR == IS_VAR) {
14338 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
14339 				retval_ptr = Z_INDIRECT_P(retval_ptr);
14340 			}
14341 			ZVAL_DEREF(retval_ptr);
14342 		} else if (IS_TMP_VAR == IS_CV) {
14343 			ZVAL_DEREF(retval_ptr);
14344 		}
14345 
14346 		if (UNEXPECTED(!ret_info->class_name
14347 			&& ret_info->type_hint != IS_CALLABLE
14348 			&& ret_info->type_hint != IS_ITERABLE
14349 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
14350 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
14351 			&& retval_ref != retval_ptr)
14352 		) {
14353 			/* A cast might happen - unwrap the reference if this is a by-value return */
14354 			if (Z_REFCOUNT_P(retval_ref) == 1) {
14355 				ZVAL_UNREF(retval_ref);
14356 			} else {
14357 				Z_DELREF_P(retval_ref);
14358 				ZVAL_COPY(retval_ref, retval_ptr);
14359 			}
14360 			retval_ptr = retval_ref;
14361 		}
14362 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
14363 
14364 		if (UNEXPECTED(EG(exception) != NULL)) {
14365 			if (IS_TMP_VAR == IS_CONST) {
14366 				zval_ptr_dtor_nogc(retval_ptr);
14367 			}
14368 		}
14369 #endif
14370 	}
14371 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14372 }
14373 
14374 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14375 {
14376 	USE_OPLINE
14377 	zend_free_op free_op1;
14378 	zval *expr_ptr, new_expr;
14379 
14380 	SAVE_OPLINE();
14381 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
14382 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
14383 		expr_ptr = NULL;
14384 		ZVAL_MAKE_REF(expr_ptr);
14385 		Z_ADDREF_P(expr_ptr);
14386 
14387 	} else {
14388 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14389 		if (IS_TMP_VAR == IS_TMP_VAR) {
14390 			/* pass */
14391 		} else if (IS_TMP_VAR == IS_CONST) {
14392 			if (Z_REFCOUNTED_P(expr_ptr)) {
14393 				Z_ADDREF_P(expr_ptr);
14394 			}
14395 		} else if (IS_TMP_VAR == IS_CV) {
14396 			ZVAL_DEREF(expr_ptr);
14397 			if (Z_REFCOUNTED_P(expr_ptr)) {
14398 				Z_ADDREF_P(expr_ptr);
14399 			}
14400 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
14401 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
14402 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
14403 
14404 				expr_ptr = Z_REFVAL_P(expr_ptr);
14405 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
14406 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14407 					expr_ptr = &new_expr;
14408 					efree_size(ref, sizeof(zend_reference));
14409 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
14410 					Z_ADDREF_P(expr_ptr);
14411 				}
14412 			}
14413 		}
14414 	}
14415 
14416 	if (IS_UNUSED != IS_UNUSED) {
14417 
14418 		zval *offset = NULL;
14419 		zend_string *str;
14420 		zend_ulong hval;
14421 
14422 add_again:
14423 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
14424 			str = Z_STR_P(offset);
14425 			if (IS_UNUSED != IS_CONST) {
14426 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
14427 					goto num_index;
14428 				}
14429 			}
14430 str_index:
14431 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
14432 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
14433 			hval = Z_LVAL_P(offset);
14434 num_index:
14435 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
14436 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
14437 			offset = Z_REFVAL_P(offset);
14438 			goto add_again;
14439 		} else if (Z_TYPE_P(offset) == IS_NULL) {
14440 			str = ZSTR_EMPTY_ALLOC();
14441 			goto str_index;
14442 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
14443 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
14444 			goto num_index;
14445 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
14446 			hval = 0;
14447 			goto num_index;
14448 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
14449 			hval = 1;
14450 			goto num_index;
14451 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
14452 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
14453 			str = ZSTR_EMPTY_ALLOC();
14454 			goto str_index;
14455 		} else {
14456 			zend_error(E_WARNING, "Illegal offset type");
14457 			zval_ptr_dtor(expr_ptr);
14458 		}
14459 
14460 	} else {
14461 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
14462 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
14463 			zval_ptr_dtor(expr_ptr);
14464 		}
14465 	}
14466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14467 }
14468 
14469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14470 {
14471 	zval *array;
14472 	uint32_t size;
14473 	USE_OPLINE
14474 
14475 	array = EX_VAR(opline->result.var);
14476 	if (IS_TMP_VAR != IS_UNUSED) {
14477 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
14478 	} else {
14479 		size = 0;
14480 	}
14481 	ZVAL_NEW_ARR(array);
14482 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
14483 
14484 	if (IS_TMP_VAR != IS_UNUSED) {
14485 		/* Explicitly initialize array as not-packed if flag is set */
14486 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
14487 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
14488 		}
14489 	}
14490 
14491 	if (IS_TMP_VAR == IS_UNUSED) {
14492 		ZEND_VM_NEXT_OPCODE();
14493 #if 0 || (IS_TMP_VAR != IS_UNUSED)
14494 	} else {
14495 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14496 #endif
14497 	}
14498 }
14499 
14500 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14501 {
14502 	USE_OPLINE
14503 
14504 	zend_generator *generator = zend_get_running_generator(execute_data);
14505 
14506 	SAVE_OPLINE();
14507 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14508 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
14509 
14510 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14511 		HANDLE_EXCEPTION();
14512 	}
14513 
14514 	/* Destroy the previously yielded value */
14515 	zval_ptr_dtor(&generator->value);
14516 
14517 	/* Destroy the previously yielded key */
14518 	zval_ptr_dtor(&generator->key);
14519 
14520 	/* Set the new yielded value */
14521 	if (IS_TMP_VAR != IS_UNUSED) {
14522 		zend_free_op free_op1;
14523 
14524 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
14525 			/* Constants and temporary variables aren't yieldable by reference,
14526 			 * but we still allow them with a notice. */
14527 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
14528 				zval *value;
14529 
14530 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14531 
14532 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14533 				ZVAL_COPY_VALUE(&generator->value, value);
14534 				if (IS_TMP_VAR == IS_CONST) {
14535 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14536 						Z_ADDREF(generator->value);
14537 					}
14538 				}
14539 			} else {
14540 				zval *value_ptr = NULL;
14541 
14542 				/* If a function call result is yielded and the function did
14543 				 * not return by reference we throw a notice. */
14544 				if (IS_TMP_VAR == IS_VAR &&
14545 				    (value_ptr == &EG(uninitialized_zval) ||
14546 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
14547 				      !Z_ISREF_P(value_ptr)))) {
14548 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
14549 				} else {
14550 					ZVAL_MAKE_REF(value_ptr);
14551 				}
14552 				ZVAL_COPY(&generator->value, value_ptr);
14553 
14554 			}
14555 		} else {
14556 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14557 
14558 			/* Consts, temporary variables and references need copying */
14559 			if (IS_TMP_VAR == IS_CONST) {
14560 				ZVAL_COPY_VALUE(&generator->value, value);
14561 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
14562 					Z_ADDREF(generator->value);
14563 				}
14564 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
14565 				ZVAL_COPY_VALUE(&generator->value, value);
14566             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14567 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
14568 
14569 			} else {
14570 				ZVAL_COPY_VALUE(&generator->value, value);
14571 				if (IS_TMP_VAR == IS_CV) {
14572 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
14573 				}
14574 			}
14575 		}
14576 	} else {
14577 		/* If no value was specified yield null */
14578 		ZVAL_NULL(&generator->value);
14579 	}
14580 
14581 	/* Set the new yielded key */
14582 	if (IS_UNUSED != IS_UNUSED) {
14583 
14584 		zval *key = NULL;
14585 
14586 		/* Consts, temporary variables and references need copying */
14587 		if (IS_UNUSED == IS_CONST) {
14588 			ZVAL_COPY_VALUE(&generator->key, key);
14589 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
14590 				Z_ADDREF(generator->key);
14591 			}
14592 		} else if (IS_UNUSED == IS_TMP_VAR) {
14593 			ZVAL_COPY_VALUE(&generator->key, key);
14594 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
14595 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
14596 
14597 		} else {
14598 			ZVAL_COPY_VALUE(&generator->key, key);
14599 			if (IS_UNUSED == IS_CV) {
14600 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
14601 			}
14602 		}
14603 
14604 		if (Z_TYPE(generator->key) == IS_LONG
14605 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
14606 		) {
14607 			generator->largest_used_integer_key = Z_LVAL(generator->key);
14608 		}
14609 	} else {
14610 		/* If no key was specified we use auto-increment keys */
14611 		generator->largest_used_integer_key++;
14612 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
14613 	}
14614 
14615 	if (RETURN_VALUE_USED(opline)) {
14616 		/* If the return value of yield is used set the send
14617 		 * target and initialize it to NULL */
14618 		generator->send_target = EX_VAR(opline->result.var);
14619 		ZVAL_NULL(generator->send_target);
14620 	} else {
14621 		generator->send_target = NULL;
14622 	}
14623 
14624 	/* We increment to the next op, so we are at the correct position when the
14625 	 * generator is resumed. */
14626 	ZEND_VM_INC_OPCODE();
14627 
14628 	/* The GOTO VM uses a local opline variable. We need to set the opline
14629 	 * variable in execute_data so we don't resume at an old position. */
14630 	SAVE_OPLINE();
14631 
14632 	ZEND_VM_RETURN();
14633 }
14634 
14635 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14636 {
14637 	USE_OPLINE
14638 	zend_free_op free_op1;
14639 	zval *op1, *op2;
14640 	int result;
14641 
14642 	SAVE_OPLINE();
14643 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14644 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
14645 	result = fast_is_identical_function(op1, op2);
14646 	zval_ptr_dtor_nogc(free_op1);
14647 
14648 	ZEND_VM_SMART_BRANCH(result, 1);
14649 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14650 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14651 }
14652 
14653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14654 {
14655 	USE_OPLINE
14656 	zend_free_op free_op1;
14657 	zval *op1, *op2;
14658 	int result;
14659 
14660 	SAVE_OPLINE();
14661 	op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14662 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
14663 	result = fast_is_not_identical_function(op1, op2);
14664 	zval_ptr_dtor_nogc(free_op1);
14665 
14666 	ZEND_VM_SMART_BRANCH(result, 1);
14667 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
14668 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14669 }
14670 
14671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14672 {
14673 	USE_OPLINE
14674 	zval *container;
14675 	zend_free_op free_op1;
14676 
14677 	SAVE_OPLINE();
14678 
14679 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14680         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
14681             zend_throw_error(NULL, "Cannot use temporary expression in write context");
14682 
14683 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14684 			HANDLE_EXCEPTION();
14685         }
14686 		container = NULL;
14687 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
14688 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14689 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
14690 		}
14691 
14692 
14693 	} else {
14694 		if (IS_CV == IS_UNUSED) {
14695 			zend_throw_error(NULL, "Cannot use [] for reading");
14696 
14697 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14698 			HANDLE_EXCEPTION();
14699 		}
14700 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14701 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
14702 
14703 		zval_ptr_dtor_nogc(free_op1);
14704 	}
14705 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14706 }
14707 
14708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14709 {
14710 	USE_OPLINE
14711 	zend_free_op free_op1;
14712 	zval *container;
14713 
14714 	zval *offset;
14715 
14716 	SAVE_OPLINE();
14717 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14718 
14719 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
14720 		zend_throw_error(NULL, "Using $this when not in object context");
14721 
14722 		HANDLE_EXCEPTION();
14723 	}
14724 
14725 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14726 
14727 	if (IS_TMP_VAR == IS_CONST ||
14728 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
14729 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
14730 			container = Z_REFVAL_P(container);
14731 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
14732 				goto fetch_obj_r_no_object;
14733 			}
14734 		} else {
14735 			goto fetch_obj_r_no_object;
14736 		}
14737 	}
14738 
14739 	/* here we are sure we are dealing with an object */
14740 	do {
14741 		zend_object *zobj = Z_OBJ_P(container);
14742 		zval *retval;
14743 
14744 		if (IS_CV == IS_CONST &&
14745 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
14746 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
14747 
14748 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
14749 				retval = OBJ_PROP(zobj, prop_offset);
14750 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
14751 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
14752 					break;
14753 				}
14754 			} else if (EXPECTED(zobj->properties != NULL)) {
14755 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
14756 				if (EXPECTED(retval)) {
14757 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
14758 					break;
14759 				}
14760 			}
14761 		}
14762 
14763 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
14764 fetch_obj_r_no_object:
14765 			zend_error(E_NOTICE, "Trying to get property of non-object");
14766 			ZVAL_NULL(EX_VAR(opline->result.var));
14767 		} else {
14768 			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));
14769 
14770 			if (retval != EX_VAR(opline->result.var)) {
14771 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
14772 			}
14773 		}
14774 	} while (0);
14775 
14776 	zval_ptr_dtor_nogc(free_op1);
14777 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14778 }
14779 
14780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14781 {
14782 	USE_OPLINE
14783 	zval *container;
14784 
14785 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
14786 		/* Behave like FETCH_OBJ_W */
14787 		zend_free_op free_op1;
14788 		zval *property;
14789 
14790 		SAVE_OPLINE();
14791 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14792 		container = NULL;
14793 
14794 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
14795 			zend_throw_error(NULL, "Using $this when not in object context");
14796 
14797 			HANDLE_EXCEPTION();
14798 		}
14799 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
14800 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
14801 
14802 
14803 			HANDLE_EXCEPTION();
14804 		}
14805 		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);
14806 
14807 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
14808 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
14809 		}
14810 
14811 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14812 	} else {
14813 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14814 	}
14815 }
14816 
14817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14818 {
14819 	USE_OPLINE
14820 
14821 	zend_string **rope;
14822 	zval *var;
14823 
14824 	/* op1 and result are the same */
14825 	rope = (zend_string**)EX_VAR(opline->op1.var);
14826 	if (IS_CV == IS_CONST) {
14827 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14828 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14829 	} else {
14830 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14831 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14832 			if (IS_CV == IS_CV) {
14833 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14834 			} else {
14835 				rope[opline->extended_value] = Z_STR_P(var);
14836 			}
14837 		} else {
14838 			SAVE_OPLINE();
14839 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14840 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14841 			}
14842 			rope[opline->extended_value] = _zval_get_string_func(var);
14843 
14844 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14845 		}
14846 	}
14847 	ZEND_VM_NEXT_OPCODE();
14848 }
14849 
14850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14851 {
14852 	USE_OPLINE
14853 
14854 	zend_string **rope;
14855 	zval *var, *ret;
14856 	uint32_t i;
14857 	size_t len = 0;
14858 	char *target;
14859 
14860 	rope = (zend_string**)EX_VAR(opline->op1.var);
14861 	if (IS_CV == IS_CONST) {
14862 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
14863 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14864 	} else {
14865 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14866 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
14867 			if (IS_CV == IS_CV) {
14868 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
14869 			} else {
14870 				rope[opline->extended_value] = Z_STR_P(var);
14871 			}
14872 		} else {
14873 			SAVE_OPLINE();
14874 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
14875 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
14876 			}
14877 			rope[opline->extended_value] = _zval_get_string_func(var);
14878 
14879 			if (UNEXPECTED(EG(exception))) {
14880 				for (i = 0; i <= opline->extended_value; i++) {
14881 					zend_string_release(rope[i]);
14882 				}
14883 				HANDLE_EXCEPTION();
14884 			}
14885 		}
14886 	}
14887 	for (i = 0; i <= opline->extended_value; i++) {
14888 		len += ZSTR_LEN(rope[i]);
14889 	}
14890 	ret = EX_VAR(opline->result.var);
14891 	ZVAL_STR(ret, zend_string_alloc(len, 0));
14892 	target = Z_STRVAL_P(ret);
14893 	for (i = 0; i <= opline->extended_value; i++) {
14894 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
14895 		target += ZSTR_LEN(rope[i]);
14896 		zend_string_release(rope[i]);
14897 	}
14898 	*target = '\0';
14899 
14900 	ZEND_VM_NEXT_OPCODE();
14901 }
14902 
14903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14904 {
14905 	USE_OPLINE
14906 	zend_free_op free_op1;
14907 	zval *expr_ptr, new_expr;
14908 
14909 	SAVE_OPLINE();
14910 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
14911 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
14912 		expr_ptr = NULL;
14913 		ZVAL_MAKE_REF(expr_ptr);
14914 		Z_ADDREF_P(expr_ptr);
14915 
14916 	} else {
14917 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
14918 		if (IS_TMP_VAR == IS_TMP_VAR) {
14919 			/* pass */
14920 		} else if (IS_TMP_VAR == IS_CONST) {
14921 			if (Z_REFCOUNTED_P(expr_ptr)) {
14922 				Z_ADDREF_P(expr_ptr);
14923 			}
14924 		} else if (IS_TMP_VAR == IS_CV) {
14925 			ZVAL_DEREF(expr_ptr);
14926 			if (Z_REFCOUNTED_P(expr_ptr)) {
14927 				Z_ADDREF_P(expr_ptr);
14928 			}
14929 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
14930 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
14931 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
14932 
14933 				expr_ptr = Z_REFVAL_P(expr_ptr);
14934 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
14935 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
14936 					expr_ptr = &new_expr;
14937 					efree_size(ref, sizeof(zend_reference));
14938 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
14939 					Z_ADDREF_P(expr_ptr);
14940 				}
14941 			}
14942 		}
14943 	}
14944 
14945 	if (IS_CV != IS_UNUSED) {
14946 
14947 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
14948 		zend_string *str;
14949 		zend_ulong hval;
14950 
14951 add_again:
14952 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
14953 			str = Z_STR_P(offset);
14954 			if (IS_CV != IS_CONST) {
14955 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
14956 					goto num_index;
14957 				}
14958 			}
14959 str_index:
14960 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
14961 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
14962 			hval = Z_LVAL_P(offset);
14963 num_index:
14964 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
14965 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
14966 			offset = Z_REFVAL_P(offset);
14967 			goto add_again;
14968 		} else if (Z_TYPE_P(offset) == IS_NULL) {
14969 			str = ZSTR_EMPTY_ALLOC();
14970 			goto str_index;
14971 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
14972 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
14973 			goto num_index;
14974 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
14975 			hval = 0;
14976 			goto num_index;
14977 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
14978 			hval = 1;
14979 			goto num_index;
14980 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
14981 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
14982 			str = ZSTR_EMPTY_ALLOC();
14983 			goto str_index;
14984 		} else {
14985 			zend_error(E_WARNING, "Illegal offset type");
14986 			zval_ptr_dtor(expr_ptr);
14987 		}
14988 
14989 	} else {
14990 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
14991 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
14992 			zval_ptr_dtor(expr_ptr);
14993 		}
14994 	}
14995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14996 }
14997 
14998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14999 {
15000 	zval *array;
15001 	uint32_t size;
15002 	USE_OPLINE
15003 
15004 	array = EX_VAR(opline->result.var);
15005 	if (IS_TMP_VAR != IS_UNUSED) {
15006 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
15007 	} else {
15008 		size = 0;
15009 	}
15010 	ZVAL_NEW_ARR(array);
15011 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
15012 
15013 	if (IS_TMP_VAR != IS_UNUSED) {
15014 		/* Explicitly initialize array as not-packed if flag is set */
15015 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
15016 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
15017 		}
15018 	}
15019 
15020 	if (IS_TMP_VAR == IS_UNUSED) {
15021 		ZEND_VM_NEXT_OPCODE();
15022 #if 0 || (IS_TMP_VAR != IS_UNUSED)
15023 	} else {
15024 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15025 #endif
15026 	}
15027 }
15028 
15029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15030 {
15031 	USE_OPLINE
15032 
15033 	zend_generator *generator = zend_get_running_generator(execute_data);
15034 
15035 	SAVE_OPLINE();
15036 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
15037 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
15038 
15039 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15040 		HANDLE_EXCEPTION();
15041 	}
15042 
15043 	/* Destroy the previously yielded value */
15044 	zval_ptr_dtor(&generator->value);
15045 
15046 	/* Destroy the previously yielded key */
15047 	zval_ptr_dtor(&generator->key);
15048 
15049 	/* Set the new yielded value */
15050 	if (IS_TMP_VAR != IS_UNUSED) {
15051 		zend_free_op free_op1;
15052 
15053 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
15054 			/* Constants and temporary variables aren't yieldable by reference,
15055 			 * but we still allow them with a notice. */
15056 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
15057 				zval *value;
15058 
15059 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
15060 
15061 				value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15062 				ZVAL_COPY_VALUE(&generator->value, value);
15063 				if (IS_TMP_VAR == IS_CONST) {
15064 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
15065 						Z_ADDREF(generator->value);
15066 					}
15067 				}
15068 			} else {
15069 				zval *value_ptr = NULL;
15070 
15071 				/* If a function call result is yielded and the function did
15072 				 * not return by reference we throw a notice. */
15073 				if (IS_TMP_VAR == IS_VAR &&
15074 				    (value_ptr == &EG(uninitialized_zval) ||
15075 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
15076 				      !Z_ISREF_P(value_ptr)))) {
15077 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
15078 				} else {
15079 					ZVAL_MAKE_REF(value_ptr);
15080 				}
15081 				ZVAL_COPY(&generator->value, value_ptr);
15082 
15083 			}
15084 		} else {
15085 			zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15086 
15087 			/* Consts, temporary variables and references need copying */
15088 			if (IS_TMP_VAR == IS_CONST) {
15089 				ZVAL_COPY_VALUE(&generator->value, value);
15090 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
15091 					Z_ADDREF(generator->value);
15092 				}
15093 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
15094 				ZVAL_COPY_VALUE(&generator->value, value);
15095             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
15096 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
15097 
15098 			} else {
15099 				ZVAL_COPY_VALUE(&generator->value, value);
15100 				if (IS_TMP_VAR == IS_CV) {
15101 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
15102 				}
15103 			}
15104 		}
15105 	} else {
15106 		/* If no value was specified yield null */
15107 		ZVAL_NULL(&generator->value);
15108 	}
15109 
15110 	/* Set the new yielded key */
15111 	if (IS_CV != IS_UNUSED) {
15112 
15113 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
15114 
15115 		/* Consts, temporary variables and references need copying */
15116 		if (IS_CV == IS_CONST) {
15117 			ZVAL_COPY_VALUE(&generator->key, key);
15118 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
15119 				Z_ADDREF(generator->key);
15120 			}
15121 		} else if (IS_CV == IS_TMP_VAR) {
15122 			ZVAL_COPY_VALUE(&generator->key, key);
15123 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
15124 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
15125 
15126 		} else {
15127 			ZVAL_COPY_VALUE(&generator->key, key);
15128 			if (IS_CV == IS_CV) {
15129 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
15130 			}
15131 		}
15132 
15133 		if (Z_TYPE(generator->key) == IS_LONG
15134 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
15135 		) {
15136 			generator->largest_used_integer_key = Z_LVAL(generator->key);
15137 		}
15138 	} else {
15139 		/* If no key was specified we use auto-increment keys */
15140 		generator->largest_used_integer_key++;
15141 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
15142 	}
15143 
15144 	if (RETURN_VALUE_USED(opline)) {
15145 		/* If the return value of yield is used set the send
15146 		 * target and initialize it to NULL */
15147 		generator->send_target = EX_VAR(opline->result.var);
15148 		ZVAL_NULL(generator->send_target);
15149 	} else {
15150 		generator->send_target = NULL;
15151 	}
15152 
15153 	/* We increment to the next op, so we are at the correct position when the
15154 	 * generator is resumed. */
15155 	ZEND_VM_INC_OPCODE();
15156 
15157 	/* The GOTO VM uses a local opline variable. We need to set the opline
15158 	 * variable in execute_data so we don't resume at an old position. */
15159 	SAVE_OPLINE();
15160 
15161 	ZEND_VM_RETURN();
15162 }
15163 
15164 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15165 {
15166 	USE_OPLINE
15167 	zend_free_op free_op1;
15168 	zval *closure, *var;
15169 	zend_string *var_name;
15170 
15171 	closure = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15172 	if (opline->extended_value) {
15173 		/* By-ref binding */
15174 		var = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
15175 		ZVAL_MAKE_REF(var);
15176 		Z_ADDREF_P(var);
15177 	} else {
15178 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
15179 		if (UNEXPECTED(Z_ISUNDEF_P(var))) {
15180 			SAVE_OPLINE();
15181 			var = GET_OP2_UNDEF_CV(var, BP_VAR_R);
15182 			if (UNEXPECTED(EG(exception))) {
15183 				HANDLE_EXCEPTION();
15184 			}
15185 		}
15186 		ZVAL_DEREF(var);
15187 		Z_TRY_ADDREF_P(var);
15188 	}
15189 
15190 	var_name = CV_DEF_OF(EX_VAR_TO_NUM(opline->op2.var));
15191 	zend_closure_bind_var(closure, var_name, var);
15192 	ZEND_VM_NEXT_OPCODE();
15193 }
15194 
15195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15196 {
15197 	USE_OPLINE
15198 	zval *container;
15199 	zend_free_op free_op1, free_op2;
15200 
15201 	SAVE_OPLINE();
15202 
15203 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
15204         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
15205             zend_throw_error(NULL, "Cannot use temporary expression in write context");
15206 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
15207 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15208 			HANDLE_EXCEPTION();
15209         }
15210 		container = NULL;
15211 		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));
15212 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
15213 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
15214 		}
15215 		zval_ptr_dtor_nogc(free_op2);
15216 
15217 	} else {
15218 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
15219 			zend_throw_error(NULL, "Cannot use [] for reading");
15220 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
15221 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15222 			HANDLE_EXCEPTION();
15223 		}
15224 		container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15225 		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));
15226 		zval_ptr_dtor_nogc(free_op2);
15227 		zval_ptr_dtor_nogc(free_op1);
15228 	}
15229 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15230 }
15231 
15232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15233 {
15234 	USE_OPLINE
15235 	zend_free_op free_op1;
15236 	zval *container;
15237 	zend_free_op free_op2;
15238 	zval *offset;
15239 
15240 	SAVE_OPLINE();
15241 	container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15242 
15243 	if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15244 		zend_throw_error(NULL, "Using $this when not in object context");
15245 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
15246 		HANDLE_EXCEPTION();
15247 	}
15248 
15249 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15250 
15251 	if (IS_TMP_VAR == IS_CONST ||
15252 	    (IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15253 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15254 			container = Z_REFVAL_P(container);
15255 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
15256 				goto fetch_obj_r_no_object;
15257 			}
15258 		} else {
15259 			goto fetch_obj_r_no_object;
15260 		}
15261 	}
15262 
15263 	/* here we are sure we are dealing with an object */
15264 	do {
15265 		zend_object *zobj = Z_OBJ_P(container);
15266 		zval *retval;
15267 
15268 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
15269 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
15270 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
15271 
15272 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
15273 				retval = OBJ_PROP(zobj, prop_offset);
15274 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
15275 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
15276 					break;
15277 				}
15278 			} else if (EXPECTED(zobj->properties != NULL)) {
15279 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
15280 				if (EXPECTED(retval)) {
15281 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
15282 					break;
15283 				}
15284 			}
15285 		}
15286 
15287 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
15288 fetch_obj_r_no_object:
15289 			zend_error(E_NOTICE, "Trying to get property of non-object");
15290 			ZVAL_NULL(EX_VAR(opline->result.var));
15291 		} else {
15292 			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));
15293 
15294 			if (retval != EX_VAR(opline->result.var)) {
15295 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
15296 			}
15297 		}
15298 	} while (0);
15299 
15300 	zval_ptr_dtor_nogc(free_op2);
15301 	zval_ptr_dtor_nogc(free_op1);
15302 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15303 }
15304 
15305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15306 {
15307 	USE_OPLINE
15308 	zval *container;
15309 
15310 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
15311 		/* Behave like FETCH_OBJ_W */
15312 		zend_free_op free_op1, free_op2;
15313 		zval *property;
15314 
15315 		SAVE_OPLINE();
15316 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15317 		container = NULL;
15318 
15319 		if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15320 			zend_throw_error(NULL, "Using $this when not in object context");
15321 			zval_ptr_dtor_nogc(free_op2);
15322 			HANDLE_EXCEPTION();
15323 		}
15324 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
15325 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
15326 			zval_ptr_dtor_nogc(free_op2);
15327 
15328 			HANDLE_EXCEPTION();
15329 		}
15330 		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);
15331 		zval_ptr_dtor_nogc(free_op2);
15332 		if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
15333 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
15334 		}
15335 
15336 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15337 	} else {
15338 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15339 	}
15340 }
15341 
15342 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15343 {
15344 	USE_OPLINE
15345 	zend_free_op free_op2;
15346 	zend_string **rope;
15347 	zval *var;
15348 
15349 	/* op1 and result are the same */
15350 	rope = (zend_string**)EX_VAR(opline->op1.var);
15351 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15352 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15353 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
15354 	} else {
15355 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15356 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
15357 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
15358 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
15359 			} else {
15360 				rope[opline->extended_value] = Z_STR_P(var);
15361 			}
15362 		} else {
15363 			SAVE_OPLINE();
15364 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
15365 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
15366 			}
15367 			rope[opline->extended_value] = _zval_get_string_func(var);
15368 			zval_ptr_dtor_nogc(free_op2);
15369 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15370 		}
15371 	}
15372 	ZEND_VM_NEXT_OPCODE();
15373 }
15374 
15375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15376 {
15377 	USE_OPLINE
15378 	zend_free_op free_op2;
15379 	zend_string **rope;
15380 	zval *var, *ret;
15381 	uint32_t i;
15382 	size_t len = 0;
15383 	char *target;
15384 
15385 	rope = (zend_string**)EX_VAR(opline->op1.var);
15386 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15387 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15388 		rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
15389 	} else {
15390 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15391 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
15392 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
15393 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
15394 			} else {
15395 				rope[opline->extended_value] = Z_STR_P(var);
15396 			}
15397 		} else {
15398 			SAVE_OPLINE();
15399 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
15400 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
15401 			}
15402 			rope[opline->extended_value] = _zval_get_string_func(var);
15403 			zval_ptr_dtor_nogc(free_op2);
15404 			if (UNEXPECTED(EG(exception))) {
15405 				for (i = 0; i <= opline->extended_value; i++) {
15406 					zend_string_release(rope[i]);
15407 				}
15408 				HANDLE_EXCEPTION();
15409 			}
15410 		}
15411 	}
15412 	for (i = 0; i <= opline->extended_value; i++) {
15413 		len += ZSTR_LEN(rope[i]);
15414 	}
15415 	ret = EX_VAR(opline->result.var);
15416 	ZVAL_STR(ret, zend_string_alloc(len, 0));
15417 	target = Z_STRVAL_P(ret);
15418 	for (i = 0; i <= opline->extended_value; i++) {
15419 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
15420 		target += ZSTR_LEN(rope[i]);
15421 		zend_string_release(rope[i]);
15422 	}
15423 	*target = '\0';
15424 
15425 	ZEND_VM_NEXT_OPCODE();
15426 }
15427 
15428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15429 {
15430 	USE_OPLINE
15431 	zend_free_op free_op1;
15432 	zval *expr_ptr, new_expr;
15433 
15434 	SAVE_OPLINE();
15435 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
15436 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
15437 		expr_ptr = NULL;
15438 		ZVAL_MAKE_REF(expr_ptr);
15439 		Z_ADDREF_P(expr_ptr);
15440 
15441 	} else {
15442 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
15443 		if (IS_TMP_VAR == IS_TMP_VAR) {
15444 			/* pass */
15445 		} else if (IS_TMP_VAR == IS_CONST) {
15446 			if (Z_REFCOUNTED_P(expr_ptr)) {
15447 				Z_ADDREF_P(expr_ptr);
15448 			}
15449 		} else if (IS_TMP_VAR == IS_CV) {
15450 			ZVAL_DEREF(expr_ptr);
15451 			if (Z_REFCOUNTED_P(expr_ptr)) {
15452 				Z_ADDREF_P(expr_ptr);
15453 			}
15454 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
15455 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
15456 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
15457 
15458 				expr_ptr = Z_REFVAL_P(expr_ptr);
15459 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15460 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
15461 					expr_ptr = &new_expr;
15462 					efree_size(ref, sizeof(zend_reference));
15463 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
15464 					Z_ADDREF_P(expr_ptr);
15465 				}
15466 			}
15467 		}
15468 	}
15469 
15470 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
15471 		zend_free_op free_op2;
15472 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
15473 		zend_string *str;
15474 		zend_ulong hval;
15475 
15476 add_again:
15477 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
15478 			str = Z_STR_P(offset);
15479 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15480 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
15481 					goto num_index;
15482 				}
15483 			}
15484 str_index:
15485 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
15486 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
15487 			hval = Z_LVAL_P(offset);
15488 num_index:
15489 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
15490 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
15491 			offset = Z_REFVAL_P(offset);
15492 			goto add_again;
15493 		} else if (Z_TYPE_P(offset) == IS_NULL) {
15494 			str = ZSTR_EMPTY_ALLOC();
15495 			goto str_index;
15496 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
15497 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
15498 			goto num_index;
15499 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
15500 			hval = 0;
15501 			goto num_index;
15502 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
15503 			hval = 1;
15504 			goto num_index;
15505 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
15506 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
15507 			str = ZSTR_EMPTY_ALLOC();
15508 			goto str_index;
15509 		} else {
15510 			zend_error(E_WARNING, "Illegal offset type");
15511 			zval_ptr_dtor(expr_ptr);
15512 		}
15513 		zval_ptr_dtor_nogc(free_op2);
15514 	} else {
15515 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
15516 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
15517 			zval_ptr_dtor(expr_ptr);
15518 		}
15519 	}
15520 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15521 }
15522 
15523 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15524 {
15525 	zval *array;
15526 	uint32_t size;
15527 	USE_OPLINE
15528 
15529 	array = EX_VAR(opline->result.var);
15530 	if (IS_TMP_VAR != IS_UNUSED) {
15531 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
15532 	} else {
15533 		size = 0;
15534 	}
15535 	ZVAL_NEW_ARR(array);
15536 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
15537 
15538 	if (IS_TMP_VAR != IS_UNUSED) {
15539 		/* Explicitly initialize array as not-packed if flag is set */
15540 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
15541 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
15542 		}
15543 	}
15544 
15545 	if (IS_TMP_VAR == IS_UNUSED) {
15546 		ZEND_VM_NEXT_OPCODE();
15547 #if 0 || (IS_TMP_VAR != IS_UNUSED)
15548 	} else {
15549 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15550 #endif
15551 	}
15552 }
15553 
15554 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15555 {
15556 	USE_OPLINE
15557 	zend_free_op free_op1;
15558 	zval *var_ptr;
15559 
15560 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15561 
15562 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15563 		fast_long_increment_function(var_ptr);
15564 		if (UNEXPECTED(0)) {
15565 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15566 		}
15567 		ZEND_VM_NEXT_OPCODE();
15568 	}
15569 
15570 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15571 		if (UNEXPECTED(0)) {
15572 			ZVAL_NULL(EX_VAR(opline->result.var));
15573 		}
15574 		ZEND_VM_NEXT_OPCODE();
15575 	}
15576 
15577 	SAVE_OPLINE();
15578 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15579 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15580 	}
15581 	ZVAL_DEREF(var_ptr);
15582 	SEPARATE_ZVAL_NOREF(var_ptr);
15583 
15584 	increment_function(var_ptr);
15585 
15586 	if (UNEXPECTED(0)) {
15587 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15588 	}
15589 
15590 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15591 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15592 }
15593 
15594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15595 {
15596 	USE_OPLINE
15597 	zend_free_op free_op1;
15598 	zval *var_ptr;
15599 
15600 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15601 
15602 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15603 		fast_long_increment_function(var_ptr);
15604 		if (UNEXPECTED(1)) {
15605 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15606 		}
15607 		ZEND_VM_NEXT_OPCODE();
15608 	}
15609 
15610 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15611 		if (UNEXPECTED(1)) {
15612 			ZVAL_NULL(EX_VAR(opline->result.var));
15613 		}
15614 		ZEND_VM_NEXT_OPCODE();
15615 	}
15616 
15617 	SAVE_OPLINE();
15618 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15619 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15620 	}
15621 	ZVAL_DEREF(var_ptr);
15622 	SEPARATE_ZVAL_NOREF(var_ptr);
15623 
15624 	increment_function(var_ptr);
15625 
15626 	if (UNEXPECTED(1)) {
15627 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15628 	}
15629 
15630 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15631 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15632 }
15633 
15634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15635 {
15636 	USE_OPLINE
15637 	zend_free_op free_op1;
15638 	zval *var_ptr;
15639 
15640 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15641 
15642 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15643 		fast_long_decrement_function(var_ptr);
15644 		if (UNEXPECTED(0)) {
15645 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15646 		}
15647 		ZEND_VM_NEXT_OPCODE();
15648 	}
15649 
15650 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15651 		if (UNEXPECTED(0)) {
15652 			ZVAL_NULL(EX_VAR(opline->result.var));
15653 		}
15654 		ZEND_VM_NEXT_OPCODE();
15655 	}
15656 
15657 	SAVE_OPLINE();
15658 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15659 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15660 	}
15661 	ZVAL_DEREF(var_ptr);
15662 	SEPARATE_ZVAL_NOREF(var_ptr);
15663 
15664 	decrement_function(var_ptr);
15665 
15666 	if (UNEXPECTED(0)) {
15667 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15668 	}
15669 
15670 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15671 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15672 }
15673 
15674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15675 {
15676 	USE_OPLINE
15677 	zend_free_op free_op1;
15678 	zval *var_ptr;
15679 
15680 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15681 
15682 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15683 		fast_long_decrement_function(var_ptr);
15684 		if (UNEXPECTED(1)) {
15685 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15686 		}
15687 		ZEND_VM_NEXT_OPCODE();
15688 	}
15689 
15690 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15691 		if (UNEXPECTED(1)) {
15692 			ZVAL_NULL(EX_VAR(opline->result.var));
15693 		}
15694 		ZEND_VM_NEXT_OPCODE();
15695 	}
15696 
15697 	SAVE_OPLINE();
15698 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15699 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15700 	}
15701 	ZVAL_DEREF(var_ptr);
15702 	SEPARATE_ZVAL_NOREF(var_ptr);
15703 
15704 	decrement_function(var_ptr);
15705 
15706 	if (UNEXPECTED(1)) {
15707 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15708 	}
15709 
15710 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15711 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15712 }
15713 
15714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15715 {
15716 	USE_OPLINE
15717 	zend_free_op free_op1;
15718 	zval *var_ptr;
15719 
15720 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15721 
15722 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15723 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15724 		fast_long_increment_function(var_ptr);
15725 		ZEND_VM_NEXT_OPCODE();
15726 	}
15727 
15728 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15729 		ZVAL_NULL(EX_VAR(opline->result.var));
15730 		ZEND_VM_NEXT_OPCODE();
15731 	}
15732 
15733 	SAVE_OPLINE();
15734 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15735 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15736 	}
15737 	ZVAL_DEREF(var_ptr);
15738 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15739 	zval_opt_copy_ctor(var_ptr);
15740 
15741 	increment_function(var_ptr);
15742 
15743 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15744 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15745 }
15746 
15747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15748 {
15749 	USE_OPLINE
15750 	zend_free_op free_op1;
15751 	zval *var_ptr;
15752 
15753 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15754 
15755 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
15756 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15757 		fast_long_decrement_function(var_ptr);
15758 		ZEND_VM_NEXT_OPCODE();
15759 	}
15760 
15761 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
15762 		ZVAL_NULL(EX_VAR(opline->result.var));
15763 		ZEND_VM_NEXT_OPCODE();
15764 	}
15765 
15766 	SAVE_OPLINE();
15767 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
15768 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
15769 	}
15770 	ZVAL_DEREF(var_ptr);
15771 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
15772 	zval_opt_copy_ctor(var_ptr);
15773 
15774 	decrement_function(var_ptr);
15775 
15776 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15777 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15778 }
15779 
15780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15781 {
15782 	USE_OPLINE
15783 	zval *retval_ptr;
15784 	zval *return_value;
15785 	zend_free_op free_op1;
15786 
15787 	retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15788 	return_value = EX(return_value);
15789 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
15790 		SAVE_OPLINE();
15791 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
15792 		if (return_value) {
15793 			ZVAL_NULL(return_value);
15794 		}
15795 	} else if (!return_value) {
15796 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
15797 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
15798 				SAVE_OPLINE();
15799 				zval_dtor_func(Z_COUNTED_P(free_op1));
15800 			}
15801 		}
15802 	} else {
15803 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
15804 			ZVAL_COPY_VALUE(return_value, retval_ptr);
15805 			if (IS_VAR == IS_CONST) {
15806 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
15807 					Z_ADDREF_P(return_value);
15808 				}
15809 			}
15810 		} else if (IS_VAR == IS_CV) {
15811 			if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
15812 				if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
15813 					ZVAL_COPY_VALUE(return_value, retval_ptr);
15814 					if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
15815 						ZVAL_NULL(retval_ptr);
15816 					} else {
15817 						Z_ADDREF_P(return_value);
15818 					}
15819 				} else {
15820 					retval_ptr = Z_REFVAL_P(retval_ptr);
15821 					ZVAL_COPY(return_value, retval_ptr);
15822 				}
15823 			} else {
15824 				ZVAL_COPY_VALUE(return_value, retval_ptr);
15825 			}
15826 		} else /* if (IS_VAR == IS_VAR) */ {
15827 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
15828 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
15829 
15830 				retval_ptr = Z_REFVAL_P(retval_ptr);
15831 				ZVAL_COPY_VALUE(return_value, retval_ptr);
15832 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15833 					efree_size(ref, sizeof(zend_reference));
15834 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
15835 					Z_ADDREF_P(retval_ptr);
15836 				}
15837 			} else {
15838 				ZVAL_COPY_VALUE(return_value, retval_ptr);
15839 			}
15840 		}
15841 	}
15842 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15843 }
15844 
15845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15846 {
15847 	USE_OPLINE
15848 	zval *retval_ptr;
15849 	zend_free_op free_op1;
15850 
15851 	SAVE_OPLINE();
15852 
15853 	do {
15854 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
15855 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
15856 			/* Not supposed to happen, but we'll allow it */
15857 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
15858 
15859 			retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15860 			if (!EX(return_value)) {
15861 				zval_ptr_dtor_nogc(free_op1);
15862 			} else {
15863 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
15864 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
15865 					break;
15866 				}
15867 
15868 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
15869 				if (IS_VAR == IS_CONST) {
15870 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
15871 				}
15872 			}
15873 			break;
15874 		}
15875 
15876 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
15877 
15878 		if (IS_VAR == IS_VAR) {
15879 			if (retval_ptr == &EG(uninitialized_zval) ||
15880 			    (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
15881 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
15882 				if (EX(return_value)) {
15883 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
15884 				} else {
15885 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15886 				}
15887 				break;
15888 			}
15889 		}
15890 
15891 		if (EX(return_value)) {
15892 			ZVAL_MAKE_REF(retval_ptr);
15893 			Z_ADDREF_P(retval_ptr);
15894 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
15895 		}
15896 
15897 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
15898 	} while (0);
15899 
15900 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15901 }
15902 
15903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15904 {
15905 	USE_OPLINE
15906 	zval *retval;
15907 	zend_free_op free_op1;
15908 
15909 	zend_generator *generator = zend_get_running_generator(execute_data);
15910 
15911 	SAVE_OPLINE();
15912 	retval = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15913 
15914 	/* Copy return value into generator->retval */
15915 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
15916 		ZVAL_COPY_VALUE(&generator->retval, retval);
15917 		if (IS_VAR == IS_CONST) {
15918 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
15919 				Z_ADDREF(generator->retval);
15920 			}
15921 		}
15922 	} else if (IS_VAR == IS_CV) {
15923 		ZVAL_DEREF(retval);
15924 		ZVAL_COPY(&generator->retval, retval);
15925 	} else /* if (IS_VAR == IS_VAR) */ {
15926 		if (UNEXPECTED(Z_ISREF_P(retval))) {
15927 			zend_refcounted *ref = Z_COUNTED_P(retval);
15928 
15929 			retval = Z_REFVAL_P(retval);
15930 			ZVAL_COPY_VALUE(&generator->retval, retval);
15931 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
15932 				efree_size(ref, sizeof(zend_reference));
15933 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
15934 				Z_ADDREF_P(retval);
15935 			}
15936 		} else {
15937 			ZVAL_COPY_VALUE(&generator->retval, retval);
15938 		}
15939 	}
15940 
15941 	/* Close the generator to free up resources */
15942 	zend_generator_close(generator, 1);
15943 
15944 	/* Pass execution back to handling code */
15945 	ZEND_VM_RETURN();
15946 }
15947 
15948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15949 {
15950 	USE_OPLINE
15951 	zval *value;
15952 	zend_free_op free_op1;
15953 
15954 	SAVE_OPLINE();
15955 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15956 
15957 	do {
15958 		if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
15959 			if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
15960 				value = Z_REFVAL_P(value);
15961 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
15962 					break;
15963 				}
15964 			}
15965 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15966 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
15967 				if (UNEXPECTED(EG(exception) != NULL)) {
15968 					HANDLE_EXCEPTION();
15969 				}
15970 			}
15971 			zend_throw_error(NULL, "Can only throw objects");
15972 			zval_ptr_dtor_nogc(free_op1);
15973 			HANDLE_EXCEPTION();
15974 		}
15975 	} while (0);
15976 
15977 	zend_exception_save();
15978 	if (IS_VAR != IS_TMP_VAR) {
15979 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
15980 	}
15981 
15982 	zend_throw_exception_object(value);
15983 	zend_exception_restore();
15984 	zval_ptr_dtor_nogc(free_op1);
15985 	HANDLE_EXCEPTION();
15986 }
15987 
15988 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15989 {
15990 	USE_OPLINE
15991 	zval *varptr, *arg;
15992 	zend_free_op free_op1;
15993 
15994 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
15995 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
15996 		SAVE_OPLINE();
15997 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
15998 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
15999 		ZVAL_NULL(arg);
16000 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16001 	}
16002 
16003 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16004 
16005 	if (IS_VAR == IS_CV) {
16006 		ZVAL_OPT_DEREF(varptr);
16007 		ZVAL_COPY(arg, varptr);
16008 	} else /* if (IS_VAR == IS_VAR) */ {
16009 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
16010 			zend_refcounted *ref = Z_COUNTED_P(varptr);
16011 
16012 			varptr = Z_REFVAL_P(varptr);
16013 			ZVAL_COPY_VALUE(arg, varptr);
16014 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
16015 				efree_size(ref, sizeof(zend_reference));
16016 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
16017 				Z_ADDREF_P(arg);
16018 			}
16019 		} else {
16020 			ZVAL_COPY_VALUE(arg, varptr);
16021 		}
16022 	}
16023 
16024 	ZEND_VM_NEXT_OPCODE();
16025 }
16026 
16027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16028 {
16029 	USE_OPLINE
16030 	zend_free_op free_op1;
16031 	zval *varptr, *arg;
16032 
16033 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16034 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16035 	ZVAL_COPY_VALUE(arg, varptr);
16036 
16037 	if (EXPECTED(Z_ISREF_P(varptr))) {
16038 		ZEND_VM_NEXT_OPCODE();
16039 	}
16040 
16041 	SAVE_OPLINE();
16042 	zend_error(E_NOTICE, "Only variables should be passed by reference");
16043 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16044 }
16045 
16046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16047 {
16048 	USE_OPLINE
16049 	zend_free_op free_op1;
16050 	zval *varptr, *arg;
16051 	uint32_t arg_num = opline->op2.num;
16052 
16053 	if (EXPECTED(0)) {
16054 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16055 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16056 		}
16057 
16058 		varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16059 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16060 		ZVAL_COPY_VALUE(arg, varptr);
16061 
16062 		if (EXPECTED(Z_ISREF_P(varptr) ||
16063 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
16064 			ZEND_VM_NEXT_OPCODE();
16065 		}
16066 	} else {
16067 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16068 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16069 		}
16070 
16071 		varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16072 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16073 		ZVAL_COPY_VALUE(arg, varptr);
16074 
16075 		if (EXPECTED(Z_ISREF_P(varptr) ||
16076 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
16077 			ZEND_VM_NEXT_OPCODE();
16078 		}
16079 	}
16080 
16081 	SAVE_OPLINE();
16082 	zend_error(E_NOTICE, "Only variables should be passed by reference");
16083 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16084 }
16085 
16086 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16087 {
16088 	USE_OPLINE
16089 	zend_free_op free_op1;
16090 	zval *varptr, *arg;
16091 	uint32_t arg_num = opline->op2.num;
16092 
16093 	if (EXPECTED(1)) {
16094 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16095 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16096 		}
16097 
16098 		varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16099 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16100 		ZVAL_COPY_VALUE(arg, varptr);
16101 
16102 		if (EXPECTED(Z_ISREF_P(varptr) ||
16103 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
16104 			ZEND_VM_NEXT_OPCODE();
16105 		}
16106 	} else {
16107 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16108 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16109 		}
16110 
16111 		varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16112 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16113 		ZVAL_COPY_VALUE(arg, varptr);
16114 
16115 		if (EXPECTED(Z_ISREF_P(varptr) ||
16116 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
16117 			ZEND_VM_NEXT_OPCODE();
16118 		}
16119 	}
16120 
16121 	SAVE_OPLINE();
16122 	zend_error(E_NOTICE, "Only variables should be passed by reference");
16123 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16124 }
16125 
16126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16127 {
16128 	USE_OPLINE
16129 	zend_free_op free_op1;
16130 	zval *varptr, *arg;
16131 
16132 	SAVE_OPLINE();
16133 	varptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
16134 
16135 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16136 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
16137 		ZVAL_NEW_EMPTY_REF(arg);
16138 		ZVAL_NULL(Z_REFVAL_P(arg));
16139 		ZEND_VM_NEXT_OPCODE();
16140 	}
16141 
16142 	if (Z_ISREF_P(varptr)) {
16143 		Z_ADDREF_P(varptr);
16144 		ZVAL_COPY_VALUE(arg, varptr);
16145 	} else {
16146 		ZVAL_NEW_REF(arg, varptr);
16147 		Z_ADDREF_P(arg);
16148 		ZVAL_REF(varptr, Z_REF_P(arg));
16149 	}
16150 
16151 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16152 	ZEND_VM_NEXT_OPCODE();
16153 }
16154 
16155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16156 {
16157 	USE_OPLINE
16158 	zval *varptr, *arg;
16159 	zend_free_op free_op1;
16160 	uint32_t arg_num = opline->op2.num;
16161 
16162 	if (EXPECTED(0)) {
16163 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16164 			goto send_var_by_ref;
16165 		}
16166 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16167 send_var_by_ref:
16168 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16169 	}
16170 
16171 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16172 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
16173 		SAVE_OPLINE();
16174 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
16175 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16176 		ZVAL_NULL(arg);
16177 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16178 	}
16179 
16180 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16181 
16182 	if (IS_VAR == IS_CV) {
16183 		ZVAL_OPT_DEREF(varptr);
16184 		ZVAL_COPY(arg, varptr);
16185 	} else /* if (IS_VAR == IS_VAR) */ {
16186 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
16187 			zend_refcounted *ref = Z_COUNTED_P(varptr);
16188 
16189 			varptr = Z_REFVAL_P(varptr);
16190 			ZVAL_COPY_VALUE(arg, varptr);
16191 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
16192 				efree_size(ref, sizeof(zend_reference));
16193 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
16194 				Z_ADDREF_P(arg);
16195 			}
16196 		} else {
16197 			ZVAL_COPY_VALUE(arg, varptr);
16198 		}
16199 	}
16200 
16201 	ZEND_VM_NEXT_OPCODE();
16202 }
16203 
16204 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16205 {
16206 	USE_OPLINE
16207 	zval *varptr, *arg;
16208 	zend_free_op free_op1;
16209 	uint32_t arg_num = opline->op2.num;
16210 
16211 	if (EXPECTED(1)) {
16212 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16213 			goto send_var_by_ref;
16214 		}
16215 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
16216 send_var_by_ref:
16217 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16218 	}
16219 
16220 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16221 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
16222 		SAVE_OPLINE();
16223 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
16224 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16225 		ZVAL_NULL(arg);
16226 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16227 	}
16228 
16229 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16230 
16231 	if (IS_VAR == IS_CV) {
16232 		ZVAL_OPT_DEREF(varptr);
16233 		ZVAL_COPY(arg, varptr);
16234 	} else /* if (IS_VAR == IS_VAR) */ {
16235 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
16236 			zend_refcounted *ref = Z_COUNTED_P(varptr);
16237 
16238 			varptr = Z_REFVAL_P(varptr);
16239 			ZVAL_COPY_VALUE(arg, varptr);
16240 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
16241 				efree_size(ref, sizeof(zend_reference));
16242 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
16243 				Z_ADDREF_P(arg);
16244 			}
16245 		} else {
16246 			ZVAL_COPY_VALUE(arg, varptr);
16247 		}
16248 	}
16249 
16250 	ZEND_VM_NEXT_OPCODE();
16251 }
16252 
16253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16254 {
16255 	USE_OPLINE
16256 	zval *arg, *param;
16257 	zend_free_op free_op1;
16258 
16259 	SAVE_OPLINE();
16260 	arg = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16261 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
16262 
16263 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
16264 		zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
16265 			opline->op2.num,
16266 			EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
16267 			EX(call)->func->common.scope ? "::" : "",
16268 			ZSTR_VAL(EX(call)->func->common.function_name));
16269 	}
16270 
16271 	ZVAL_COPY(param, arg);
16272 
16273 	zval_ptr_dtor_nogc(free_op1);
16274 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16275 }
16276 
16277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16278 {
16279 	USE_OPLINE
16280 	zval *result;
16281 	zend_function *constructor;
16282 	zend_class_entry *ce;
16283 	zend_execute_data *call;
16284 
16285 	SAVE_OPLINE();
16286 	if (IS_VAR == IS_CONST) {
16287 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
16288 		if (UNEXPECTED(ce == NULL)) {
16289 			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);
16290 			if (UNEXPECTED(ce == NULL)) {
16291 				ZEND_ASSERT(EG(exception));
16292 				HANDLE_EXCEPTION();
16293 			}
16294 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
16295 		}
16296 	} else if (IS_VAR == IS_UNUSED) {
16297 		ce = zend_fetch_class(NULL, opline->op1.num);
16298 		if (UNEXPECTED(ce == NULL)) {
16299 			ZEND_ASSERT(EG(exception));
16300 			HANDLE_EXCEPTION();
16301 		}
16302 	} else {
16303 		ce = Z_CE_P(EX_VAR(opline->op1.var));
16304 	}
16305 
16306 	result = EX_VAR(opline->result.var);
16307 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
16308 		HANDLE_EXCEPTION();
16309 	}
16310 
16311 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
16312 	if (constructor == NULL) {
16313 		if (UNEXPECTED(EG(exception))) {
16314 			zval_ptr_dtor(result);
16315 			HANDLE_EXCEPTION();
16316 		}
16317 
16318 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
16319 		 * opcode is DO_FCALL in case EXT instructions are used. */
16320 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
16321 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
16322 		}
16323 
16324 		/* Perform a dummy function call */
16325 		call = zend_vm_stack_push_call_frame(
16326 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
16327 			opline->extended_value, NULL, NULL);
16328 	} else {
16329 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
16330 			init_func_run_time_cache(&constructor->op_array);
16331 		}
16332 		/* We are not handling overloaded classes right now */
16333 		call = zend_vm_stack_push_call_frame(
16334 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
16335 			constructor,
16336 			opline->extended_value,
16337 			ce,
16338 			Z_OBJ_P(result));
16339 		Z_ADDREF_P(result);
16340 	}
16341 
16342 	call->prev_execute_data = EX(call);
16343 	EX(call) = call;
16344 	ZEND_VM_NEXT_OPCODE();
16345 }
16346 
16347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16348 {
16349 	USE_OPLINE
16350 	zend_free_op free_op1;
16351 	zval *expr;
16352 	zval *result = EX_VAR(opline->result.var);
16353 
16354 	SAVE_OPLINE();
16355 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16356 
16357 	switch (opline->extended_value) {
16358 		case IS_NULL:
16359 			/* This code is taken from convert_to_null. However, it does not seems very useful,
16360 			 * because a conversion to null always results in the same value. This could only
16361 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
16362 #if 0
16363 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
16364 				ZVAL_DEREF(expr);
16365 			}
16366 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
16367 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
16368 					break;
16369 				}
16370 			}
16371 #endif
16372 
16373 			ZVAL_NULL(result);
16374 			break;
16375 		case _IS_BOOL:
16376 			ZVAL_BOOL(result, zend_is_true(expr));
16377 			break;
16378 		case IS_LONG:
16379 			ZVAL_LONG(result, zval_get_long(expr));
16380 			break;
16381 		case IS_DOUBLE:
16382 			ZVAL_DOUBLE(result, zval_get_double(expr));
16383 			break;
16384 		case IS_STRING:
16385 			ZVAL_STR(result, zval_get_string(expr));
16386 			break;
16387 		default:
16388 			if (IS_VAR & (IS_VAR|IS_CV)) {
16389 				ZVAL_DEREF(expr);
16390 			}
16391 			/* If value is already of correct type, return it directly */
16392 			if (Z_TYPE_P(expr) == opline->extended_value) {
16393 				ZVAL_COPY_VALUE(result, expr);
16394 				if (IS_VAR == IS_CONST) {
16395 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
16396 				} else if (IS_VAR != IS_TMP_VAR) {
16397 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
16398 				}
16399 
16400 				zval_ptr_dtor_nogc(free_op1);
16401 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16402 			}
16403 
16404 			if (opline->extended_value == IS_ARRAY) {
16405 				if (Z_TYPE_P(expr) != IS_OBJECT) {
16406 					ZVAL_NEW_ARR(result);
16407 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
16408 					if (Z_TYPE_P(expr) != IS_NULL) {
16409 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
16410 						if (IS_VAR == IS_CONST) {
16411 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
16412 						} else {
16413 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
16414 						}
16415 					}
16416 				} else {
16417 					ZVAL_COPY_VALUE(result, expr);
16418 					Z_ADDREF_P(result);
16419 					convert_to_array(result);
16420 				}
16421 			} else {
16422 				if (Z_TYPE_P(expr) != IS_ARRAY) {
16423 					object_init(result);
16424 					if (Z_TYPE_P(expr) != IS_NULL) {
16425 						expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
16426 						if (IS_VAR == IS_CONST) {
16427 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
16428 						} else {
16429 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
16430 						}
16431 					}
16432 				} else {
16433 					ZVAL_COPY(result, expr);
16434 					convert_to_object(result);
16435 				}
16436 			}
16437 	}
16438 
16439 	zval_ptr_dtor_nogc(free_op1);
16440 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16441 }
16442 
16443 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16444 {
16445 	USE_OPLINE
16446 	zend_free_op free_op1;
16447 	zval *array_ptr, *result;
16448 	HashTable *fe_ht;
16449 
16450 	SAVE_OPLINE();
16451 
16452 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
16453 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
16454 		result = EX_VAR(opline->result.var);
16455 		ZVAL_COPY_VALUE(result, array_ptr);
16456 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
16457 			Z_ADDREF_P(array_ptr);
16458 		}
16459 		Z_FE_POS_P(result) = 0;
16460 
16461 		zval_ptr_dtor_nogc(free_op1);
16462 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16463 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
16464 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
16465 			HashPosition pos = 0;
16466 			Bucket *p;
16467 
16468 			result = EX_VAR(opline->result.var);
16469 			ZVAL_COPY_VALUE(result, array_ptr);
16470 			if (IS_VAR != IS_TMP_VAR) {
16471 				Z_ADDREF_P(array_ptr);
16472 			}
16473 			if (Z_OBJ_P(array_ptr)->properties
16474 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
16475 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
16476 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
16477 				}
16478 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
16479 			}
16480 			fe_ht = Z_OBJPROP_P(array_ptr);
16481 			pos = 0;
16482 			p = fe_ht->arData;
16483 			while (1) {
16484 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16485 					zval_ptr_dtor_nogc(free_op1);
16486 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16487 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16488 				}
16489 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16490 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16491 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
16492 				    (UNEXPECTED(!p->key) ||
16493 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
16494 					break;
16495 				}
16496 				pos++;
16497 				p++;
16498 			}
16499 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
16500 
16501 			zval_ptr_dtor_nogc(free_op1);
16502 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16503 		} else {
16504 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
16505 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
16506 			zend_bool is_empty;
16507 
16508 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
16509 				zval_ptr_dtor_nogc(free_op1);
16510 				if (iter) {
16511 					OBJ_RELEASE(&iter->std);
16512 				}
16513 				if (!EG(exception)) {
16514 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
16515 				}
16516 				zend_throw_exception_internal(NULL);
16517 				HANDLE_EXCEPTION();
16518 			}
16519 
16520 			iter->index = 0;
16521 			if (iter->funcs->rewind) {
16522 				iter->funcs->rewind(iter);
16523 				if (UNEXPECTED(EG(exception) != NULL)) {
16524 					OBJ_RELEASE(&iter->std);
16525 					zval_ptr_dtor_nogc(free_op1);
16526 					HANDLE_EXCEPTION();
16527 				}
16528 			}
16529 
16530 			is_empty = iter->funcs->valid(iter) != SUCCESS;
16531 
16532 			if (UNEXPECTED(EG(exception) != NULL)) {
16533 				OBJ_RELEASE(&iter->std);
16534 				zval_ptr_dtor_nogc(free_op1);
16535 				HANDLE_EXCEPTION();
16536 			}
16537 			iter->index = -1; /* will be set to 0 before using next handler */
16538 
16539 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
16540 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16541 
16542 			zval_ptr_dtor_nogc(free_op1);
16543 			if (is_empty) {
16544 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16545 			} else {
16546 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16547 			}
16548 		}
16549 	} else {
16550 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
16551 		ZVAL_UNDEF(EX_VAR(opline->result.var));
16552 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16553 		zval_ptr_dtor_nogc(free_op1);
16554 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16555 	}
16556 }
16557 
16558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16559 {
16560 	USE_OPLINE
16561 	zend_free_op free_op1;
16562 	zval *array_ptr, *array_ref;
16563 	HashTable *fe_ht;
16564 	HashPosition pos = 0;
16565 	Bucket *p;
16566 
16567 	SAVE_OPLINE();
16568 
16569 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
16570 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
16571 		if (Z_ISREF_P(array_ref)) {
16572 			array_ptr = Z_REFVAL_P(array_ref);
16573 		}
16574 	} else {
16575 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
16576 	}
16577 
16578 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
16579 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
16580 			if (array_ptr == array_ref) {
16581 				ZVAL_NEW_REF(array_ref, array_ref);
16582 				array_ptr = Z_REFVAL_P(array_ref);
16583 			}
16584 			Z_ADDREF_P(array_ref);
16585 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
16586 		} else {
16587 			array_ref = EX_VAR(opline->result.var);
16588 			ZVAL_NEW_REF(array_ref, array_ptr);
16589 			array_ptr = Z_REFVAL_P(array_ref);
16590 		}
16591 		if (IS_VAR == IS_CONST) {
16592 			zval_copy_ctor_func(array_ptr);
16593 		} else {
16594 			SEPARATE_ARRAY(array_ptr);
16595 		}
16596 		fe_ht = Z_ARRVAL_P(array_ptr);
16597 		p = fe_ht->arData;
16598 		while (1) {
16599 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16600 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16601 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16602 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16603 			}
16604 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16605 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16606 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
16607 				break;
16608 			}
16609 			pos++;
16610 			p++;
16611 		}
16612 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
16613 
16614 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16615 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16616 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
16617 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
16618 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
16619 				if (array_ptr == array_ref) {
16620 					ZVAL_NEW_REF(array_ref, array_ref);
16621 					array_ptr = Z_REFVAL_P(array_ref);
16622 				}
16623 				Z_ADDREF_P(array_ref);
16624 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
16625 			} else {
16626 				array_ptr = EX_VAR(opline->result.var);
16627 				ZVAL_COPY_VALUE(array_ptr, array_ref);
16628 			}
16629 			if (Z_OBJ_P(array_ptr)->properties
16630 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
16631 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
16632 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
16633 				}
16634 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
16635 			}
16636 			fe_ht = Z_OBJPROP_P(array_ptr);
16637 			p = fe_ht->arData;
16638 			while (1) {
16639 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16640 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16641 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16642 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16643 				}
16644 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16645 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16646 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
16647 				    (UNEXPECTED(!p->key) ||
16648 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
16649 					break;
16650 				}
16651 				pos++;
16652 				p++;
16653 			}
16654 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
16655 
16656 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16657 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16658 		} else {
16659 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
16660 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
16661 			zend_bool is_empty;
16662 
16663 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
16664 				if (IS_VAR == IS_VAR) {
16665 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16666 				} else {
16667 					zval_ptr_dtor_nogc(free_op1);
16668 				}
16669 				if (!EG(exception)) {
16670 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
16671 				}
16672 				zend_throw_exception_internal(NULL);
16673 				HANDLE_EXCEPTION();
16674 			}
16675 
16676 			iter->index = 0;
16677 			if (iter->funcs->rewind) {
16678 				iter->funcs->rewind(iter);
16679 				if (UNEXPECTED(EG(exception) != NULL)) {
16680 					OBJ_RELEASE(&iter->std);
16681 					if (IS_VAR == IS_VAR) {
16682 						if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16683 					} else {
16684 						zval_ptr_dtor_nogc(free_op1);
16685 					}
16686 					HANDLE_EXCEPTION();
16687 				}
16688 			}
16689 
16690 			is_empty = iter->funcs->valid(iter) != SUCCESS;
16691 
16692 			if (UNEXPECTED(EG(exception) != NULL)) {
16693 				OBJ_RELEASE(&iter->std);
16694 				if (IS_VAR == IS_VAR) {
16695 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16696 				} else {
16697 					zval_ptr_dtor_nogc(free_op1);
16698 				}
16699 				HANDLE_EXCEPTION();
16700 			}
16701 			iter->index = -1; /* will be set to 0 before using next handler */
16702 
16703 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
16704 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16705 
16706 			if (IS_VAR == IS_VAR) {
16707 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16708 			} else {
16709 				zval_ptr_dtor_nogc(free_op1);
16710 			}
16711 			if (is_empty) {
16712 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16713 			} else {
16714 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16715 			}
16716 		}
16717 	} else {
16718 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
16719 		ZVAL_UNDEF(EX_VAR(opline->result.var));
16720 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
16721 		if (IS_VAR == IS_VAR) {
16722 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
16723 		} else {
16724 			zval_ptr_dtor_nogc(free_op1);
16725 		}
16726 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
16727 	}
16728 }
16729 
16730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16731 {
16732 	USE_OPLINE
16733 	zval *array;
16734 	zval *value;
16735 	uint32_t value_type;
16736 	HashTable *fe_ht;
16737 	HashPosition pos;
16738 	Bucket *p;
16739 
16740 	array = EX_VAR(opline->op1.var);
16741 	SAVE_OPLINE();
16742 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
16743 		fe_ht = Z_ARRVAL_P(array);
16744 		pos = Z_FE_POS_P(array);
16745 		p = fe_ht->arData + pos;
16746 		while (1) {
16747 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16748 				/* reached end of iteration */
16749 				goto fe_fetch_r_exit;
16750 			}
16751 			value = &p->val;
16752 			value_type = Z_TYPE_INFO_P(value);
16753 			if (value_type == IS_UNDEF) {
16754 				pos++;
16755 				p++;
16756 				continue;
16757 			} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16758 				value = Z_INDIRECT_P(value);
16759 				value_type = Z_TYPE_INFO_P(value);
16760 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16761 					pos++;
16762 					p++;
16763 					continue;
16764 				}
16765 			}
16766 			break;
16767 		}
16768 		Z_FE_POS_P(array) = pos + 1;
16769 		if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
16770 			if (!p->key) {
16771 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16772 			} else {
16773 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16774 			}
16775 		}
16776 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
16777 		zend_object_iterator *iter;
16778 
16779 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
16780 			/* plain object */
16781 
16782  			fe_ht = Z_OBJPROP_P(array);
16783 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
16784 			p = fe_ht->arData + pos;
16785 			while (1) {
16786 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16787 					/* reached end of iteration */
16788 					goto fe_fetch_r_exit;
16789 				}
16790 
16791 				value = &p->val;
16792 				value_type = Z_TYPE_INFO_P(value);
16793 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16794 					pos++;
16795 					p++;
16796 					continue;
16797 				} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16798 					value = Z_INDIRECT_P(value);
16799 					value_type = Z_TYPE_INFO_P(value);
16800 					if (UNEXPECTED(value_type == IS_UNDEF)) {
16801 						pos++;
16802 						p++;
16803 						continue;
16804 					}
16805 				}
16806 				if (UNEXPECTED(!p->key) ||
16807 				    EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
16808 					break;
16809 				}
16810 				pos++;
16811 				p++;
16812 			}
16813 			if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
16814 				if (UNEXPECTED(!p->key)) {
16815 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16816 				} else if (ZSTR_VAL(p->key)[0]) {
16817 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16818 				} else {
16819 					const char *class_name, *prop_name;
16820 					size_t prop_name_len;
16821 					zend_unmangle_property_name_ex(
16822 						p->key, &class_name, &prop_name, &prop_name_len);
16823 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
16824 				}
16825 			}
16826 			while (1) {
16827 				pos++;
16828 				if (pos >= fe_ht->nNumUsed) {
16829 					pos = HT_INVALID_IDX;
16830 					break;
16831 				}
16832 				p++;
16833 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16834 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16835 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
16836 				    (UNEXPECTED(!p->key) ||
16837 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
16838 					break;
16839 				}
16840 			}
16841 			EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
16842 		} else {
16843 			if (EXPECTED(++iter->index > 0)) {
16844 				/* This could cause an endless loop if index becomes zero again.
16845 				 * In case that ever happens we need an additional flag. */
16846 				iter->funcs->move_forward(iter);
16847 				if (UNEXPECTED(EG(exception) != NULL)) {
16848 					HANDLE_EXCEPTION();
16849 				}
16850 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
16851 					/* reached end of iteration */
16852 					if (UNEXPECTED(EG(exception) != NULL)) {
16853 						HANDLE_EXCEPTION();
16854 					}
16855 					goto fe_fetch_r_exit;
16856 				}
16857 			}
16858 			value = iter->funcs->get_current_data(iter);
16859 			if (UNEXPECTED(EG(exception) != NULL)) {
16860 				HANDLE_EXCEPTION();
16861 			}
16862 			if (!value) {
16863 				/* failure in get_current_data */
16864 				goto fe_fetch_r_exit;
16865 			}
16866 			if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
16867 				if (iter->funcs->get_current_key) {
16868 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
16869 					if (UNEXPECTED(EG(exception) != NULL)) {
16870 						HANDLE_EXCEPTION();
16871 					}
16872 				} else {
16873 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
16874 				}
16875 			}
16876 			value_type = Z_TYPE_INFO_P(value);
16877 		}
16878 	} else {
16879 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
16880 		if (UNEXPECTED(EG(exception))) {
16881 			HANDLE_EXCEPTION();
16882 		}
16883 fe_fetch_r_exit:
16884 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
16885 		ZEND_VM_CONTINUE();
16886 	}
16887 
16888 	if (EXPECTED(opline->op2_type == IS_CV)) {
16889 		zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
16890 		zend_assign_to_variable(variable_ptr, value, IS_CV);
16891 	} else {
16892 		zval *res = EX_VAR(opline->op2.var);
16893 		zend_refcounted *gc = Z_COUNTED_P(value);
16894 
16895 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
16896 		if (EXPECTED((value_type & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)) {
16897 			GC_REFCOUNT(gc)++;
16898 		}
16899 	}
16900 	ZEND_VM_NEXT_OPCODE();
16901 }
16902 
16903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16904 {
16905 	USE_OPLINE
16906 	zval *array;
16907 	zval *value;
16908 	uint32_t value_type;
16909 	HashTable *fe_ht;
16910 	HashPosition pos;
16911 	Bucket *p;
16912 
16913 	array = EX_VAR(opline->op1.var);
16914 	SAVE_OPLINE();
16915 
16916 	ZVAL_DEREF(array);
16917 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
16918 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
16919 		fe_ht = Z_ARRVAL_P(array);
16920 		p = fe_ht->arData + pos;
16921 		while (1) {
16922 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16923 				/* reached end of iteration */
16924 				goto fe_fetch_w_exit;
16925 			}
16926 			value = &p->val;
16927 			value_type = Z_TYPE_INFO_P(value);
16928 			if (UNEXPECTED(value_type == IS_UNDEF)) {
16929 				pos++;
16930 				p++;
16931 				continue;
16932 			} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16933 				value = Z_INDIRECT_P(value);
16934 				value_type = Z_TYPE_INFO_P(value);
16935 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16936 					pos++;
16937 					p++;
16938 					continue;
16939 				}
16940 			}
16941 			break;
16942 		}
16943 		if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
16944 			if (!p->key) {
16945 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
16946 			} else {
16947 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
16948 			}
16949 		}
16950 		while (1) {
16951 			pos++;
16952 			if (pos >= fe_ht->nNumUsed) {
16953 				pos = HT_INVALID_IDX;
16954 				break;
16955 			}
16956 			p++;
16957 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16958 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
16959 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
16960 				break;
16961 			}
16962 		}
16963 		EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
16964 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
16965 		zend_object_iterator *iter;
16966 
16967 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
16968 			/* plain object */
16969 
16970  			fe_ht = Z_OBJPROP_P(array);
16971 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
16972 			p = fe_ht->arData + pos;
16973 			while (1) {
16974 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
16975 					/* reached end of iteration */
16976 					goto fe_fetch_w_exit;
16977 				}
16978 
16979 				value = &p->val;
16980 				value_type = Z_TYPE_INFO_P(value);
16981 				if (UNEXPECTED(value_type == IS_UNDEF)) {
16982 					pos++;
16983 					p++;
16984 					continue;
16985 				} else if (UNEXPECTED(value_type == IS_INDIRECT)) {
16986 					value = Z_INDIRECT_P(value);
16987 					value_type = Z_TYPE_INFO_P(value);
16988 					if (UNEXPECTED(value_type == IS_UNDEF)) {
16989 						pos++;
16990 						p++;
16991 						continue;
16992 					}
16993 				}
16994 				if (UNEXPECTED(!p->key) ||
16995 				    EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
16996 					break;
16997 				}
16998 				pos++;
16999 				p++;
17000 			}
17001 			if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
17002 				if (UNEXPECTED(!p->key)) {
17003 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
17004 				} else if (ZSTR_VAL(p->key)[0]) {
17005 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
17006 				} else {
17007 					const char *class_name, *prop_name;
17008 					size_t prop_name_len;
17009 					zend_unmangle_property_name_ex(
17010 						p->key, &class_name, &prop_name, &prop_name_len);
17011 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
17012 				}
17013 			}
17014 			while (1) {
17015 				pos++;
17016 				if (pos >= fe_ht->nNumUsed) {
17017 					pos = HT_INVALID_IDX;
17018 					break;
17019 				}
17020 				p++;
17021 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
17022 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
17023 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
17024 				    (UNEXPECTED(!p->key) ||
17025 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
17026 					break;
17027 				}
17028 			}
17029 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
17030 		} else {
17031 			if (++iter->index > 0) {
17032 				/* This could cause an endless loop if index becomes zero again.
17033 				 * In case that ever happens we need an additional flag. */
17034 				iter->funcs->move_forward(iter);
17035 				if (UNEXPECTED(EG(exception) != NULL)) {
17036 					HANDLE_EXCEPTION();
17037 				}
17038 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
17039 					/* reached end of iteration */
17040 					if (UNEXPECTED(EG(exception) != NULL)) {
17041 						HANDLE_EXCEPTION();
17042 					}
17043 					goto fe_fetch_w_exit;
17044 				}
17045 			}
17046 			value = iter->funcs->get_current_data(iter);
17047 			if (UNEXPECTED(EG(exception) != NULL)) {
17048 				HANDLE_EXCEPTION();
17049 			}
17050 			if (!value) {
17051 				/* failure in get_current_data */
17052 				goto fe_fetch_w_exit;
17053 			}
17054 			if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
17055 				if (iter->funcs->get_current_key) {
17056 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
17057 					if (UNEXPECTED(EG(exception) != NULL)) {
17058 						HANDLE_EXCEPTION();
17059 					}
17060 				} else {
17061 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
17062 				}
17063 			}
17064 			value_type = Z_TYPE_INFO_P(value);
17065 		}
17066 	} else {
17067 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
17068 		if (UNEXPECTED(EG(exception))) {
17069 			HANDLE_EXCEPTION();
17070 		}
17071 fe_fetch_w_exit:
17072 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
17073 		ZEND_VM_CONTINUE();
17074 	}
17075 
17076 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
17077 		zend_refcounted *gc = Z_COUNTED_P(value);
17078 		zval *ref;
17079 		ZVAL_NEW_EMPTY_REF(value);
17080 		ref = Z_REFVAL_P(value);
17081 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
17082 	}
17083 	if (EXPECTED(opline->op2_type == IS_CV)) {
17084 		zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
17085 		if (EXPECTED(variable_ptr != value)) {
17086 			zend_reference *ref;
17087 
17088 			ref = Z_REF_P(value);
17089 			GC_REFCOUNT(ref)++;
17090 			zval_ptr_dtor(variable_ptr);
17091 			ZVAL_REF(variable_ptr, ref);
17092 		}
17093 	} else {
17094 		Z_ADDREF_P(value);
17095 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
17096 	}
17097 	ZEND_VM_NEXT_OPCODE();
17098 }
17099 
17100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17101 {
17102 	USE_OPLINE
17103 	zend_free_op free_op1;
17104 	zval *value;
17105 	zval *ref = NULL;
17106 
17107 	SAVE_OPLINE();
17108 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17109 
17110 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
17111 		if (IS_VAR == IS_VAR) {
17112 			ref = value;
17113 		}
17114 		value = Z_REFVAL_P(value);
17115 	}
17116 	if (i_zend_is_true(value)) {
17117 		zval *result = EX_VAR(opline->result.var);
17118 
17119 		ZVAL_COPY_VALUE(result, value);
17120 		if (IS_VAR == IS_CONST) {
17121 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
17122 		} else if (IS_VAR == IS_CV) {
17123 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
17124 		} else if (IS_VAR == IS_VAR && ref) {
17125 			zend_reference *r = Z_REF_P(ref);
17126 
17127 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
17128 				efree_size(r, sizeof(zend_reference));
17129 			} else if (Z_OPT_REFCOUNTED_P(result)) {
17130 				Z_ADDREF_P(result);
17131 			}
17132 		}
17133 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
17134 	}
17135 
17136 	zval_ptr_dtor_nogc(free_op1);
17137 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17138 }
17139 
17140 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17141 {
17142 	USE_OPLINE
17143 	zend_free_op free_op1;
17144 	zval *value;
17145 	zval *ref = NULL;
17146 
17147 	SAVE_OPLINE();
17148 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17149 
17150 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
17151 		if (IS_VAR == IS_VAR) {
17152 			ref = value;
17153 		}
17154 		value = Z_REFVAL_P(value);
17155 	}
17156 
17157 	if (Z_TYPE_P(value) > IS_NULL) {
17158 		zval *result = EX_VAR(opline->result.var);
17159 		ZVAL_COPY_VALUE(result, value);
17160 		if (IS_VAR == IS_CONST) {
17161 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
17162 		} else if (IS_VAR == IS_CV) {
17163 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
17164 		} else if (IS_VAR == IS_VAR && ref) {
17165 			zend_reference *r = Z_REF_P(ref);
17166 
17167 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
17168 				efree_size(r, sizeof(zend_reference));
17169 			} else if (Z_OPT_REFCOUNTED_P(result)) {
17170 				Z_ADDREF_P(result);
17171 			}
17172 		}
17173 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
17174 	}
17175 
17176 	zval_ptr_dtor_nogc(free_op1);
17177 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17178 }
17179 
17180 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17181 {
17182 	USE_OPLINE
17183 	zend_free_op free_op1;
17184 	zval *value;
17185 	zval *result = EX_VAR(opline->result.var);
17186 
17187 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17188 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
17189 		SAVE_OPLINE();
17190 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
17191 		ZVAL_NULL(result);
17192 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17193 	}
17194 
17195 	if (IS_VAR == IS_CV) {
17196 		ZVAL_DEREF(value);
17197 		ZVAL_COPY(result, value);
17198 	} else if (IS_VAR == IS_VAR) {
17199 		if (UNEXPECTED(Z_ISREF_P(value))) {
17200 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
17201 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
17202 				efree_size(Z_REF_P(value), sizeof(zend_reference));
17203 			} else if (Z_OPT_REFCOUNTED_P(result)) {
17204 				Z_ADDREF_P(result);
17205 			}
17206 		} else {
17207 			ZVAL_COPY_VALUE(result, value);
17208 		}
17209 	} else {
17210 		ZVAL_COPY_VALUE(result, value);
17211 		if (IS_VAR == IS_CONST) {
17212 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
17213 				Z_ADDREF_P(result);
17214 			}
17215 		}
17216 	}
17217 	ZEND_VM_NEXT_OPCODE();
17218 }
17219 
17220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17221 {
17222 	USE_OPLINE
17223 
17224 	zend_generator *generator = zend_get_running_generator(execute_data);
17225 
17226 	zval *val;
17227 	zend_free_op free_op1;
17228 
17229 	SAVE_OPLINE();
17230 	val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
17231 
17232 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
17233 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
17234 		zval_ptr_dtor_nogc(free_op1);
17235 		HANDLE_EXCEPTION();
17236 	}
17237 
17238 	if (Z_TYPE_P(val) == IS_ARRAY) {
17239 		ZVAL_COPY_VALUE(&generator->values, val);
17240 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
17241 			Z_ADDREF_P(val);
17242 		}
17243 		Z_FE_POS(generator->values) = 0;
17244 
17245 		zval_ptr_dtor_nogc(free_op1);
17246 	} else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
17247 		zend_class_entry *ce = Z_OBJCE_P(val);
17248 		if (ce == zend_ce_generator) {
17249 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
17250 
17251 			if (IS_VAR != IS_TMP_VAR) {
17252 				Z_ADDREF_P(val);
17253 			}
17254 			zval_ptr_dtor_nogc(free_op1);
17255 
17256 			if (Z_ISUNDEF(new_gen->retval)) {
17257 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
17258 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
17259 					zval_ptr_dtor(val);
17260 					HANDLE_EXCEPTION();
17261 				} else {
17262 					zend_generator_yield_from(generator, new_gen);
17263 				}
17264 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
17265 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
17266 				zval_ptr_dtor(val);
17267 				HANDLE_EXCEPTION();
17268 			} else {
17269 				if (RETURN_VALUE_USED(opline)) {
17270 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
17271 				}
17272 				ZEND_VM_NEXT_OPCODE();
17273 			}
17274 		} else {
17275 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
17276 			zval_ptr_dtor_nogc(free_op1);
17277 
17278 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
17279 				if (!EG(exception)) {
17280 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
17281 				}
17282 				HANDLE_EXCEPTION();
17283 			}
17284 
17285 			iter->index = 0;
17286 			if (iter->funcs->rewind) {
17287 				iter->funcs->rewind(iter);
17288 				if (UNEXPECTED(EG(exception) != NULL)) {
17289 					OBJ_RELEASE(&iter->std);
17290 					HANDLE_EXCEPTION();
17291 				}
17292 			}
17293 
17294 			ZVAL_OBJ(&generator->values, &iter->std);
17295 		}
17296 	} else {
17297 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
17298 		HANDLE_EXCEPTION();
17299 	}
17300 
17301 	/* This is the default return value
17302 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
17303 	if (RETURN_VALUE_USED(opline)) {
17304 		ZVAL_NULL(EX_VAR(opline->result.var));
17305 	}
17306 
17307 	/* This generator has no send target (though the generator we delegate to might have one) */
17308 	generator->send_target = NULL;
17309 
17310 	/* We increment to the next op, so we are at the correct position when the
17311 	 * generator is resumed. */
17312 	ZEND_VM_INC_OPCODE();
17313 
17314 	/* The GOTO VM uses a local opline variable. We need to set the opline
17315 	 * variable in execute_data so we don't resume at an old position. */
17316 	SAVE_OPLINE();
17317 
17318 	ZEND_VM_RETURN();
17319 }
17320 
17321 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17322 {
17323 	USE_OPLINE
17324 	zval *value;
17325 	int result = 0;
17326 	zend_free_op free_op1;
17327 
17328 	SAVE_OPLINE();
17329 	value = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
17330 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
17331 		if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
17332 			zend_class_entry *ce = Z_OBJCE_P(value);
17333 
17334 			if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
17335 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
17336 				result = 1;
17337 			}
17338 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
17339 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
17340 
17341 			if (EXPECTED(type_name != NULL)) {
17342 				result = 1;
17343 			}
17344 		} else {
17345 			result = 1;
17346 		}
17347 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
17348 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
17349 		result = 1;
17350 	}
17351 	zval_ptr_dtor_nogc(free_op1);
17352 	ZEND_VM_SMART_BRANCH(result, 1);
17353 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
17354 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17355 }
17356 
17357 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17358 {
17359 	USE_OPLINE
17360 	zval *varptr, *arg;
17361 	zend_free_op free_op1;
17362 
17363 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17364 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17365 
17366 	if (IS_VAR == IS_CV) {
17367 		ZVAL_COPY(arg, varptr);
17368 	} else /* if (IS_VAR == IS_VAR) */ {
17369 		ZVAL_COPY_VALUE(arg, varptr);
17370 	}
17371 
17372 	ZEND_VM_NEXT_OPCODE();
17373 }
17374 
17375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17376 {
17377 	USE_OPLINE
17378 	zval *varptr, *arg;
17379 	zend_free_op free_op1;
17380 	uint32_t arg_num = opline->op2.num;
17381 
17382 	if (EXPECTED(0)) {
17383 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
17384 			goto send_var_by_ref_simple;
17385 		}
17386 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
17387 send_var_by_ref_simple:
17388 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17389 	}
17390 
17391 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17392 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17393 
17394 	if (IS_VAR == IS_CV) {
17395 		ZVAL_COPY(arg, varptr);
17396 	} else /* if (IS_VAR == IS_VAR) */ {
17397 		ZVAL_COPY_VALUE(arg, varptr);
17398 	}
17399 
17400 	ZEND_VM_NEXT_OPCODE();
17401 }
17402 
17403 
17404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17405 {
17406 	USE_OPLINE
17407 	zval *varptr, *arg;
17408 	zend_free_op free_op1;
17409 	uint32_t arg_num = opline->op2.num;
17410 
17411 	if (EXPECTED(1)) {
17412 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
17413 			goto send_var_by_ref_simple;
17414 		}
17415 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
17416 send_var_by_ref_simple:
17417 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17418 	}
17419 
17420 	varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
17421 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17422 
17423 	if (IS_VAR == IS_CV) {
17424 		ZVAL_COPY(arg, varptr);
17425 	} else /* if (IS_VAR == IS_VAR) */ {
17426 		ZVAL_COPY_VALUE(arg, varptr);
17427 	}
17428 
17429 	ZEND_VM_NEXT_OPCODE();
17430 }
17431 
17432 
17433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17434 {
17435 	USE_OPLINE
17436 	zend_free_op free_op1;
17437 	zval *op1, *op2;
17438 	int result;
17439 
17440 	SAVE_OPLINE();
17441 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
17442 	op2 = EX_CONSTANT(opline->op2);
17443 	result = fast_is_identical_function(op1, op2);
17444 	zval_ptr_dtor_nogc(free_op1);
17445 
17446 	ZEND_VM_SMART_BRANCH(result, 1);
17447 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
17448 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17449 }
17450 
17451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17452 {
17453 	USE_OPLINE
17454 	zend_free_op free_op1;
17455 	zval *op1, *op2;
17456 	int result;
17457 
17458 	SAVE_OPLINE();
17459 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
17460 	op2 = EX_CONSTANT(opline->op2);
17461 	result = fast_is_not_identical_function(op1, op2);
17462 	zval_ptr_dtor_nogc(free_op1);
17463 
17464 	ZEND_VM_SMART_BRANCH(result, 1);
17465 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
17466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17467 }
17468 
17469 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)
17470 {
17471 	USE_OPLINE
17472 	zend_free_op free_op1, free_op_data1;
17473 	zval *object;
17474 	zval *property;
17475 	zval *value;
17476 	zval *zptr;
17477 
17478 	SAVE_OPLINE();
17479 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17480 
17481 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17482 		zend_throw_error(NULL, "Using $this when not in object context");
17483 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
17484 
17485 		HANDLE_EXCEPTION();
17486 	}
17487 
17488 	property = EX_CONSTANT(opline->op2);
17489 
17490 	do {
17491 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17492 
17493 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
17494 			ZVAL_DEREF(object);
17495 			if (UNEXPECTED(!make_real_object(object))) {
17496 				zend_error(E_WARNING, "Attempt to assign property of non-object");
17497 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17498 					ZVAL_NULL(EX_VAR(opline->result.var));
17499 				}
17500 				break;
17501 			}
17502 		}
17503 
17504 		/* here we are sure we are dealing with an object */
17505 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
17506 			&& 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)) {
17507 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
17508 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17509 					ZVAL_NULL(EX_VAR(opline->result.var));
17510 				}
17511 			} else {
17512 				ZVAL_DEREF(zptr);
17513 				SEPARATE_ZVAL_NOREF(zptr);
17514 
17515 				binary_op(zptr, zptr, value);
17516 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17517 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
17518 				}
17519 			}
17520 		} else {
17521 			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));
17522 		}
17523 	} while (0);
17524 
17525 	FREE_OP(free_op_data1);
17526 
17527 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17528 	/* assign_obj has two opcodes! */
17529 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
17530 }
17531 
17532 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)
17533 {
17534 	USE_OPLINE
17535 	zend_free_op free_op1, free_op_data1;
17536 	zval *var_ptr;
17537 	zval *value, *container, *dim;
17538 
17539 	SAVE_OPLINE();
17540 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17541 
17542 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17543 assign_dim_op_array:
17544 		SEPARATE_ARRAY(container);
17545 assign_dim_op_new_array:
17546 		if (IS_CONST == IS_UNUSED) {
17547 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
17548 			if (UNEXPECTED(!var_ptr)) {
17549 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
17550 				goto assign_dim_op_ret_null;
17551 			}
17552 		} else {
17553 			dim = EX_CONSTANT(opline->op2);
17554 
17555 			if (IS_CONST == IS_CONST) {
17556 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
17557 			} else {
17558 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
17559 			}
17560 			if (UNEXPECTED(!var_ptr)) {
17561 				goto assign_dim_op_ret_null;
17562 			}
17563 			ZVAL_DEREF(var_ptr);
17564 			SEPARATE_ZVAL_NOREF(var_ptr);
17565 		}
17566 
17567 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17568 
17569 		binary_op(var_ptr, var_ptr, value);
17570 
17571 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17572 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
17573 		}
17574 	} else {
17575 		if (EXPECTED(Z_ISREF_P(container))) {
17576 			container = Z_REFVAL_P(container);
17577 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17578 				goto assign_dim_op_array;
17579 			}
17580 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
17581 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
17582 assign_dim_op_convert_to_array:
17583 			ZVAL_NEW_ARR(container);
17584 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
17585 			goto assign_dim_op_new_array;
17586 		}
17587 
17588 		dim = EX_CONSTANT(opline->op2);
17589 
17590 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17591 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17592 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
17593 		} else {
17594 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
17595 				if (IS_CONST == IS_UNUSED) {
17596 					zend_throw_error(NULL, "[] operator not supported for strings");
17597 				} else {
17598 					zend_check_string_offset(dim, BP_VAR_RW);
17599 					if (EXPECTED(EG(exception) == NULL)) {
17600 						zend_wrong_string_offset();
17601 					}
17602 				}
17603 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
17604 				goto assign_dim_op_convert_to_array;
17605 			} else {
17606 				if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
17607 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
17608 				}
17609 assign_dim_op_ret_null:
17610 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17611 					ZVAL_NULL(EX_VAR(opline->result.var));
17612 				}
17613 			}
17614 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
17615 		}
17616 	}
17617 
17618 	FREE_OP(free_op_data1);
17619 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17620 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
17621 }
17622 
17623 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)
17624 {
17625 	USE_OPLINE
17626 	zend_free_op free_op1;
17627 	zval *var_ptr;
17628 	zval *value;
17629 
17630 	SAVE_OPLINE();
17631 	value = EX_CONSTANT(opline->op2);
17632 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
17633 
17634 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
17635 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17636 			ZVAL_NULL(EX_VAR(opline->result.var));
17637 		}
17638 	} else {
17639 		ZVAL_DEREF(var_ptr);
17640 		SEPARATE_ZVAL_NOREF(var_ptr);
17641 
17642 		binary_op(var_ptr, var_ptr, value);
17643 
17644 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
17645 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
17646 		}
17647 	}
17648 
17649 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
17650 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17651 }
17652 
17653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17654 {
17655 #if 0 || (IS_CONST != IS_UNUSED)
17656 	USE_OPLINE
17657 
17658 # if 0 || (IS_VAR != IS_UNUSED)
17659 	if (EXPECTED(1)) {
17660 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17661 	}
17662 	if (EXPECTED(0)) {
17663 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17664 	}
17665 # endif
17666 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17667 #else
17668 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17669 #endif
17670 }
17671 
17672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17673 {
17674 #if 0 || (IS_CONST != IS_UNUSED)
17675 	USE_OPLINE
17676 
17677 # if 0 || (IS_VAR != IS_UNUSED)
17678 	if (EXPECTED(0)) {
17679 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17680 	}
17681 	if (EXPECTED(1)) {
17682 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17683 	}
17684 # endif
17685 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17686 #else
17687 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17688 #endif
17689 }
17690 
17691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17692 {
17693 #if 0 || (IS_CONST != IS_UNUSED)
17694 	USE_OPLINE
17695 
17696 # if 0 || (IS_VAR != IS_UNUSED)
17697 	if (EXPECTED(0)) {
17698 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17699 	}
17700 	if (EXPECTED(0)) {
17701 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17702 	}
17703 # endif
17704 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17705 #else
17706 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17707 #endif
17708 }
17709 
17710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17711 {
17712 #if 0 || (IS_CONST != IS_UNUSED)
17713 	USE_OPLINE
17714 
17715 # if 0 || (IS_VAR != IS_UNUSED)
17716 	if (EXPECTED(1)) {
17717 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17718 	}
17719 	if (EXPECTED(0)) {
17720 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17721 	}
17722 # endif
17723 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17724 #else
17725 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17726 #endif
17727 }
17728 
17729 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17730 {
17731 #if 0 || (IS_CONST != IS_UNUSED)
17732 	USE_OPLINE
17733 
17734 # if 0 || (IS_VAR != IS_UNUSED)
17735 	if (EXPECTED(0)) {
17736 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17737 	}
17738 	if (EXPECTED(1)) {
17739 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17740 	}
17741 # endif
17742 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17743 #else
17744 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17745 #endif
17746 }
17747 
17748 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17749 {
17750 #if 0 || (IS_CONST != IS_UNUSED)
17751 	USE_OPLINE
17752 
17753 # if 0 || (IS_VAR != IS_UNUSED)
17754 	if (EXPECTED(0)) {
17755 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17756 	}
17757 	if (EXPECTED(0)) {
17758 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17759 	}
17760 # endif
17761 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17762 #else
17763 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17764 #endif
17765 }
17766 
17767 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17768 {
17769 #if 0 || (IS_CONST != IS_UNUSED)
17770 	USE_OPLINE
17771 
17772 # if 0 || (IS_VAR != IS_UNUSED)
17773 	if (EXPECTED(1)) {
17774 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17775 	}
17776 	if (EXPECTED(0)) {
17777 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17778 	}
17779 # endif
17780 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17781 #else
17782 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17783 #endif
17784 }
17785 
17786 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17787 {
17788 #if 0 || (IS_CONST != IS_UNUSED)
17789 	USE_OPLINE
17790 
17791 # if 0 || (IS_VAR != IS_UNUSED)
17792 	if (EXPECTED(0)) {
17793 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17794 	}
17795 	if (EXPECTED(1)) {
17796 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17797 	}
17798 # endif
17799 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17800 #else
17801 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17802 #endif
17803 }
17804 
17805 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17806 {
17807 #if 0 || (IS_CONST != IS_UNUSED)
17808 	USE_OPLINE
17809 
17810 # if 0 || (IS_VAR != IS_UNUSED)
17811 	if (EXPECTED(0)) {
17812 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17813 	}
17814 	if (EXPECTED(0)) {
17815 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17816 	}
17817 # endif
17818 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17819 #else
17820 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17821 #endif
17822 }
17823 
17824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17825 {
17826 #if 0 || (IS_CONST != IS_UNUSED)
17827 	USE_OPLINE
17828 
17829 # if 0 || (IS_VAR != IS_UNUSED)
17830 	if (EXPECTED(1)) {
17831 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17832 	}
17833 	if (EXPECTED(0)) {
17834 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17835 	}
17836 # endif
17837 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17838 #else
17839 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17840 #endif
17841 }
17842 
17843 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17844 {
17845 #if 0 || (IS_CONST != IS_UNUSED)
17846 	USE_OPLINE
17847 
17848 # if 0 || (IS_VAR != IS_UNUSED)
17849 	if (EXPECTED(0)) {
17850 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17851 	}
17852 	if (EXPECTED(1)) {
17853 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17854 	}
17855 # endif
17856 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17857 #else
17858 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17859 #endif
17860 }
17861 
17862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17863 {
17864 #if 0 || (IS_CONST != IS_UNUSED)
17865 	USE_OPLINE
17866 
17867 # if 0 || (IS_VAR != IS_UNUSED)
17868 	if (EXPECTED(0)) {
17869 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17870 	}
17871 	if (EXPECTED(0)) {
17872 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17873 	}
17874 # endif
17875 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17876 #else
17877 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17878 #endif
17879 }
17880 
17881 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17882 {
17883 #if 0 || (IS_CONST != IS_UNUSED)
17884 	USE_OPLINE
17885 
17886 # if 0 || (IS_VAR != IS_UNUSED)
17887 	if (EXPECTED(1)) {
17888 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17889 	}
17890 	if (EXPECTED(0)) {
17891 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17892 	}
17893 # endif
17894 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17895 #else
17896 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17897 #endif
17898 }
17899 
17900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17901 {
17902 #if 0 || (IS_CONST != IS_UNUSED)
17903 	USE_OPLINE
17904 
17905 # if 0 || (IS_VAR != IS_UNUSED)
17906 	if (EXPECTED(0)) {
17907 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17908 	}
17909 	if (EXPECTED(1)) {
17910 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17911 	}
17912 # endif
17913 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17914 #else
17915 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17916 #endif
17917 }
17918 
17919 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17920 {
17921 #if 0 || (IS_CONST != IS_UNUSED)
17922 	USE_OPLINE
17923 
17924 # if 0 || (IS_VAR != IS_UNUSED)
17925 	if (EXPECTED(0)) {
17926 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17927 	}
17928 	if (EXPECTED(0)) {
17929 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17930 	}
17931 # endif
17932 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17933 #else
17934 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17935 #endif
17936 }
17937 
17938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17939 {
17940 #if 0 || (IS_CONST != IS_UNUSED)
17941 	USE_OPLINE
17942 
17943 # if 0 || (IS_VAR != IS_UNUSED)
17944 	if (EXPECTED(1)) {
17945 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17946 	}
17947 	if (EXPECTED(0)) {
17948 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17949 	}
17950 # endif
17951 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17952 #else
17953 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17954 #endif
17955 }
17956 
17957 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17958 {
17959 #if 0 || (IS_CONST != IS_UNUSED)
17960 	USE_OPLINE
17961 
17962 # if 0 || (IS_VAR != IS_UNUSED)
17963 	if (EXPECTED(0)) {
17964 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17965 	}
17966 	if (EXPECTED(1)) {
17967 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17968 	}
17969 # endif
17970 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17971 #else
17972 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17973 #endif
17974 }
17975 
17976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17977 {
17978 #if 0 || (IS_CONST != IS_UNUSED)
17979 	USE_OPLINE
17980 
17981 # if 0 || (IS_VAR != IS_UNUSED)
17982 	if (EXPECTED(0)) {
17983 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17984 	}
17985 	if (EXPECTED(0)) {
17986 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17987 	}
17988 # endif
17989 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17990 #else
17991 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17992 #endif
17993 }
17994 
17995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17996 {
17997 #if 0 || (IS_CONST != IS_UNUSED)
17998 	USE_OPLINE
17999 
18000 # if 0 || (IS_VAR != IS_UNUSED)
18001 	if (EXPECTED(1)) {
18002 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18003 	}
18004 	if (EXPECTED(0)) {
18005 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18006 	}
18007 # endif
18008 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18009 #else
18010 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18011 #endif
18012 }
18013 
18014 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18015 {
18016 #if 0 || (IS_CONST != IS_UNUSED)
18017 	USE_OPLINE
18018 
18019 # if 0 || (IS_VAR != IS_UNUSED)
18020 	if (EXPECTED(0)) {
18021 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18022 	}
18023 	if (EXPECTED(1)) {
18024 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18025 	}
18026 # endif
18027 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18028 #else
18029 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18030 #endif
18031 }
18032 
18033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18034 {
18035 #if 0 || (IS_CONST != IS_UNUSED)
18036 	USE_OPLINE
18037 
18038 # if 0 || (IS_VAR != IS_UNUSED)
18039 	if (EXPECTED(0)) {
18040 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18041 	}
18042 	if (EXPECTED(0)) {
18043 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18044 	}
18045 # endif
18046 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18047 #else
18048 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18049 #endif
18050 }
18051 
18052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18053 {
18054 #if 0 || (IS_CONST != IS_UNUSED)
18055 	USE_OPLINE
18056 
18057 # if 0 || (IS_VAR != IS_UNUSED)
18058 	if (EXPECTED(1)) {
18059 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18060 	}
18061 	if (EXPECTED(0)) {
18062 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18063 	}
18064 # endif
18065 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18066 #else
18067 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18068 #endif
18069 }
18070 
18071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18072 {
18073 #if 0 || (IS_CONST != IS_UNUSED)
18074 	USE_OPLINE
18075 
18076 # if 0 || (IS_VAR != IS_UNUSED)
18077 	if (EXPECTED(0)) {
18078 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18079 	}
18080 	if (EXPECTED(1)) {
18081 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18082 	}
18083 # endif
18084 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18085 #else
18086 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18087 #endif
18088 }
18089 
18090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18091 {
18092 #if 0 || (IS_CONST != IS_UNUSED)
18093 	USE_OPLINE
18094 
18095 # if 0 || (IS_VAR != IS_UNUSED)
18096 	if (EXPECTED(0)) {
18097 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18098 	}
18099 	if (EXPECTED(0)) {
18100 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18101 	}
18102 # endif
18103 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18104 #else
18105 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18106 #endif
18107 }
18108 
18109 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18110 {
18111 #if 0 || (IS_CONST != IS_UNUSED)
18112 	USE_OPLINE
18113 
18114 # if 0 || (IS_VAR != IS_UNUSED)
18115 	if (EXPECTED(1)) {
18116 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18117 	}
18118 	if (EXPECTED(0)) {
18119 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18120 	}
18121 # endif
18122 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18123 #else
18124 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18125 #endif
18126 }
18127 
18128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18129 {
18130 #if 0 || (IS_CONST != IS_UNUSED)
18131 	USE_OPLINE
18132 
18133 # if 0 || (IS_VAR != IS_UNUSED)
18134 	if (EXPECTED(0)) {
18135 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18136 	}
18137 	if (EXPECTED(1)) {
18138 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18139 	}
18140 # endif
18141 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18142 #else
18143 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18144 #endif
18145 }
18146 
18147 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18148 {
18149 #if 0 || (IS_CONST != IS_UNUSED)
18150 	USE_OPLINE
18151 
18152 # if 0 || (IS_VAR != IS_UNUSED)
18153 	if (EXPECTED(0)) {
18154 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18155 	}
18156 	if (EXPECTED(0)) {
18157 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18158 	}
18159 # endif
18160 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18161 #else
18162 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18163 #endif
18164 }
18165 
18166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18167 {
18168 #if 0 || (IS_CONST != IS_UNUSED)
18169 	USE_OPLINE
18170 
18171 # if 0 || (IS_VAR != IS_UNUSED)
18172 	if (EXPECTED(1)) {
18173 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18174 	}
18175 	if (EXPECTED(0)) {
18176 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18177 	}
18178 # endif
18179 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18180 #else
18181 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18182 #endif
18183 }
18184 
18185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18186 {
18187 #if 0 || (IS_CONST != IS_UNUSED)
18188 	USE_OPLINE
18189 
18190 # if 0 || (IS_VAR != IS_UNUSED)
18191 	if (EXPECTED(0)) {
18192 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18193 	}
18194 	if (EXPECTED(1)) {
18195 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18196 	}
18197 # endif
18198 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18199 #else
18200 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18201 #endif
18202 }
18203 
18204 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18205 {
18206 #if 0 || (IS_CONST != IS_UNUSED)
18207 	USE_OPLINE
18208 
18209 # if 0 || (IS_VAR != IS_UNUSED)
18210 	if (EXPECTED(0)) {
18211 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18212 	}
18213 	if (EXPECTED(0)) {
18214 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18215 	}
18216 # endif
18217 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18218 #else
18219 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18220 #endif
18221 }
18222 
18223 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18224 {
18225 #if 0 || (IS_CONST != IS_UNUSED)
18226 	USE_OPLINE
18227 
18228 # if 0 || (IS_VAR != IS_UNUSED)
18229 	if (EXPECTED(1)) {
18230 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18231 	}
18232 	if (EXPECTED(0)) {
18233 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18234 	}
18235 # endif
18236 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18237 #else
18238 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18239 #endif
18240 }
18241 
18242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18243 {
18244 #if 0 || (IS_CONST != IS_UNUSED)
18245 	USE_OPLINE
18246 
18247 # if 0 || (IS_VAR != IS_UNUSED)
18248 	if (EXPECTED(0)) {
18249 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18250 	}
18251 	if (EXPECTED(1)) {
18252 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18253 	}
18254 # endif
18255 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18256 #else
18257 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18258 #endif
18259 }
18260 
18261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18262 {
18263 #if 0 || (IS_CONST != IS_UNUSED)
18264 	USE_OPLINE
18265 
18266 # if 0 || (IS_VAR != IS_UNUSED)
18267 	if (EXPECTED(0)) {
18268 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18269 	}
18270 	if (EXPECTED(0)) {
18271 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18272 	}
18273 # endif
18274 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18275 #else
18276 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18277 #endif
18278 }
18279 
18280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18281 {
18282 #if 0 || (IS_CONST != IS_UNUSED)
18283 	USE_OPLINE
18284 
18285 # if 0 || (IS_VAR != IS_UNUSED)
18286 	if (EXPECTED(1)) {
18287 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18288 	}
18289 	if (EXPECTED(0)) {
18290 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18291 	}
18292 # endif
18293 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18294 #else
18295 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18296 #endif
18297 }
18298 
18299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18300 {
18301 #if 0 || (IS_CONST != IS_UNUSED)
18302 	USE_OPLINE
18303 
18304 # if 0 || (IS_VAR != IS_UNUSED)
18305 	if (EXPECTED(0)) {
18306 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18307 	}
18308 	if (EXPECTED(1)) {
18309 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18310 	}
18311 # endif
18312 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18313 #else
18314 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18315 #endif
18316 }
18317 
18318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18319 {
18320 #if 0 || (IS_CONST != IS_UNUSED)
18321 	USE_OPLINE
18322 
18323 # if 0 || (IS_VAR != IS_UNUSED)
18324 	if (EXPECTED(0)) {
18325 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18326 	}
18327 	if (EXPECTED(0)) {
18328 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18329 	}
18330 # endif
18331 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18332 #else
18333 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18334 #endif
18335 }
18336 
18337 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
18338 {
18339 	USE_OPLINE
18340 	zend_free_op free_op1;
18341 	zval *object;
18342 	zval *property;
18343 	zval *zptr;
18344 
18345 	SAVE_OPLINE();
18346 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18347 
18348 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18349 		zend_throw_error(NULL, "Using $this when not in object context");
18350 
18351 		HANDLE_EXCEPTION();
18352 	}
18353 
18354 	property = EX_CONSTANT(opline->op2);
18355 
18356 	do {
18357 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
18358 			ZVAL_DEREF(object);
18359 			if (UNEXPECTED(!make_real_object(object))) {
18360 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18361 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18362 					ZVAL_NULL(EX_VAR(opline->result.var));
18363 				}
18364 				break;
18365 			}
18366 		}
18367 
18368 		/* here we are sure we are dealing with an object */
18369 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
18370 			&& 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)) {
18371 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
18372 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18373 					ZVAL_NULL(EX_VAR(opline->result.var));
18374 				}
18375 			} else {
18376 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
18377 					if (inc) {
18378 						fast_long_increment_function(zptr);
18379 					} else {
18380 						fast_long_decrement_function(zptr);
18381 					}
18382 				} else {
18383 					ZVAL_DEREF(zptr);
18384 					SEPARATE_ZVAL_NOREF(zptr);
18385 
18386 					if (inc) {
18387 						increment_function(zptr);
18388 					} else {
18389 						decrement_function(zptr);
18390 					}
18391 				}
18392 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18393 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
18394 				}
18395 			}
18396 		} else {
18397 			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));
18398 		}
18399 	} while (0);
18400 
18401 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18403 }
18404 
18405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18406 {
18407 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18408 }
18409 
18410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18411 {
18412 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18413 }
18414 
18415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
18416 {
18417 	USE_OPLINE
18418 	zend_free_op free_op1;
18419 	zval *object;
18420 	zval *property;
18421 	zval *zptr;
18422 
18423 	SAVE_OPLINE();
18424 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18425 
18426 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18427 		zend_throw_error(NULL, "Using $this when not in object context");
18428 
18429 		HANDLE_EXCEPTION();
18430 	}
18431 
18432 	property = EX_CONSTANT(opline->op2);
18433 
18434 	do {
18435 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
18436 			ZVAL_DEREF(object);
18437 			if (UNEXPECTED(!make_real_object(object))) {
18438 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18439 				ZVAL_NULL(EX_VAR(opline->result.var));
18440 				break;
18441 			}
18442 		}
18443 
18444 		/* here we are sure we are dealing with an object */
18445 
18446 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
18447 			&& 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)) {
18448 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
18449 				ZVAL_NULL(EX_VAR(opline->result.var));
18450 			} else {
18451 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
18452 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
18453 					if (inc) {
18454 						fast_long_increment_function(zptr);
18455 					} else {
18456 						fast_long_decrement_function(zptr);
18457 					}
18458 				} else {
18459 					ZVAL_DEREF(zptr);
18460 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
18461 					zval_opt_copy_ctor(zptr);
18462 					if (inc) {
18463 						increment_function(zptr);
18464 					} else {
18465 						decrement_function(zptr);
18466 					}
18467 				}
18468 			}
18469 		} else {
18470 			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));
18471 		}
18472 	} while (0);
18473 
18474 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18475 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18476 }
18477 
18478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18479 {
18480 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18481 }
18482 
18483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18484 {
18485 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18486 }
18487 
18488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18489 {
18490 	USE_OPLINE
18491 	zend_free_op free_op1;
18492 	zval *container;
18493 
18494 	SAVE_OPLINE();
18495 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18496 
18497 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
18498 
18499 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18500 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18501 	}
18502 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18503 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18504 }
18505 
18506 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18507 {
18508 	USE_OPLINE
18509 	zend_free_op free_op1;
18510 	zval *container;
18511 
18512 	SAVE_OPLINE();
18513 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18514 
18515 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
18516 
18517 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18518 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18519 	}
18520 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18521 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18522 }
18523 
18524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18525 {
18526 	USE_OPLINE
18527 	zval *container;
18528 	zend_free_op free_op1;
18529 
18530 	SAVE_OPLINE();
18531 
18532 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
18533         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
18534             zend_throw_error(NULL, "Cannot use temporary expression in write context");
18535 
18536 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18537 			HANDLE_EXCEPTION();
18538         }
18539 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18540 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
18541 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18542 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18543 		}
18544 
18545 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18546 	} else {
18547 		if (IS_CONST == IS_UNUSED) {
18548 			zend_throw_error(NULL, "Cannot use [] for reading");
18549 
18550 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18551 			HANDLE_EXCEPTION();
18552 		}
18553 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18554 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
18555 
18556 		zval_ptr_dtor_nogc(free_op1);
18557 	}
18558 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18559 }
18560 
18561 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18562 {
18563 	USE_OPLINE
18564 	zend_free_op free_op1;
18565 	zval *container;
18566 
18567 	SAVE_OPLINE();
18568 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18569 
18570 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
18571 
18572 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18573 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18574 	}
18575 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18576 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18577 }
18578 
18579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18580 {
18581 	USE_OPLINE
18582 	zend_free_op free_op1;
18583 	zval *container;
18584 
18585 	zval *offset;
18586 
18587 	SAVE_OPLINE();
18588 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
18589 
18590 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18591 		zend_throw_error(NULL, "Using $this when not in object context");
18592 
18593 		HANDLE_EXCEPTION();
18594 	}
18595 
18596 	offset = EX_CONSTANT(opline->op2);
18597 
18598 	if (IS_VAR == IS_CONST ||
18599 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18600 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18601 			container = Z_REFVAL_P(container);
18602 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
18603 				goto fetch_obj_r_no_object;
18604 			}
18605 		} else {
18606 			goto fetch_obj_r_no_object;
18607 		}
18608 	}
18609 
18610 	/* here we are sure we are dealing with an object */
18611 	do {
18612 		zend_object *zobj = Z_OBJ_P(container);
18613 		zval *retval;
18614 
18615 		if (IS_CONST == IS_CONST &&
18616 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
18617 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
18618 
18619 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
18620 				retval = OBJ_PROP(zobj, prop_offset);
18621 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
18622 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
18623 					break;
18624 				}
18625 			} else if (EXPECTED(zobj->properties != NULL)) {
18626 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
18627 				if (EXPECTED(retval)) {
18628 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
18629 					break;
18630 				}
18631 			}
18632 		}
18633 
18634 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
18635 fetch_obj_r_no_object:
18636 			zend_error(E_NOTICE, "Trying to get property of non-object");
18637 			ZVAL_NULL(EX_VAR(opline->result.var));
18638 		} else {
18639 			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));
18640 
18641 			if (retval != EX_VAR(opline->result.var)) {
18642 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
18643 			}
18644 		}
18645 	} while (0);
18646 
18647 	zval_ptr_dtor_nogc(free_op1);
18648 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18649 }
18650 
18651 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18652 {
18653 	USE_OPLINE
18654 	zend_free_op free_op1;
18655 	zval *property;
18656 	zval *container;
18657 
18658 	SAVE_OPLINE();
18659 	property = EX_CONSTANT(opline->op2);
18660 
18661 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18662 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18663 		zend_throw_error(NULL, "Using $this when not in object context");
18664 
18665 		HANDLE_EXCEPTION();
18666 	}
18667 
18668 	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);
18669 
18670 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18671 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18672 	}
18673 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18674 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18675 }
18676 
18677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18678 {
18679 	USE_OPLINE
18680 	zend_free_op free_op1;
18681 	zval *property;
18682 	zval *container;
18683 
18684 	SAVE_OPLINE();
18685 	property = EX_CONSTANT(opline->op2);
18686 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18687 
18688 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18689 		zend_throw_error(NULL, "Using $this when not in object context");
18690 
18691 		HANDLE_EXCEPTION();
18692 	}
18693 	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);
18694 
18695 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18696 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18697 	}
18698 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18700 }
18701 
18702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18703 {
18704 	USE_OPLINE
18705 	zval *container;
18706 
18707 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
18708 		/* Behave like FETCH_OBJ_W */
18709 		zend_free_op free_op1;
18710 		zval *property;
18711 
18712 		SAVE_OPLINE();
18713 		property = EX_CONSTANT(opline->op2);
18714 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18715 
18716 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18717 			zend_throw_error(NULL, "Using $this when not in object context");
18718 
18719 			HANDLE_EXCEPTION();
18720 		}
18721 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
18722 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
18723 
18724 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18725 			HANDLE_EXCEPTION();
18726 		}
18727 		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);
18728 
18729 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18730 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18731 		}
18732 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18733 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18734 	} else {
18735 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18736 	}
18737 }
18738 
18739 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18740 {
18741 	USE_OPLINE
18742 	zend_free_op free_op1;
18743 	zval *container, *property;
18744 
18745 	SAVE_OPLINE();
18746 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18747 
18748 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18749 		zend_throw_error(NULL, "Using $this when not in object context");
18750 
18751 		HANDLE_EXCEPTION();
18752 	}
18753 
18754 	property = EX_CONSTANT(opline->op2);
18755 
18756 	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);
18757 
18758 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
18759 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
18760 	}
18761 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18762 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18763 }
18764 
18765 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18766 {
18767 	USE_OPLINE
18768 	zend_free_op free_op1;
18769 	zval *object, *property_name, *value, tmp;
18770 
18771 	SAVE_OPLINE();
18772 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18773 
18774 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18775 		zend_throw_error(NULL, "Using $this when not in object context");
18776 
18777 
18778 		HANDLE_EXCEPTION();
18779 	}
18780 
18781 	property_name = EX_CONSTANT(opline->op2);
18782 	value = EX_CONSTANT((opline+1)->op1);
18783 
18784 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
18785 		do {
18786 			if (Z_ISREF_P(object)) {
18787 				object = Z_REFVAL_P(object);
18788 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18789 					break;
18790 				}
18791 			}
18792 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
18793 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
18794 				zend_object *obj;
18795 
18796 				zval_ptr_dtor(object);
18797 				object_init(object);
18798 				Z_ADDREF_P(object);
18799 				obj = Z_OBJ_P(object);
18800 				zend_error(E_WARNING, "Creating default object from empty value");
18801 				if (GC_REFCOUNT(obj) == 1) {
18802 					/* the enclosing container was deleted, obj is unreferenced */
18803 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18804 						ZVAL_NULL(EX_VAR(opline->result.var));
18805 					}
18806 
18807 					OBJ_RELEASE(obj);
18808 					goto exit_assign_obj;
18809 				}
18810 				Z_DELREF_P(object);
18811 			} else {
18812 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
18813 					zend_error(E_WARNING, "Attempt to assign property of non-object");
18814 				}
18815 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18816 					ZVAL_NULL(EX_VAR(opline->result.var));
18817 				}
18818 
18819 				goto exit_assign_obj;
18820 			}
18821 		} while (0);
18822 	}
18823 
18824 	if (IS_CONST == IS_CONST &&
18825 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
18826 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
18827 		zend_object *zobj = Z_OBJ_P(object);
18828 		zval *property;
18829 
18830 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
18831 			property = OBJ_PROP(zobj, prop_offset);
18832 			if (Z_TYPE_P(property) != IS_UNDEF) {
18833 fast_assign_obj:
18834 				value = zend_assign_to_variable(property, value, IS_CONST);
18835 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18836 					ZVAL_COPY(EX_VAR(opline->result.var), value);
18837 				}
18838 				goto exit_assign_obj;
18839 			}
18840 		} else {
18841 			if (EXPECTED(zobj->properties != NULL)) {
18842 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
18843 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
18844 						GC_REFCOUNT(zobj->properties)--;
18845 					}
18846 					zobj->properties = zend_array_dup(zobj->properties);
18847 				}
18848 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
18849 				if (property) {
18850 					goto fast_assign_obj;
18851 				}
18852 			}
18853 
18854 			if (!zobj->ce->__set) {
18855 
18856 				if (EXPECTED(zobj->properties == NULL)) {
18857 					rebuild_object_properties(zobj);
18858 				}
18859 				if (IS_CONST == IS_CONST) {
18860 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
18861 						Z_ADDREF_P(value);
18862 					}
18863 				} else if (IS_CONST != IS_TMP_VAR) {
18864 					if (Z_ISREF_P(value)) {
18865 						if (IS_CONST == IS_VAR) {
18866 							zend_reference *ref = Z_REF_P(value);
18867 							if (--GC_REFCOUNT(ref) == 0) {
18868 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
18869 								efree_size(ref, sizeof(zend_reference));
18870 								value = &tmp;
18871 							} else {
18872 								value = Z_REFVAL_P(value);
18873 								if (Z_REFCOUNTED_P(value)) {
18874 									Z_ADDREF_P(value);
18875 								}
18876 							}
18877 						} else {
18878 							value = Z_REFVAL_P(value);
18879 							if (Z_REFCOUNTED_P(value)) {
18880 								Z_ADDREF_P(value);
18881 							}
18882 						}
18883 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
18884 						Z_ADDREF_P(value);
18885 					}
18886 				}
18887 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
18888 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18889 					ZVAL_COPY(EX_VAR(opline->result.var), value);
18890 				}
18891 				goto exit_assign_obj;
18892 			}
18893 		}
18894 	}
18895 
18896 	if (!Z_OBJ_HT_P(object)->write_property) {
18897 		zend_error(E_WARNING, "Attempt to assign property of non-object");
18898 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18899 			ZVAL_NULL(EX_VAR(opline->result.var));
18900 		}
18901 
18902 		goto exit_assign_obj;
18903 	}
18904 
18905 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
18906 		ZVAL_DEREF(value);
18907 	}
18908 
18909 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
18910 
18911 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
18912 		ZVAL_COPY(EX_VAR(opline->result.var), value);
18913 	}
18914 
18915 exit_assign_obj:
18916 
18917 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
18918 	/* assign_obj has two opcodes! */
18919 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
18920 }
18921 
18922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18923 {
18924 	USE_OPLINE
18925 	zend_free_op free_op1, free_op_data;
18926 	zval *object, *property_name, *value, tmp;
18927 
18928 	SAVE_OPLINE();
18929 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
18930 
18931 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18932 		zend_throw_error(NULL, "Using $this when not in object context");
18933 
18934 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
18935 		HANDLE_EXCEPTION();
18936 	}
18937 
18938 	property_name = EX_CONSTANT(opline->op2);
18939 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
18940 
18941 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
18942 		do {
18943 			if (Z_ISREF_P(object)) {
18944 				object = Z_REFVAL_P(object);
18945 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18946 					break;
18947 				}
18948 			}
18949 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
18950 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
18951 				zend_object *obj;
18952 
18953 				zval_ptr_dtor(object);
18954 				object_init(object);
18955 				Z_ADDREF_P(object);
18956 				obj = Z_OBJ_P(object);
18957 				zend_error(E_WARNING, "Creating default object from empty value");
18958 				if (GC_REFCOUNT(obj) == 1) {
18959 					/* the enclosing container was deleted, obj is unreferenced */
18960 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18961 						ZVAL_NULL(EX_VAR(opline->result.var));
18962 					}
18963 					zval_ptr_dtor_nogc(free_op_data);
18964 					OBJ_RELEASE(obj);
18965 					goto exit_assign_obj;
18966 				}
18967 				Z_DELREF_P(object);
18968 			} else {
18969 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
18970 					zend_error(E_WARNING, "Attempt to assign property of non-object");
18971 				}
18972 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18973 					ZVAL_NULL(EX_VAR(opline->result.var));
18974 				}
18975 				zval_ptr_dtor_nogc(free_op_data);
18976 				goto exit_assign_obj;
18977 			}
18978 		} while (0);
18979 	}
18980 
18981 	if (IS_CONST == IS_CONST &&
18982 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
18983 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
18984 		zend_object *zobj = Z_OBJ_P(object);
18985 		zval *property;
18986 
18987 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
18988 			property = OBJ_PROP(zobj, prop_offset);
18989 			if (Z_TYPE_P(property) != IS_UNDEF) {
18990 fast_assign_obj:
18991 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
18992 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
18993 					ZVAL_COPY(EX_VAR(opline->result.var), value);
18994 				}
18995 				goto exit_assign_obj;
18996 			}
18997 		} else {
18998 			if (EXPECTED(zobj->properties != NULL)) {
18999 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
19000 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
19001 						GC_REFCOUNT(zobj->properties)--;
19002 					}
19003 					zobj->properties = zend_array_dup(zobj->properties);
19004 				}
19005 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
19006 				if (property) {
19007 					goto fast_assign_obj;
19008 				}
19009 			}
19010 
19011 			if (!zobj->ce->__set) {
19012 
19013 				if (EXPECTED(zobj->properties == NULL)) {
19014 					rebuild_object_properties(zobj);
19015 				}
19016 				if (IS_TMP_VAR == IS_CONST) {
19017 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
19018 						Z_ADDREF_P(value);
19019 					}
19020 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
19021 					if (Z_ISREF_P(value)) {
19022 						if (IS_TMP_VAR == IS_VAR) {
19023 							zend_reference *ref = Z_REF_P(value);
19024 							if (--GC_REFCOUNT(ref) == 0) {
19025 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
19026 								efree_size(ref, sizeof(zend_reference));
19027 								value = &tmp;
19028 							} else {
19029 								value = Z_REFVAL_P(value);
19030 								if (Z_REFCOUNTED_P(value)) {
19031 									Z_ADDREF_P(value);
19032 								}
19033 							}
19034 						} else {
19035 							value = Z_REFVAL_P(value);
19036 							if (Z_REFCOUNTED_P(value)) {
19037 								Z_ADDREF_P(value);
19038 							}
19039 						}
19040 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
19041 						Z_ADDREF_P(value);
19042 					}
19043 				}
19044 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
19045 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19046 					ZVAL_COPY(EX_VAR(opline->result.var), value);
19047 				}
19048 				goto exit_assign_obj;
19049 			}
19050 		}
19051 	}
19052 
19053 	if (!Z_OBJ_HT_P(object)->write_property) {
19054 		zend_error(E_WARNING, "Attempt to assign property of non-object");
19055 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19056 			ZVAL_NULL(EX_VAR(opline->result.var));
19057 		}
19058 		zval_ptr_dtor_nogc(free_op_data);
19059 		goto exit_assign_obj;
19060 	}
19061 
19062 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
19063 		ZVAL_DEREF(value);
19064 	}
19065 
19066 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
19067 
19068 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19069 		ZVAL_COPY(EX_VAR(opline->result.var), value);
19070 	}
19071 	zval_ptr_dtor_nogc(free_op_data);
19072 exit_assign_obj:
19073 
19074 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19075 	/* assign_obj has two opcodes! */
19076 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19077 }
19078 
19079 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19080 {
19081 	USE_OPLINE
19082 	zend_free_op free_op1, free_op_data;
19083 	zval *object, *property_name, *value, tmp;
19084 
19085 	SAVE_OPLINE();
19086 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19087 
19088 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
19089 		zend_throw_error(NULL, "Using $this when not in object context");
19090 
19091 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
19092 		HANDLE_EXCEPTION();
19093 	}
19094 
19095 	property_name = EX_CONSTANT(opline->op2);
19096 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
19097 
19098 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
19099 		do {
19100 			if (Z_ISREF_P(object)) {
19101 				object = Z_REFVAL_P(object);
19102 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
19103 					break;
19104 				}
19105 			}
19106 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
19107 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
19108 				zend_object *obj;
19109 
19110 				zval_ptr_dtor(object);
19111 				object_init(object);
19112 				Z_ADDREF_P(object);
19113 				obj = Z_OBJ_P(object);
19114 				zend_error(E_WARNING, "Creating default object from empty value");
19115 				if (GC_REFCOUNT(obj) == 1) {
19116 					/* the enclosing container was deleted, obj is unreferenced */
19117 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19118 						ZVAL_NULL(EX_VAR(opline->result.var));
19119 					}
19120 					zval_ptr_dtor_nogc(free_op_data);
19121 					OBJ_RELEASE(obj);
19122 					goto exit_assign_obj;
19123 				}
19124 				Z_DELREF_P(object);
19125 			} else {
19126 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
19127 					zend_error(E_WARNING, "Attempt to assign property of non-object");
19128 				}
19129 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19130 					ZVAL_NULL(EX_VAR(opline->result.var));
19131 				}
19132 				zval_ptr_dtor_nogc(free_op_data);
19133 				goto exit_assign_obj;
19134 			}
19135 		} while (0);
19136 	}
19137 
19138 	if (IS_CONST == IS_CONST &&
19139 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
19140 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
19141 		zend_object *zobj = Z_OBJ_P(object);
19142 		zval *property;
19143 
19144 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
19145 			property = OBJ_PROP(zobj, prop_offset);
19146 			if (Z_TYPE_P(property) != IS_UNDEF) {
19147 fast_assign_obj:
19148 				value = zend_assign_to_variable(property, value, IS_VAR);
19149 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19150 					ZVAL_COPY(EX_VAR(opline->result.var), value);
19151 				}
19152 				goto exit_assign_obj;
19153 			}
19154 		} else {
19155 			if (EXPECTED(zobj->properties != NULL)) {
19156 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
19157 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
19158 						GC_REFCOUNT(zobj->properties)--;
19159 					}
19160 					zobj->properties = zend_array_dup(zobj->properties);
19161 				}
19162 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
19163 				if (property) {
19164 					goto fast_assign_obj;
19165 				}
19166 			}
19167 
19168 			if (!zobj->ce->__set) {
19169 
19170 				if (EXPECTED(zobj->properties == NULL)) {
19171 					rebuild_object_properties(zobj);
19172 				}
19173 				if (IS_VAR == IS_CONST) {
19174 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
19175 						Z_ADDREF_P(value);
19176 					}
19177 				} else if (IS_VAR != IS_TMP_VAR) {
19178 					if (Z_ISREF_P(value)) {
19179 						if (IS_VAR == IS_VAR) {
19180 							zend_reference *ref = Z_REF_P(value);
19181 							if (--GC_REFCOUNT(ref) == 0) {
19182 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
19183 								efree_size(ref, sizeof(zend_reference));
19184 								value = &tmp;
19185 							} else {
19186 								value = Z_REFVAL_P(value);
19187 								if (Z_REFCOUNTED_P(value)) {
19188 									Z_ADDREF_P(value);
19189 								}
19190 							}
19191 						} else {
19192 							value = Z_REFVAL_P(value);
19193 							if (Z_REFCOUNTED_P(value)) {
19194 								Z_ADDREF_P(value);
19195 							}
19196 						}
19197 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
19198 						Z_ADDREF_P(value);
19199 					}
19200 				}
19201 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
19202 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19203 					ZVAL_COPY(EX_VAR(opline->result.var), value);
19204 				}
19205 				goto exit_assign_obj;
19206 			}
19207 		}
19208 	}
19209 
19210 	if (!Z_OBJ_HT_P(object)->write_property) {
19211 		zend_error(E_WARNING, "Attempt to assign property of non-object");
19212 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19213 			ZVAL_NULL(EX_VAR(opline->result.var));
19214 		}
19215 		zval_ptr_dtor_nogc(free_op_data);
19216 		goto exit_assign_obj;
19217 	}
19218 
19219 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
19220 		ZVAL_DEREF(value);
19221 	}
19222 
19223 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
19224 
19225 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19226 		ZVAL_COPY(EX_VAR(opline->result.var), value);
19227 	}
19228 	zval_ptr_dtor_nogc(free_op_data);
19229 exit_assign_obj:
19230 
19231 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19232 	/* assign_obj has two opcodes! */
19233 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19234 }
19235 
19236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19237 {
19238 	USE_OPLINE
19239 	zend_free_op free_op1;
19240 	zval *object, *property_name, *value, tmp;
19241 
19242 	SAVE_OPLINE();
19243 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19244 
19245 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
19246 		zend_throw_error(NULL, "Using $this when not in object context");
19247 
19248 
19249 		HANDLE_EXCEPTION();
19250 	}
19251 
19252 	property_name = EX_CONSTANT(opline->op2);
19253 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
19254 
19255 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
19256 		do {
19257 			if (Z_ISREF_P(object)) {
19258 				object = Z_REFVAL_P(object);
19259 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
19260 					break;
19261 				}
19262 			}
19263 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
19264 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
19265 				zend_object *obj;
19266 
19267 				zval_ptr_dtor(object);
19268 				object_init(object);
19269 				Z_ADDREF_P(object);
19270 				obj = Z_OBJ_P(object);
19271 				zend_error(E_WARNING, "Creating default object from empty value");
19272 				if (GC_REFCOUNT(obj) == 1) {
19273 					/* the enclosing container was deleted, obj is unreferenced */
19274 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19275 						ZVAL_NULL(EX_VAR(opline->result.var));
19276 					}
19277 
19278 					OBJ_RELEASE(obj);
19279 					goto exit_assign_obj;
19280 				}
19281 				Z_DELREF_P(object);
19282 			} else {
19283 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
19284 					zend_error(E_WARNING, "Attempt to assign property of non-object");
19285 				}
19286 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19287 					ZVAL_NULL(EX_VAR(opline->result.var));
19288 				}
19289 
19290 				goto exit_assign_obj;
19291 			}
19292 		} while (0);
19293 	}
19294 
19295 	if (IS_CONST == IS_CONST &&
19296 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
19297 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
19298 		zend_object *zobj = Z_OBJ_P(object);
19299 		zval *property;
19300 
19301 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
19302 			property = OBJ_PROP(zobj, prop_offset);
19303 			if (Z_TYPE_P(property) != IS_UNDEF) {
19304 fast_assign_obj:
19305 				value = zend_assign_to_variable(property, value, IS_CV);
19306 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19307 					ZVAL_COPY(EX_VAR(opline->result.var), value);
19308 				}
19309 				goto exit_assign_obj;
19310 			}
19311 		} else {
19312 			if (EXPECTED(zobj->properties != NULL)) {
19313 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
19314 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
19315 						GC_REFCOUNT(zobj->properties)--;
19316 					}
19317 					zobj->properties = zend_array_dup(zobj->properties);
19318 				}
19319 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
19320 				if (property) {
19321 					goto fast_assign_obj;
19322 				}
19323 			}
19324 
19325 			if (!zobj->ce->__set) {
19326 
19327 				if (EXPECTED(zobj->properties == NULL)) {
19328 					rebuild_object_properties(zobj);
19329 				}
19330 				if (IS_CV == IS_CONST) {
19331 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
19332 						Z_ADDREF_P(value);
19333 					}
19334 				} else if (IS_CV != IS_TMP_VAR) {
19335 					if (Z_ISREF_P(value)) {
19336 						if (IS_CV == IS_VAR) {
19337 							zend_reference *ref = Z_REF_P(value);
19338 							if (--GC_REFCOUNT(ref) == 0) {
19339 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
19340 								efree_size(ref, sizeof(zend_reference));
19341 								value = &tmp;
19342 							} else {
19343 								value = Z_REFVAL_P(value);
19344 								if (Z_REFCOUNTED_P(value)) {
19345 									Z_ADDREF_P(value);
19346 								}
19347 							}
19348 						} else {
19349 							value = Z_REFVAL_P(value);
19350 							if (Z_REFCOUNTED_P(value)) {
19351 								Z_ADDREF_P(value);
19352 							}
19353 						}
19354 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
19355 						Z_ADDREF_P(value);
19356 					}
19357 				}
19358 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
19359 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19360 					ZVAL_COPY(EX_VAR(opline->result.var), value);
19361 				}
19362 				goto exit_assign_obj;
19363 			}
19364 		}
19365 	}
19366 
19367 	if (!Z_OBJ_HT_P(object)->write_property) {
19368 		zend_error(E_WARNING, "Attempt to assign property of non-object");
19369 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19370 			ZVAL_NULL(EX_VAR(opline->result.var));
19371 		}
19372 
19373 		goto exit_assign_obj;
19374 	}
19375 
19376 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
19377 		ZVAL_DEREF(value);
19378 	}
19379 
19380 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
19381 
19382 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19383 		ZVAL_COPY(EX_VAR(opline->result.var), value);
19384 	}
19385 
19386 exit_assign_obj:
19387 
19388 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19389 	/* assign_obj has two opcodes! */
19390 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19391 }
19392 
19393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19394 {
19395 	USE_OPLINE
19396 	zend_free_op free_op1;
19397 	zval *object_ptr;
19398 
19399 	zval *value;
19400 	zval *variable_ptr;
19401 	zval *dim;
19402 
19403 	SAVE_OPLINE();
19404 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19405 
19406 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19407 try_assign_dim_array:
19408 		SEPARATE_ARRAY(object_ptr);
19409 		if (IS_CONST == IS_UNUSED) {
19410 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
19411 			if (UNEXPECTED(variable_ptr == NULL)) {
19412 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19413 				goto assign_dim_error;
19414 			}
19415 		} else {
19416 			dim = EX_CONSTANT(opline->op2);
19417 			if (IS_CONST == IS_CONST) {
19418 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
19419 			} else {
19420 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
19421 			}
19422 			if (UNEXPECTED(variable_ptr == NULL)) {
19423 				goto assign_dim_error;
19424 			}
19425 		}
19426 		value = EX_CONSTANT((opline+1)->op1);
19427 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
19428 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19429 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19430 		}
19431 	} else {
19432 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
19433 			object_ptr = Z_REFVAL_P(object_ptr);
19434 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19435 				goto try_assign_dim_array;
19436 			}
19437 		}
19438 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
19439 			dim = EX_CONSTANT(opline->op2);
19440 			value = EX_CONSTANT((opline+1)->op1);
19441 
19442 			zend_assign_to_object_dim(object_ptr, dim, value);
19443 
19444 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19445 				ZVAL_COPY(EX_VAR(opline->result.var), value);
19446 			}
19447 
19448 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
19449 			if (IS_CONST == IS_UNUSED) {
19450 				zend_throw_error(NULL, "[] operator not supported for strings");
19451 
19452 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19453 				HANDLE_EXCEPTION();
19454 			} else {
19455 				dim = EX_CONSTANT(opline->op2);
19456 				value = EX_CONSTANT((opline+1)->op1);
19457 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19458 
19459 			}
19460 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
19461 			ZVAL_NEW_ARR(object_ptr);
19462 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
19463 			goto try_assign_dim_array;
19464 		} else {
19465 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
19466 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
19467 			}
19468 			dim = EX_CONSTANT(opline->op2);
19469 assign_dim_error:
19470 
19471 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19472 				ZVAL_NULL(EX_VAR(opline->result.var));
19473 			}
19474 		}
19475 	}
19476 	if (IS_CONST != IS_UNUSED) {
19477 
19478 	}
19479 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19480 	/* assign_dim has two opcodes! */
19481 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19482 }
19483 
19484 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19485 {
19486 	USE_OPLINE
19487 	zend_free_op free_op1;
19488 	zval *object_ptr;
19489 	zend_free_op free_op_data;
19490 	zval *value;
19491 	zval *variable_ptr;
19492 	zval *dim;
19493 
19494 	SAVE_OPLINE();
19495 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19496 
19497 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19498 try_assign_dim_array:
19499 		SEPARATE_ARRAY(object_ptr);
19500 		if (IS_CONST == IS_UNUSED) {
19501 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
19502 			if (UNEXPECTED(variable_ptr == NULL)) {
19503 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19504 				goto assign_dim_error;
19505 			}
19506 		} else {
19507 			dim = EX_CONSTANT(opline->op2);
19508 			if (IS_CONST == IS_CONST) {
19509 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
19510 			} else {
19511 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
19512 			}
19513 			if (UNEXPECTED(variable_ptr == NULL)) {
19514 				goto assign_dim_error;
19515 			}
19516 		}
19517 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
19518 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
19519 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19520 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19521 		}
19522 	} else {
19523 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
19524 			object_ptr = Z_REFVAL_P(object_ptr);
19525 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19526 				goto try_assign_dim_array;
19527 			}
19528 		}
19529 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
19530 			dim = EX_CONSTANT(opline->op2);
19531 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
19532 
19533 			zend_assign_to_object_dim(object_ptr, dim, value);
19534 
19535 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19536 				ZVAL_COPY(EX_VAR(opline->result.var), value);
19537 			}
19538 
19539 			zval_ptr_dtor_nogc(free_op_data);
19540 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
19541 			if (IS_CONST == IS_UNUSED) {
19542 				zend_throw_error(NULL, "[] operator not supported for strings");
19543 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
19544 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19545 				HANDLE_EXCEPTION();
19546 			} else {
19547 				dim = EX_CONSTANT(opline->op2);
19548 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
19549 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19550 				zval_ptr_dtor_nogc(free_op_data);
19551 			}
19552 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
19553 			ZVAL_NEW_ARR(object_ptr);
19554 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
19555 			goto try_assign_dim_array;
19556 		} else {
19557 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
19558 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
19559 			}
19560 			dim = EX_CONSTANT(opline->op2);
19561 assign_dim_error:
19562 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
19563 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19564 				ZVAL_NULL(EX_VAR(opline->result.var));
19565 			}
19566 		}
19567 	}
19568 	if (IS_CONST != IS_UNUSED) {
19569 
19570 	}
19571 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19572 	/* assign_dim has two opcodes! */
19573 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19574 }
19575 
19576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19577 {
19578 	USE_OPLINE
19579 	zend_free_op free_op1;
19580 	zval *object_ptr;
19581 	zend_free_op free_op_data;
19582 	zval *value;
19583 	zval *variable_ptr;
19584 	zval *dim;
19585 
19586 	SAVE_OPLINE();
19587 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19588 
19589 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19590 try_assign_dim_array:
19591 		SEPARATE_ARRAY(object_ptr);
19592 		if (IS_CONST == IS_UNUSED) {
19593 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
19594 			if (UNEXPECTED(variable_ptr == NULL)) {
19595 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19596 				goto assign_dim_error;
19597 			}
19598 		} else {
19599 			dim = EX_CONSTANT(opline->op2);
19600 			if (IS_CONST == IS_CONST) {
19601 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
19602 			} else {
19603 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
19604 			}
19605 			if (UNEXPECTED(variable_ptr == NULL)) {
19606 				goto assign_dim_error;
19607 			}
19608 		}
19609 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
19610 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
19611 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19612 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19613 		}
19614 	} else {
19615 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
19616 			object_ptr = Z_REFVAL_P(object_ptr);
19617 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19618 				goto try_assign_dim_array;
19619 			}
19620 		}
19621 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
19622 			dim = EX_CONSTANT(opline->op2);
19623 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
19624 
19625 			zend_assign_to_object_dim(object_ptr, dim, value);
19626 
19627 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19628 				ZVAL_COPY(EX_VAR(opline->result.var), value);
19629 			}
19630 
19631 			zval_ptr_dtor_nogc(free_op_data);
19632 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
19633 			if (IS_CONST == IS_UNUSED) {
19634 				zend_throw_error(NULL, "[] operator not supported for strings");
19635 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
19636 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19637 				HANDLE_EXCEPTION();
19638 			} else {
19639 				dim = EX_CONSTANT(opline->op2);
19640 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
19641 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19642 				zval_ptr_dtor_nogc(free_op_data);
19643 			}
19644 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
19645 			ZVAL_NEW_ARR(object_ptr);
19646 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
19647 			goto try_assign_dim_array;
19648 		} else {
19649 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
19650 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
19651 			}
19652 			dim = EX_CONSTANT(opline->op2);
19653 assign_dim_error:
19654 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
19655 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19656 				ZVAL_NULL(EX_VAR(opline->result.var));
19657 			}
19658 		}
19659 	}
19660 	if (IS_CONST != IS_UNUSED) {
19661 
19662 	}
19663 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19664 	/* assign_dim has two opcodes! */
19665 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19666 }
19667 
19668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19669 {
19670 	USE_OPLINE
19671 	zend_free_op free_op1;
19672 	zval *object_ptr;
19673 
19674 	zval *value;
19675 	zval *variable_ptr;
19676 	zval *dim;
19677 
19678 	SAVE_OPLINE();
19679 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19680 
19681 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19682 try_assign_dim_array:
19683 		SEPARATE_ARRAY(object_ptr);
19684 		if (IS_CONST == IS_UNUSED) {
19685 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
19686 			if (UNEXPECTED(variable_ptr == NULL)) {
19687 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
19688 				goto assign_dim_error;
19689 			}
19690 		} else {
19691 			dim = EX_CONSTANT(opline->op2);
19692 			if (IS_CONST == IS_CONST) {
19693 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
19694 			} else {
19695 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
19696 			}
19697 			if (UNEXPECTED(variable_ptr == NULL)) {
19698 				goto assign_dim_error;
19699 			}
19700 		}
19701 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
19702 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
19703 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19704 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19705 		}
19706 	} else {
19707 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
19708 			object_ptr = Z_REFVAL_P(object_ptr);
19709 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
19710 				goto try_assign_dim_array;
19711 			}
19712 		}
19713 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
19714 			dim = EX_CONSTANT(opline->op2);
19715 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
19716 
19717 			zend_assign_to_object_dim(object_ptr, dim, value);
19718 
19719 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
19720 				ZVAL_COPY(EX_VAR(opline->result.var), value);
19721 			}
19722 
19723 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
19724 			if (IS_CONST == IS_UNUSED) {
19725 				zend_throw_error(NULL, "[] operator not supported for strings");
19726 
19727 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19728 				HANDLE_EXCEPTION();
19729 			} else {
19730 				dim = EX_CONSTANT(opline->op2);
19731 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
19732 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
19733 
19734 			}
19735 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
19736 			ZVAL_NEW_ARR(object_ptr);
19737 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
19738 			goto try_assign_dim_array;
19739 		} else {
19740 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
19741 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
19742 			}
19743 			dim = EX_CONSTANT(opline->op2);
19744 assign_dim_error:
19745 
19746 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
19747 				ZVAL_NULL(EX_VAR(opline->result.var));
19748 			}
19749 		}
19750 	}
19751 	if (IS_CONST != IS_UNUSED) {
19752 
19753 	}
19754 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19755 	/* assign_dim has two opcodes! */
19756 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
19757 }
19758 
19759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19760 {
19761 	USE_OPLINE
19762 	zend_free_op free_op1;
19763 	zval *value;
19764 	zval *variable_ptr;
19765 
19766 	SAVE_OPLINE();
19767 	value = EX_CONSTANT(opline->op2);
19768 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19769 
19770 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
19771 
19772 		if (UNEXPECTED(0)) {
19773 			ZVAL_NULL(EX_VAR(opline->result.var));
19774 		}
19775 	} else {
19776 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
19777 		if (UNEXPECTED(0)) {
19778 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19779 		}
19780 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19781 		/* zend_assign_to_variable() always takes care of op2, never free it! */
19782 	}
19783 
19784 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19785 }
19786 
19787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19788 {
19789 	USE_OPLINE
19790 	zend_free_op free_op1;
19791 	zval *value;
19792 	zval *variable_ptr;
19793 
19794 	SAVE_OPLINE();
19795 	value = EX_CONSTANT(opline->op2);
19796 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
19797 
19798 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
19799 
19800 		if (UNEXPECTED(1)) {
19801 			ZVAL_NULL(EX_VAR(opline->result.var));
19802 		}
19803 	} else {
19804 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
19805 		if (UNEXPECTED(1)) {
19806 			ZVAL_COPY(EX_VAR(opline->result.var), value);
19807 		}
19808 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
19809 		/* zend_assign_to_variable() always takes care of op2, never free it! */
19810 	}
19811 
19812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19813 }
19814 
19815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19816 {
19817 	USE_OPLINE
19818 	zval *function_name;
19819 	zend_class_entry *ce;
19820 	zend_object *object;
19821 	zend_function *fbc;
19822 	zend_execute_data *call;
19823 
19824 	SAVE_OPLINE();
19825 
19826 	if (IS_VAR == IS_CONST) {
19827 		/* no function found. try a static method in class */
19828 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
19829 		if (UNEXPECTED(ce == NULL)) {
19830 			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);
19831 			if (UNEXPECTED(ce == NULL)) {
19832 				ZEND_ASSERT(EG(exception));
19833 				HANDLE_EXCEPTION();
19834 			}
19835 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
19836 		}
19837 	} else if (IS_VAR == IS_UNUSED) {
19838 		ce = zend_fetch_class(NULL, opline->op1.num);
19839 		if (UNEXPECTED(ce == NULL)) {
19840 			ZEND_ASSERT(EG(exception));
19841 
19842 			HANDLE_EXCEPTION();
19843 		}
19844 	} else {
19845 		ce = Z_CE_P(EX_VAR(opline->op1.var));
19846 	}
19847 
19848 	if (IS_VAR == IS_CONST &&
19849 	    IS_CONST == IS_CONST &&
19850 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
19851 		/* nothing to do */
19852 	} else if (IS_VAR != IS_CONST &&
19853 	           IS_CONST == IS_CONST &&
19854 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
19855 		/* do nothing */
19856 	} else if (IS_CONST != IS_UNUSED) {
19857 
19858 
19859 		function_name = EX_CONSTANT(opline->op2);
19860 		if (IS_CONST != IS_CONST) {
19861 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
19862 				do {
19863 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
19864 						function_name = Z_REFVAL_P(function_name);
19865 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
19866 							break;
19867 						}
19868 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
19869 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
19870 						if (UNEXPECTED(EG(exception) != NULL)) {
19871 							HANDLE_EXCEPTION();
19872 						}
19873 					}
19874 					zend_throw_error(NULL, "Function name must be a string");
19875 
19876 					HANDLE_EXCEPTION();
19877 				} while (0);
19878  			}
19879 		}
19880 
19881 		if (ce->get_static_method) {
19882 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
19883 		} else {
19884 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
19885 		}
19886 		if (UNEXPECTED(fbc == NULL)) {
19887 			if (EXPECTED(!EG(exception))) {
19888 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
19889 			}
19890 
19891 			HANDLE_EXCEPTION();
19892 		}
19893 		if (IS_CONST == IS_CONST &&
19894 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
19895 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
19896 			if (IS_VAR == IS_CONST) {
19897 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
19898 			} else {
19899 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
19900 			}
19901 		}
19902 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
19903 			init_func_run_time_cache(&fbc->op_array);
19904 		}
19905 		if (IS_CONST != IS_CONST) {
19906 
19907 		}
19908 	} else {
19909 		if (UNEXPECTED(ce->constructor == NULL)) {
19910 			zend_throw_error(NULL, "Cannot call constructor");
19911 			HANDLE_EXCEPTION();
19912 		}
19913 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
19914 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
19915 			HANDLE_EXCEPTION();
19916 		}
19917 		fbc = ce->constructor;
19918 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
19919 			init_func_run_time_cache(&fbc->op_array);
19920 		}
19921 	}
19922 
19923 	object = NULL;
19924 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
19925 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
19926 			object = Z_OBJ(EX(This));
19927 			ce = object->ce;
19928 		} else {
19929 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
19930 				/* Allowed for PHP 4 compatibility. */
19931 				zend_error(
19932 					E_DEPRECATED,
19933 					"Non-static method %s::%s() should not be called statically",
19934 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
19935 				if (UNEXPECTED(EG(exception) != NULL)) {
19936 					HANDLE_EXCEPTION();
19937 				}
19938 			} else {
19939 				/* An internal function assumes $this is present and won't check that.
19940 				 * So PHP would crash by allowing the call. */
19941 				zend_throw_error(
19942 					zend_ce_error,
19943 					"Non-static method %s::%s() cannot be called statically",
19944 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
19945 				HANDLE_EXCEPTION();
19946 			}
19947 		}
19948 	}
19949 
19950 	if (IS_VAR == IS_UNUSED) {
19951 		/* previous opcode is ZEND_FETCH_CLASS */
19952 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
19953 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
19954 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
19955 				ce = Z_OBJCE(EX(This));
19956 			} else {
19957 				ce = Z_CE(EX(This));
19958 			}
19959 		}
19960 	}
19961 
19962 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
19963 		fbc, opline->extended_value, ce, object);
19964 	call->prev_execute_data = EX(call);
19965 	EX(call) = call;
19966 
19967 	ZEND_VM_NEXT_OPCODE();
19968 }
19969 
19970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19971 {
19972 	zend_class_entry *ce, *scope;
19973 	zend_class_constant *c;
19974 	zval *value;
19975 	USE_OPLINE
19976 
19977 	SAVE_OPLINE();
19978 
19979 	do {
19980 		if (IS_VAR == IS_CONST) {
19981 			if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
19982 				value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
19983 #ifdef ZTS
19984 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
19985 #endif
19986 				break;
19987 			} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
19988 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
19989 			} else {
19990 				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);
19991 				if (UNEXPECTED(ce == NULL)) {
19992 					ZEND_ASSERT(EG(exception));
19993 					HANDLE_EXCEPTION();
19994 				}
19995 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
19996 			}
19997 		} else {
19998 			if (IS_VAR == IS_UNUSED) {
19999 				ce = zend_fetch_class(NULL, opline->op1.num);
20000 				if (UNEXPECTED(ce == NULL)) {
20001 					ZEND_ASSERT(EG(exception));
20002 					HANDLE_EXCEPTION();
20003 				}
20004 			} else {
20005 				ce = Z_CE_P(EX_VAR(opline->op1.var));
20006 			}
20007 			if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
20008 				break;
20009 			}
20010 		}
20011 
20012 		if (EXPECTED((c = zend_hash_find_ptr(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
20013 			scope = EX(func)->op_array.scope;
20014 			if (!zend_verify_const_access(c, scope)) {
20015 				zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
20016 				HANDLE_EXCEPTION();
20017 			}
20018 			value = &c->value;
20019 			if (Z_CONSTANT_P(value)) {
20020 				zval_update_constant_ex(value, c->ce);
20021 				if (UNEXPECTED(EG(exception) != NULL)) {
20022 					HANDLE_EXCEPTION();
20023 				}
20024 			}
20025 			if (IS_VAR == IS_CONST) {
20026 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
20027 			} else {
20028 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
20029 			}
20030 		} else {
20031 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
20032 			HANDLE_EXCEPTION();
20033 		}
20034 	} while (0);
20035 
20036 #ifdef ZTS
20037 	if (ce->type == ZEND_INTERNAL_CLASS) {
20038 		ZVAL_DUP(EX_VAR(opline->result.var), value);
20039 	} else {
20040 		ZVAL_COPY(EX_VAR(opline->result.var), value);
20041 	}
20042 #else
20043 	ZVAL_COPY(EX_VAR(opline->result.var), value);
20044 #endif
20045 
20046 	ZEND_VM_NEXT_OPCODE();
20047 }
20048 
20049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20050 {
20051 	USE_OPLINE
20052 	zend_free_op free_op1;
20053 	zval *expr_ptr, new_expr;
20054 
20055 	SAVE_OPLINE();
20056 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
20057 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20058 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20059 		ZVAL_MAKE_REF(expr_ptr);
20060 		Z_ADDREF_P(expr_ptr);
20061 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20062 	} else {
20063 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20064 		if (IS_VAR == IS_TMP_VAR) {
20065 			/* pass */
20066 		} else if (IS_VAR == IS_CONST) {
20067 			if (Z_REFCOUNTED_P(expr_ptr)) {
20068 				Z_ADDREF_P(expr_ptr);
20069 			}
20070 		} else if (IS_VAR == IS_CV) {
20071 			ZVAL_DEREF(expr_ptr);
20072 			if (Z_REFCOUNTED_P(expr_ptr)) {
20073 				Z_ADDREF_P(expr_ptr);
20074 			}
20075 		} else /* if (IS_VAR == IS_VAR) */ {
20076 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20077 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20078 
20079 				expr_ptr = Z_REFVAL_P(expr_ptr);
20080 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
20081 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20082 					expr_ptr = &new_expr;
20083 					efree_size(ref, sizeof(zend_reference));
20084 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20085 					Z_ADDREF_P(expr_ptr);
20086 				}
20087 			}
20088 		}
20089 	}
20090 
20091 	if (IS_CONST != IS_UNUSED) {
20092 
20093 		zval *offset = EX_CONSTANT(opline->op2);
20094 		zend_string *str;
20095 		zend_ulong hval;
20096 
20097 add_again:
20098 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20099 			str = Z_STR_P(offset);
20100 			if (IS_CONST != IS_CONST) {
20101 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20102 					goto num_index;
20103 				}
20104 			}
20105 str_index:
20106 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20107 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20108 			hval = Z_LVAL_P(offset);
20109 num_index:
20110 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20111 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20112 			offset = Z_REFVAL_P(offset);
20113 			goto add_again;
20114 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20115 			str = ZSTR_EMPTY_ALLOC();
20116 			goto str_index;
20117 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20118 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
20119 			goto num_index;
20120 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20121 			hval = 0;
20122 			goto num_index;
20123 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20124 			hval = 1;
20125 			goto num_index;
20126 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20127 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
20128 			str = ZSTR_EMPTY_ALLOC();
20129 			goto str_index;
20130 		} else {
20131 			zend_error(E_WARNING, "Illegal offset type");
20132 			zval_ptr_dtor(expr_ptr);
20133 		}
20134 
20135 	} else {
20136 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20137 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
20138 			zval_ptr_dtor(expr_ptr);
20139 		}
20140 	}
20141 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20142 }
20143 
20144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20145 {
20146 	zval *array;
20147 	uint32_t size;
20148 	USE_OPLINE
20149 
20150 	array = EX_VAR(opline->result.var);
20151 	if (IS_VAR != IS_UNUSED) {
20152 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20153 	} else {
20154 		size = 0;
20155 	}
20156 	ZVAL_NEW_ARR(array);
20157 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
20158 
20159 	if (IS_VAR != IS_UNUSED) {
20160 		/* Explicitly initialize array as not-packed if flag is set */
20161 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20162 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
20163 		}
20164 	}
20165 
20166 	if (IS_VAR == IS_UNUSED) {
20167 		ZEND_VM_NEXT_OPCODE();
20168 #if 0 || (IS_VAR != IS_UNUSED)
20169 	} else {
20170 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20171 #endif
20172 	}
20173 }
20174 
20175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20176 {
20177 	USE_OPLINE
20178 	zend_free_op free_op1;
20179 	zval *container;
20180 	zval *offset;
20181 	zend_ulong hval;
20182 	zend_string *key;
20183 
20184 	SAVE_OPLINE();
20185 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20186 	offset = EX_CONSTANT(opline->op2);
20187 
20188 	do {
20189 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
20190 			HashTable *ht;
20191 
20192 unset_dim_array:
20193 			SEPARATE_ARRAY(container);
20194 			ht = Z_ARRVAL_P(container);
20195 offset_again:
20196 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20197 				key = Z_STR_P(offset);
20198 				if (IS_CONST != IS_CONST) {
20199 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
20200 						goto num_index_dim;
20201 					}
20202 				}
20203 str_index_dim:
20204 				if (ht == &EG(symbol_table)) {
20205 					zend_delete_global_variable(key);
20206 				} else {
20207 					zend_hash_del(ht, key);
20208 				}
20209 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20210 				hval = Z_LVAL_P(offset);
20211 num_index_dim:
20212 				zend_hash_index_del(ht, hval);
20213 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20214 				offset = Z_REFVAL_P(offset);
20215 				goto offset_again;
20216 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20217 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
20218 				goto num_index_dim;
20219 			} else if (Z_TYPE_P(offset) == IS_NULL) {
20220 				key = ZSTR_EMPTY_ALLOC();
20221 				goto str_index_dim;
20222 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
20223 				hval = 0;
20224 				goto num_index_dim;
20225 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
20226 				hval = 1;
20227 				goto num_index_dim;
20228 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20229 				hval = Z_RES_HANDLE_P(offset);
20230 				goto num_index_dim;
20231 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20232 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
20233 				key = ZSTR_EMPTY_ALLOC();
20234 				goto str_index_dim;
20235 			} else {
20236 				zend_error(E_WARNING, "Illegal offset type in unset");
20237 			}
20238 			break;
20239 		} else if (Z_ISREF_P(container)) {
20240 			container = Z_REFVAL_P(container);
20241 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
20242 				goto unset_dim_array;
20243 			}
20244 		}
20245 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
20246 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
20247 		}
20248 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
20249 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
20250 		}
20251 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
20252 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
20253 				zend_throw_error(NULL, "Cannot use object as array");
20254 			} else {
20255 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
20256 			}
20257 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
20258 			zend_throw_error(NULL, "Cannot unset string offsets");
20259 		}
20260 	} while (0);
20261 
20262 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20263 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20264 }
20265 
20266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20267 {
20268 	USE_OPLINE
20269 	zend_free_op free_op1;
20270 	zval *container;
20271 	zval *offset;
20272 
20273 	SAVE_OPLINE();
20274 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20275 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
20276 		zend_throw_error(NULL, "Using $this when not in object context");
20277 
20278 		HANDLE_EXCEPTION();
20279 	}
20280 	offset = EX_CONSTANT(opline->op2);
20281 
20282 	do {
20283 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
20284 			if (Z_ISREF_P(container)) {
20285 				container = Z_REFVAL_P(container);
20286 				if (Z_TYPE_P(container) != IS_OBJECT) {
20287 					break;
20288 				}
20289 			} else {
20290 				break;
20291 			}
20292 		}
20293 		if (Z_OBJ_HT_P(container)->unset_property) {
20294 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
20295 		} else {
20296 			zend_error(E_NOTICE, "Trying to unset property of non-object");
20297 		}
20298 	} while (0);
20299 
20300 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20301 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20302 }
20303 
20304 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20305 {
20306 	USE_OPLINE
20307 
20308 	zend_generator *generator = zend_get_running_generator(execute_data);
20309 
20310 	SAVE_OPLINE();
20311 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20312 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
20313 
20314 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20315 		HANDLE_EXCEPTION();
20316 	}
20317 
20318 	/* Destroy the previously yielded value */
20319 	zval_ptr_dtor(&generator->value);
20320 
20321 	/* Destroy the previously yielded key */
20322 	zval_ptr_dtor(&generator->key);
20323 
20324 	/* Set the new yielded value */
20325 	if (IS_VAR != IS_UNUSED) {
20326 		zend_free_op free_op1;
20327 
20328 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20329 			/* Constants and temporary variables aren't yieldable by reference,
20330 			 * but we still allow them with a notice. */
20331 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
20332 				zval *value;
20333 
20334 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20335 
20336 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20337 				ZVAL_COPY_VALUE(&generator->value, value);
20338 				if (IS_VAR == IS_CONST) {
20339 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20340 						Z_ADDREF(generator->value);
20341 					}
20342 				}
20343 			} else {
20344 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20345 
20346 				/* If a function call result is yielded and the function did
20347 				 * not return by reference we throw a notice. */
20348 				if (IS_VAR == IS_VAR &&
20349 				    (value_ptr == &EG(uninitialized_zval) ||
20350 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
20351 				      !Z_ISREF_P(value_ptr)))) {
20352 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20353 				} else {
20354 					ZVAL_MAKE_REF(value_ptr);
20355 				}
20356 				ZVAL_COPY(&generator->value, value_ptr);
20357 
20358 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20359 			}
20360 		} else {
20361 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20362 
20363 			/* Consts, temporary variables and references need copying */
20364 			if (IS_VAR == IS_CONST) {
20365 				ZVAL_COPY_VALUE(&generator->value, value);
20366 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20367 					Z_ADDREF(generator->value);
20368 				}
20369 			} else if (IS_VAR == IS_TMP_VAR) {
20370 				ZVAL_COPY_VALUE(&generator->value, value);
20371             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20372 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20373 				zval_ptr_dtor_nogc(free_op1);
20374 			} else {
20375 				ZVAL_COPY_VALUE(&generator->value, value);
20376 				if (IS_VAR == IS_CV) {
20377 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20378 				}
20379 			}
20380 		}
20381 	} else {
20382 		/* If no value was specified yield null */
20383 		ZVAL_NULL(&generator->value);
20384 	}
20385 
20386 	/* Set the new yielded key */
20387 	if (IS_CONST != IS_UNUSED) {
20388 
20389 		zval *key = EX_CONSTANT(opline->op2);
20390 
20391 		/* Consts, temporary variables and references need copying */
20392 		if (IS_CONST == IS_CONST) {
20393 			ZVAL_COPY_VALUE(&generator->key, key);
20394 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
20395 				Z_ADDREF(generator->key);
20396 			}
20397 		} else if (IS_CONST == IS_TMP_VAR) {
20398 			ZVAL_COPY_VALUE(&generator->key, key);
20399 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
20400 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
20401 
20402 		} else {
20403 			ZVAL_COPY_VALUE(&generator->key, key);
20404 			if (IS_CONST == IS_CV) {
20405 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
20406 			}
20407 		}
20408 
20409 		if (Z_TYPE(generator->key) == IS_LONG
20410 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20411 		) {
20412 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20413 		}
20414 	} else {
20415 		/* If no key was specified we use auto-increment keys */
20416 		generator->largest_used_integer_key++;
20417 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20418 	}
20419 
20420 	if (RETURN_VALUE_USED(opline)) {
20421 		/* If the return value of yield is used set the send
20422 		 * target and initialize it to NULL */
20423 		generator->send_target = EX_VAR(opline->result.var);
20424 		ZVAL_NULL(generator->send_target);
20425 	} else {
20426 		generator->send_target = NULL;
20427 	}
20428 
20429 	/* We increment to the next op, so we are at the correct position when the
20430 	 * generator is resumed. */
20431 	ZEND_VM_INC_OPCODE();
20432 
20433 	/* The GOTO VM uses a local opline variable. We need to set the opline
20434 	 * variable in execute_data so we don't resume at an old position. */
20435 	SAVE_OPLINE();
20436 
20437 	ZEND_VM_RETURN();
20438 }
20439 
20440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20441 {
20442 	USE_OPLINE
20443 	zend_free_op free_op1, free_op2;
20444 	zval *op1, *op2;
20445 	int result;
20446 
20447 	SAVE_OPLINE();
20448 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
20449 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
20450 	result = fast_is_identical_function(op1, op2);
20451 	zval_ptr_dtor_nogc(free_op1);
20452 	zval_ptr_dtor_nogc(free_op2);
20453 	ZEND_VM_SMART_BRANCH(result, 1);
20454 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
20455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20456 }
20457 
20458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20459 {
20460 	USE_OPLINE
20461 	zend_free_op free_op1, free_op2;
20462 	zval *op1, *op2;
20463 	int result;
20464 
20465 	SAVE_OPLINE();
20466 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
20467 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
20468 	result = fast_is_not_identical_function(op1, op2);
20469 	zval_ptr_dtor_nogc(free_op1);
20470 	zval_ptr_dtor_nogc(free_op2);
20471 	ZEND_VM_SMART_BRANCH(result, 1);
20472 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
20473 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20474 }
20475 
20476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20477 {
20478 	USE_OPLINE
20479 	zend_free_op free_op1, free_op2;
20480 	zval *value;
20481 	zval *variable_ptr;
20482 
20483 	SAVE_OPLINE();
20484 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
20485 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20486 
20487 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
20488 		zval_ptr_dtor_nogc(free_op2);
20489 		if (UNEXPECTED(0)) {
20490 			ZVAL_NULL(EX_VAR(opline->result.var));
20491 		}
20492 	} else {
20493 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
20494 		if (UNEXPECTED(0)) {
20495 			ZVAL_COPY(EX_VAR(opline->result.var), value);
20496 		}
20497 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20498 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20499 	}
20500 
20501 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20502 }
20503 
20504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20505 {
20506 	USE_OPLINE
20507 	zend_free_op free_op1, free_op2;
20508 	zval *value;
20509 	zval *variable_ptr;
20510 
20511 	SAVE_OPLINE();
20512 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
20513 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20514 
20515 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
20516 		zval_ptr_dtor_nogc(free_op2);
20517 		if (UNEXPECTED(1)) {
20518 			ZVAL_NULL(EX_VAR(opline->result.var));
20519 		}
20520 	} else {
20521 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
20522 		if (UNEXPECTED(1)) {
20523 			ZVAL_COPY(EX_VAR(opline->result.var), value);
20524 		}
20525 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20526 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20527 	}
20528 
20529 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20530 }
20531 
20532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20533 {
20534 	USE_OPLINE
20535 
20536 	zend_generator *generator = zend_get_running_generator(execute_data);
20537 
20538 	SAVE_OPLINE();
20539 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20540 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
20541 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20542 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20543 		HANDLE_EXCEPTION();
20544 	}
20545 
20546 	/* Destroy the previously yielded value */
20547 	zval_ptr_dtor(&generator->value);
20548 
20549 	/* Destroy the previously yielded key */
20550 	zval_ptr_dtor(&generator->key);
20551 
20552 	/* Set the new yielded value */
20553 	if (IS_VAR != IS_UNUSED) {
20554 		zend_free_op free_op1;
20555 
20556 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20557 			/* Constants and temporary variables aren't yieldable by reference,
20558 			 * but we still allow them with a notice. */
20559 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
20560 				zval *value;
20561 
20562 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20563 
20564 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20565 				ZVAL_COPY_VALUE(&generator->value, value);
20566 				if (IS_VAR == IS_CONST) {
20567 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20568 						Z_ADDREF(generator->value);
20569 					}
20570 				}
20571 			} else {
20572 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20573 
20574 				/* If a function call result is yielded and the function did
20575 				 * not return by reference we throw a notice. */
20576 				if (IS_VAR == IS_VAR &&
20577 				    (value_ptr == &EG(uninitialized_zval) ||
20578 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
20579 				      !Z_ISREF_P(value_ptr)))) {
20580 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20581 				} else {
20582 					ZVAL_MAKE_REF(value_ptr);
20583 				}
20584 				ZVAL_COPY(&generator->value, value_ptr);
20585 
20586 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20587 			}
20588 		} else {
20589 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20590 
20591 			/* Consts, temporary variables and references need copying */
20592 			if (IS_VAR == IS_CONST) {
20593 				ZVAL_COPY_VALUE(&generator->value, value);
20594 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20595 					Z_ADDREF(generator->value);
20596 				}
20597 			} else if (IS_VAR == IS_TMP_VAR) {
20598 				ZVAL_COPY_VALUE(&generator->value, value);
20599             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20600 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20601 				zval_ptr_dtor_nogc(free_op1);
20602 			} else {
20603 				ZVAL_COPY_VALUE(&generator->value, value);
20604 				if (IS_VAR == IS_CV) {
20605 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20606 				}
20607 			}
20608 		}
20609 	} else {
20610 		/* If no value was specified yield null */
20611 		ZVAL_NULL(&generator->value);
20612 	}
20613 
20614 	/* Set the new yielded key */
20615 	if (IS_TMP_VAR != IS_UNUSED) {
20616 		zend_free_op free_op2;
20617 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
20618 
20619 		/* Consts, temporary variables and references need copying */
20620 		if (IS_TMP_VAR == IS_CONST) {
20621 			ZVAL_COPY_VALUE(&generator->key, key);
20622 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
20623 				Z_ADDREF(generator->key);
20624 			}
20625 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
20626 			ZVAL_COPY_VALUE(&generator->key, key);
20627 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
20628 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
20629 
20630 		} else {
20631 			ZVAL_COPY_VALUE(&generator->key, key);
20632 			if (IS_TMP_VAR == IS_CV) {
20633 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
20634 			}
20635 		}
20636 
20637 		if (Z_TYPE(generator->key) == IS_LONG
20638 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20639 		) {
20640 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20641 		}
20642 	} else {
20643 		/* If no key was specified we use auto-increment keys */
20644 		generator->largest_used_integer_key++;
20645 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20646 	}
20647 
20648 	if (RETURN_VALUE_USED(opline)) {
20649 		/* If the return value of yield is used set the send
20650 		 * target and initialize it to NULL */
20651 		generator->send_target = EX_VAR(opline->result.var);
20652 		ZVAL_NULL(generator->send_target);
20653 	} else {
20654 		generator->send_target = NULL;
20655 	}
20656 
20657 	/* We increment to the next op, so we are at the correct position when the
20658 	 * generator is resumed. */
20659 	ZEND_VM_INC_OPCODE();
20660 
20661 	/* The GOTO VM uses a local opline variable. We need to set the opline
20662 	 * variable in execute_data so we don't resume at an old position. */
20663 	SAVE_OPLINE();
20664 
20665 	ZEND_VM_RETURN();
20666 }
20667 
20668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20669 {
20670 	USE_OPLINE
20671 	zend_free_op free_op1, free_op2;
20672 	zval *op1, *op2;
20673 	int result;
20674 
20675 	SAVE_OPLINE();
20676 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
20677 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
20678 	result = fast_is_identical_function(op1, op2);
20679 	zval_ptr_dtor_nogc(free_op1);
20680 	zval_ptr_dtor_nogc(free_op2);
20681 	ZEND_VM_SMART_BRANCH(result, 1);
20682 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
20683 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20684 }
20685 
20686 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20687 {
20688 	USE_OPLINE
20689 	zend_free_op free_op1, free_op2;
20690 	zval *op1, *op2;
20691 	int result;
20692 
20693 	SAVE_OPLINE();
20694 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
20695 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
20696 	result = fast_is_not_identical_function(op1, op2);
20697 	zval_ptr_dtor_nogc(free_op1);
20698 	zval_ptr_dtor_nogc(free_op2);
20699 	ZEND_VM_SMART_BRANCH(result, 1);
20700 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
20701 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20702 }
20703 
20704 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20705 {
20706 	USE_OPLINE
20707 	zend_free_op free_op1, free_op2;
20708 	zval *value;
20709 	zval *variable_ptr;
20710 
20711 	SAVE_OPLINE();
20712 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
20713 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20714 
20715 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
20716 		zval_ptr_dtor_nogc(free_op2);
20717 		if (UNEXPECTED(0)) {
20718 			ZVAL_NULL(EX_VAR(opline->result.var));
20719 		}
20720 	} else {
20721 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
20722 		if (UNEXPECTED(0)) {
20723 			ZVAL_COPY(EX_VAR(opline->result.var), value);
20724 		}
20725 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20726 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20727 	}
20728 
20729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20730 }
20731 
20732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20733 {
20734 	USE_OPLINE
20735 	zend_free_op free_op1, free_op2;
20736 	zval *value;
20737 	zval *variable_ptr;
20738 
20739 	SAVE_OPLINE();
20740 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
20741 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20742 
20743 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
20744 		zval_ptr_dtor_nogc(free_op2);
20745 		if (UNEXPECTED(1)) {
20746 			ZVAL_NULL(EX_VAR(opline->result.var));
20747 		}
20748 	} else {
20749 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
20750 		if (UNEXPECTED(1)) {
20751 			ZVAL_COPY(EX_VAR(opline->result.var), value);
20752 		}
20753 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20754 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20755 	}
20756 
20757 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20758 }
20759 
20760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20761 {
20762 	USE_OPLINE
20763 	zend_free_op free_op1, free_op2;
20764 	zval *variable_ptr;
20765 	zval *value_ptr;
20766 
20767 	SAVE_OPLINE();
20768 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
20769 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20770 
20771 	if (IS_VAR == IS_VAR &&
20772 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
20773 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var))) &&
20774 	    UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) {
20775 
20776 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
20777 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20778 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
20779 		HANDLE_EXCEPTION();
20780 
20781 	} else if (IS_VAR == IS_VAR &&
20782 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
20783 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
20784 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
20785 		if (UNEXPECTED(EG(exception) != NULL)) {
20786 			if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
20787 			HANDLE_EXCEPTION();
20788 		}
20789 
20790 		value_ptr = zend_assign_to_variable(variable_ptr, value_ptr, IS_VAR);
20791 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20792 			ZVAL_COPY(EX_VAR(opline->result.var), value_ptr);
20793 		}
20794 		/* zend_assign_to_variable() always takes care of op2, never free it! */
20795 
20796 	} else {
20797 
20798 		if ((IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) ||
20799 		    (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr)))) {
20800 			variable_ptr = &EG(uninitialized_zval);
20801 		} else {
20802 			zend_assign_to_variable_reference(variable_ptr, value_ptr);
20803 		}
20804 
20805 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20806 			ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
20807 		}
20808 
20809 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
20810 	}
20811 
20812 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20814 }
20815 
20816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20817 {
20818 	USE_OPLINE
20819 
20820 	zend_generator *generator = zend_get_running_generator(execute_data);
20821 
20822 	SAVE_OPLINE();
20823 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20824 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
20825 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20826 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20827 		HANDLE_EXCEPTION();
20828 	}
20829 
20830 	/* Destroy the previously yielded value */
20831 	zval_ptr_dtor(&generator->value);
20832 
20833 	/* Destroy the previously yielded key */
20834 	zval_ptr_dtor(&generator->key);
20835 
20836 	/* Set the new yielded value */
20837 	if (IS_VAR != IS_UNUSED) {
20838 		zend_free_op free_op1;
20839 
20840 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20841 			/* Constants and temporary variables aren't yieldable by reference,
20842 			 * but we still allow them with a notice. */
20843 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
20844 				zval *value;
20845 
20846 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20847 
20848 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20849 				ZVAL_COPY_VALUE(&generator->value, value);
20850 				if (IS_VAR == IS_CONST) {
20851 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20852 						Z_ADDREF(generator->value);
20853 					}
20854 				}
20855 			} else {
20856 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20857 
20858 				/* If a function call result is yielded and the function did
20859 				 * not return by reference we throw a notice. */
20860 				if (IS_VAR == IS_VAR &&
20861 				    (value_ptr == &EG(uninitialized_zval) ||
20862 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
20863 				      !Z_ISREF_P(value_ptr)))) {
20864 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20865 				} else {
20866 					ZVAL_MAKE_REF(value_ptr);
20867 				}
20868 				ZVAL_COPY(&generator->value, value_ptr);
20869 
20870 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20871 			}
20872 		} else {
20873 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
20874 
20875 			/* Consts, temporary variables and references need copying */
20876 			if (IS_VAR == IS_CONST) {
20877 				ZVAL_COPY_VALUE(&generator->value, value);
20878 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20879 					Z_ADDREF(generator->value);
20880 				}
20881 			} else if (IS_VAR == IS_TMP_VAR) {
20882 				ZVAL_COPY_VALUE(&generator->value, value);
20883             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20884 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20885 				zval_ptr_dtor_nogc(free_op1);
20886 			} else {
20887 				ZVAL_COPY_VALUE(&generator->value, value);
20888 				if (IS_VAR == IS_CV) {
20889 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20890 				}
20891 			}
20892 		}
20893 	} else {
20894 		/* If no value was specified yield null */
20895 		ZVAL_NULL(&generator->value);
20896 	}
20897 
20898 	/* Set the new yielded key */
20899 	if (IS_VAR != IS_UNUSED) {
20900 		zend_free_op free_op2;
20901 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
20902 
20903 		/* Consts, temporary variables and references need copying */
20904 		if (IS_VAR == IS_CONST) {
20905 			ZVAL_COPY_VALUE(&generator->key, key);
20906 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
20907 				Z_ADDREF(generator->key);
20908 			}
20909 		} else if (IS_VAR == IS_TMP_VAR) {
20910 			ZVAL_COPY_VALUE(&generator->key, key);
20911 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
20912 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
20913 			zval_ptr_dtor_nogc(free_op2);
20914 		} else {
20915 			ZVAL_COPY_VALUE(&generator->key, key);
20916 			if (IS_VAR == IS_CV) {
20917 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
20918 			}
20919 		}
20920 
20921 		if (Z_TYPE(generator->key) == IS_LONG
20922 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20923 		) {
20924 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20925 		}
20926 	} else {
20927 		/* If no key was specified we use auto-increment keys */
20928 		generator->largest_used_integer_key++;
20929 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20930 	}
20931 
20932 	if (RETURN_VALUE_USED(opline)) {
20933 		/* If the return value of yield is used set the send
20934 		 * target and initialize it to NULL */
20935 		generator->send_target = EX_VAR(opline->result.var);
20936 		ZVAL_NULL(generator->send_target);
20937 	} else {
20938 		generator->send_target = NULL;
20939 	}
20940 
20941 	/* We increment to the next op, so we are at the correct position when the
20942 	 * generator is resumed. */
20943 	ZEND_VM_INC_OPCODE();
20944 
20945 	/* The GOTO VM uses a local opline variable. We need to set the opline
20946 	 * variable in execute_data so we don't resume at an old position. */
20947 	SAVE_OPLINE();
20948 
20949 	ZEND_VM_RETURN();
20950 }
20951 
20952 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)
20953 {
20954 	USE_OPLINE
20955 	zend_free_op free_op1, free_op_data1;
20956 	zval *var_ptr;
20957 	zval *value, *container, *dim;
20958 
20959 	SAVE_OPLINE();
20960 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
20961 
20962 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
20963 assign_dim_op_array:
20964 		SEPARATE_ARRAY(container);
20965 assign_dim_op_new_array:
20966 		if (IS_UNUSED == IS_UNUSED) {
20967 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
20968 			if (UNEXPECTED(!var_ptr)) {
20969 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
20970 				goto assign_dim_op_ret_null;
20971 			}
20972 		} else {
20973 			dim = NULL;
20974 
20975 			if (IS_UNUSED == IS_CONST) {
20976 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
20977 			} else {
20978 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
20979 			}
20980 			if (UNEXPECTED(!var_ptr)) {
20981 				goto assign_dim_op_ret_null;
20982 			}
20983 			ZVAL_DEREF(var_ptr);
20984 			SEPARATE_ZVAL_NOREF(var_ptr);
20985 		}
20986 
20987 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
20988 
20989 		binary_op(var_ptr, var_ptr, value);
20990 
20991 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20992 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20993 		}
20994 	} else {
20995 		if (EXPECTED(Z_ISREF_P(container))) {
20996 			container = Z_REFVAL_P(container);
20997 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
20998 				goto assign_dim_op_array;
20999 			}
21000 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
21001 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
21002 assign_dim_op_convert_to_array:
21003 			ZVAL_NEW_ARR(container);
21004 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
21005 			goto assign_dim_op_new_array;
21006 		}
21007 
21008 		dim = NULL;
21009 
21010 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
21011 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
21012 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
21013 		} else {
21014 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
21015 				if (IS_UNUSED == IS_UNUSED) {
21016 					zend_throw_error(NULL, "[] operator not supported for strings");
21017 				} else {
21018 					zend_check_string_offset(dim, BP_VAR_RW);
21019 					if (EXPECTED(EG(exception) == NULL)) {
21020 						zend_wrong_string_offset();
21021 					}
21022 				}
21023 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
21024 				goto assign_dim_op_convert_to_array;
21025 			} else {
21026 				if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
21027 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
21028 				}
21029 assign_dim_op_ret_null:
21030 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21031 					ZVAL_NULL(EX_VAR(opline->result.var));
21032 				}
21033 			}
21034 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
21035 		}
21036 	}
21037 
21038 	FREE_OP(free_op_data1);
21039 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21040 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21041 }
21042 
21043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21044 {
21045 #if 0 || (IS_UNUSED != IS_UNUSED)
21046 	USE_OPLINE
21047 
21048 # if 0 || (IS_VAR != IS_UNUSED)
21049 	if (EXPECTED(0)) {
21050 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21051 	}
21052 	if (EXPECTED(1)) {
21053 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21054 	}
21055 # endif
21056 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21057 #else
21058 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21059 #endif
21060 }
21061 
21062 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21063 {
21064 #if 0 || (IS_UNUSED != IS_UNUSED)
21065 	USE_OPLINE
21066 
21067 # if 0 || (IS_VAR != IS_UNUSED)
21068 	if (EXPECTED(0)) {
21069 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21070 	}
21071 	if (EXPECTED(1)) {
21072 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21073 	}
21074 # endif
21075 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21076 #else
21077 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21078 #endif
21079 }
21080 
21081 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21082 {
21083 #if 0 || (IS_UNUSED != IS_UNUSED)
21084 	USE_OPLINE
21085 
21086 # if 0 || (IS_VAR != IS_UNUSED)
21087 	if (EXPECTED(0)) {
21088 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21089 	}
21090 	if (EXPECTED(1)) {
21091 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21092 	}
21093 # endif
21094 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21095 #else
21096 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21097 #endif
21098 }
21099 
21100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21101 {
21102 #if 0 || (IS_UNUSED != IS_UNUSED)
21103 	USE_OPLINE
21104 
21105 # if 0 || (IS_VAR != IS_UNUSED)
21106 	if (EXPECTED(0)) {
21107 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21108 	}
21109 	if (EXPECTED(1)) {
21110 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21111 	}
21112 # endif
21113 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21114 #else
21115 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21116 #endif
21117 }
21118 
21119 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21120 {
21121 #if 0 || (IS_UNUSED != IS_UNUSED)
21122 	USE_OPLINE
21123 
21124 # if 0 || (IS_VAR != IS_UNUSED)
21125 	if (EXPECTED(0)) {
21126 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21127 	}
21128 	if (EXPECTED(1)) {
21129 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21130 	}
21131 # endif
21132 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21133 #else
21134 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21135 #endif
21136 }
21137 
21138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21139 {
21140 #if 0 || (IS_UNUSED != IS_UNUSED)
21141 	USE_OPLINE
21142 
21143 # if 0 || (IS_VAR != IS_UNUSED)
21144 	if (EXPECTED(0)) {
21145 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21146 	}
21147 	if (EXPECTED(1)) {
21148 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21149 	}
21150 # endif
21151 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21152 #else
21153 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21154 #endif
21155 }
21156 
21157 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21158 {
21159 #if 0 || (IS_UNUSED != IS_UNUSED)
21160 	USE_OPLINE
21161 
21162 # if 0 || (IS_VAR != IS_UNUSED)
21163 	if (EXPECTED(0)) {
21164 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21165 	}
21166 	if (EXPECTED(1)) {
21167 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21168 	}
21169 # endif
21170 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21171 #else
21172 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21173 #endif
21174 }
21175 
21176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21177 {
21178 #if 0 || (IS_UNUSED != IS_UNUSED)
21179 	USE_OPLINE
21180 
21181 # if 0 || (IS_VAR != IS_UNUSED)
21182 	if (EXPECTED(0)) {
21183 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21184 	}
21185 	if (EXPECTED(1)) {
21186 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21187 	}
21188 # endif
21189 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21190 #else
21191 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21192 #endif
21193 }
21194 
21195 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21196 {
21197 #if 0 || (IS_UNUSED != IS_UNUSED)
21198 	USE_OPLINE
21199 
21200 # if 0 || (IS_VAR != IS_UNUSED)
21201 	if (EXPECTED(0)) {
21202 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21203 	}
21204 	if (EXPECTED(1)) {
21205 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21206 	}
21207 # endif
21208 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21209 #else
21210 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21211 #endif
21212 }
21213 
21214 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21215 {
21216 #if 0 || (IS_UNUSED != IS_UNUSED)
21217 	USE_OPLINE
21218 
21219 # if 0 || (IS_VAR != IS_UNUSED)
21220 	if (EXPECTED(0)) {
21221 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21222 	}
21223 	if (EXPECTED(1)) {
21224 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21225 	}
21226 # endif
21227 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21228 #else
21229 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21230 #endif
21231 }
21232 
21233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21234 {
21235 #if 0 || (IS_UNUSED != IS_UNUSED)
21236 	USE_OPLINE
21237 
21238 # if 0 || (IS_VAR != IS_UNUSED)
21239 	if (EXPECTED(0)) {
21240 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21241 	}
21242 	if (EXPECTED(1)) {
21243 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21244 	}
21245 # endif
21246 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21247 #else
21248 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21249 #endif
21250 }
21251 
21252 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21253 {
21254 #if 0 || (IS_UNUSED != IS_UNUSED)
21255 	USE_OPLINE
21256 
21257 # if 0 || (IS_VAR != IS_UNUSED)
21258 	if (EXPECTED(0)) {
21259 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21260 	}
21261 	if (EXPECTED(1)) {
21262 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21263 	}
21264 # endif
21265 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21266 #else
21267 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
21268 #endif
21269 }
21270 
21271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21272 {
21273 	USE_OPLINE
21274 	zend_free_op free_op1;
21275 	zval *container;
21276 
21277 	SAVE_OPLINE();
21278 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21279 
21280 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
21281 
21282 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
21283 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
21284 	}
21285 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21286 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21287 }
21288 
21289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21290 {
21291 	USE_OPLINE
21292 	zend_free_op free_op1;
21293 	zval *container;
21294 
21295 	SAVE_OPLINE();
21296 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21297 
21298 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
21299 
21300 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
21301 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
21302 	}
21303 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21304 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21305 }
21306 
21307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21308 {
21309 	USE_OPLINE
21310 	zval *container;
21311 	zend_free_op free_op1;
21312 
21313 	SAVE_OPLINE();
21314 
21315 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
21316         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21317             zend_throw_error(NULL, "Cannot use temporary expression in write context");
21318 
21319 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21320 			HANDLE_EXCEPTION();
21321         }
21322 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21323 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
21324 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
21325 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
21326 		}
21327 
21328 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21329 	} else {
21330 		if (IS_UNUSED == IS_UNUSED) {
21331 			zend_throw_error(NULL, "Cannot use [] for reading");
21332 
21333 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21334 			HANDLE_EXCEPTION();
21335 		}
21336 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21337 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
21338 
21339 		zval_ptr_dtor_nogc(free_op1);
21340 	}
21341 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21342 }
21343 
21344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21345 {
21346 	USE_OPLINE
21347 	zend_free_op free_op1;
21348 	zval *object_ptr;
21349 
21350 	zval *value;
21351 	zval *variable_ptr;
21352 	zval *dim;
21353 
21354 	SAVE_OPLINE();
21355 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21356 
21357 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21358 try_assign_dim_array:
21359 		SEPARATE_ARRAY(object_ptr);
21360 		if (IS_UNUSED == IS_UNUSED) {
21361 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
21362 			if (UNEXPECTED(variable_ptr == NULL)) {
21363 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
21364 				goto assign_dim_error;
21365 			}
21366 		} else {
21367 			dim = NULL;
21368 			if (IS_UNUSED == IS_CONST) {
21369 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
21370 			} else {
21371 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
21372 			}
21373 			if (UNEXPECTED(variable_ptr == NULL)) {
21374 				goto assign_dim_error;
21375 			}
21376 		}
21377 		value = EX_CONSTANT((opline+1)->op1);
21378 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
21379 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21380 			ZVAL_COPY(EX_VAR(opline->result.var), value);
21381 		}
21382 	} else {
21383 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
21384 			object_ptr = Z_REFVAL_P(object_ptr);
21385 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21386 				goto try_assign_dim_array;
21387 			}
21388 		}
21389 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
21390 			dim = NULL;
21391 			value = EX_CONSTANT((opline+1)->op1);
21392 
21393 			zend_assign_to_object_dim(object_ptr, dim, value);
21394 
21395 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
21396 				ZVAL_COPY(EX_VAR(opline->result.var), value);
21397 			}
21398 
21399 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
21400 			if (IS_UNUSED == IS_UNUSED) {
21401 				zend_throw_error(NULL, "[] operator not supported for strings");
21402 
21403 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21404 				HANDLE_EXCEPTION();
21405 			} else {
21406 				dim = NULL;
21407 				value = EX_CONSTANT((opline+1)->op1);
21408 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
21409 
21410 			}
21411 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
21412 			ZVAL_NEW_ARR(object_ptr);
21413 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
21414 			goto try_assign_dim_array;
21415 		} else {
21416 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
21417 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
21418 			}
21419 			dim = NULL;
21420 assign_dim_error:
21421 
21422 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21423 				ZVAL_NULL(EX_VAR(opline->result.var));
21424 			}
21425 		}
21426 	}
21427 	if (IS_UNUSED != IS_UNUSED) {
21428 
21429 	}
21430 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21431 	/* assign_dim has two opcodes! */
21432 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21433 }
21434 
21435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21436 {
21437 	USE_OPLINE
21438 	zend_free_op free_op1;
21439 	zval *object_ptr;
21440 	zend_free_op free_op_data;
21441 	zval *value;
21442 	zval *variable_ptr;
21443 	zval *dim;
21444 
21445 	SAVE_OPLINE();
21446 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21447 
21448 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21449 try_assign_dim_array:
21450 		SEPARATE_ARRAY(object_ptr);
21451 		if (IS_UNUSED == IS_UNUSED) {
21452 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
21453 			if (UNEXPECTED(variable_ptr == NULL)) {
21454 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
21455 				goto assign_dim_error;
21456 			}
21457 		} else {
21458 			dim = NULL;
21459 			if (IS_UNUSED == IS_CONST) {
21460 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
21461 			} else {
21462 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
21463 			}
21464 			if (UNEXPECTED(variable_ptr == NULL)) {
21465 				goto assign_dim_error;
21466 			}
21467 		}
21468 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
21469 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
21470 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21471 			ZVAL_COPY(EX_VAR(opline->result.var), value);
21472 		}
21473 	} else {
21474 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
21475 			object_ptr = Z_REFVAL_P(object_ptr);
21476 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21477 				goto try_assign_dim_array;
21478 			}
21479 		}
21480 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
21481 			dim = NULL;
21482 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
21483 
21484 			zend_assign_to_object_dim(object_ptr, dim, value);
21485 
21486 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
21487 				ZVAL_COPY(EX_VAR(opline->result.var), value);
21488 			}
21489 
21490 			zval_ptr_dtor_nogc(free_op_data);
21491 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
21492 			if (IS_UNUSED == IS_UNUSED) {
21493 				zend_throw_error(NULL, "[] operator not supported for strings");
21494 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
21495 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21496 				HANDLE_EXCEPTION();
21497 			} else {
21498 				dim = NULL;
21499 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
21500 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
21501 				zval_ptr_dtor_nogc(free_op_data);
21502 			}
21503 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
21504 			ZVAL_NEW_ARR(object_ptr);
21505 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
21506 			goto try_assign_dim_array;
21507 		} else {
21508 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
21509 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
21510 			}
21511 			dim = NULL;
21512 assign_dim_error:
21513 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
21514 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21515 				ZVAL_NULL(EX_VAR(opline->result.var));
21516 			}
21517 		}
21518 	}
21519 	if (IS_UNUSED != IS_UNUSED) {
21520 
21521 	}
21522 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21523 	/* assign_dim has two opcodes! */
21524 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21525 }
21526 
21527 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21528 {
21529 	USE_OPLINE
21530 	zend_free_op free_op1;
21531 	zval *object_ptr;
21532 	zend_free_op free_op_data;
21533 	zval *value;
21534 	zval *variable_ptr;
21535 	zval *dim;
21536 
21537 	SAVE_OPLINE();
21538 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21539 
21540 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21541 try_assign_dim_array:
21542 		SEPARATE_ARRAY(object_ptr);
21543 		if (IS_UNUSED == IS_UNUSED) {
21544 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
21545 			if (UNEXPECTED(variable_ptr == NULL)) {
21546 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
21547 				goto assign_dim_error;
21548 			}
21549 		} else {
21550 			dim = NULL;
21551 			if (IS_UNUSED == IS_CONST) {
21552 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
21553 			} else {
21554 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
21555 			}
21556 			if (UNEXPECTED(variable_ptr == NULL)) {
21557 				goto assign_dim_error;
21558 			}
21559 		}
21560 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
21561 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
21562 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21563 			ZVAL_COPY(EX_VAR(opline->result.var), value);
21564 		}
21565 	} else {
21566 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
21567 			object_ptr = Z_REFVAL_P(object_ptr);
21568 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21569 				goto try_assign_dim_array;
21570 			}
21571 		}
21572 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
21573 			dim = NULL;
21574 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
21575 
21576 			zend_assign_to_object_dim(object_ptr, dim, value);
21577 
21578 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
21579 				ZVAL_COPY(EX_VAR(opline->result.var), value);
21580 			}
21581 
21582 			zval_ptr_dtor_nogc(free_op_data);
21583 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
21584 			if (IS_UNUSED == IS_UNUSED) {
21585 				zend_throw_error(NULL, "[] operator not supported for strings");
21586 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
21587 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21588 				HANDLE_EXCEPTION();
21589 			} else {
21590 				dim = NULL;
21591 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
21592 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
21593 				zval_ptr_dtor_nogc(free_op_data);
21594 			}
21595 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
21596 			ZVAL_NEW_ARR(object_ptr);
21597 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
21598 			goto try_assign_dim_array;
21599 		} else {
21600 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
21601 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
21602 			}
21603 			dim = NULL;
21604 assign_dim_error:
21605 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
21606 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21607 				ZVAL_NULL(EX_VAR(opline->result.var));
21608 			}
21609 		}
21610 	}
21611 	if (IS_UNUSED != IS_UNUSED) {
21612 
21613 	}
21614 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21615 	/* assign_dim has two opcodes! */
21616 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21617 }
21618 
21619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21620 {
21621 	USE_OPLINE
21622 	zend_free_op free_op1;
21623 	zval *object_ptr;
21624 
21625 	zval *value;
21626 	zval *variable_ptr;
21627 	zval *dim;
21628 
21629 	SAVE_OPLINE();
21630 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21631 
21632 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21633 try_assign_dim_array:
21634 		SEPARATE_ARRAY(object_ptr);
21635 		if (IS_UNUSED == IS_UNUSED) {
21636 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
21637 			if (UNEXPECTED(variable_ptr == NULL)) {
21638 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
21639 				goto assign_dim_error;
21640 			}
21641 		} else {
21642 			dim = NULL;
21643 			if (IS_UNUSED == IS_CONST) {
21644 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
21645 			} else {
21646 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
21647 			}
21648 			if (UNEXPECTED(variable_ptr == NULL)) {
21649 				goto assign_dim_error;
21650 			}
21651 		}
21652 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
21653 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
21654 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21655 			ZVAL_COPY(EX_VAR(opline->result.var), value);
21656 		}
21657 	} else {
21658 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
21659 			object_ptr = Z_REFVAL_P(object_ptr);
21660 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
21661 				goto try_assign_dim_array;
21662 			}
21663 		}
21664 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
21665 			dim = NULL;
21666 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
21667 
21668 			zend_assign_to_object_dim(object_ptr, dim, value);
21669 
21670 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
21671 				ZVAL_COPY(EX_VAR(opline->result.var), value);
21672 			}
21673 
21674 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
21675 			if (IS_UNUSED == IS_UNUSED) {
21676 				zend_throw_error(NULL, "[] operator not supported for strings");
21677 
21678 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21679 				HANDLE_EXCEPTION();
21680 			} else {
21681 				dim = NULL;
21682 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
21683 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
21684 
21685 			}
21686 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
21687 			ZVAL_NEW_ARR(object_ptr);
21688 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
21689 			goto try_assign_dim_array;
21690 		} else {
21691 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
21692 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
21693 			}
21694 			dim = NULL;
21695 assign_dim_error:
21696 
21697 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21698 				ZVAL_NULL(EX_VAR(opline->result.var));
21699 			}
21700 		}
21701 	}
21702 	if (IS_UNUSED != IS_UNUSED) {
21703 
21704 	}
21705 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21706 	/* assign_dim has two opcodes! */
21707 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
21708 }
21709 
21710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21711 {
21712 	USE_OPLINE
21713 	zval *function_name;
21714 	zend_class_entry *ce;
21715 	zend_object *object;
21716 	zend_function *fbc;
21717 	zend_execute_data *call;
21718 
21719 	SAVE_OPLINE();
21720 
21721 	if (IS_VAR == IS_CONST) {
21722 		/* no function found. try a static method in class */
21723 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
21724 		if (UNEXPECTED(ce == NULL)) {
21725 			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);
21726 			if (UNEXPECTED(ce == NULL)) {
21727 				ZEND_ASSERT(EG(exception));
21728 				HANDLE_EXCEPTION();
21729 			}
21730 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
21731 		}
21732 	} else if (IS_VAR == IS_UNUSED) {
21733 		ce = zend_fetch_class(NULL, opline->op1.num);
21734 		if (UNEXPECTED(ce == NULL)) {
21735 			ZEND_ASSERT(EG(exception));
21736 
21737 			HANDLE_EXCEPTION();
21738 		}
21739 	} else {
21740 		ce = Z_CE_P(EX_VAR(opline->op1.var));
21741 	}
21742 
21743 	if (IS_VAR == IS_CONST &&
21744 	    IS_UNUSED == IS_CONST &&
21745 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
21746 		/* nothing to do */
21747 	} else if (IS_VAR != IS_CONST &&
21748 	           IS_UNUSED == IS_CONST &&
21749 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
21750 		/* do nothing */
21751 	} else if (IS_UNUSED != IS_UNUSED) {
21752 
21753 
21754 		function_name = NULL;
21755 		if (IS_UNUSED != IS_CONST) {
21756 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
21757 				do {
21758 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
21759 						function_name = Z_REFVAL_P(function_name);
21760 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
21761 							break;
21762 						}
21763 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
21764 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
21765 						if (UNEXPECTED(EG(exception) != NULL)) {
21766 							HANDLE_EXCEPTION();
21767 						}
21768 					}
21769 					zend_throw_error(NULL, "Function name must be a string");
21770 
21771 					HANDLE_EXCEPTION();
21772 				} while (0);
21773  			}
21774 		}
21775 
21776 		if (ce->get_static_method) {
21777 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
21778 		} else {
21779 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
21780 		}
21781 		if (UNEXPECTED(fbc == NULL)) {
21782 			if (EXPECTED(!EG(exception))) {
21783 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
21784 			}
21785 
21786 			HANDLE_EXCEPTION();
21787 		}
21788 		if (IS_UNUSED == IS_CONST &&
21789 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
21790 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
21791 			if (IS_VAR == IS_CONST) {
21792 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
21793 			} else {
21794 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
21795 			}
21796 		}
21797 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
21798 			init_func_run_time_cache(&fbc->op_array);
21799 		}
21800 		if (IS_UNUSED != IS_CONST) {
21801 
21802 		}
21803 	} else {
21804 		if (UNEXPECTED(ce->constructor == NULL)) {
21805 			zend_throw_error(NULL, "Cannot call constructor");
21806 			HANDLE_EXCEPTION();
21807 		}
21808 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
21809 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
21810 			HANDLE_EXCEPTION();
21811 		}
21812 		fbc = ce->constructor;
21813 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
21814 			init_func_run_time_cache(&fbc->op_array);
21815 		}
21816 	}
21817 
21818 	object = NULL;
21819 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
21820 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
21821 			object = Z_OBJ(EX(This));
21822 			ce = object->ce;
21823 		} else {
21824 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
21825 				/* Allowed for PHP 4 compatibility. */
21826 				zend_error(
21827 					E_DEPRECATED,
21828 					"Non-static method %s::%s() should not be called statically",
21829 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
21830 				if (UNEXPECTED(EG(exception) != NULL)) {
21831 					HANDLE_EXCEPTION();
21832 				}
21833 			} else {
21834 				/* An internal function assumes $this is present and won't check that.
21835 				 * So PHP would crash by allowing the call. */
21836 				zend_throw_error(
21837 					zend_ce_error,
21838 					"Non-static method %s::%s() cannot be called statically",
21839 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
21840 				HANDLE_EXCEPTION();
21841 			}
21842 		}
21843 	}
21844 
21845 	if (IS_VAR == IS_UNUSED) {
21846 		/* previous opcode is ZEND_FETCH_CLASS */
21847 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
21848 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
21849 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
21850 				ce = Z_OBJCE(EX(This));
21851 			} else {
21852 				ce = Z_CE(EX(This));
21853 			}
21854 		}
21855 	}
21856 
21857 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
21858 		fbc, opline->extended_value, ce, object);
21859 	call->prev_execute_data = EX(call);
21860 	EX(call) = call;
21861 
21862 	ZEND_VM_NEXT_OPCODE();
21863 }
21864 
21865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21866 {
21867 	USE_OPLINE
21868 
21869 	SAVE_OPLINE();
21870 	if (IS_VAR == IS_UNUSED) {
21871 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
21872 	} else {
21873 /* prevents "undefined variable opline" errors */
21874 #if 0 || (IS_VAR != IS_UNUSED)
21875 		zval *retval_ref, *retval_ptr;
21876 		zend_free_op free_op1;
21877 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
21878 
21879 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21880 
21881 		if (IS_VAR == IS_CONST) {
21882 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
21883 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
21884 		} else if (IS_VAR == IS_VAR) {
21885 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
21886 				retval_ptr = Z_INDIRECT_P(retval_ptr);
21887 			}
21888 			ZVAL_DEREF(retval_ptr);
21889 		} else if (IS_VAR == IS_CV) {
21890 			ZVAL_DEREF(retval_ptr);
21891 		}
21892 
21893 		if (UNEXPECTED(!ret_info->class_name
21894 			&& ret_info->type_hint != IS_CALLABLE
21895 			&& ret_info->type_hint != IS_ITERABLE
21896 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
21897 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
21898 			&& retval_ref != retval_ptr)
21899 		) {
21900 			/* A cast might happen - unwrap the reference if this is a by-value return */
21901 			if (Z_REFCOUNT_P(retval_ref) == 1) {
21902 				ZVAL_UNREF(retval_ref);
21903 			} else {
21904 				Z_DELREF_P(retval_ref);
21905 				ZVAL_COPY(retval_ref, retval_ptr);
21906 			}
21907 			retval_ptr = retval_ref;
21908 		}
21909 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
21910 
21911 		if (UNEXPECTED(EG(exception) != NULL)) {
21912 			if (IS_VAR == IS_CONST) {
21913 				zval_ptr_dtor_nogc(retval_ptr);
21914 			}
21915 		}
21916 #endif
21917 	}
21918 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21919 }
21920 
21921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21922 {
21923 	USE_OPLINE
21924 	zend_free_op free_op1;
21925 	zval *expr_ptr, new_expr;
21926 
21927 	SAVE_OPLINE();
21928 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
21929 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
21930 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
21931 		ZVAL_MAKE_REF(expr_ptr);
21932 		Z_ADDREF_P(expr_ptr);
21933 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21934 	} else {
21935 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
21936 		if (IS_VAR == IS_TMP_VAR) {
21937 			/* pass */
21938 		} else if (IS_VAR == IS_CONST) {
21939 			if (Z_REFCOUNTED_P(expr_ptr)) {
21940 				Z_ADDREF_P(expr_ptr);
21941 			}
21942 		} else if (IS_VAR == IS_CV) {
21943 			ZVAL_DEREF(expr_ptr);
21944 			if (Z_REFCOUNTED_P(expr_ptr)) {
21945 				Z_ADDREF_P(expr_ptr);
21946 			}
21947 		} else /* if (IS_VAR == IS_VAR) */ {
21948 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
21949 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
21950 
21951 				expr_ptr = Z_REFVAL_P(expr_ptr);
21952 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
21953 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21954 					expr_ptr = &new_expr;
21955 					efree_size(ref, sizeof(zend_reference));
21956 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
21957 					Z_ADDREF_P(expr_ptr);
21958 				}
21959 			}
21960 		}
21961 	}
21962 
21963 	if (IS_UNUSED != IS_UNUSED) {
21964 
21965 		zval *offset = NULL;
21966 		zend_string *str;
21967 		zend_ulong hval;
21968 
21969 add_again:
21970 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21971 			str = Z_STR_P(offset);
21972 			if (IS_UNUSED != IS_CONST) {
21973 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21974 					goto num_index;
21975 				}
21976 			}
21977 str_index:
21978 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21979 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21980 			hval = Z_LVAL_P(offset);
21981 num_index:
21982 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21983 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21984 			offset = Z_REFVAL_P(offset);
21985 			goto add_again;
21986 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21987 			str = ZSTR_EMPTY_ALLOC();
21988 			goto str_index;
21989 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21990 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
21991 			goto num_index;
21992 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21993 			hval = 0;
21994 			goto num_index;
21995 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21996 			hval = 1;
21997 			goto num_index;
21998 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21999 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
22000 			str = ZSTR_EMPTY_ALLOC();
22001 			goto str_index;
22002 		} else {
22003 			zend_error(E_WARNING, "Illegal offset type");
22004 			zval_ptr_dtor(expr_ptr);
22005 		}
22006 
22007 	} else {
22008 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
22009 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
22010 			zval_ptr_dtor(expr_ptr);
22011 		}
22012 	}
22013 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22014 }
22015 
22016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22017 {
22018 	zval *array;
22019 	uint32_t size;
22020 	USE_OPLINE
22021 
22022 	array = EX_VAR(opline->result.var);
22023 	if (IS_VAR != IS_UNUSED) {
22024 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
22025 	} else {
22026 		size = 0;
22027 	}
22028 	ZVAL_NEW_ARR(array);
22029 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
22030 
22031 	if (IS_VAR != IS_UNUSED) {
22032 		/* Explicitly initialize array as not-packed if flag is set */
22033 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
22034 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
22035 		}
22036 	}
22037 
22038 	if (IS_VAR == IS_UNUSED) {
22039 		ZEND_VM_NEXT_OPCODE();
22040 #if 0 || (IS_VAR != IS_UNUSED)
22041 	} else {
22042 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22043 #endif
22044 	}
22045 }
22046 
22047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22048 {
22049 	USE_OPLINE
22050 	zval *var_ptr;
22051 
22052 	var_ptr = EX_VAR(opline->op1.var);
22053 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
22054 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
22055 			ZVAL_UNREF(var_ptr);
22056 		}
22057 	}
22058 
22059 	ZEND_VM_NEXT_OPCODE();
22060 }
22061 
22062 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22063 {
22064 	USE_OPLINE
22065 
22066 	zend_generator *generator = zend_get_running_generator(execute_data);
22067 
22068 	SAVE_OPLINE();
22069 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
22070 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
22071 
22072 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22073 		HANDLE_EXCEPTION();
22074 	}
22075 
22076 	/* Destroy the previously yielded value */
22077 	zval_ptr_dtor(&generator->value);
22078 
22079 	/* Destroy the previously yielded key */
22080 	zval_ptr_dtor(&generator->key);
22081 
22082 	/* Set the new yielded value */
22083 	if (IS_VAR != IS_UNUSED) {
22084 		zend_free_op free_op1;
22085 
22086 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
22087 			/* Constants and temporary variables aren't yieldable by reference,
22088 			 * but we still allow them with a notice. */
22089 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
22090 				zval *value;
22091 
22092 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
22093 
22094 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
22095 				ZVAL_COPY_VALUE(&generator->value, value);
22096 				if (IS_VAR == IS_CONST) {
22097 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
22098 						Z_ADDREF(generator->value);
22099 					}
22100 				}
22101 			} else {
22102 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22103 
22104 				/* If a function call result is yielded and the function did
22105 				 * not return by reference we throw a notice. */
22106 				if (IS_VAR == IS_VAR &&
22107 				    (value_ptr == &EG(uninitialized_zval) ||
22108 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
22109 				      !Z_ISREF_P(value_ptr)))) {
22110 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
22111 				} else {
22112 					ZVAL_MAKE_REF(value_ptr);
22113 				}
22114 				ZVAL_COPY(&generator->value, value_ptr);
22115 
22116 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22117 			}
22118 		} else {
22119 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
22120 
22121 			/* Consts, temporary variables and references need copying */
22122 			if (IS_VAR == IS_CONST) {
22123 				ZVAL_COPY_VALUE(&generator->value, value);
22124 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
22125 					Z_ADDREF(generator->value);
22126 				}
22127 			} else if (IS_VAR == IS_TMP_VAR) {
22128 				ZVAL_COPY_VALUE(&generator->value, value);
22129             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
22130 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
22131 				zval_ptr_dtor_nogc(free_op1);
22132 			} else {
22133 				ZVAL_COPY_VALUE(&generator->value, value);
22134 				if (IS_VAR == IS_CV) {
22135 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
22136 				}
22137 			}
22138 		}
22139 	} else {
22140 		/* If no value was specified yield null */
22141 		ZVAL_NULL(&generator->value);
22142 	}
22143 
22144 	/* Set the new yielded key */
22145 	if (IS_UNUSED != IS_UNUSED) {
22146 
22147 		zval *key = NULL;
22148 
22149 		/* Consts, temporary variables and references need copying */
22150 		if (IS_UNUSED == IS_CONST) {
22151 			ZVAL_COPY_VALUE(&generator->key, key);
22152 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
22153 				Z_ADDREF(generator->key);
22154 			}
22155 		} else if (IS_UNUSED == IS_TMP_VAR) {
22156 			ZVAL_COPY_VALUE(&generator->key, key);
22157 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
22158 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
22159 
22160 		} else {
22161 			ZVAL_COPY_VALUE(&generator->key, key);
22162 			if (IS_UNUSED == IS_CV) {
22163 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
22164 			}
22165 		}
22166 
22167 		if (Z_TYPE(generator->key) == IS_LONG
22168 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
22169 		) {
22170 			generator->largest_used_integer_key = Z_LVAL(generator->key);
22171 		}
22172 	} else {
22173 		/* If no key was specified we use auto-increment keys */
22174 		generator->largest_used_integer_key++;
22175 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
22176 	}
22177 
22178 	if (RETURN_VALUE_USED(opline)) {
22179 		/* If the return value of yield is used set the send
22180 		 * target and initialize it to NULL */
22181 		generator->send_target = EX_VAR(opline->result.var);
22182 		ZVAL_NULL(generator->send_target);
22183 	} else {
22184 		generator->send_target = NULL;
22185 	}
22186 
22187 	/* We increment to the next op, so we are at the correct position when the
22188 	 * generator is resumed. */
22189 	ZEND_VM_INC_OPCODE();
22190 
22191 	/* The GOTO VM uses a local opline variable. We need to set the opline
22192 	 * variable in execute_data so we don't resume at an old position. */
22193 	SAVE_OPLINE();
22194 
22195 	ZEND_VM_RETURN();
22196 }
22197 
22198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22199 {
22200 	USE_OPLINE
22201 	zval *op1 = EX_VAR(opline->op1.var);
22202 
22203 	if (IS_VAR == IS_CV) {
22204 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
22205 			ZVAL_NEW_EMPTY_REF(op1);
22206 			Z_SET_REFCOUNT_P(op1, 2);
22207 			ZVAL_NULL(Z_REFVAL_P(op1));
22208 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
22209 		} else {
22210 			ZVAL_MAKE_REF(op1);
22211 			ZVAL_COPY(EX_VAR(opline->result.var), op1);
22212 		}
22213 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
22214 		op1 = Z_INDIRECT_P(op1);
22215 		if (EXPECTED(!Z_ISREF_P(op1))) {
22216 			ZVAL_MAKE_REF(op1);
22217 		}
22218 		GC_REFCOUNT(Z_REF_P(op1))++;
22219 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
22220 	} else {
22221 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
22222 	}
22223 	ZEND_VM_NEXT_OPCODE();
22224 }
22225 
22226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22227 {
22228 	USE_OPLINE
22229 	zend_free_op free_op1;
22230 	zval *op1, *op2;
22231 	int result;
22232 
22233 	SAVE_OPLINE();
22234 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
22235 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
22236 	result = fast_is_identical_function(op1, op2);
22237 	zval_ptr_dtor_nogc(free_op1);
22238 
22239 	ZEND_VM_SMART_BRANCH(result, 1);
22240 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
22241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22242 }
22243 
22244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22245 {
22246 	USE_OPLINE
22247 	zend_free_op free_op1;
22248 	zval *op1, *op2;
22249 	int result;
22250 
22251 	SAVE_OPLINE();
22252 	op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
22253 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
22254 	result = fast_is_not_identical_function(op1, op2);
22255 	zval_ptr_dtor_nogc(free_op1);
22256 
22257 	ZEND_VM_SMART_BRANCH(result, 1);
22258 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
22259 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22260 }
22261 
22262 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)
22263 {
22264 	USE_OPLINE
22265 	zend_free_op free_op1, free_op_data1;
22266 	zval *object;
22267 	zval *property;
22268 	zval *value;
22269 	zval *zptr;
22270 
22271 	SAVE_OPLINE();
22272 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22273 
22274 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22275 		zend_throw_error(NULL, "Using $this when not in object context");
22276 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22277 
22278 		HANDLE_EXCEPTION();
22279 	}
22280 
22281 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
22282 
22283 	do {
22284 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22285 
22286 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22287 			ZVAL_DEREF(object);
22288 			if (UNEXPECTED(!make_real_object(object))) {
22289 				zend_error(E_WARNING, "Attempt to assign property of non-object");
22290 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22291 					ZVAL_NULL(EX_VAR(opline->result.var));
22292 				}
22293 				break;
22294 			}
22295 		}
22296 
22297 		/* here we are sure we are dealing with an object */
22298 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
22299 			&& 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)) {
22300 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22301 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22302 					ZVAL_NULL(EX_VAR(opline->result.var));
22303 				}
22304 			} else {
22305 				ZVAL_DEREF(zptr);
22306 				SEPARATE_ZVAL_NOREF(zptr);
22307 
22308 				binary_op(zptr, zptr, value);
22309 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22310 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22311 				}
22312 			}
22313 		} else {
22314 			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));
22315 		}
22316 	} while (0);
22317 
22318 	FREE_OP(free_op_data1);
22319 
22320 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22321 	/* assign_obj has two opcodes! */
22322 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22323 }
22324 
22325 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)
22326 {
22327 	USE_OPLINE
22328 	zend_free_op free_op1, free_op_data1;
22329 	zval *var_ptr;
22330 	zval *value, *container, *dim;
22331 
22332 	SAVE_OPLINE();
22333 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22334 
22335 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22336 assign_dim_op_array:
22337 		SEPARATE_ARRAY(container);
22338 assign_dim_op_new_array:
22339 		if (IS_CV == IS_UNUSED) {
22340 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
22341 			if (UNEXPECTED(!var_ptr)) {
22342 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
22343 				goto assign_dim_op_ret_null;
22344 			}
22345 		} else {
22346 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
22347 
22348 			if (IS_CV == IS_CONST) {
22349 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
22350 			} else {
22351 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
22352 			}
22353 			if (UNEXPECTED(!var_ptr)) {
22354 				goto assign_dim_op_ret_null;
22355 			}
22356 			ZVAL_DEREF(var_ptr);
22357 			SEPARATE_ZVAL_NOREF(var_ptr);
22358 		}
22359 
22360 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22361 
22362 		binary_op(var_ptr, var_ptr, value);
22363 
22364 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22365 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22366 		}
22367 	} else {
22368 		if (EXPECTED(Z_ISREF_P(container))) {
22369 			container = Z_REFVAL_P(container);
22370 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22371 				goto assign_dim_op_array;
22372 			}
22373 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
22374 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
22375 assign_dim_op_convert_to_array:
22376 			ZVAL_NEW_ARR(container);
22377 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
22378 			goto assign_dim_op_new_array;
22379 		}
22380 
22381 		dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
22382 
22383 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22384 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22385 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
22386 		} else {
22387 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
22388 				if (IS_CV == IS_UNUSED) {
22389 					zend_throw_error(NULL, "[] operator not supported for strings");
22390 				} else {
22391 					zend_check_string_offset(dim, BP_VAR_RW);
22392 					if (EXPECTED(EG(exception) == NULL)) {
22393 						zend_wrong_string_offset();
22394 					}
22395 				}
22396 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
22397 				goto assign_dim_op_convert_to_array;
22398 			} else {
22399 				if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
22400 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
22401 				}
22402 assign_dim_op_ret_null:
22403 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22404 					ZVAL_NULL(EX_VAR(opline->result.var));
22405 				}
22406 			}
22407 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
22408 		}
22409 	}
22410 
22411 	FREE_OP(free_op_data1);
22412 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22413 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22414 }
22415 
22416 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)
22417 {
22418 	USE_OPLINE
22419 	zend_free_op free_op1;
22420 	zval *var_ptr;
22421 	zval *value;
22422 
22423 	SAVE_OPLINE();
22424 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
22425 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
22426 
22427 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
22428 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22429 			ZVAL_NULL(EX_VAR(opline->result.var));
22430 		}
22431 	} else {
22432 		ZVAL_DEREF(var_ptr);
22433 		SEPARATE_ZVAL_NOREF(var_ptr);
22434 
22435 		binary_op(var_ptr, var_ptr, value);
22436 
22437 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22438 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22439 		}
22440 	}
22441 
22442 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22443 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22444 }
22445 
22446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22447 {
22448 #if 0 || (IS_CV != IS_UNUSED)
22449 	USE_OPLINE
22450 
22451 # if 0 || (IS_VAR != IS_UNUSED)
22452 	if (EXPECTED(1)) {
22453 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22454 	}
22455 	if (EXPECTED(0)) {
22456 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22457 	}
22458 # endif
22459 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22460 #else
22461 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22462 #endif
22463 }
22464 
22465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22466 {
22467 #if 0 || (IS_CV != IS_UNUSED)
22468 	USE_OPLINE
22469 
22470 # if 0 || (IS_VAR != IS_UNUSED)
22471 	if (EXPECTED(0)) {
22472 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22473 	}
22474 	if (EXPECTED(1)) {
22475 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22476 	}
22477 # endif
22478 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22479 #else
22480 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22481 #endif
22482 }
22483 
22484 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22485 {
22486 #if 0 || (IS_CV != IS_UNUSED)
22487 	USE_OPLINE
22488 
22489 # if 0 || (IS_VAR != IS_UNUSED)
22490 	if (EXPECTED(0)) {
22491 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22492 	}
22493 	if (EXPECTED(0)) {
22494 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22495 	}
22496 # endif
22497 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22498 #else
22499 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22500 #endif
22501 }
22502 
22503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22504 {
22505 #if 0 || (IS_CV != IS_UNUSED)
22506 	USE_OPLINE
22507 
22508 # if 0 || (IS_VAR != IS_UNUSED)
22509 	if (EXPECTED(1)) {
22510 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22511 	}
22512 	if (EXPECTED(0)) {
22513 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22514 	}
22515 # endif
22516 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22517 #else
22518 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22519 #endif
22520 }
22521 
22522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22523 {
22524 #if 0 || (IS_CV != IS_UNUSED)
22525 	USE_OPLINE
22526 
22527 # if 0 || (IS_VAR != IS_UNUSED)
22528 	if (EXPECTED(0)) {
22529 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22530 	}
22531 	if (EXPECTED(1)) {
22532 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22533 	}
22534 # endif
22535 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22536 #else
22537 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22538 #endif
22539 }
22540 
22541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22542 {
22543 #if 0 || (IS_CV != IS_UNUSED)
22544 	USE_OPLINE
22545 
22546 # if 0 || (IS_VAR != IS_UNUSED)
22547 	if (EXPECTED(0)) {
22548 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22549 	}
22550 	if (EXPECTED(0)) {
22551 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22552 	}
22553 # endif
22554 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22555 #else
22556 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22557 #endif
22558 }
22559 
22560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22561 {
22562 #if 0 || (IS_CV != IS_UNUSED)
22563 	USE_OPLINE
22564 
22565 # if 0 || (IS_VAR != IS_UNUSED)
22566 	if (EXPECTED(1)) {
22567 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22568 	}
22569 	if (EXPECTED(0)) {
22570 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22571 	}
22572 # endif
22573 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22574 #else
22575 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22576 #endif
22577 }
22578 
22579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22580 {
22581 #if 0 || (IS_CV != IS_UNUSED)
22582 	USE_OPLINE
22583 
22584 # if 0 || (IS_VAR != IS_UNUSED)
22585 	if (EXPECTED(0)) {
22586 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22587 	}
22588 	if (EXPECTED(1)) {
22589 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22590 	}
22591 # endif
22592 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22593 #else
22594 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22595 #endif
22596 }
22597 
22598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22599 {
22600 #if 0 || (IS_CV != IS_UNUSED)
22601 	USE_OPLINE
22602 
22603 # if 0 || (IS_VAR != IS_UNUSED)
22604 	if (EXPECTED(0)) {
22605 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22606 	}
22607 	if (EXPECTED(0)) {
22608 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22609 	}
22610 # endif
22611 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22612 #else
22613 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22614 #endif
22615 }
22616 
22617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22618 {
22619 #if 0 || (IS_CV != IS_UNUSED)
22620 	USE_OPLINE
22621 
22622 # if 0 || (IS_VAR != IS_UNUSED)
22623 	if (EXPECTED(1)) {
22624 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22625 	}
22626 	if (EXPECTED(0)) {
22627 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22628 	}
22629 # endif
22630 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22631 #else
22632 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22633 #endif
22634 }
22635 
22636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22637 {
22638 #if 0 || (IS_CV != IS_UNUSED)
22639 	USE_OPLINE
22640 
22641 # if 0 || (IS_VAR != IS_UNUSED)
22642 	if (EXPECTED(0)) {
22643 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22644 	}
22645 	if (EXPECTED(1)) {
22646 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22647 	}
22648 # endif
22649 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22650 #else
22651 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22652 #endif
22653 }
22654 
22655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22656 {
22657 #if 0 || (IS_CV != IS_UNUSED)
22658 	USE_OPLINE
22659 
22660 # if 0 || (IS_VAR != IS_UNUSED)
22661 	if (EXPECTED(0)) {
22662 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22663 	}
22664 	if (EXPECTED(0)) {
22665 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22666 	}
22667 # endif
22668 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22669 #else
22670 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22671 #endif
22672 }
22673 
22674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22675 {
22676 #if 0 || (IS_CV != IS_UNUSED)
22677 	USE_OPLINE
22678 
22679 # if 0 || (IS_VAR != IS_UNUSED)
22680 	if (EXPECTED(1)) {
22681 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22682 	}
22683 	if (EXPECTED(0)) {
22684 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22685 	}
22686 # endif
22687 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22688 #else
22689 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22690 #endif
22691 }
22692 
22693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22694 {
22695 #if 0 || (IS_CV != IS_UNUSED)
22696 	USE_OPLINE
22697 
22698 # if 0 || (IS_VAR != IS_UNUSED)
22699 	if (EXPECTED(0)) {
22700 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22701 	}
22702 	if (EXPECTED(1)) {
22703 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22704 	}
22705 # endif
22706 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22707 #else
22708 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22709 #endif
22710 }
22711 
22712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22713 {
22714 #if 0 || (IS_CV != IS_UNUSED)
22715 	USE_OPLINE
22716 
22717 # if 0 || (IS_VAR != IS_UNUSED)
22718 	if (EXPECTED(0)) {
22719 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22720 	}
22721 	if (EXPECTED(0)) {
22722 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22723 	}
22724 # endif
22725 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22726 #else
22727 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22728 #endif
22729 }
22730 
22731 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22732 {
22733 #if 0 || (IS_CV != IS_UNUSED)
22734 	USE_OPLINE
22735 
22736 # if 0 || (IS_VAR != IS_UNUSED)
22737 	if (EXPECTED(1)) {
22738 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22739 	}
22740 	if (EXPECTED(0)) {
22741 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22742 	}
22743 # endif
22744 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22745 #else
22746 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22747 #endif
22748 }
22749 
22750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22751 {
22752 #if 0 || (IS_CV != IS_UNUSED)
22753 	USE_OPLINE
22754 
22755 # if 0 || (IS_VAR != IS_UNUSED)
22756 	if (EXPECTED(0)) {
22757 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22758 	}
22759 	if (EXPECTED(1)) {
22760 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22761 	}
22762 # endif
22763 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22764 #else
22765 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22766 #endif
22767 }
22768 
22769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22770 {
22771 #if 0 || (IS_CV != IS_UNUSED)
22772 	USE_OPLINE
22773 
22774 # if 0 || (IS_VAR != IS_UNUSED)
22775 	if (EXPECTED(0)) {
22776 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22777 	}
22778 	if (EXPECTED(0)) {
22779 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22780 	}
22781 # endif
22782 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22783 #else
22784 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22785 #endif
22786 }
22787 
22788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22789 {
22790 #if 0 || (IS_CV != IS_UNUSED)
22791 	USE_OPLINE
22792 
22793 # if 0 || (IS_VAR != IS_UNUSED)
22794 	if (EXPECTED(1)) {
22795 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22796 	}
22797 	if (EXPECTED(0)) {
22798 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22799 	}
22800 # endif
22801 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22802 #else
22803 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22804 #endif
22805 }
22806 
22807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22808 {
22809 #if 0 || (IS_CV != IS_UNUSED)
22810 	USE_OPLINE
22811 
22812 # if 0 || (IS_VAR != IS_UNUSED)
22813 	if (EXPECTED(0)) {
22814 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22815 	}
22816 	if (EXPECTED(1)) {
22817 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22818 	}
22819 # endif
22820 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22821 #else
22822 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22823 #endif
22824 }
22825 
22826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22827 {
22828 #if 0 || (IS_CV != IS_UNUSED)
22829 	USE_OPLINE
22830 
22831 # if 0 || (IS_VAR != IS_UNUSED)
22832 	if (EXPECTED(0)) {
22833 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22834 	}
22835 	if (EXPECTED(0)) {
22836 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22837 	}
22838 # endif
22839 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22840 #else
22841 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22842 #endif
22843 }
22844 
22845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22846 {
22847 #if 0 || (IS_CV != IS_UNUSED)
22848 	USE_OPLINE
22849 
22850 # if 0 || (IS_VAR != IS_UNUSED)
22851 	if (EXPECTED(1)) {
22852 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22853 	}
22854 	if (EXPECTED(0)) {
22855 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22856 	}
22857 # endif
22858 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22859 #else
22860 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22861 #endif
22862 }
22863 
22864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22865 {
22866 #if 0 || (IS_CV != IS_UNUSED)
22867 	USE_OPLINE
22868 
22869 # if 0 || (IS_VAR != IS_UNUSED)
22870 	if (EXPECTED(0)) {
22871 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22872 	}
22873 	if (EXPECTED(1)) {
22874 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22875 	}
22876 # endif
22877 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22878 #else
22879 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22880 #endif
22881 }
22882 
22883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22884 {
22885 #if 0 || (IS_CV != IS_UNUSED)
22886 	USE_OPLINE
22887 
22888 # if 0 || (IS_VAR != IS_UNUSED)
22889 	if (EXPECTED(0)) {
22890 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22891 	}
22892 	if (EXPECTED(0)) {
22893 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22894 	}
22895 # endif
22896 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22897 #else
22898 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22899 #endif
22900 }
22901 
22902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22903 {
22904 #if 0 || (IS_CV != IS_UNUSED)
22905 	USE_OPLINE
22906 
22907 # if 0 || (IS_VAR != IS_UNUSED)
22908 	if (EXPECTED(1)) {
22909 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22910 	}
22911 	if (EXPECTED(0)) {
22912 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22913 	}
22914 # endif
22915 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22916 #else
22917 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22918 #endif
22919 }
22920 
22921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22922 {
22923 #if 0 || (IS_CV != IS_UNUSED)
22924 	USE_OPLINE
22925 
22926 # if 0 || (IS_VAR != IS_UNUSED)
22927 	if (EXPECTED(0)) {
22928 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22929 	}
22930 	if (EXPECTED(1)) {
22931 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22932 	}
22933 # endif
22934 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22935 #else
22936 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22937 #endif
22938 }
22939 
22940 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22941 {
22942 #if 0 || (IS_CV != IS_UNUSED)
22943 	USE_OPLINE
22944 
22945 # if 0 || (IS_VAR != IS_UNUSED)
22946 	if (EXPECTED(0)) {
22947 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22948 	}
22949 	if (EXPECTED(0)) {
22950 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22951 	}
22952 # endif
22953 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22954 #else
22955 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22956 #endif
22957 }
22958 
22959 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22960 {
22961 #if 0 || (IS_CV != IS_UNUSED)
22962 	USE_OPLINE
22963 
22964 # if 0 || (IS_VAR != IS_UNUSED)
22965 	if (EXPECTED(1)) {
22966 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22967 	}
22968 	if (EXPECTED(0)) {
22969 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22970 	}
22971 # endif
22972 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22973 #else
22974 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22975 #endif
22976 }
22977 
22978 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22979 {
22980 #if 0 || (IS_CV != IS_UNUSED)
22981 	USE_OPLINE
22982 
22983 # if 0 || (IS_VAR != IS_UNUSED)
22984 	if (EXPECTED(0)) {
22985 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22986 	}
22987 	if (EXPECTED(1)) {
22988 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22989 	}
22990 # endif
22991 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22992 #else
22993 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22994 #endif
22995 }
22996 
22997 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22998 {
22999 #if 0 || (IS_CV != IS_UNUSED)
23000 	USE_OPLINE
23001 
23002 # if 0 || (IS_VAR != IS_UNUSED)
23003 	if (EXPECTED(0)) {
23004 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23005 	}
23006 	if (EXPECTED(0)) {
23007 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23008 	}
23009 # endif
23010 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23011 #else
23012 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23013 #endif
23014 }
23015 
23016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23017 {
23018 #if 0 || (IS_CV != IS_UNUSED)
23019 	USE_OPLINE
23020 
23021 # if 0 || (IS_VAR != IS_UNUSED)
23022 	if (EXPECTED(1)) {
23023 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23024 	}
23025 	if (EXPECTED(0)) {
23026 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23027 	}
23028 # endif
23029 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23030 #else
23031 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23032 #endif
23033 }
23034 
23035 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23036 {
23037 #if 0 || (IS_CV != IS_UNUSED)
23038 	USE_OPLINE
23039 
23040 # if 0 || (IS_VAR != IS_UNUSED)
23041 	if (EXPECTED(0)) {
23042 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23043 	}
23044 	if (EXPECTED(1)) {
23045 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23046 	}
23047 # endif
23048 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23049 #else
23050 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23051 #endif
23052 }
23053 
23054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23055 {
23056 #if 0 || (IS_CV != IS_UNUSED)
23057 	USE_OPLINE
23058 
23059 # if 0 || (IS_VAR != IS_UNUSED)
23060 	if (EXPECTED(0)) {
23061 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23062 	}
23063 	if (EXPECTED(0)) {
23064 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23065 	}
23066 # endif
23067 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23068 #else
23069 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23070 #endif
23071 }
23072 
23073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23074 {
23075 #if 0 || (IS_CV != IS_UNUSED)
23076 	USE_OPLINE
23077 
23078 # if 0 || (IS_VAR != IS_UNUSED)
23079 	if (EXPECTED(1)) {
23080 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23081 	}
23082 	if (EXPECTED(0)) {
23083 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23084 	}
23085 # endif
23086 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23087 #else
23088 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23089 #endif
23090 }
23091 
23092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23093 {
23094 #if 0 || (IS_CV != IS_UNUSED)
23095 	USE_OPLINE
23096 
23097 # if 0 || (IS_VAR != IS_UNUSED)
23098 	if (EXPECTED(0)) {
23099 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23100 	}
23101 	if (EXPECTED(1)) {
23102 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23103 	}
23104 # endif
23105 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23106 #else
23107 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23108 #endif
23109 }
23110 
23111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23112 {
23113 #if 0 || (IS_CV != IS_UNUSED)
23114 	USE_OPLINE
23115 
23116 # if 0 || (IS_VAR != IS_UNUSED)
23117 	if (EXPECTED(0)) {
23118 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23119 	}
23120 	if (EXPECTED(0)) {
23121 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23122 	}
23123 # endif
23124 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23125 #else
23126 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23127 #endif
23128 }
23129 
23130 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
23131 {
23132 	USE_OPLINE
23133 	zend_free_op free_op1;
23134 	zval *object;
23135 	zval *property;
23136 	zval *zptr;
23137 
23138 	SAVE_OPLINE();
23139 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23140 
23141 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23142 		zend_throw_error(NULL, "Using $this when not in object context");
23143 
23144 		HANDLE_EXCEPTION();
23145 	}
23146 
23147 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23148 
23149 	do {
23150 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23151 			ZVAL_DEREF(object);
23152 			if (UNEXPECTED(!make_real_object(object))) {
23153 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23154 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23155 					ZVAL_NULL(EX_VAR(opline->result.var));
23156 				}
23157 				break;
23158 			}
23159 		}
23160 
23161 		/* here we are sure we are dealing with an object */
23162 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
23163 			&& 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)) {
23164 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23165 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23166 					ZVAL_NULL(EX_VAR(opline->result.var));
23167 				}
23168 			} else {
23169 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
23170 					if (inc) {
23171 						fast_long_increment_function(zptr);
23172 					} else {
23173 						fast_long_decrement_function(zptr);
23174 					}
23175 				} else {
23176 					ZVAL_DEREF(zptr);
23177 					SEPARATE_ZVAL_NOREF(zptr);
23178 
23179 					if (inc) {
23180 						increment_function(zptr);
23181 					} else {
23182 						decrement_function(zptr);
23183 					}
23184 				}
23185 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23186 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
23187 				}
23188 			}
23189 		} else {
23190 			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));
23191 		}
23192 	} while (0);
23193 
23194 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23195 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23196 }
23197 
23198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23199 {
23200 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23201 }
23202 
23203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23204 {
23205 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23206 }
23207 
23208 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
23209 {
23210 	USE_OPLINE
23211 	zend_free_op free_op1;
23212 	zval *object;
23213 	zval *property;
23214 	zval *zptr;
23215 
23216 	SAVE_OPLINE();
23217 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23218 
23219 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23220 		zend_throw_error(NULL, "Using $this when not in object context");
23221 
23222 		HANDLE_EXCEPTION();
23223 	}
23224 
23225 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23226 
23227 	do {
23228 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23229 			ZVAL_DEREF(object);
23230 			if (UNEXPECTED(!make_real_object(object))) {
23231 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23232 				ZVAL_NULL(EX_VAR(opline->result.var));
23233 				break;
23234 			}
23235 		}
23236 
23237 		/* here we are sure we are dealing with an object */
23238 
23239 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
23240 			&& 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)) {
23241 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23242 				ZVAL_NULL(EX_VAR(opline->result.var));
23243 			} else {
23244 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
23245 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
23246 					if (inc) {
23247 						fast_long_increment_function(zptr);
23248 					} else {
23249 						fast_long_decrement_function(zptr);
23250 					}
23251 				} else {
23252 					ZVAL_DEREF(zptr);
23253 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
23254 					zval_opt_copy_ctor(zptr);
23255 					if (inc) {
23256 						increment_function(zptr);
23257 					} else {
23258 						decrement_function(zptr);
23259 					}
23260 				}
23261 			}
23262 		} else {
23263 			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));
23264 		}
23265 	} while (0);
23266 
23267 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23268 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23269 }
23270 
23271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23272 {
23273 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23274 }
23275 
23276 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23277 {
23278 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
23279 }
23280 
23281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23282 {
23283 	USE_OPLINE
23284 	zend_free_op free_op1;
23285 	zval *container;
23286 
23287 	SAVE_OPLINE();
23288 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23289 
23290 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
23291 
23292 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23293 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23294 	}
23295 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23296 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23297 }
23298 
23299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23300 {
23301 	USE_OPLINE
23302 	zend_free_op free_op1;
23303 	zval *container;
23304 
23305 	SAVE_OPLINE();
23306 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23307 
23308 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
23309 
23310 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23311 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23312 	}
23313 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23314 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23315 }
23316 
23317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23318 {
23319 	USE_OPLINE
23320 	zval *container;
23321 	zend_free_op free_op1;
23322 
23323 	SAVE_OPLINE();
23324 
23325 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
23326         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23327             zend_throw_error(NULL, "Cannot use temporary expression in write context");
23328 
23329 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23330 			HANDLE_EXCEPTION();
23331         }
23332 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23333 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
23334 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23335 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23336 		}
23337 
23338 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23339 	} else {
23340 		if (IS_CV == IS_UNUSED) {
23341 			zend_throw_error(NULL, "Cannot use [] for reading");
23342 
23343 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23344 			HANDLE_EXCEPTION();
23345 		}
23346 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
23347 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
23348 
23349 		zval_ptr_dtor_nogc(free_op1);
23350 	}
23351 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23352 }
23353 
23354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23355 {
23356 	USE_OPLINE
23357 	zend_free_op free_op1;
23358 	zval *container;
23359 
23360 	SAVE_OPLINE();
23361 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23362 
23363 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
23364 
23365 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23366 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23367 	}
23368 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23370 }
23371 
23372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23373 {
23374 	USE_OPLINE
23375 	zend_free_op free_op1;
23376 	zval *container;
23377 
23378 	zval *offset;
23379 
23380 	SAVE_OPLINE();
23381 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
23382 
23383 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23384 		zend_throw_error(NULL, "Using $this when not in object context");
23385 
23386 		HANDLE_EXCEPTION();
23387 	}
23388 
23389 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23390 
23391 	if (IS_VAR == IS_CONST ||
23392 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
23393 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
23394 			container = Z_REFVAL_P(container);
23395 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
23396 				goto fetch_obj_r_no_object;
23397 			}
23398 		} else {
23399 			goto fetch_obj_r_no_object;
23400 		}
23401 	}
23402 
23403 	/* here we are sure we are dealing with an object */
23404 	do {
23405 		zend_object *zobj = Z_OBJ_P(container);
23406 		zval *retval;
23407 
23408 		if (IS_CV == IS_CONST &&
23409 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
23410 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
23411 
23412 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23413 				retval = OBJ_PROP(zobj, prop_offset);
23414 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
23415 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
23416 					break;
23417 				}
23418 			} else if (EXPECTED(zobj->properties != NULL)) {
23419 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
23420 				if (EXPECTED(retval)) {
23421 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
23422 					break;
23423 				}
23424 			}
23425 		}
23426 
23427 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
23428 fetch_obj_r_no_object:
23429 			zend_error(E_NOTICE, "Trying to get property of non-object");
23430 			ZVAL_NULL(EX_VAR(opline->result.var));
23431 		} else {
23432 			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));
23433 
23434 			if (retval != EX_VAR(opline->result.var)) {
23435 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
23436 			}
23437 		}
23438 	} while (0);
23439 
23440 	zval_ptr_dtor_nogc(free_op1);
23441 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23442 }
23443 
23444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23445 {
23446 	USE_OPLINE
23447 	zend_free_op free_op1;
23448 	zval *property;
23449 	zval *container;
23450 
23451 	SAVE_OPLINE();
23452 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23453 
23454 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23455 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23456 		zend_throw_error(NULL, "Using $this when not in object context");
23457 
23458 		HANDLE_EXCEPTION();
23459 	}
23460 
23461 	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);
23462 
23463 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23464 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23465 	}
23466 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23467 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23468 }
23469 
23470 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23471 {
23472 	USE_OPLINE
23473 	zend_free_op free_op1;
23474 	zval *property;
23475 	zval *container;
23476 
23477 	SAVE_OPLINE();
23478 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23479 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23480 
23481 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23482 		zend_throw_error(NULL, "Using $this when not in object context");
23483 
23484 		HANDLE_EXCEPTION();
23485 	}
23486 	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);
23487 
23488 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23489 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23490 	}
23491 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23492 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23493 }
23494 
23495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23496 {
23497 	USE_OPLINE
23498 	zval *container;
23499 
23500 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
23501 		/* Behave like FETCH_OBJ_W */
23502 		zend_free_op free_op1;
23503 		zval *property;
23504 
23505 		SAVE_OPLINE();
23506 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23507 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23508 
23509 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23510 			zend_throw_error(NULL, "Using $this when not in object context");
23511 
23512 			HANDLE_EXCEPTION();
23513 		}
23514 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23515 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
23516 
23517 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23518 			HANDLE_EXCEPTION();
23519 		}
23520 		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);
23521 
23522 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23523 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23524 		}
23525 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23526 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23527 	} else {
23528 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23529 	}
23530 }
23531 
23532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23533 {
23534 	USE_OPLINE
23535 	zend_free_op free_op1;
23536 	zval *container, *property;
23537 
23538 	SAVE_OPLINE();
23539 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23540 
23541 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23542 		zend_throw_error(NULL, "Using $this when not in object context");
23543 
23544 		HANDLE_EXCEPTION();
23545 	}
23546 
23547 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23548 
23549 	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);
23550 
23551 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
23552 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
23553 	}
23554 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23555 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23556 }
23557 
23558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23559 {
23560 	USE_OPLINE
23561 	zend_free_op free_op1;
23562 	zval *object, *property_name, *value, tmp;
23563 
23564 	SAVE_OPLINE();
23565 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23566 
23567 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23568 		zend_throw_error(NULL, "Using $this when not in object context");
23569 
23570 
23571 		HANDLE_EXCEPTION();
23572 	}
23573 
23574 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23575 	value = EX_CONSTANT((opline+1)->op1);
23576 
23577 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23578 		do {
23579 			if (Z_ISREF_P(object)) {
23580 				object = Z_REFVAL_P(object);
23581 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
23582 					break;
23583 				}
23584 			}
23585 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
23586 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
23587 				zend_object *obj;
23588 
23589 				zval_ptr_dtor(object);
23590 				object_init(object);
23591 				Z_ADDREF_P(object);
23592 				obj = Z_OBJ_P(object);
23593 				zend_error(E_WARNING, "Creating default object from empty value");
23594 				if (GC_REFCOUNT(obj) == 1) {
23595 					/* the enclosing container was deleted, obj is unreferenced */
23596 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23597 						ZVAL_NULL(EX_VAR(opline->result.var));
23598 					}
23599 
23600 					OBJ_RELEASE(obj);
23601 					goto exit_assign_obj;
23602 				}
23603 				Z_DELREF_P(object);
23604 			} else {
23605 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
23606 					zend_error(E_WARNING, "Attempt to assign property of non-object");
23607 				}
23608 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23609 					ZVAL_NULL(EX_VAR(opline->result.var));
23610 				}
23611 
23612 				goto exit_assign_obj;
23613 			}
23614 		} while (0);
23615 	}
23616 
23617 	if (IS_CV == IS_CONST &&
23618 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
23619 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
23620 		zend_object *zobj = Z_OBJ_P(object);
23621 		zval *property;
23622 
23623 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23624 			property = OBJ_PROP(zobj, prop_offset);
23625 			if (Z_TYPE_P(property) != IS_UNDEF) {
23626 fast_assign_obj:
23627 				value = zend_assign_to_variable(property, value, IS_CONST);
23628 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23629 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23630 				}
23631 				goto exit_assign_obj;
23632 			}
23633 		} else {
23634 			if (EXPECTED(zobj->properties != NULL)) {
23635 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23636 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23637 						GC_REFCOUNT(zobj->properties)--;
23638 					}
23639 					zobj->properties = zend_array_dup(zobj->properties);
23640 				}
23641 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
23642 				if (property) {
23643 					goto fast_assign_obj;
23644 				}
23645 			}
23646 
23647 			if (!zobj->ce->__set) {
23648 
23649 				if (EXPECTED(zobj->properties == NULL)) {
23650 					rebuild_object_properties(zobj);
23651 				}
23652 				if (IS_CONST == IS_CONST) {
23653 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23654 						Z_ADDREF_P(value);
23655 					}
23656 				} else if (IS_CONST != IS_TMP_VAR) {
23657 					if (Z_ISREF_P(value)) {
23658 						if (IS_CONST == IS_VAR) {
23659 							zend_reference *ref = Z_REF_P(value);
23660 							if (--GC_REFCOUNT(ref) == 0) {
23661 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23662 								efree_size(ref, sizeof(zend_reference));
23663 								value = &tmp;
23664 							} else {
23665 								value = Z_REFVAL_P(value);
23666 								if (Z_REFCOUNTED_P(value)) {
23667 									Z_ADDREF_P(value);
23668 								}
23669 							}
23670 						} else {
23671 							value = Z_REFVAL_P(value);
23672 							if (Z_REFCOUNTED_P(value)) {
23673 								Z_ADDREF_P(value);
23674 							}
23675 						}
23676 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
23677 						Z_ADDREF_P(value);
23678 					}
23679 				}
23680 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
23681 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23682 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23683 				}
23684 				goto exit_assign_obj;
23685 			}
23686 		}
23687 	}
23688 
23689 	if (!Z_OBJ_HT_P(object)->write_property) {
23690 		zend_error(E_WARNING, "Attempt to assign property of non-object");
23691 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23692 			ZVAL_NULL(EX_VAR(opline->result.var));
23693 		}
23694 
23695 		goto exit_assign_obj;
23696 	}
23697 
23698 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23699 		ZVAL_DEREF(value);
23700 	}
23701 
23702 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
23703 
23704 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
23705 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23706 	}
23707 
23708 exit_assign_obj:
23709 
23710 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23711 	/* assign_obj has two opcodes! */
23712 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23713 }
23714 
23715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23716 {
23717 	USE_OPLINE
23718 	zend_free_op free_op1, free_op_data;
23719 	zval *object, *property_name, *value, tmp;
23720 
23721 	SAVE_OPLINE();
23722 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23723 
23724 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23725 		zend_throw_error(NULL, "Using $this when not in object context");
23726 
23727 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23728 		HANDLE_EXCEPTION();
23729 	}
23730 
23731 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23732 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
23733 
23734 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23735 		do {
23736 			if (Z_ISREF_P(object)) {
23737 				object = Z_REFVAL_P(object);
23738 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
23739 					break;
23740 				}
23741 			}
23742 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
23743 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
23744 				zend_object *obj;
23745 
23746 				zval_ptr_dtor(object);
23747 				object_init(object);
23748 				Z_ADDREF_P(object);
23749 				obj = Z_OBJ_P(object);
23750 				zend_error(E_WARNING, "Creating default object from empty value");
23751 				if (GC_REFCOUNT(obj) == 1) {
23752 					/* the enclosing container was deleted, obj is unreferenced */
23753 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23754 						ZVAL_NULL(EX_VAR(opline->result.var));
23755 					}
23756 					zval_ptr_dtor_nogc(free_op_data);
23757 					OBJ_RELEASE(obj);
23758 					goto exit_assign_obj;
23759 				}
23760 				Z_DELREF_P(object);
23761 			} else {
23762 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
23763 					zend_error(E_WARNING, "Attempt to assign property of non-object");
23764 				}
23765 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23766 					ZVAL_NULL(EX_VAR(opline->result.var));
23767 				}
23768 				zval_ptr_dtor_nogc(free_op_data);
23769 				goto exit_assign_obj;
23770 			}
23771 		} while (0);
23772 	}
23773 
23774 	if (IS_CV == IS_CONST &&
23775 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
23776 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
23777 		zend_object *zobj = Z_OBJ_P(object);
23778 		zval *property;
23779 
23780 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23781 			property = OBJ_PROP(zobj, prop_offset);
23782 			if (Z_TYPE_P(property) != IS_UNDEF) {
23783 fast_assign_obj:
23784 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
23785 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23786 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23787 				}
23788 				goto exit_assign_obj;
23789 			}
23790 		} else {
23791 			if (EXPECTED(zobj->properties != NULL)) {
23792 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23793 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23794 						GC_REFCOUNT(zobj->properties)--;
23795 					}
23796 					zobj->properties = zend_array_dup(zobj->properties);
23797 				}
23798 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
23799 				if (property) {
23800 					goto fast_assign_obj;
23801 				}
23802 			}
23803 
23804 			if (!zobj->ce->__set) {
23805 
23806 				if (EXPECTED(zobj->properties == NULL)) {
23807 					rebuild_object_properties(zobj);
23808 				}
23809 				if (IS_TMP_VAR == IS_CONST) {
23810 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23811 						Z_ADDREF_P(value);
23812 					}
23813 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
23814 					if (Z_ISREF_P(value)) {
23815 						if (IS_TMP_VAR == IS_VAR) {
23816 							zend_reference *ref = Z_REF_P(value);
23817 							if (--GC_REFCOUNT(ref) == 0) {
23818 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23819 								efree_size(ref, sizeof(zend_reference));
23820 								value = &tmp;
23821 							} else {
23822 								value = Z_REFVAL_P(value);
23823 								if (Z_REFCOUNTED_P(value)) {
23824 									Z_ADDREF_P(value);
23825 								}
23826 							}
23827 						} else {
23828 							value = Z_REFVAL_P(value);
23829 							if (Z_REFCOUNTED_P(value)) {
23830 								Z_ADDREF_P(value);
23831 							}
23832 						}
23833 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
23834 						Z_ADDREF_P(value);
23835 					}
23836 				}
23837 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
23838 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23839 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23840 				}
23841 				goto exit_assign_obj;
23842 			}
23843 		}
23844 	}
23845 
23846 	if (!Z_OBJ_HT_P(object)->write_property) {
23847 		zend_error(E_WARNING, "Attempt to assign property of non-object");
23848 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23849 			ZVAL_NULL(EX_VAR(opline->result.var));
23850 		}
23851 		zval_ptr_dtor_nogc(free_op_data);
23852 		goto exit_assign_obj;
23853 	}
23854 
23855 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23856 		ZVAL_DEREF(value);
23857 	}
23858 
23859 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
23860 
23861 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
23862 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23863 	}
23864 	zval_ptr_dtor_nogc(free_op_data);
23865 exit_assign_obj:
23866 
23867 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23868 	/* assign_obj has two opcodes! */
23869 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23870 }
23871 
23872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23873 {
23874 	USE_OPLINE
23875 	zend_free_op free_op1, free_op_data;
23876 	zval *object, *property_name, *value, tmp;
23877 
23878 	SAVE_OPLINE();
23879 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
23880 
23881 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23882 		zend_throw_error(NULL, "Using $this when not in object context");
23883 
23884 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23885 		HANDLE_EXCEPTION();
23886 	}
23887 
23888 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
23889 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
23890 
23891 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23892 		do {
23893 			if (Z_ISREF_P(object)) {
23894 				object = Z_REFVAL_P(object);
23895 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
23896 					break;
23897 				}
23898 			}
23899 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
23900 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
23901 				zend_object *obj;
23902 
23903 				zval_ptr_dtor(object);
23904 				object_init(object);
23905 				Z_ADDREF_P(object);
23906 				obj = Z_OBJ_P(object);
23907 				zend_error(E_WARNING, "Creating default object from empty value");
23908 				if (GC_REFCOUNT(obj) == 1) {
23909 					/* the enclosing container was deleted, obj is unreferenced */
23910 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23911 						ZVAL_NULL(EX_VAR(opline->result.var));
23912 					}
23913 					zval_ptr_dtor_nogc(free_op_data);
23914 					OBJ_RELEASE(obj);
23915 					goto exit_assign_obj;
23916 				}
23917 				Z_DELREF_P(object);
23918 			} else {
23919 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
23920 					zend_error(E_WARNING, "Attempt to assign property of non-object");
23921 				}
23922 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23923 					ZVAL_NULL(EX_VAR(opline->result.var));
23924 				}
23925 				zval_ptr_dtor_nogc(free_op_data);
23926 				goto exit_assign_obj;
23927 			}
23928 		} while (0);
23929 	}
23930 
23931 	if (IS_CV == IS_CONST &&
23932 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
23933 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
23934 		zend_object *zobj = Z_OBJ_P(object);
23935 		zval *property;
23936 
23937 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
23938 			property = OBJ_PROP(zobj, prop_offset);
23939 			if (Z_TYPE_P(property) != IS_UNDEF) {
23940 fast_assign_obj:
23941 				value = zend_assign_to_variable(property, value, IS_VAR);
23942 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23943 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23944 				}
23945 				goto exit_assign_obj;
23946 			}
23947 		} else {
23948 			if (EXPECTED(zobj->properties != NULL)) {
23949 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23950 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23951 						GC_REFCOUNT(zobj->properties)--;
23952 					}
23953 					zobj->properties = zend_array_dup(zobj->properties);
23954 				}
23955 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
23956 				if (property) {
23957 					goto fast_assign_obj;
23958 				}
23959 			}
23960 
23961 			if (!zobj->ce->__set) {
23962 
23963 				if (EXPECTED(zobj->properties == NULL)) {
23964 					rebuild_object_properties(zobj);
23965 				}
23966 				if (IS_VAR == IS_CONST) {
23967 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23968 						Z_ADDREF_P(value);
23969 					}
23970 				} else if (IS_VAR != IS_TMP_VAR) {
23971 					if (Z_ISREF_P(value)) {
23972 						if (IS_VAR == IS_VAR) {
23973 							zend_reference *ref = Z_REF_P(value);
23974 							if (--GC_REFCOUNT(ref) == 0) {
23975 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23976 								efree_size(ref, sizeof(zend_reference));
23977 								value = &tmp;
23978 							} else {
23979 								value = Z_REFVAL_P(value);
23980 								if (Z_REFCOUNTED_P(value)) {
23981 									Z_ADDREF_P(value);
23982 								}
23983 							}
23984 						} else {
23985 							value = Z_REFVAL_P(value);
23986 							if (Z_REFCOUNTED_P(value)) {
23987 								Z_ADDREF_P(value);
23988 							}
23989 						}
23990 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
23991 						Z_ADDREF_P(value);
23992 					}
23993 				}
23994 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
23995 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23996 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23997 				}
23998 				goto exit_assign_obj;
23999 			}
24000 		}
24001 	}
24002 
24003 	if (!Z_OBJ_HT_P(object)->write_property) {
24004 		zend_error(E_WARNING, "Attempt to assign property of non-object");
24005 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24006 			ZVAL_NULL(EX_VAR(opline->result.var));
24007 		}
24008 		zval_ptr_dtor_nogc(free_op_data);
24009 		goto exit_assign_obj;
24010 	}
24011 
24012 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24013 		ZVAL_DEREF(value);
24014 	}
24015 
24016 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
24017 
24018 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24019 		ZVAL_COPY(EX_VAR(opline->result.var), value);
24020 	}
24021 	zval_ptr_dtor_nogc(free_op_data);
24022 exit_assign_obj:
24023 
24024 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24025 	/* assign_obj has two opcodes! */
24026 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24027 }
24028 
24029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24030 {
24031 	USE_OPLINE
24032 	zend_free_op free_op1;
24033 	zval *object, *property_name, *value, tmp;
24034 
24035 	SAVE_OPLINE();
24036 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24037 
24038 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24039 		zend_throw_error(NULL, "Using $this when not in object context");
24040 
24041 
24042 		HANDLE_EXCEPTION();
24043 	}
24044 
24045 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24046 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
24047 
24048 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24049 		do {
24050 			if (Z_ISREF_P(object)) {
24051 				object = Z_REFVAL_P(object);
24052 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
24053 					break;
24054 				}
24055 			}
24056 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
24057 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
24058 				zend_object *obj;
24059 
24060 				zval_ptr_dtor(object);
24061 				object_init(object);
24062 				Z_ADDREF_P(object);
24063 				obj = Z_OBJ_P(object);
24064 				zend_error(E_WARNING, "Creating default object from empty value");
24065 				if (GC_REFCOUNT(obj) == 1) {
24066 					/* the enclosing container was deleted, obj is unreferenced */
24067 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24068 						ZVAL_NULL(EX_VAR(opline->result.var));
24069 					}
24070 
24071 					OBJ_RELEASE(obj);
24072 					goto exit_assign_obj;
24073 				}
24074 				Z_DELREF_P(object);
24075 			} else {
24076 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
24077 					zend_error(E_WARNING, "Attempt to assign property of non-object");
24078 				}
24079 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24080 					ZVAL_NULL(EX_VAR(opline->result.var));
24081 				}
24082 
24083 				goto exit_assign_obj;
24084 			}
24085 		} while (0);
24086 	}
24087 
24088 	if (IS_CV == IS_CONST &&
24089 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
24090 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
24091 		zend_object *zobj = Z_OBJ_P(object);
24092 		zval *property;
24093 
24094 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
24095 			property = OBJ_PROP(zobj, prop_offset);
24096 			if (Z_TYPE_P(property) != IS_UNDEF) {
24097 fast_assign_obj:
24098 				value = zend_assign_to_variable(property, value, IS_CV);
24099 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24100 					ZVAL_COPY(EX_VAR(opline->result.var), value);
24101 				}
24102 				goto exit_assign_obj;
24103 			}
24104 		} else {
24105 			if (EXPECTED(zobj->properties != NULL)) {
24106 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
24107 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
24108 						GC_REFCOUNT(zobj->properties)--;
24109 					}
24110 					zobj->properties = zend_array_dup(zobj->properties);
24111 				}
24112 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
24113 				if (property) {
24114 					goto fast_assign_obj;
24115 				}
24116 			}
24117 
24118 			if (!zobj->ce->__set) {
24119 
24120 				if (EXPECTED(zobj->properties == NULL)) {
24121 					rebuild_object_properties(zobj);
24122 				}
24123 				if (IS_CV == IS_CONST) {
24124 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
24125 						Z_ADDREF_P(value);
24126 					}
24127 				} else if (IS_CV != IS_TMP_VAR) {
24128 					if (Z_ISREF_P(value)) {
24129 						if (IS_CV == IS_VAR) {
24130 							zend_reference *ref = Z_REF_P(value);
24131 							if (--GC_REFCOUNT(ref) == 0) {
24132 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
24133 								efree_size(ref, sizeof(zend_reference));
24134 								value = &tmp;
24135 							} else {
24136 								value = Z_REFVAL_P(value);
24137 								if (Z_REFCOUNTED_P(value)) {
24138 									Z_ADDREF_P(value);
24139 								}
24140 							}
24141 						} else {
24142 							value = Z_REFVAL_P(value);
24143 							if (Z_REFCOUNTED_P(value)) {
24144 								Z_ADDREF_P(value);
24145 							}
24146 						}
24147 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
24148 						Z_ADDREF_P(value);
24149 					}
24150 				}
24151 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
24152 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24153 					ZVAL_COPY(EX_VAR(opline->result.var), value);
24154 				}
24155 				goto exit_assign_obj;
24156 			}
24157 		}
24158 	}
24159 
24160 	if (!Z_OBJ_HT_P(object)->write_property) {
24161 		zend_error(E_WARNING, "Attempt to assign property of non-object");
24162 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24163 			ZVAL_NULL(EX_VAR(opline->result.var));
24164 		}
24165 
24166 		goto exit_assign_obj;
24167 	}
24168 
24169 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
24170 		ZVAL_DEREF(value);
24171 	}
24172 
24173 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
24174 
24175 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24176 		ZVAL_COPY(EX_VAR(opline->result.var), value);
24177 	}
24178 
24179 exit_assign_obj:
24180 
24181 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24182 	/* assign_obj has two opcodes! */
24183 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24184 }
24185 
24186 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24187 {
24188 	USE_OPLINE
24189 	zend_free_op free_op1;
24190 	zval *object_ptr;
24191 
24192 	zval *value;
24193 	zval *variable_ptr;
24194 	zval *dim;
24195 
24196 	SAVE_OPLINE();
24197 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24198 
24199 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24200 try_assign_dim_array:
24201 		SEPARATE_ARRAY(object_ptr);
24202 		if (IS_CV == IS_UNUSED) {
24203 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
24204 			if (UNEXPECTED(variable_ptr == NULL)) {
24205 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
24206 				goto assign_dim_error;
24207 			}
24208 		} else {
24209 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24210 			if (IS_CV == IS_CONST) {
24211 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
24212 			} else {
24213 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
24214 			}
24215 			if (UNEXPECTED(variable_ptr == NULL)) {
24216 				goto assign_dim_error;
24217 			}
24218 		}
24219 		value = EX_CONSTANT((opline+1)->op1);
24220 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
24221 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24222 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24223 		}
24224 	} else {
24225 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24226 			object_ptr = Z_REFVAL_P(object_ptr);
24227 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24228 				goto try_assign_dim_array;
24229 			}
24230 		}
24231 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24232 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24233 			value = EX_CONSTANT((opline+1)->op1);
24234 
24235 			zend_assign_to_object_dim(object_ptr, dim, value);
24236 
24237 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24238 				ZVAL_COPY(EX_VAR(opline->result.var), value);
24239 			}
24240 
24241 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24242 			if (IS_CV == IS_UNUSED) {
24243 				zend_throw_error(NULL, "[] operator not supported for strings");
24244 
24245 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24246 				HANDLE_EXCEPTION();
24247 			} else {
24248 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24249 				value = EX_CONSTANT((opline+1)->op1);
24250 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
24251 
24252 			}
24253 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24254 			ZVAL_NEW_ARR(object_ptr);
24255 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
24256 			goto try_assign_dim_array;
24257 		} else {
24258 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
24259 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
24260 			}
24261 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24262 assign_dim_error:
24263 
24264 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24265 				ZVAL_NULL(EX_VAR(opline->result.var));
24266 			}
24267 		}
24268 	}
24269 	if (IS_CV != IS_UNUSED) {
24270 
24271 	}
24272 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24273 	/* assign_dim has two opcodes! */
24274 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24275 }
24276 
24277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24278 {
24279 	USE_OPLINE
24280 	zend_free_op free_op1;
24281 	zval *object_ptr;
24282 	zend_free_op free_op_data;
24283 	zval *value;
24284 	zval *variable_ptr;
24285 	zval *dim;
24286 
24287 	SAVE_OPLINE();
24288 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24289 
24290 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24291 try_assign_dim_array:
24292 		SEPARATE_ARRAY(object_ptr);
24293 		if (IS_CV == IS_UNUSED) {
24294 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
24295 			if (UNEXPECTED(variable_ptr == NULL)) {
24296 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
24297 				goto assign_dim_error;
24298 			}
24299 		} else {
24300 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24301 			if (IS_CV == IS_CONST) {
24302 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
24303 			} else {
24304 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
24305 			}
24306 			if (UNEXPECTED(variable_ptr == NULL)) {
24307 				goto assign_dim_error;
24308 			}
24309 		}
24310 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
24311 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
24312 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24313 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24314 		}
24315 	} else {
24316 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24317 			object_ptr = Z_REFVAL_P(object_ptr);
24318 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24319 				goto try_assign_dim_array;
24320 			}
24321 		}
24322 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24323 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24324 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
24325 
24326 			zend_assign_to_object_dim(object_ptr, dim, value);
24327 
24328 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24329 				ZVAL_COPY(EX_VAR(opline->result.var), value);
24330 			}
24331 
24332 			zval_ptr_dtor_nogc(free_op_data);
24333 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24334 			if (IS_CV == IS_UNUSED) {
24335 				zend_throw_error(NULL, "[] operator not supported for strings");
24336 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24337 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24338 				HANDLE_EXCEPTION();
24339 			} else {
24340 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24341 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
24342 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
24343 				zval_ptr_dtor_nogc(free_op_data);
24344 			}
24345 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24346 			ZVAL_NEW_ARR(object_ptr);
24347 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
24348 			goto try_assign_dim_array;
24349 		} else {
24350 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
24351 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
24352 			}
24353 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24354 assign_dim_error:
24355 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24356 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24357 				ZVAL_NULL(EX_VAR(opline->result.var));
24358 			}
24359 		}
24360 	}
24361 	if (IS_CV != IS_UNUSED) {
24362 
24363 	}
24364 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24365 	/* assign_dim has two opcodes! */
24366 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24367 }
24368 
24369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24370 {
24371 	USE_OPLINE
24372 	zend_free_op free_op1;
24373 	zval *object_ptr;
24374 	zend_free_op free_op_data;
24375 	zval *value;
24376 	zval *variable_ptr;
24377 	zval *dim;
24378 
24379 	SAVE_OPLINE();
24380 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24381 
24382 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24383 try_assign_dim_array:
24384 		SEPARATE_ARRAY(object_ptr);
24385 		if (IS_CV == IS_UNUSED) {
24386 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
24387 			if (UNEXPECTED(variable_ptr == NULL)) {
24388 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
24389 				goto assign_dim_error;
24390 			}
24391 		} else {
24392 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24393 			if (IS_CV == IS_CONST) {
24394 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
24395 			} else {
24396 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
24397 			}
24398 			if (UNEXPECTED(variable_ptr == NULL)) {
24399 				goto assign_dim_error;
24400 			}
24401 		}
24402 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
24403 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
24404 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24405 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24406 		}
24407 	} else {
24408 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24409 			object_ptr = Z_REFVAL_P(object_ptr);
24410 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24411 				goto try_assign_dim_array;
24412 			}
24413 		}
24414 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24415 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24416 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
24417 
24418 			zend_assign_to_object_dim(object_ptr, dim, value);
24419 
24420 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24421 				ZVAL_COPY(EX_VAR(opline->result.var), value);
24422 			}
24423 
24424 			zval_ptr_dtor_nogc(free_op_data);
24425 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24426 			if (IS_CV == IS_UNUSED) {
24427 				zend_throw_error(NULL, "[] operator not supported for strings");
24428 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24429 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24430 				HANDLE_EXCEPTION();
24431 			} else {
24432 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24433 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
24434 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
24435 				zval_ptr_dtor_nogc(free_op_data);
24436 			}
24437 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24438 			ZVAL_NEW_ARR(object_ptr);
24439 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
24440 			goto try_assign_dim_array;
24441 		} else {
24442 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
24443 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
24444 			}
24445 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24446 assign_dim_error:
24447 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24448 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24449 				ZVAL_NULL(EX_VAR(opline->result.var));
24450 			}
24451 		}
24452 	}
24453 	if (IS_CV != IS_UNUSED) {
24454 
24455 	}
24456 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24457 	/* assign_dim has two opcodes! */
24458 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24459 }
24460 
24461 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24462 {
24463 	USE_OPLINE
24464 	zend_free_op free_op1;
24465 	zval *object_ptr;
24466 
24467 	zval *value;
24468 	zval *variable_ptr;
24469 	zval *dim;
24470 
24471 	SAVE_OPLINE();
24472 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24473 
24474 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24475 try_assign_dim_array:
24476 		SEPARATE_ARRAY(object_ptr);
24477 		if (IS_CV == IS_UNUSED) {
24478 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
24479 			if (UNEXPECTED(variable_ptr == NULL)) {
24480 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
24481 				goto assign_dim_error;
24482 			}
24483 		} else {
24484 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24485 			if (IS_CV == IS_CONST) {
24486 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
24487 			} else {
24488 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
24489 			}
24490 			if (UNEXPECTED(variable_ptr == NULL)) {
24491 				goto assign_dim_error;
24492 			}
24493 		}
24494 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
24495 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
24496 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24497 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24498 		}
24499 	} else {
24500 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24501 			object_ptr = Z_REFVAL_P(object_ptr);
24502 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24503 				goto try_assign_dim_array;
24504 			}
24505 		}
24506 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24507 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24508 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
24509 
24510 			zend_assign_to_object_dim(object_ptr, dim, value);
24511 
24512 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
24513 				ZVAL_COPY(EX_VAR(opline->result.var), value);
24514 			}
24515 
24516 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24517 			if (IS_CV == IS_UNUSED) {
24518 				zend_throw_error(NULL, "[] operator not supported for strings");
24519 
24520 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24521 				HANDLE_EXCEPTION();
24522 			} else {
24523 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24524 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
24525 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
24526 
24527 			}
24528 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24529 			ZVAL_NEW_ARR(object_ptr);
24530 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
24531 			goto try_assign_dim_array;
24532 		} else {
24533 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
24534 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
24535 			}
24536 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24537 assign_dim_error:
24538 
24539 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24540 				ZVAL_NULL(EX_VAR(opline->result.var));
24541 			}
24542 		}
24543 	}
24544 	if (IS_CV != IS_UNUSED) {
24545 
24546 	}
24547 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24548 	/* assign_dim has two opcodes! */
24549 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24550 }
24551 
24552 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24553 {
24554 	USE_OPLINE
24555 	zend_free_op free_op1;
24556 	zval *value;
24557 	zval *variable_ptr;
24558 
24559 	SAVE_OPLINE();
24560 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24561 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24562 
24563 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
24564 
24565 		if (UNEXPECTED(0)) {
24566 			ZVAL_NULL(EX_VAR(opline->result.var));
24567 		}
24568 	} else {
24569 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
24570 		if (UNEXPECTED(0)) {
24571 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24572 		}
24573 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24574 		/* zend_assign_to_variable() always takes care of op2, never free it! */
24575 	}
24576 
24577 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24578 }
24579 
24580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24581 {
24582 	USE_OPLINE
24583 	zend_free_op free_op1;
24584 	zval *value;
24585 	zval *variable_ptr;
24586 
24587 	SAVE_OPLINE();
24588 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
24589 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24590 
24591 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
24592 
24593 		if (UNEXPECTED(1)) {
24594 			ZVAL_NULL(EX_VAR(opline->result.var));
24595 		}
24596 	} else {
24597 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
24598 		if (UNEXPECTED(1)) {
24599 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24600 		}
24601 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24602 		/* zend_assign_to_variable() always takes care of op2, never free it! */
24603 	}
24604 
24605 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24606 }
24607 
24608 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24609 {
24610 	USE_OPLINE
24611 	zend_free_op free_op1;
24612 	zval *variable_ptr;
24613 	zval *value_ptr;
24614 
24615 	SAVE_OPLINE();
24616 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
24617 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24618 
24619 	if (IS_VAR == IS_VAR &&
24620 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
24621 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var))) &&
24622 	    UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) {
24623 
24624 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
24625 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24626 
24627 		HANDLE_EXCEPTION();
24628 
24629 	} else if (IS_CV == IS_VAR &&
24630 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
24631 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
24632 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
24633 		if (UNEXPECTED(EG(exception) != NULL)) {
24634 
24635 			HANDLE_EXCEPTION();
24636 		}
24637 
24638 		value_ptr = zend_assign_to_variable(variable_ptr, value_ptr, IS_CV);
24639 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24640 			ZVAL_COPY(EX_VAR(opline->result.var), value_ptr);
24641 		}
24642 		/* zend_assign_to_variable() always takes care of op2, never free it! */
24643 
24644 	} else {
24645 
24646 		if ((IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) ||
24647 		    (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr)))) {
24648 			variable_ptr = &EG(uninitialized_zval);
24649 		} else {
24650 			zend_assign_to_variable_reference(variable_ptr, value_ptr);
24651 		}
24652 
24653 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24654 			ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
24655 		}
24656 
24657 	}
24658 
24659 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24660 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24661 }
24662 
24663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24664 {
24665 	USE_OPLINE
24666 	zval *function_name;
24667 	zend_class_entry *ce;
24668 	zend_object *object;
24669 	zend_function *fbc;
24670 	zend_execute_data *call;
24671 
24672 	SAVE_OPLINE();
24673 
24674 	if (IS_VAR == IS_CONST) {
24675 		/* no function found. try a static method in class */
24676 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
24677 		if (UNEXPECTED(ce == NULL)) {
24678 			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);
24679 			if (UNEXPECTED(ce == NULL)) {
24680 				ZEND_ASSERT(EG(exception));
24681 				HANDLE_EXCEPTION();
24682 			}
24683 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
24684 		}
24685 	} else if (IS_VAR == IS_UNUSED) {
24686 		ce = zend_fetch_class(NULL, opline->op1.num);
24687 		if (UNEXPECTED(ce == NULL)) {
24688 			ZEND_ASSERT(EG(exception));
24689 
24690 			HANDLE_EXCEPTION();
24691 		}
24692 	} else {
24693 		ce = Z_CE_P(EX_VAR(opline->op1.var));
24694 	}
24695 
24696 	if (IS_VAR == IS_CONST &&
24697 	    IS_CV == IS_CONST &&
24698 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
24699 		/* nothing to do */
24700 	} else if (IS_VAR != IS_CONST &&
24701 	           IS_CV == IS_CONST &&
24702 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
24703 		/* do nothing */
24704 	} else if (IS_CV != IS_UNUSED) {
24705 
24706 
24707 		function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24708 		if (IS_CV != IS_CONST) {
24709 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
24710 				do {
24711 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
24712 						function_name = Z_REFVAL_P(function_name);
24713 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24714 							break;
24715 						}
24716 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
24717 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
24718 						if (UNEXPECTED(EG(exception) != NULL)) {
24719 							HANDLE_EXCEPTION();
24720 						}
24721 					}
24722 					zend_throw_error(NULL, "Function name must be a string");
24723 
24724 					HANDLE_EXCEPTION();
24725 				} while (0);
24726  			}
24727 		}
24728 
24729 		if (ce->get_static_method) {
24730 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
24731 		} else {
24732 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
24733 		}
24734 		if (UNEXPECTED(fbc == NULL)) {
24735 			if (EXPECTED(!EG(exception))) {
24736 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
24737 			}
24738 
24739 			HANDLE_EXCEPTION();
24740 		}
24741 		if (IS_CV == IS_CONST &&
24742 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
24743 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
24744 			if (IS_VAR == IS_CONST) {
24745 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
24746 			} else {
24747 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
24748 			}
24749 		}
24750 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
24751 			init_func_run_time_cache(&fbc->op_array);
24752 		}
24753 		if (IS_CV != IS_CONST) {
24754 
24755 		}
24756 	} else {
24757 		if (UNEXPECTED(ce->constructor == NULL)) {
24758 			zend_throw_error(NULL, "Cannot call constructor");
24759 			HANDLE_EXCEPTION();
24760 		}
24761 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
24762 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
24763 			HANDLE_EXCEPTION();
24764 		}
24765 		fbc = ce->constructor;
24766 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
24767 			init_func_run_time_cache(&fbc->op_array);
24768 		}
24769 	}
24770 
24771 	object = NULL;
24772 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
24773 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
24774 			object = Z_OBJ(EX(This));
24775 			ce = object->ce;
24776 		} else {
24777 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
24778 				/* Allowed for PHP 4 compatibility. */
24779 				zend_error(
24780 					E_DEPRECATED,
24781 					"Non-static method %s::%s() should not be called statically",
24782 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
24783 				if (UNEXPECTED(EG(exception) != NULL)) {
24784 					HANDLE_EXCEPTION();
24785 				}
24786 			} else {
24787 				/* An internal function assumes $this is present and won't check that.
24788 				 * So PHP would crash by allowing the call. */
24789 				zend_throw_error(
24790 					zend_ce_error,
24791 					"Non-static method %s::%s() cannot be called statically",
24792 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
24793 				HANDLE_EXCEPTION();
24794 			}
24795 		}
24796 	}
24797 
24798 	if (IS_VAR == IS_UNUSED) {
24799 		/* previous opcode is ZEND_FETCH_CLASS */
24800 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
24801 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
24802 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
24803 				ce = Z_OBJCE(EX(This));
24804 			} else {
24805 				ce = Z_CE(EX(This));
24806 			}
24807 		}
24808 	}
24809 
24810 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
24811 		fbc, opline->extended_value, ce, object);
24812 	call->prev_execute_data = EX(call);
24813 	EX(call) = call;
24814 
24815 	ZEND_VM_NEXT_OPCODE();
24816 }
24817 
24818 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24819 {
24820 	USE_OPLINE
24821 	zend_free_op free_op1;
24822 	zval *expr_ptr, new_expr;
24823 
24824 	SAVE_OPLINE();
24825 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
24826 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
24827 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24828 		ZVAL_MAKE_REF(expr_ptr);
24829 		Z_ADDREF_P(expr_ptr);
24830 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24831 	} else {
24832 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
24833 		if (IS_VAR == IS_TMP_VAR) {
24834 			/* pass */
24835 		} else if (IS_VAR == IS_CONST) {
24836 			if (Z_REFCOUNTED_P(expr_ptr)) {
24837 				Z_ADDREF_P(expr_ptr);
24838 			}
24839 		} else if (IS_VAR == IS_CV) {
24840 			ZVAL_DEREF(expr_ptr);
24841 			if (Z_REFCOUNTED_P(expr_ptr)) {
24842 				Z_ADDREF_P(expr_ptr);
24843 			}
24844 		} else /* if (IS_VAR == IS_VAR) */ {
24845 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
24846 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
24847 
24848 				expr_ptr = Z_REFVAL_P(expr_ptr);
24849 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
24850 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
24851 					expr_ptr = &new_expr;
24852 					efree_size(ref, sizeof(zend_reference));
24853 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
24854 					Z_ADDREF_P(expr_ptr);
24855 				}
24856 			}
24857 		}
24858 	}
24859 
24860 	if (IS_CV != IS_UNUSED) {
24861 
24862 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24863 		zend_string *str;
24864 		zend_ulong hval;
24865 
24866 add_again:
24867 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24868 			str = Z_STR_P(offset);
24869 			if (IS_CV != IS_CONST) {
24870 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
24871 					goto num_index;
24872 				}
24873 			}
24874 str_index:
24875 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
24876 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24877 			hval = Z_LVAL_P(offset);
24878 num_index:
24879 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
24880 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24881 			offset = Z_REFVAL_P(offset);
24882 			goto add_again;
24883 		} else if (Z_TYPE_P(offset) == IS_NULL) {
24884 			str = ZSTR_EMPTY_ALLOC();
24885 			goto str_index;
24886 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24887 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
24888 			goto num_index;
24889 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
24890 			hval = 0;
24891 			goto num_index;
24892 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
24893 			hval = 1;
24894 			goto num_index;
24895 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24896 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
24897 			str = ZSTR_EMPTY_ALLOC();
24898 			goto str_index;
24899 		} else {
24900 			zend_error(E_WARNING, "Illegal offset type");
24901 			zval_ptr_dtor(expr_ptr);
24902 		}
24903 
24904 	} else {
24905 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
24906 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
24907 			zval_ptr_dtor(expr_ptr);
24908 		}
24909 	}
24910 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24911 }
24912 
24913 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24914 {
24915 	zval *array;
24916 	uint32_t size;
24917 	USE_OPLINE
24918 
24919 	array = EX_VAR(opline->result.var);
24920 	if (IS_VAR != IS_UNUSED) {
24921 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
24922 	} else {
24923 		size = 0;
24924 	}
24925 	ZVAL_NEW_ARR(array);
24926 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
24927 
24928 	if (IS_VAR != IS_UNUSED) {
24929 		/* Explicitly initialize array as not-packed if flag is set */
24930 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
24931 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
24932 		}
24933 	}
24934 
24935 	if (IS_VAR == IS_UNUSED) {
24936 		ZEND_VM_NEXT_OPCODE();
24937 #if 0 || (IS_VAR != IS_UNUSED)
24938 	} else {
24939 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24940 #endif
24941 	}
24942 }
24943 
24944 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24945 {
24946 	USE_OPLINE
24947 	zend_free_op free_op1;
24948 	zval *container;
24949 	zval *offset;
24950 	zend_ulong hval;
24951 	zend_string *key;
24952 
24953 	SAVE_OPLINE();
24954 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
24955 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
24956 
24957 	do {
24958 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24959 			HashTable *ht;
24960 
24961 unset_dim_array:
24962 			SEPARATE_ARRAY(container);
24963 			ht = Z_ARRVAL_P(container);
24964 offset_again:
24965 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24966 				key = Z_STR_P(offset);
24967 				if (IS_CV != IS_CONST) {
24968 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
24969 						goto num_index_dim;
24970 					}
24971 				}
24972 str_index_dim:
24973 				if (ht == &EG(symbol_table)) {
24974 					zend_delete_global_variable(key);
24975 				} else {
24976 					zend_hash_del(ht, key);
24977 				}
24978 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24979 				hval = Z_LVAL_P(offset);
24980 num_index_dim:
24981 				zend_hash_index_del(ht, hval);
24982 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24983 				offset = Z_REFVAL_P(offset);
24984 				goto offset_again;
24985 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24986 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
24987 				goto num_index_dim;
24988 			} else if (Z_TYPE_P(offset) == IS_NULL) {
24989 				key = ZSTR_EMPTY_ALLOC();
24990 				goto str_index_dim;
24991 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
24992 				hval = 0;
24993 				goto num_index_dim;
24994 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
24995 				hval = 1;
24996 				goto num_index_dim;
24997 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24998 				hval = Z_RES_HANDLE_P(offset);
24999 				goto num_index_dim;
25000 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
25001 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
25002 				key = ZSTR_EMPTY_ALLOC();
25003 				goto str_index_dim;
25004 			} else {
25005 				zend_error(E_WARNING, "Illegal offset type in unset");
25006 			}
25007 			break;
25008 		} else if (Z_ISREF_P(container)) {
25009 			container = Z_REFVAL_P(container);
25010 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25011 				goto unset_dim_array;
25012 			}
25013 		}
25014 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25015 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
25016 		}
25017 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
25018 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
25019 		}
25020 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25021 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
25022 				zend_throw_error(NULL, "Cannot use object as array");
25023 			} else {
25024 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
25025 			}
25026 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
25027 			zend_throw_error(NULL, "Cannot unset string offsets");
25028 		}
25029 	} while (0);
25030 
25031 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25032 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25033 }
25034 
25035 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25036 {
25037 	USE_OPLINE
25038 	zend_free_op free_op1;
25039 	zval *container;
25040 	zval *offset;
25041 
25042 	SAVE_OPLINE();
25043 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
25044 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25045 		zend_throw_error(NULL, "Using $this when not in object context");
25046 
25047 		HANDLE_EXCEPTION();
25048 	}
25049 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
25050 
25051 	do {
25052 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
25053 			if (Z_ISREF_P(container)) {
25054 				container = Z_REFVAL_P(container);
25055 				if (Z_TYPE_P(container) != IS_OBJECT) {
25056 					break;
25057 				}
25058 			} else {
25059 				break;
25060 			}
25061 		}
25062 		if (Z_OBJ_HT_P(container)->unset_property) {
25063 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
25064 		} else {
25065 			zend_error(E_NOTICE, "Trying to unset property of non-object");
25066 		}
25067 	} while (0);
25068 
25069 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25070 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25071 }
25072 
25073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25074 {
25075 	USE_OPLINE
25076 
25077 	zend_generator *generator = zend_get_running_generator(execute_data);
25078 
25079 	SAVE_OPLINE();
25080 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
25081 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
25082 
25083 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25084 		HANDLE_EXCEPTION();
25085 	}
25086 
25087 	/* Destroy the previously yielded value */
25088 	zval_ptr_dtor(&generator->value);
25089 
25090 	/* Destroy the previously yielded key */
25091 	zval_ptr_dtor(&generator->key);
25092 
25093 	/* Set the new yielded value */
25094 	if (IS_VAR != IS_UNUSED) {
25095 		zend_free_op free_op1;
25096 
25097 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
25098 			/* Constants and temporary variables aren't yieldable by reference,
25099 			 * but we still allow them with a notice. */
25100 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
25101 				zval *value;
25102 
25103 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25104 
25105 				value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
25106 				ZVAL_COPY_VALUE(&generator->value, value);
25107 				if (IS_VAR == IS_CONST) {
25108 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25109 						Z_ADDREF(generator->value);
25110 					}
25111 				}
25112 			} else {
25113 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
25114 
25115 				/* If a function call result is yielded and the function did
25116 				 * not return by reference we throw a notice. */
25117 				if (IS_VAR == IS_VAR &&
25118 				    (value_ptr == &EG(uninitialized_zval) ||
25119 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
25120 				      !Z_ISREF_P(value_ptr)))) {
25121 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25122 				} else {
25123 					ZVAL_MAKE_REF(value_ptr);
25124 				}
25125 				ZVAL_COPY(&generator->value, value_ptr);
25126 
25127 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25128 			}
25129 		} else {
25130 			zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
25131 
25132 			/* Consts, temporary variables and references need copying */
25133 			if (IS_VAR == IS_CONST) {
25134 				ZVAL_COPY_VALUE(&generator->value, value);
25135 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25136 					Z_ADDREF(generator->value);
25137 				}
25138 			} else if (IS_VAR == IS_TMP_VAR) {
25139 				ZVAL_COPY_VALUE(&generator->value, value);
25140             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
25141 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
25142 				zval_ptr_dtor_nogc(free_op1);
25143 			} else {
25144 				ZVAL_COPY_VALUE(&generator->value, value);
25145 				if (IS_VAR == IS_CV) {
25146 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
25147 				}
25148 			}
25149 		}
25150 	} else {
25151 		/* If no value was specified yield null */
25152 		ZVAL_NULL(&generator->value);
25153 	}
25154 
25155 	/* Set the new yielded key */
25156 	if (IS_CV != IS_UNUSED) {
25157 
25158 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
25159 
25160 		/* Consts, temporary variables and references need copying */
25161 		if (IS_CV == IS_CONST) {
25162 			ZVAL_COPY_VALUE(&generator->key, key);
25163 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
25164 				Z_ADDREF(generator->key);
25165 			}
25166 		} else if (IS_CV == IS_TMP_VAR) {
25167 			ZVAL_COPY_VALUE(&generator->key, key);
25168 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
25169 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
25170 
25171 		} else {
25172 			ZVAL_COPY_VALUE(&generator->key, key);
25173 			if (IS_CV == IS_CV) {
25174 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
25175 			}
25176 		}
25177 
25178 		if (Z_TYPE(generator->key) == IS_LONG
25179 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
25180 		) {
25181 			generator->largest_used_integer_key = Z_LVAL(generator->key);
25182 		}
25183 	} else {
25184 		/* If no key was specified we use auto-increment keys */
25185 		generator->largest_used_integer_key++;
25186 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25187 	}
25188 
25189 	if (RETURN_VALUE_USED(opline)) {
25190 		/* If the return value of yield is used set the send
25191 		 * target and initialize it to NULL */
25192 		generator->send_target = EX_VAR(opline->result.var);
25193 		ZVAL_NULL(generator->send_target);
25194 	} else {
25195 		generator->send_target = NULL;
25196 	}
25197 
25198 	/* We increment to the next op, so we are at the correct position when the
25199 	 * generator is resumed. */
25200 	ZEND_VM_INC_OPCODE();
25201 
25202 	/* The GOTO VM uses a local opline variable. We need to set the opline
25203 	 * variable in execute_data so we don't resume at an old position. */
25204 	SAVE_OPLINE();
25205 
25206 	ZEND_VM_RETURN();
25207 }
25208 
25209 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)
25210 {
25211 	USE_OPLINE
25212 	zend_free_op free_op1, free_op2, free_op_data1;
25213 	zval *object;
25214 	zval *property;
25215 	zval *value;
25216 	zval *zptr;
25217 
25218 	SAVE_OPLINE();
25219 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
25220 
25221 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25222 		zend_throw_error(NULL, "Using $this when not in object context");
25223 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
25224 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25225 		HANDLE_EXCEPTION();
25226 	}
25227 
25228 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
25229 
25230 	do {
25231 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25232 
25233 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25234 			ZVAL_DEREF(object);
25235 			if (UNEXPECTED(!make_real_object(object))) {
25236 				zend_error(E_WARNING, "Attempt to assign property of non-object");
25237 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25238 					ZVAL_NULL(EX_VAR(opline->result.var));
25239 				}
25240 				break;
25241 			}
25242 		}
25243 
25244 		/* here we are sure we are dealing with an object */
25245 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
25246 			&& 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)) {
25247 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25248 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25249 					ZVAL_NULL(EX_VAR(opline->result.var));
25250 				}
25251 			} else {
25252 				ZVAL_DEREF(zptr);
25253 				SEPARATE_ZVAL_NOREF(zptr);
25254 
25255 				binary_op(zptr, zptr, value);
25256 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25257 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
25258 				}
25259 			}
25260 		} else {
25261 			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));
25262 		}
25263 	} while (0);
25264 
25265 	FREE_OP(free_op_data1);
25266 	zval_ptr_dtor_nogc(free_op2);
25267 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25268 	/* assign_obj has two opcodes! */
25269 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25270 }
25271 
25272 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)
25273 {
25274 	USE_OPLINE
25275 	zend_free_op free_op1, free_op2, free_op_data1;
25276 	zval *var_ptr;
25277 	zval *value, *container, *dim;
25278 
25279 	SAVE_OPLINE();
25280 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
25281 
25282 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25283 assign_dim_op_array:
25284 		SEPARATE_ARRAY(container);
25285 assign_dim_op_new_array:
25286 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25287 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
25288 			if (UNEXPECTED(!var_ptr)) {
25289 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
25290 				goto assign_dim_op_ret_null;
25291 			}
25292 		} else {
25293 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
25294 
25295 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25296 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
25297 			} else {
25298 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
25299 			}
25300 			if (UNEXPECTED(!var_ptr)) {
25301 				goto assign_dim_op_ret_null;
25302 			}
25303 			ZVAL_DEREF(var_ptr);
25304 			SEPARATE_ZVAL_NOREF(var_ptr);
25305 		}
25306 
25307 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25308 
25309 		binary_op(var_ptr, var_ptr, value);
25310 
25311 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25312 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25313 		}
25314 	} else {
25315 		if (EXPECTED(Z_ISREF_P(container))) {
25316 			container = Z_REFVAL_P(container);
25317 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25318 				goto assign_dim_op_array;
25319 			}
25320 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
25321 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
25322 assign_dim_op_convert_to_array:
25323 			ZVAL_NEW_ARR(container);
25324 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
25325 			goto assign_dim_op_new_array;
25326 		}
25327 
25328 		dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
25329 
25330 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25331 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25332 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
25333 		} else {
25334 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
25335 				if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25336 					zend_throw_error(NULL, "[] operator not supported for strings");
25337 				} else {
25338 					zend_check_string_offset(dim, BP_VAR_RW);
25339 					if (EXPECTED(EG(exception) == NULL)) {
25340 						zend_wrong_string_offset();
25341 					}
25342 				}
25343 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
25344 				goto assign_dim_op_convert_to_array;
25345 			} else {
25346 				if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
25347 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
25348 				}
25349 assign_dim_op_ret_null:
25350 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25351 					ZVAL_NULL(EX_VAR(opline->result.var));
25352 				}
25353 			}
25354 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
25355 		}
25356 	}
25357 
25358 	zval_ptr_dtor_nogc(free_op2);
25359 	FREE_OP(free_op_data1);
25360 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25361 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25362 }
25363 
25364 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)
25365 {
25366 	USE_OPLINE
25367 	zend_free_op free_op1, free_op2;
25368 	zval *var_ptr;
25369 	zval *value;
25370 
25371 	SAVE_OPLINE();
25372 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
25373 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
25374 
25375 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
25376 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25377 			ZVAL_NULL(EX_VAR(opline->result.var));
25378 		}
25379 	} else {
25380 		ZVAL_DEREF(var_ptr);
25381 		SEPARATE_ZVAL_NOREF(var_ptr);
25382 
25383 		binary_op(var_ptr, var_ptr, value);
25384 
25385 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25386 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25387 		}
25388 	}
25389 
25390 	zval_ptr_dtor_nogc(free_op2);
25391 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25392 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25393 }
25394 
25395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25396 {
25397 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25398 	USE_OPLINE
25399 
25400 # if 0 || (IS_VAR != IS_UNUSED)
25401 	if (EXPECTED(1)) {
25402 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25403 	}
25404 	if (EXPECTED(0)) {
25405 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25406 	}
25407 # endif
25408 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25409 #else
25410 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25411 #endif
25412 }
25413 
25414 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25415 {
25416 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25417 	USE_OPLINE
25418 
25419 # if 0 || (IS_VAR != IS_UNUSED)
25420 	if (EXPECTED(0)) {
25421 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25422 	}
25423 	if (EXPECTED(1)) {
25424 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25425 	}
25426 # endif
25427 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25428 #else
25429 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25430 #endif
25431 }
25432 
25433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25434 {
25435 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25436 	USE_OPLINE
25437 
25438 # if 0 || (IS_VAR != IS_UNUSED)
25439 	if (EXPECTED(0)) {
25440 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25441 	}
25442 	if (EXPECTED(0)) {
25443 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25444 	}
25445 # endif
25446 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25447 #else
25448 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25449 #endif
25450 }
25451 
25452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25453 {
25454 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25455 	USE_OPLINE
25456 
25457 # if 0 || (IS_VAR != IS_UNUSED)
25458 	if (EXPECTED(1)) {
25459 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25460 	}
25461 	if (EXPECTED(0)) {
25462 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25463 	}
25464 # endif
25465 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25466 #else
25467 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25468 #endif
25469 }
25470 
25471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25472 {
25473 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25474 	USE_OPLINE
25475 
25476 # if 0 || (IS_VAR != IS_UNUSED)
25477 	if (EXPECTED(0)) {
25478 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25479 	}
25480 	if (EXPECTED(1)) {
25481 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25482 	}
25483 # endif
25484 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25485 #else
25486 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25487 #endif
25488 }
25489 
25490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25491 {
25492 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25493 	USE_OPLINE
25494 
25495 # if 0 || (IS_VAR != IS_UNUSED)
25496 	if (EXPECTED(0)) {
25497 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25498 	}
25499 	if (EXPECTED(0)) {
25500 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25501 	}
25502 # endif
25503 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25504 #else
25505 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25506 #endif
25507 }
25508 
25509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25510 {
25511 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25512 	USE_OPLINE
25513 
25514 # if 0 || (IS_VAR != IS_UNUSED)
25515 	if (EXPECTED(1)) {
25516 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25517 	}
25518 	if (EXPECTED(0)) {
25519 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25520 	}
25521 # endif
25522 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25523 #else
25524 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25525 #endif
25526 }
25527 
25528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25529 {
25530 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25531 	USE_OPLINE
25532 
25533 # if 0 || (IS_VAR != IS_UNUSED)
25534 	if (EXPECTED(0)) {
25535 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25536 	}
25537 	if (EXPECTED(1)) {
25538 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25539 	}
25540 # endif
25541 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25542 #else
25543 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25544 #endif
25545 }
25546 
25547 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25548 {
25549 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25550 	USE_OPLINE
25551 
25552 # if 0 || (IS_VAR != IS_UNUSED)
25553 	if (EXPECTED(0)) {
25554 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25555 	}
25556 	if (EXPECTED(0)) {
25557 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25558 	}
25559 # endif
25560 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25561 #else
25562 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25563 #endif
25564 }
25565 
25566 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25567 {
25568 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25569 	USE_OPLINE
25570 
25571 # if 0 || (IS_VAR != IS_UNUSED)
25572 	if (EXPECTED(1)) {
25573 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25574 	}
25575 	if (EXPECTED(0)) {
25576 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25577 	}
25578 # endif
25579 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25580 #else
25581 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25582 #endif
25583 }
25584 
25585 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25586 {
25587 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25588 	USE_OPLINE
25589 
25590 # if 0 || (IS_VAR != IS_UNUSED)
25591 	if (EXPECTED(0)) {
25592 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25593 	}
25594 	if (EXPECTED(1)) {
25595 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25596 	}
25597 # endif
25598 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25599 #else
25600 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25601 #endif
25602 }
25603 
25604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25605 {
25606 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25607 	USE_OPLINE
25608 
25609 # if 0 || (IS_VAR != IS_UNUSED)
25610 	if (EXPECTED(0)) {
25611 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25612 	}
25613 	if (EXPECTED(0)) {
25614 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25615 	}
25616 # endif
25617 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25618 #else
25619 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25620 #endif
25621 }
25622 
25623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25624 {
25625 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25626 	USE_OPLINE
25627 
25628 # if 0 || (IS_VAR != IS_UNUSED)
25629 	if (EXPECTED(1)) {
25630 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25631 	}
25632 	if (EXPECTED(0)) {
25633 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25634 	}
25635 # endif
25636 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25637 #else
25638 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25639 #endif
25640 }
25641 
25642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25643 {
25644 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25645 	USE_OPLINE
25646 
25647 # if 0 || (IS_VAR != IS_UNUSED)
25648 	if (EXPECTED(0)) {
25649 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25650 	}
25651 	if (EXPECTED(1)) {
25652 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25653 	}
25654 # endif
25655 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25656 #else
25657 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25658 #endif
25659 }
25660 
25661 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25662 {
25663 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25664 	USE_OPLINE
25665 
25666 # if 0 || (IS_VAR != IS_UNUSED)
25667 	if (EXPECTED(0)) {
25668 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25669 	}
25670 	if (EXPECTED(0)) {
25671 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25672 	}
25673 # endif
25674 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25675 #else
25676 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25677 #endif
25678 }
25679 
25680 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25681 {
25682 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25683 	USE_OPLINE
25684 
25685 # if 0 || (IS_VAR != IS_UNUSED)
25686 	if (EXPECTED(1)) {
25687 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25688 	}
25689 	if (EXPECTED(0)) {
25690 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25691 	}
25692 # endif
25693 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25694 #else
25695 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25696 #endif
25697 }
25698 
25699 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25700 {
25701 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25702 	USE_OPLINE
25703 
25704 # if 0 || (IS_VAR != IS_UNUSED)
25705 	if (EXPECTED(0)) {
25706 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25707 	}
25708 	if (EXPECTED(1)) {
25709 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25710 	}
25711 # endif
25712 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25713 #else
25714 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25715 #endif
25716 }
25717 
25718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25719 {
25720 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25721 	USE_OPLINE
25722 
25723 # if 0 || (IS_VAR != IS_UNUSED)
25724 	if (EXPECTED(0)) {
25725 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25726 	}
25727 	if (EXPECTED(0)) {
25728 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25729 	}
25730 # endif
25731 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25732 #else
25733 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25734 #endif
25735 }
25736 
25737 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25738 {
25739 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25740 	USE_OPLINE
25741 
25742 # if 0 || (IS_VAR != IS_UNUSED)
25743 	if (EXPECTED(1)) {
25744 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25745 	}
25746 	if (EXPECTED(0)) {
25747 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25748 	}
25749 # endif
25750 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25751 #else
25752 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25753 #endif
25754 }
25755 
25756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25757 {
25758 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25759 	USE_OPLINE
25760 
25761 # if 0 || (IS_VAR != IS_UNUSED)
25762 	if (EXPECTED(0)) {
25763 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25764 	}
25765 	if (EXPECTED(1)) {
25766 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25767 	}
25768 # endif
25769 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25770 #else
25771 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25772 #endif
25773 }
25774 
25775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25776 {
25777 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25778 	USE_OPLINE
25779 
25780 # if 0 || (IS_VAR != IS_UNUSED)
25781 	if (EXPECTED(0)) {
25782 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25783 	}
25784 	if (EXPECTED(0)) {
25785 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25786 	}
25787 # endif
25788 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25789 #else
25790 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25791 #endif
25792 }
25793 
25794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25795 {
25796 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25797 	USE_OPLINE
25798 
25799 # if 0 || (IS_VAR != IS_UNUSED)
25800 	if (EXPECTED(1)) {
25801 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25802 	}
25803 	if (EXPECTED(0)) {
25804 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25805 	}
25806 # endif
25807 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25808 #else
25809 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25810 #endif
25811 }
25812 
25813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25814 {
25815 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25816 	USE_OPLINE
25817 
25818 # if 0 || (IS_VAR != IS_UNUSED)
25819 	if (EXPECTED(0)) {
25820 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25821 	}
25822 	if (EXPECTED(1)) {
25823 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25824 	}
25825 # endif
25826 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25827 #else
25828 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25829 #endif
25830 }
25831 
25832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25833 {
25834 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25835 	USE_OPLINE
25836 
25837 # if 0 || (IS_VAR != IS_UNUSED)
25838 	if (EXPECTED(0)) {
25839 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25840 	}
25841 	if (EXPECTED(0)) {
25842 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25843 	}
25844 # endif
25845 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25846 #else
25847 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25848 #endif
25849 }
25850 
25851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25852 {
25853 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25854 	USE_OPLINE
25855 
25856 # if 0 || (IS_VAR != IS_UNUSED)
25857 	if (EXPECTED(1)) {
25858 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25859 	}
25860 	if (EXPECTED(0)) {
25861 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25862 	}
25863 # endif
25864 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25865 #else
25866 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25867 #endif
25868 }
25869 
25870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25871 {
25872 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25873 	USE_OPLINE
25874 
25875 # if 0 || (IS_VAR != IS_UNUSED)
25876 	if (EXPECTED(0)) {
25877 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25878 	}
25879 	if (EXPECTED(1)) {
25880 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25881 	}
25882 # endif
25883 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25884 #else
25885 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25886 #endif
25887 }
25888 
25889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25890 {
25891 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25892 	USE_OPLINE
25893 
25894 # if 0 || (IS_VAR != IS_UNUSED)
25895 	if (EXPECTED(0)) {
25896 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25897 	}
25898 	if (EXPECTED(0)) {
25899 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25900 	}
25901 # endif
25902 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25903 #else
25904 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25905 #endif
25906 }
25907 
25908 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25909 {
25910 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25911 	USE_OPLINE
25912 
25913 # if 0 || (IS_VAR != IS_UNUSED)
25914 	if (EXPECTED(1)) {
25915 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25916 	}
25917 	if (EXPECTED(0)) {
25918 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25919 	}
25920 # endif
25921 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25922 #else
25923 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25924 #endif
25925 }
25926 
25927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25928 {
25929 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25930 	USE_OPLINE
25931 
25932 # if 0 || (IS_VAR != IS_UNUSED)
25933 	if (EXPECTED(0)) {
25934 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25935 	}
25936 	if (EXPECTED(1)) {
25937 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25938 	}
25939 # endif
25940 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25941 #else
25942 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25943 #endif
25944 }
25945 
25946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25947 {
25948 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25949 	USE_OPLINE
25950 
25951 # if 0 || (IS_VAR != IS_UNUSED)
25952 	if (EXPECTED(0)) {
25953 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25954 	}
25955 	if (EXPECTED(0)) {
25956 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25957 	}
25958 # endif
25959 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25960 #else
25961 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25962 #endif
25963 }
25964 
25965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25966 {
25967 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25968 	USE_OPLINE
25969 
25970 # if 0 || (IS_VAR != IS_UNUSED)
25971 	if (EXPECTED(1)) {
25972 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25973 	}
25974 	if (EXPECTED(0)) {
25975 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25976 	}
25977 # endif
25978 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25979 #else
25980 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25981 #endif
25982 }
25983 
25984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25985 {
25986 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
25987 	USE_OPLINE
25988 
25989 # if 0 || (IS_VAR != IS_UNUSED)
25990 	if (EXPECTED(0)) {
25991 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25992 	}
25993 	if (EXPECTED(1)) {
25994 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25995 	}
25996 # endif
25997 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25998 #else
25999 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26000 #endif
26001 }
26002 
26003 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26004 {
26005 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
26006 	USE_OPLINE
26007 
26008 # if 0 || (IS_VAR != IS_UNUSED)
26009 	if (EXPECTED(0)) {
26010 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26011 	}
26012 	if (EXPECTED(0)) {
26013 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26014 	}
26015 # endif
26016 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26017 #else
26018 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26019 #endif
26020 }
26021 
26022 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26023 {
26024 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
26025 	USE_OPLINE
26026 
26027 # if 0 || (IS_VAR != IS_UNUSED)
26028 	if (EXPECTED(1)) {
26029 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26030 	}
26031 	if (EXPECTED(0)) {
26032 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26033 	}
26034 # endif
26035 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26036 #else
26037 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26038 #endif
26039 }
26040 
26041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26042 {
26043 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
26044 	USE_OPLINE
26045 
26046 # if 0 || (IS_VAR != IS_UNUSED)
26047 	if (EXPECTED(0)) {
26048 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26049 	}
26050 	if (EXPECTED(1)) {
26051 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26052 	}
26053 # endif
26054 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26055 #else
26056 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26057 #endif
26058 }
26059 
26060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26061 {
26062 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
26063 	USE_OPLINE
26064 
26065 # if 0 || (IS_VAR != IS_UNUSED)
26066 	if (EXPECTED(0)) {
26067 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26068 	}
26069 	if (EXPECTED(0)) {
26070 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26071 	}
26072 # endif
26073 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26074 #else
26075 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26076 #endif
26077 }
26078 
26079 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
26080 {
26081 	USE_OPLINE
26082 	zend_free_op free_op1, free_op2;
26083 	zval *object;
26084 	zval *property;
26085 	zval *zptr;
26086 
26087 	SAVE_OPLINE();
26088 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26089 
26090 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26091 		zend_throw_error(NULL, "Using $this when not in object context");
26092 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26093 		HANDLE_EXCEPTION();
26094 	}
26095 
26096 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26097 
26098 	do {
26099 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26100 			ZVAL_DEREF(object);
26101 			if (UNEXPECTED(!make_real_object(object))) {
26102 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
26103 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26104 					ZVAL_NULL(EX_VAR(opline->result.var));
26105 				}
26106 				break;
26107 			}
26108 		}
26109 
26110 		/* here we are sure we are dealing with an object */
26111 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
26112 			&& 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)) {
26113 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26114 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26115 					ZVAL_NULL(EX_VAR(opline->result.var));
26116 				}
26117 			} else {
26118 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
26119 					if (inc) {
26120 						fast_long_increment_function(zptr);
26121 					} else {
26122 						fast_long_decrement_function(zptr);
26123 					}
26124 				} else {
26125 					ZVAL_DEREF(zptr);
26126 					SEPARATE_ZVAL_NOREF(zptr);
26127 
26128 					if (inc) {
26129 						increment_function(zptr);
26130 					} else {
26131 						decrement_function(zptr);
26132 					}
26133 				}
26134 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26135 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
26136 				}
26137 			}
26138 		} else {
26139 			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));
26140 		}
26141 	} while (0);
26142 
26143 	zval_ptr_dtor_nogc(free_op2);
26144 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26145 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26146 }
26147 
26148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26149 {
26150 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26151 }
26152 
26153 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26154 {
26155 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26156 }
26157 
26158 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
26159 {
26160 	USE_OPLINE
26161 	zend_free_op free_op1, free_op2;
26162 	zval *object;
26163 	zval *property;
26164 	zval *zptr;
26165 
26166 	SAVE_OPLINE();
26167 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26168 
26169 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26170 		zend_throw_error(NULL, "Using $this when not in object context");
26171 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26172 		HANDLE_EXCEPTION();
26173 	}
26174 
26175 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26176 
26177 	do {
26178 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26179 			ZVAL_DEREF(object);
26180 			if (UNEXPECTED(!make_real_object(object))) {
26181 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
26182 				ZVAL_NULL(EX_VAR(opline->result.var));
26183 				break;
26184 			}
26185 		}
26186 
26187 		/* here we are sure we are dealing with an object */
26188 
26189 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
26190 			&& 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)) {
26191 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26192 				ZVAL_NULL(EX_VAR(opline->result.var));
26193 			} else {
26194 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
26195 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
26196 					if (inc) {
26197 						fast_long_increment_function(zptr);
26198 					} else {
26199 						fast_long_decrement_function(zptr);
26200 					}
26201 				} else {
26202 					ZVAL_DEREF(zptr);
26203 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
26204 					zval_opt_copy_ctor(zptr);
26205 					if (inc) {
26206 						increment_function(zptr);
26207 					} else {
26208 						decrement_function(zptr);
26209 					}
26210 				}
26211 			}
26212 		} else {
26213 			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));
26214 		}
26215 	} while (0);
26216 
26217 	zval_ptr_dtor_nogc(free_op2);
26218 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26220 }
26221 
26222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26223 {
26224 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26225 }
26226 
26227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26228 {
26229 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
26230 }
26231 
26232 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26233 {
26234 	USE_OPLINE
26235 	zend_free_op free_op1, free_op2;
26236 	zval *container;
26237 
26238 	SAVE_OPLINE();
26239 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26240 
26241 	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));
26242 	zval_ptr_dtor_nogc(free_op2);
26243 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26244 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26245 	}
26246 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26247 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26248 }
26249 
26250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26251 {
26252 	USE_OPLINE
26253 	zend_free_op free_op1, free_op2;
26254 	zval *container;
26255 
26256 	SAVE_OPLINE();
26257 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26258 
26259 	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));
26260 	zval_ptr_dtor_nogc(free_op2);
26261 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26262 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26263 	}
26264 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26265 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26266 }
26267 
26268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26269 {
26270 	USE_OPLINE
26271 	zval *container;
26272 	zend_free_op free_op1, free_op2;
26273 
26274 	SAVE_OPLINE();
26275 
26276 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
26277         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26278             zend_throw_error(NULL, "Cannot use temporary expression in write context");
26279 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26280 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26281 			HANDLE_EXCEPTION();
26282         }
26283 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26284 		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));
26285 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26286 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26287 		}
26288 		zval_ptr_dtor_nogc(free_op2);
26289 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26290 	} else {
26291 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26292 			zend_throw_error(NULL, "Cannot use [] for reading");
26293 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26294 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26295 			HANDLE_EXCEPTION();
26296 		}
26297 		container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
26298 		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));
26299 		zval_ptr_dtor_nogc(free_op2);
26300 		zval_ptr_dtor_nogc(free_op1);
26301 	}
26302 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26303 }
26304 
26305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26306 {
26307 	USE_OPLINE
26308 	zend_free_op free_op1, free_op2;
26309 	zval *container;
26310 
26311 	SAVE_OPLINE();
26312 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26313 
26314 	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));
26315 	zval_ptr_dtor_nogc(free_op2);
26316 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26317 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26318 	}
26319 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26321 }
26322 
26323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26324 {
26325 	USE_OPLINE
26326 	zend_free_op free_op1;
26327 	zval *container;
26328 	zend_free_op free_op2;
26329 	zval *offset;
26330 
26331 	SAVE_OPLINE();
26332 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
26333 
26334 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26335 		zend_throw_error(NULL, "Using $this when not in object context");
26336 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26337 		HANDLE_EXCEPTION();
26338 	}
26339 
26340 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26341 
26342 	if (IS_VAR == IS_CONST ||
26343 	    (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
26344 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
26345 			container = Z_REFVAL_P(container);
26346 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26347 				goto fetch_obj_r_no_object;
26348 			}
26349 		} else {
26350 			goto fetch_obj_r_no_object;
26351 		}
26352 	}
26353 
26354 	/* here we are sure we are dealing with an object */
26355 	do {
26356 		zend_object *zobj = Z_OBJ_P(container);
26357 		zval *retval;
26358 
26359 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26360 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
26361 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
26362 
26363 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26364 				retval = OBJ_PROP(zobj, prop_offset);
26365 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
26366 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
26367 					break;
26368 				}
26369 			} else if (EXPECTED(zobj->properties != NULL)) {
26370 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
26371 				if (EXPECTED(retval)) {
26372 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
26373 					break;
26374 				}
26375 			}
26376 		}
26377 
26378 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
26379 fetch_obj_r_no_object:
26380 			zend_error(E_NOTICE, "Trying to get property of non-object");
26381 			ZVAL_NULL(EX_VAR(opline->result.var));
26382 		} else {
26383 			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));
26384 
26385 			if (retval != EX_VAR(opline->result.var)) {
26386 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
26387 			}
26388 		}
26389 	} while (0);
26390 
26391 	zval_ptr_dtor_nogc(free_op2);
26392 	zval_ptr_dtor_nogc(free_op1);
26393 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26394 }
26395 
26396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26397 {
26398 	USE_OPLINE
26399 	zend_free_op free_op1, free_op2;
26400 	zval *property;
26401 	zval *container;
26402 
26403 	SAVE_OPLINE();
26404 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26405 
26406 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26407 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26408 		zend_throw_error(NULL, "Using $this when not in object context");
26409 		zval_ptr_dtor_nogc(free_op2);
26410 		HANDLE_EXCEPTION();
26411 	}
26412 
26413 	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);
26414 	zval_ptr_dtor_nogc(free_op2);
26415 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26416 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26417 	}
26418 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26420 }
26421 
26422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26423 {
26424 	USE_OPLINE
26425 	zend_free_op free_op1, free_op2;
26426 	zval *property;
26427 	zval *container;
26428 
26429 	SAVE_OPLINE();
26430 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26431 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26432 
26433 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26434 		zend_throw_error(NULL, "Using $this when not in object context");
26435 		zval_ptr_dtor_nogc(free_op2);
26436 		HANDLE_EXCEPTION();
26437 	}
26438 	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);
26439 	zval_ptr_dtor_nogc(free_op2);
26440 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26441 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26442 	}
26443 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26444 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26445 }
26446 
26447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26448 {
26449 	USE_OPLINE
26450 	zval *container;
26451 
26452 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
26453 		/* Behave like FETCH_OBJ_W */
26454 		zend_free_op free_op1, free_op2;
26455 		zval *property;
26456 
26457 		SAVE_OPLINE();
26458 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26459 		container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26460 
26461 		if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26462 			zend_throw_error(NULL, "Using $this when not in object context");
26463 			zval_ptr_dtor_nogc(free_op2);
26464 			HANDLE_EXCEPTION();
26465 		}
26466 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26467 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
26468 			zval_ptr_dtor_nogc(free_op2);
26469 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26470 			HANDLE_EXCEPTION();
26471 		}
26472 		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);
26473 		zval_ptr_dtor_nogc(free_op2);
26474 		if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26475 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26476 		}
26477 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26478 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26479 	} else {
26480 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26481 	}
26482 }
26483 
26484 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26485 {
26486 	USE_OPLINE
26487 	zend_free_op free_op1, free_op2;
26488 	zval *container, *property;
26489 
26490 	SAVE_OPLINE();
26491 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26492 
26493 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26494 		zend_throw_error(NULL, "Using $this when not in object context");
26495 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26496 		HANDLE_EXCEPTION();
26497 	}
26498 
26499 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26500 
26501 	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);
26502 	zval_ptr_dtor_nogc(free_op2);
26503 	if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
26504 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
26505 	}
26506 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26508 }
26509 
26510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26511 {
26512 	USE_OPLINE
26513 	zend_free_op free_op1, free_op2;
26514 	zval *object, *property_name, *value, tmp;
26515 
26516 	SAVE_OPLINE();
26517 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26518 
26519 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26520 		zend_throw_error(NULL, "Using $this when not in object context");
26521 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26522 
26523 		HANDLE_EXCEPTION();
26524 	}
26525 
26526 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26527 	value = EX_CONSTANT((opline+1)->op1);
26528 
26529 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26530 		do {
26531 			if (Z_ISREF_P(object)) {
26532 				object = Z_REFVAL_P(object);
26533 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
26534 					break;
26535 				}
26536 			}
26537 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
26538 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
26539 				zend_object *obj;
26540 
26541 				zval_ptr_dtor(object);
26542 				object_init(object);
26543 				Z_ADDREF_P(object);
26544 				obj = Z_OBJ_P(object);
26545 				zend_error(E_WARNING, "Creating default object from empty value");
26546 				if (GC_REFCOUNT(obj) == 1) {
26547 					/* the enclosing container was deleted, obj is unreferenced */
26548 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26549 						ZVAL_NULL(EX_VAR(opline->result.var));
26550 					}
26551 
26552 					OBJ_RELEASE(obj);
26553 					goto exit_assign_obj;
26554 				}
26555 				Z_DELREF_P(object);
26556 			} else {
26557 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
26558 					zend_error(E_WARNING, "Attempt to assign property of non-object");
26559 				}
26560 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26561 					ZVAL_NULL(EX_VAR(opline->result.var));
26562 				}
26563 
26564 				goto exit_assign_obj;
26565 			}
26566 		} while (0);
26567 	}
26568 
26569 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26570 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
26571 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
26572 		zend_object *zobj = Z_OBJ_P(object);
26573 		zval *property;
26574 
26575 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26576 			property = OBJ_PROP(zobj, prop_offset);
26577 			if (Z_TYPE_P(property) != IS_UNDEF) {
26578 fast_assign_obj:
26579 				value = zend_assign_to_variable(property, value, IS_CONST);
26580 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26581 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26582 				}
26583 				goto exit_assign_obj;
26584 			}
26585 		} else {
26586 			if (EXPECTED(zobj->properties != NULL)) {
26587 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26588 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26589 						GC_REFCOUNT(zobj->properties)--;
26590 					}
26591 					zobj->properties = zend_array_dup(zobj->properties);
26592 				}
26593 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
26594 				if (property) {
26595 					goto fast_assign_obj;
26596 				}
26597 			}
26598 
26599 			if (!zobj->ce->__set) {
26600 
26601 				if (EXPECTED(zobj->properties == NULL)) {
26602 					rebuild_object_properties(zobj);
26603 				}
26604 				if (IS_CONST == IS_CONST) {
26605 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26606 						Z_ADDREF_P(value);
26607 					}
26608 				} else if (IS_CONST != IS_TMP_VAR) {
26609 					if (Z_ISREF_P(value)) {
26610 						if (IS_CONST == IS_VAR) {
26611 							zend_reference *ref = Z_REF_P(value);
26612 							if (--GC_REFCOUNT(ref) == 0) {
26613 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26614 								efree_size(ref, sizeof(zend_reference));
26615 								value = &tmp;
26616 							} else {
26617 								value = Z_REFVAL_P(value);
26618 								if (Z_REFCOUNTED_P(value)) {
26619 									Z_ADDREF_P(value);
26620 								}
26621 							}
26622 						} else {
26623 							value = Z_REFVAL_P(value);
26624 							if (Z_REFCOUNTED_P(value)) {
26625 								Z_ADDREF_P(value);
26626 							}
26627 						}
26628 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
26629 						Z_ADDREF_P(value);
26630 					}
26631 				}
26632 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
26633 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26634 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26635 				}
26636 				goto exit_assign_obj;
26637 			}
26638 		}
26639 	}
26640 
26641 	if (!Z_OBJ_HT_P(object)->write_property) {
26642 		zend_error(E_WARNING, "Attempt to assign property of non-object");
26643 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26644 			ZVAL_NULL(EX_VAR(opline->result.var));
26645 		}
26646 
26647 		goto exit_assign_obj;
26648 	}
26649 
26650 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
26651 		ZVAL_DEREF(value);
26652 	}
26653 
26654 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
26655 
26656 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
26657 		ZVAL_COPY(EX_VAR(opline->result.var), value);
26658 	}
26659 
26660 exit_assign_obj:
26661 	zval_ptr_dtor_nogc(free_op2);
26662 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26663 	/* assign_obj has two opcodes! */
26664 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26665 }
26666 
26667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26668 {
26669 	USE_OPLINE
26670 	zend_free_op free_op1, free_op2, free_op_data;
26671 	zval *object, *property_name, *value, tmp;
26672 
26673 	SAVE_OPLINE();
26674 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26675 
26676 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26677 		zend_throw_error(NULL, "Using $this when not in object context");
26678 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26679 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26680 		HANDLE_EXCEPTION();
26681 	}
26682 
26683 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26684 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
26685 
26686 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26687 		do {
26688 			if (Z_ISREF_P(object)) {
26689 				object = Z_REFVAL_P(object);
26690 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
26691 					break;
26692 				}
26693 			}
26694 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
26695 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
26696 				zend_object *obj;
26697 
26698 				zval_ptr_dtor(object);
26699 				object_init(object);
26700 				Z_ADDREF_P(object);
26701 				obj = Z_OBJ_P(object);
26702 				zend_error(E_WARNING, "Creating default object from empty value");
26703 				if (GC_REFCOUNT(obj) == 1) {
26704 					/* the enclosing container was deleted, obj is unreferenced */
26705 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26706 						ZVAL_NULL(EX_VAR(opline->result.var));
26707 					}
26708 					zval_ptr_dtor_nogc(free_op_data);
26709 					OBJ_RELEASE(obj);
26710 					goto exit_assign_obj;
26711 				}
26712 				Z_DELREF_P(object);
26713 			} else {
26714 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
26715 					zend_error(E_WARNING, "Attempt to assign property of non-object");
26716 				}
26717 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26718 					ZVAL_NULL(EX_VAR(opline->result.var));
26719 				}
26720 				zval_ptr_dtor_nogc(free_op_data);
26721 				goto exit_assign_obj;
26722 			}
26723 		} while (0);
26724 	}
26725 
26726 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26727 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
26728 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
26729 		zend_object *zobj = Z_OBJ_P(object);
26730 		zval *property;
26731 
26732 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26733 			property = OBJ_PROP(zobj, prop_offset);
26734 			if (Z_TYPE_P(property) != IS_UNDEF) {
26735 fast_assign_obj:
26736 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
26737 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26738 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26739 				}
26740 				goto exit_assign_obj;
26741 			}
26742 		} else {
26743 			if (EXPECTED(zobj->properties != NULL)) {
26744 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26745 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26746 						GC_REFCOUNT(zobj->properties)--;
26747 					}
26748 					zobj->properties = zend_array_dup(zobj->properties);
26749 				}
26750 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
26751 				if (property) {
26752 					goto fast_assign_obj;
26753 				}
26754 			}
26755 
26756 			if (!zobj->ce->__set) {
26757 
26758 				if (EXPECTED(zobj->properties == NULL)) {
26759 					rebuild_object_properties(zobj);
26760 				}
26761 				if (IS_TMP_VAR == IS_CONST) {
26762 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26763 						Z_ADDREF_P(value);
26764 					}
26765 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
26766 					if (Z_ISREF_P(value)) {
26767 						if (IS_TMP_VAR == IS_VAR) {
26768 							zend_reference *ref = Z_REF_P(value);
26769 							if (--GC_REFCOUNT(ref) == 0) {
26770 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26771 								efree_size(ref, sizeof(zend_reference));
26772 								value = &tmp;
26773 							} else {
26774 								value = Z_REFVAL_P(value);
26775 								if (Z_REFCOUNTED_P(value)) {
26776 									Z_ADDREF_P(value);
26777 								}
26778 							}
26779 						} else {
26780 							value = Z_REFVAL_P(value);
26781 							if (Z_REFCOUNTED_P(value)) {
26782 								Z_ADDREF_P(value);
26783 							}
26784 						}
26785 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
26786 						Z_ADDREF_P(value);
26787 					}
26788 				}
26789 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
26790 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26791 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26792 				}
26793 				goto exit_assign_obj;
26794 			}
26795 		}
26796 	}
26797 
26798 	if (!Z_OBJ_HT_P(object)->write_property) {
26799 		zend_error(E_WARNING, "Attempt to assign property of non-object");
26800 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26801 			ZVAL_NULL(EX_VAR(opline->result.var));
26802 		}
26803 		zval_ptr_dtor_nogc(free_op_data);
26804 		goto exit_assign_obj;
26805 	}
26806 
26807 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
26808 		ZVAL_DEREF(value);
26809 	}
26810 
26811 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
26812 
26813 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
26814 		ZVAL_COPY(EX_VAR(opline->result.var), value);
26815 	}
26816 	zval_ptr_dtor_nogc(free_op_data);
26817 exit_assign_obj:
26818 	zval_ptr_dtor_nogc(free_op2);
26819 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26820 	/* assign_obj has two opcodes! */
26821 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26822 }
26823 
26824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26825 {
26826 	USE_OPLINE
26827 	zend_free_op free_op1, free_op2, free_op_data;
26828 	zval *object, *property_name, *value, tmp;
26829 
26830 	SAVE_OPLINE();
26831 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26832 
26833 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26834 		zend_throw_error(NULL, "Using $this when not in object context");
26835 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26836 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26837 		HANDLE_EXCEPTION();
26838 	}
26839 
26840 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26841 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
26842 
26843 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26844 		do {
26845 			if (Z_ISREF_P(object)) {
26846 				object = Z_REFVAL_P(object);
26847 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
26848 					break;
26849 				}
26850 			}
26851 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
26852 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
26853 				zend_object *obj;
26854 
26855 				zval_ptr_dtor(object);
26856 				object_init(object);
26857 				Z_ADDREF_P(object);
26858 				obj = Z_OBJ_P(object);
26859 				zend_error(E_WARNING, "Creating default object from empty value");
26860 				if (GC_REFCOUNT(obj) == 1) {
26861 					/* the enclosing container was deleted, obj is unreferenced */
26862 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26863 						ZVAL_NULL(EX_VAR(opline->result.var));
26864 					}
26865 					zval_ptr_dtor_nogc(free_op_data);
26866 					OBJ_RELEASE(obj);
26867 					goto exit_assign_obj;
26868 				}
26869 				Z_DELREF_P(object);
26870 			} else {
26871 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
26872 					zend_error(E_WARNING, "Attempt to assign property of non-object");
26873 				}
26874 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26875 					ZVAL_NULL(EX_VAR(opline->result.var));
26876 				}
26877 				zval_ptr_dtor_nogc(free_op_data);
26878 				goto exit_assign_obj;
26879 			}
26880 		} while (0);
26881 	}
26882 
26883 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26884 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
26885 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
26886 		zend_object *zobj = Z_OBJ_P(object);
26887 		zval *property;
26888 
26889 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
26890 			property = OBJ_PROP(zobj, prop_offset);
26891 			if (Z_TYPE_P(property) != IS_UNDEF) {
26892 fast_assign_obj:
26893 				value = zend_assign_to_variable(property, value, IS_VAR);
26894 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26895 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26896 				}
26897 				goto exit_assign_obj;
26898 			}
26899 		} else {
26900 			if (EXPECTED(zobj->properties != NULL)) {
26901 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26902 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26903 						GC_REFCOUNT(zobj->properties)--;
26904 					}
26905 					zobj->properties = zend_array_dup(zobj->properties);
26906 				}
26907 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
26908 				if (property) {
26909 					goto fast_assign_obj;
26910 				}
26911 			}
26912 
26913 			if (!zobj->ce->__set) {
26914 
26915 				if (EXPECTED(zobj->properties == NULL)) {
26916 					rebuild_object_properties(zobj);
26917 				}
26918 				if (IS_VAR == IS_CONST) {
26919 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26920 						Z_ADDREF_P(value);
26921 					}
26922 				} else if (IS_VAR != IS_TMP_VAR) {
26923 					if (Z_ISREF_P(value)) {
26924 						if (IS_VAR == IS_VAR) {
26925 							zend_reference *ref = Z_REF_P(value);
26926 							if (--GC_REFCOUNT(ref) == 0) {
26927 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26928 								efree_size(ref, sizeof(zend_reference));
26929 								value = &tmp;
26930 							} else {
26931 								value = Z_REFVAL_P(value);
26932 								if (Z_REFCOUNTED_P(value)) {
26933 									Z_ADDREF_P(value);
26934 								}
26935 							}
26936 						} else {
26937 							value = Z_REFVAL_P(value);
26938 							if (Z_REFCOUNTED_P(value)) {
26939 								Z_ADDREF_P(value);
26940 							}
26941 						}
26942 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
26943 						Z_ADDREF_P(value);
26944 					}
26945 				}
26946 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
26947 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26948 					ZVAL_COPY(EX_VAR(opline->result.var), value);
26949 				}
26950 				goto exit_assign_obj;
26951 			}
26952 		}
26953 	}
26954 
26955 	if (!Z_OBJ_HT_P(object)->write_property) {
26956 		zend_error(E_WARNING, "Attempt to assign property of non-object");
26957 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26958 			ZVAL_NULL(EX_VAR(opline->result.var));
26959 		}
26960 		zval_ptr_dtor_nogc(free_op_data);
26961 		goto exit_assign_obj;
26962 	}
26963 
26964 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
26965 		ZVAL_DEREF(value);
26966 	}
26967 
26968 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
26969 
26970 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
26971 		ZVAL_COPY(EX_VAR(opline->result.var), value);
26972 	}
26973 	zval_ptr_dtor_nogc(free_op_data);
26974 exit_assign_obj:
26975 	zval_ptr_dtor_nogc(free_op2);
26976 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26977 	/* assign_obj has two opcodes! */
26978 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26979 }
26980 
26981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26982 {
26983 	USE_OPLINE
26984 	zend_free_op free_op1, free_op2;
26985 	zval *object, *property_name, *value, tmp;
26986 
26987 	SAVE_OPLINE();
26988 	object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
26989 
26990 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26991 		zend_throw_error(NULL, "Using $this when not in object context");
26992 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26993 
26994 		HANDLE_EXCEPTION();
26995 	}
26996 
26997 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
26998 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
26999 
27000 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
27001 		do {
27002 			if (Z_ISREF_P(object)) {
27003 				object = Z_REFVAL_P(object);
27004 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
27005 					break;
27006 				}
27007 			}
27008 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
27009 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
27010 				zend_object *obj;
27011 
27012 				zval_ptr_dtor(object);
27013 				object_init(object);
27014 				Z_ADDREF_P(object);
27015 				obj = Z_OBJ_P(object);
27016 				zend_error(E_WARNING, "Creating default object from empty value");
27017 				if (GC_REFCOUNT(obj) == 1) {
27018 					/* the enclosing container was deleted, obj is unreferenced */
27019 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27020 						ZVAL_NULL(EX_VAR(opline->result.var));
27021 					}
27022 
27023 					OBJ_RELEASE(obj);
27024 					goto exit_assign_obj;
27025 				}
27026 				Z_DELREF_P(object);
27027 			} else {
27028 				if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
27029 					zend_error(E_WARNING, "Attempt to assign property of non-object");
27030 				}
27031 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27032 					ZVAL_NULL(EX_VAR(opline->result.var));
27033 				}
27034 
27035 				goto exit_assign_obj;
27036 			}
27037 		} while (0);
27038 	}
27039 
27040 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27041 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
27042 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
27043 		zend_object *zobj = Z_OBJ_P(object);
27044 		zval *property;
27045 
27046 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
27047 			property = OBJ_PROP(zobj, prop_offset);
27048 			if (Z_TYPE_P(property) != IS_UNDEF) {
27049 fast_assign_obj:
27050 				value = zend_assign_to_variable(property, value, IS_CV);
27051 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27052 					ZVAL_COPY(EX_VAR(opline->result.var), value);
27053 				}
27054 				goto exit_assign_obj;
27055 			}
27056 		} else {
27057 			if (EXPECTED(zobj->properties != NULL)) {
27058 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
27059 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
27060 						GC_REFCOUNT(zobj->properties)--;
27061 					}
27062 					zobj->properties = zend_array_dup(zobj->properties);
27063 				}
27064 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
27065 				if (property) {
27066 					goto fast_assign_obj;
27067 				}
27068 			}
27069 
27070 			if (!zobj->ce->__set) {
27071 
27072 				if (EXPECTED(zobj->properties == NULL)) {
27073 					rebuild_object_properties(zobj);
27074 				}
27075 				if (IS_CV == IS_CONST) {
27076 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
27077 						Z_ADDREF_P(value);
27078 					}
27079 				} else if (IS_CV != IS_TMP_VAR) {
27080 					if (Z_ISREF_P(value)) {
27081 						if (IS_CV == IS_VAR) {
27082 							zend_reference *ref = Z_REF_P(value);
27083 							if (--GC_REFCOUNT(ref) == 0) {
27084 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
27085 								efree_size(ref, sizeof(zend_reference));
27086 								value = &tmp;
27087 							} else {
27088 								value = Z_REFVAL_P(value);
27089 								if (Z_REFCOUNTED_P(value)) {
27090 									Z_ADDREF_P(value);
27091 								}
27092 							}
27093 						} else {
27094 							value = Z_REFVAL_P(value);
27095 							if (Z_REFCOUNTED_P(value)) {
27096 								Z_ADDREF_P(value);
27097 							}
27098 						}
27099 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
27100 						Z_ADDREF_P(value);
27101 					}
27102 				}
27103 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
27104 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27105 					ZVAL_COPY(EX_VAR(opline->result.var), value);
27106 				}
27107 				goto exit_assign_obj;
27108 			}
27109 		}
27110 	}
27111 
27112 	if (!Z_OBJ_HT_P(object)->write_property) {
27113 		zend_error(E_WARNING, "Attempt to assign property of non-object");
27114 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27115 			ZVAL_NULL(EX_VAR(opline->result.var));
27116 		}
27117 
27118 		goto exit_assign_obj;
27119 	}
27120 
27121 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27122 		ZVAL_DEREF(value);
27123 	}
27124 
27125 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
27126 
27127 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
27128 		ZVAL_COPY(EX_VAR(opline->result.var), value);
27129 	}
27130 
27131 exit_assign_obj:
27132 	zval_ptr_dtor_nogc(free_op2);
27133 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27134 	/* assign_obj has two opcodes! */
27135 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27136 }
27137 
27138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27139 {
27140 	USE_OPLINE
27141 	zend_free_op free_op1;
27142 	zval *object_ptr;
27143 	zend_free_op free_op2;
27144 	zval *value;
27145 	zval *variable_ptr;
27146 	zval *dim;
27147 
27148 	SAVE_OPLINE();
27149 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27150 
27151 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27152 try_assign_dim_array:
27153 		SEPARATE_ARRAY(object_ptr);
27154 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27155 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
27156 			if (UNEXPECTED(variable_ptr == NULL)) {
27157 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
27158 				goto assign_dim_error;
27159 			}
27160 		} else {
27161 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27162 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27163 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
27164 			} else {
27165 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
27166 			}
27167 			if (UNEXPECTED(variable_ptr == NULL)) {
27168 				goto assign_dim_error;
27169 			}
27170 		}
27171 		value = EX_CONSTANT((opline+1)->op1);
27172 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
27173 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27174 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27175 		}
27176 	} else {
27177 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27178 			object_ptr = Z_REFVAL_P(object_ptr);
27179 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27180 				goto try_assign_dim_array;
27181 			}
27182 		}
27183 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27184 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27185 			value = EX_CONSTANT((opline+1)->op1);
27186 
27187 			zend_assign_to_object_dim(object_ptr, dim, value);
27188 
27189 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
27190 				ZVAL_COPY(EX_VAR(opline->result.var), value);
27191 			}
27192 
27193 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27194 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27195 				zend_throw_error(NULL, "[] operator not supported for strings");
27196 
27197 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27198 				HANDLE_EXCEPTION();
27199 			} else {
27200 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27201 				value = EX_CONSTANT((opline+1)->op1);
27202 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27203 
27204 			}
27205 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27206 			ZVAL_NEW_ARR(object_ptr);
27207 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
27208 			goto try_assign_dim_array;
27209 		} else {
27210 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27211 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
27212 			}
27213 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27214 assign_dim_error:
27215 
27216 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27217 				ZVAL_NULL(EX_VAR(opline->result.var));
27218 			}
27219 		}
27220 	}
27221 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27222 		zval_ptr_dtor_nogc(free_op2);
27223 	}
27224 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27225 	/* assign_dim has two opcodes! */
27226 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27227 }
27228 
27229 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27230 {
27231 	USE_OPLINE
27232 	zend_free_op free_op1;
27233 	zval *object_ptr;
27234 	zend_free_op free_op2, free_op_data;
27235 	zval *value;
27236 	zval *variable_ptr;
27237 	zval *dim;
27238 
27239 	SAVE_OPLINE();
27240 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27241 
27242 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27243 try_assign_dim_array:
27244 		SEPARATE_ARRAY(object_ptr);
27245 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27246 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
27247 			if (UNEXPECTED(variable_ptr == NULL)) {
27248 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
27249 				goto assign_dim_error;
27250 			}
27251 		} else {
27252 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27253 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27254 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
27255 			} else {
27256 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
27257 			}
27258 			if (UNEXPECTED(variable_ptr == NULL)) {
27259 				goto assign_dim_error;
27260 			}
27261 		}
27262 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
27263 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
27264 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27265 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27266 		}
27267 	} else {
27268 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27269 			object_ptr = Z_REFVAL_P(object_ptr);
27270 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27271 				goto try_assign_dim_array;
27272 			}
27273 		}
27274 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27275 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27276 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
27277 
27278 			zend_assign_to_object_dim(object_ptr, dim, value);
27279 
27280 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
27281 				ZVAL_COPY(EX_VAR(opline->result.var), value);
27282 			}
27283 
27284 			zval_ptr_dtor_nogc(free_op_data);
27285 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27286 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27287 				zend_throw_error(NULL, "[] operator not supported for strings");
27288 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27289 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27290 				HANDLE_EXCEPTION();
27291 			} else {
27292 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27293 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
27294 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27295 				zval_ptr_dtor_nogc(free_op_data);
27296 			}
27297 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27298 			ZVAL_NEW_ARR(object_ptr);
27299 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
27300 			goto try_assign_dim_array;
27301 		} else {
27302 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27303 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
27304 			}
27305 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27306 assign_dim_error:
27307 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27308 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27309 				ZVAL_NULL(EX_VAR(opline->result.var));
27310 			}
27311 		}
27312 	}
27313 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27314 		zval_ptr_dtor_nogc(free_op2);
27315 	}
27316 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27317 	/* assign_dim has two opcodes! */
27318 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27319 }
27320 
27321 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27322 {
27323 	USE_OPLINE
27324 	zend_free_op free_op1;
27325 	zval *object_ptr;
27326 	zend_free_op free_op2, free_op_data;
27327 	zval *value;
27328 	zval *variable_ptr;
27329 	zval *dim;
27330 
27331 	SAVE_OPLINE();
27332 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27333 
27334 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27335 try_assign_dim_array:
27336 		SEPARATE_ARRAY(object_ptr);
27337 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27338 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
27339 			if (UNEXPECTED(variable_ptr == NULL)) {
27340 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
27341 				goto assign_dim_error;
27342 			}
27343 		} else {
27344 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27345 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27346 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
27347 			} else {
27348 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
27349 			}
27350 			if (UNEXPECTED(variable_ptr == NULL)) {
27351 				goto assign_dim_error;
27352 			}
27353 		}
27354 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
27355 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
27356 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27357 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27358 		}
27359 	} else {
27360 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27361 			object_ptr = Z_REFVAL_P(object_ptr);
27362 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27363 				goto try_assign_dim_array;
27364 			}
27365 		}
27366 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27367 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27368 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
27369 
27370 			zend_assign_to_object_dim(object_ptr, dim, value);
27371 
27372 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
27373 				ZVAL_COPY(EX_VAR(opline->result.var), value);
27374 			}
27375 
27376 			zval_ptr_dtor_nogc(free_op_data);
27377 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27378 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27379 				zend_throw_error(NULL, "[] operator not supported for strings");
27380 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27381 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27382 				HANDLE_EXCEPTION();
27383 			} else {
27384 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27385 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
27386 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27387 				zval_ptr_dtor_nogc(free_op_data);
27388 			}
27389 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27390 			ZVAL_NEW_ARR(object_ptr);
27391 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
27392 			goto try_assign_dim_array;
27393 		} else {
27394 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27395 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
27396 			}
27397 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27398 assign_dim_error:
27399 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27400 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27401 				ZVAL_NULL(EX_VAR(opline->result.var));
27402 			}
27403 		}
27404 	}
27405 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27406 		zval_ptr_dtor_nogc(free_op2);
27407 	}
27408 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27409 	/* assign_dim has two opcodes! */
27410 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27411 }
27412 
27413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27414 {
27415 	USE_OPLINE
27416 	zend_free_op free_op1;
27417 	zval *object_ptr;
27418 	zend_free_op free_op2;
27419 	zval *value;
27420 	zval *variable_ptr;
27421 	zval *dim;
27422 
27423 	SAVE_OPLINE();
27424 	object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27425 
27426 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27427 try_assign_dim_array:
27428 		SEPARATE_ARRAY(object_ptr);
27429 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27430 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
27431 			if (UNEXPECTED(variable_ptr == NULL)) {
27432 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
27433 				goto assign_dim_error;
27434 			}
27435 		} else {
27436 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27437 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27438 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
27439 			} else {
27440 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
27441 			}
27442 			if (UNEXPECTED(variable_ptr == NULL)) {
27443 				goto assign_dim_error;
27444 			}
27445 		}
27446 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
27447 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
27448 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27449 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27450 		}
27451 	} else {
27452 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27453 			object_ptr = Z_REFVAL_P(object_ptr);
27454 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27455 				goto try_assign_dim_array;
27456 			}
27457 		}
27458 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27459 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27460 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
27461 
27462 			zend_assign_to_object_dim(object_ptr, dim, value);
27463 
27464 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
27465 				ZVAL_COPY(EX_VAR(opline->result.var), value);
27466 			}
27467 
27468 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27469 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27470 				zend_throw_error(NULL, "[] operator not supported for strings");
27471 
27472 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27473 				HANDLE_EXCEPTION();
27474 			} else {
27475 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27476 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
27477 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
27478 
27479 			}
27480 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27481 			ZVAL_NEW_ARR(object_ptr);
27482 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
27483 			goto try_assign_dim_array;
27484 		} else {
27485 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27486 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
27487 			}
27488 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27489 assign_dim_error:
27490 
27491 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27492 				ZVAL_NULL(EX_VAR(opline->result.var));
27493 			}
27494 		}
27495 	}
27496 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27497 		zval_ptr_dtor_nogc(free_op2);
27498 	}
27499 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27500 	/* assign_dim has two opcodes! */
27501 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27502 }
27503 
27504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27505 {
27506 	USE_OPLINE
27507 	zval *function_name;
27508 	zend_class_entry *ce;
27509 	zend_object *object;
27510 	zend_function *fbc;
27511 	zend_execute_data *call;
27512 
27513 	SAVE_OPLINE();
27514 
27515 	if (IS_VAR == IS_CONST) {
27516 		/* no function found. try a static method in class */
27517 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
27518 		if (UNEXPECTED(ce == NULL)) {
27519 			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);
27520 			if (UNEXPECTED(ce == NULL)) {
27521 				ZEND_ASSERT(EG(exception));
27522 				HANDLE_EXCEPTION();
27523 			}
27524 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
27525 		}
27526 	} else if (IS_VAR == IS_UNUSED) {
27527 		ce = zend_fetch_class(NULL, opline->op1.num);
27528 		if (UNEXPECTED(ce == NULL)) {
27529 			ZEND_ASSERT(EG(exception));
27530 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27531 			HANDLE_EXCEPTION();
27532 		}
27533 	} else {
27534 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27535 	}
27536 
27537 	if (IS_VAR == IS_CONST &&
27538 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27539 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
27540 		/* nothing to do */
27541 	} else if (IS_VAR != IS_CONST &&
27542 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27543 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
27544 		/* do nothing */
27545 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27546 		zend_free_op free_op2;
27547 
27548 		function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27549 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27550 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27551 				do {
27552 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
27553 						function_name = Z_REFVAL_P(function_name);
27554 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27555 							break;
27556 						}
27557 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
27558 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
27559 						if (UNEXPECTED(EG(exception) != NULL)) {
27560 							HANDLE_EXCEPTION();
27561 						}
27562 					}
27563 					zend_throw_error(NULL, "Function name must be a string");
27564 					zval_ptr_dtor_nogc(free_op2);
27565 					HANDLE_EXCEPTION();
27566 				} while (0);
27567  			}
27568 		}
27569 
27570 		if (ce->get_static_method) {
27571 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
27572 		} else {
27573 			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));
27574 		}
27575 		if (UNEXPECTED(fbc == NULL)) {
27576 			if (EXPECTED(!EG(exception))) {
27577 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
27578 			}
27579 			zval_ptr_dtor_nogc(free_op2);
27580 			HANDLE_EXCEPTION();
27581 		}
27582 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27583 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
27584 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
27585 			if (IS_VAR == IS_CONST) {
27586 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
27587 			} else {
27588 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
27589 			}
27590 		}
27591 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
27592 			init_func_run_time_cache(&fbc->op_array);
27593 		}
27594 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27595 			zval_ptr_dtor_nogc(free_op2);
27596 		}
27597 	} else {
27598 		if (UNEXPECTED(ce->constructor == NULL)) {
27599 			zend_throw_error(NULL, "Cannot call constructor");
27600 			HANDLE_EXCEPTION();
27601 		}
27602 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
27603 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
27604 			HANDLE_EXCEPTION();
27605 		}
27606 		fbc = ce->constructor;
27607 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
27608 			init_func_run_time_cache(&fbc->op_array);
27609 		}
27610 	}
27611 
27612 	object = NULL;
27613 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
27614 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
27615 			object = Z_OBJ(EX(This));
27616 			ce = object->ce;
27617 		} else {
27618 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
27619 				/* Allowed for PHP 4 compatibility. */
27620 				zend_error(
27621 					E_DEPRECATED,
27622 					"Non-static method %s::%s() should not be called statically",
27623 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
27624 				if (UNEXPECTED(EG(exception) != NULL)) {
27625 					HANDLE_EXCEPTION();
27626 				}
27627 			} else {
27628 				/* An internal function assumes $this is present and won't check that.
27629 				 * So PHP would crash by allowing the call. */
27630 				zend_throw_error(
27631 					zend_ce_error,
27632 					"Non-static method %s::%s() cannot be called statically",
27633 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
27634 				HANDLE_EXCEPTION();
27635 			}
27636 		}
27637 	}
27638 
27639 	if (IS_VAR == IS_UNUSED) {
27640 		/* previous opcode is ZEND_FETCH_CLASS */
27641 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
27642 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
27643 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
27644 				ce = Z_OBJCE(EX(This));
27645 			} else {
27646 				ce = Z_CE(EX(This));
27647 			}
27648 		}
27649 	}
27650 
27651 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
27652 		fbc, opline->extended_value, ce, object);
27653 	call->prev_execute_data = EX(call);
27654 	EX(call) = call;
27655 
27656 	ZEND_VM_NEXT_OPCODE();
27657 }
27658 
27659 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27660 {
27661 	USE_OPLINE
27662 	zend_free_op free_op1;
27663 	zval *expr_ptr, new_expr;
27664 
27665 	SAVE_OPLINE();
27666 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
27667 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
27668 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27669 		ZVAL_MAKE_REF(expr_ptr);
27670 		Z_ADDREF_P(expr_ptr);
27671 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27672 	} else {
27673 		expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
27674 		if (IS_VAR == IS_TMP_VAR) {
27675 			/* pass */
27676 		} else if (IS_VAR == IS_CONST) {
27677 			if (Z_REFCOUNTED_P(expr_ptr)) {
27678 				Z_ADDREF_P(expr_ptr);
27679 			}
27680 		} else if (IS_VAR == IS_CV) {
27681 			ZVAL_DEREF(expr_ptr);
27682 			if (Z_REFCOUNTED_P(expr_ptr)) {
27683 				Z_ADDREF_P(expr_ptr);
27684 			}
27685 		} else /* if (IS_VAR == IS_VAR) */ {
27686 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
27687 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
27688 
27689 				expr_ptr = Z_REFVAL_P(expr_ptr);
27690 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
27691 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
27692 					expr_ptr = &new_expr;
27693 					efree_size(ref, sizeof(zend_reference));
27694 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
27695 					Z_ADDREF_P(expr_ptr);
27696 				}
27697 			}
27698 		}
27699 	}
27700 
27701 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27702 		zend_free_op free_op2;
27703 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27704 		zend_string *str;
27705 		zend_ulong hval;
27706 
27707 add_again:
27708 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27709 			str = Z_STR_P(offset);
27710 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27711 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
27712 					goto num_index;
27713 				}
27714 			}
27715 str_index:
27716 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
27717 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27718 			hval = Z_LVAL_P(offset);
27719 num_index:
27720 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
27721 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27722 			offset = Z_REFVAL_P(offset);
27723 			goto add_again;
27724 		} else if (Z_TYPE_P(offset) == IS_NULL) {
27725 			str = ZSTR_EMPTY_ALLOC();
27726 			goto str_index;
27727 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27728 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
27729 			goto num_index;
27730 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
27731 			hval = 0;
27732 			goto num_index;
27733 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
27734 			hval = 1;
27735 			goto num_index;
27736 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27737 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
27738 			str = ZSTR_EMPTY_ALLOC();
27739 			goto str_index;
27740 		} else {
27741 			zend_error(E_WARNING, "Illegal offset type");
27742 			zval_ptr_dtor(expr_ptr);
27743 		}
27744 		zval_ptr_dtor_nogc(free_op2);
27745 	} else {
27746 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
27747 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
27748 			zval_ptr_dtor(expr_ptr);
27749 		}
27750 	}
27751 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27752 }
27753 
27754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27755 {
27756 	zval *array;
27757 	uint32_t size;
27758 	USE_OPLINE
27759 
27760 	array = EX_VAR(opline->result.var);
27761 	if (IS_VAR != IS_UNUSED) {
27762 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
27763 	} else {
27764 		size = 0;
27765 	}
27766 	ZVAL_NEW_ARR(array);
27767 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
27768 
27769 	if (IS_VAR != IS_UNUSED) {
27770 		/* Explicitly initialize array as not-packed if flag is set */
27771 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
27772 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
27773 		}
27774 	}
27775 
27776 	if (IS_VAR == IS_UNUSED) {
27777 		ZEND_VM_NEXT_OPCODE();
27778 #if 0 || (IS_VAR != IS_UNUSED)
27779 	} else {
27780 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27781 #endif
27782 	}
27783 }
27784 
27785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27786 {
27787 	USE_OPLINE
27788 	zend_free_op free_op1, free_op2;
27789 	zval *container;
27790 	zval *offset;
27791 	zend_ulong hval;
27792 	zend_string *key;
27793 
27794 	SAVE_OPLINE();
27795 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27796 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27797 
27798 	do {
27799 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27800 			HashTable *ht;
27801 
27802 unset_dim_array:
27803 			SEPARATE_ARRAY(container);
27804 			ht = Z_ARRVAL_P(container);
27805 offset_again:
27806 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27807 				key = Z_STR_P(offset);
27808 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27809 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
27810 						goto num_index_dim;
27811 					}
27812 				}
27813 str_index_dim:
27814 				if (ht == &EG(symbol_table)) {
27815 					zend_delete_global_variable(key);
27816 				} else {
27817 					zend_hash_del(ht, key);
27818 				}
27819 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27820 				hval = Z_LVAL_P(offset);
27821 num_index_dim:
27822 				zend_hash_index_del(ht, hval);
27823 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27824 				offset = Z_REFVAL_P(offset);
27825 				goto offset_again;
27826 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27827 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
27828 				goto num_index_dim;
27829 			} else if (Z_TYPE_P(offset) == IS_NULL) {
27830 				key = ZSTR_EMPTY_ALLOC();
27831 				goto str_index_dim;
27832 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
27833 				hval = 0;
27834 				goto num_index_dim;
27835 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
27836 				hval = 1;
27837 				goto num_index_dim;
27838 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27839 				hval = Z_RES_HANDLE_P(offset);
27840 				goto num_index_dim;
27841 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27842 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
27843 				key = ZSTR_EMPTY_ALLOC();
27844 				goto str_index_dim;
27845 			} else {
27846 				zend_error(E_WARNING, "Illegal offset type in unset");
27847 			}
27848 			break;
27849 		} else if (Z_ISREF_P(container)) {
27850 			container = Z_REFVAL_P(container);
27851 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27852 				goto unset_dim_array;
27853 			}
27854 		}
27855 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27856 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
27857 		}
27858 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
27859 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
27860 		}
27861 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27862 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
27863 				zend_throw_error(NULL, "Cannot use object as array");
27864 			} else {
27865 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
27866 			}
27867 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
27868 			zend_throw_error(NULL, "Cannot unset string offsets");
27869 		}
27870 	} while (0);
27871 
27872 	zval_ptr_dtor_nogc(free_op2);
27873 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27874 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27875 }
27876 
27877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27878 {
27879 	USE_OPLINE
27880 	zend_free_op free_op1, free_op2;
27881 	zval *container;
27882 	zval *offset;
27883 
27884 	SAVE_OPLINE();
27885 	container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
27886 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27887 		zend_throw_error(NULL, "Using $this when not in object context");
27888 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27889 		HANDLE_EXCEPTION();
27890 	}
27891 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
27892 
27893 	do {
27894 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
27895 			if (Z_ISREF_P(container)) {
27896 				container = Z_REFVAL_P(container);
27897 				if (Z_TYPE_P(container) != IS_OBJECT) {
27898 					break;
27899 				}
27900 			} else {
27901 				break;
27902 			}
27903 		}
27904 		if (Z_OBJ_HT_P(container)->unset_property) {
27905 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
27906 		} else {
27907 			zend_error(E_NOTICE, "Trying to unset property of non-object");
27908 		}
27909 	} while (0);
27910 
27911 	zval_ptr_dtor_nogc(free_op2);
27912 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27913 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27914 }
27915 
27916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27917 {
27918 	USE_OPLINE
27919 	zval *result;
27920 	zend_function *constructor;
27921 	zend_class_entry *ce;
27922 	zend_execute_data *call;
27923 
27924 	SAVE_OPLINE();
27925 	if (IS_UNUSED == IS_CONST) {
27926 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
27927 		if (UNEXPECTED(ce == NULL)) {
27928 			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);
27929 			if (UNEXPECTED(ce == NULL)) {
27930 				ZEND_ASSERT(EG(exception));
27931 				HANDLE_EXCEPTION();
27932 			}
27933 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
27934 		}
27935 	} else if (IS_UNUSED == IS_UNUSED) {
27936 		ce = zend_fetch_class(NULL, opline->op1.num);
27937 		if (UNEXPECTED(ce == NULL)) {
27938 			ZEND_ASSERT(EG(exception));
27939 			HANDLE_EXCEPTION();
27940 		}
27941 	} else {
27942 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27943 	}
27944 
27945 	result = EX_VAR(opline->result.var);
27946 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
27947 		HANDLE_EXCEPTION();
27948 	}
27949 
27950 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
27951 	if (constructor == NULL) {
27952 		if (UNEXPECTED(EG(exception))) {
27953 			zval_ptr_dtor(result);
27954 			HANDLE_EXCEPTION();
27955 		}
27956 
27957 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
27958 		 * opcode is DO_FCALL in case EXT instructions are used. */
27959 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
27960 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
27961 		}
27962 
27963 		/* Perform a dummy function call */
27964 		call = zend_vm_stack_push_call_frame(
27965 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
27966 			opline->extended_value, NULL, NULL);
27967 	} else {
27968 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) {
27969 			init_func_run_time_cache(&constructor->op_array);
27970 		}
27971 		/* We are not handling overloaded classes right now */
27972 		call = zend_vm_stack_push_call_frame(
27973 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR,
27974 			constructor,
27975 			opline->extended_value,
27976 			ce,
27977 			Z_OBJ_P(result));
27978 		Z_ADDREF_P(result);
27979 	}
27980 
27981 	call->prev_execute_data = EX(call);
27982 	EX(call) = call;
27983 	ZEND_VM_NEXT_OPCODE();
27984 }
27985 
27986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27987 {
27988 	USE_OPLINE
27989 
27990 	zval *obj;
27991 	zend_object *clone_obj;
27992 	zend_class_entry *ce, *scope;
27993 	zend_function *clone;
27994 	zend_object_clone_obj_t clone_call;
27995 
27996 	SAVE_OPLINE();
27997 	obj = _get_obj_zval_ptr_unused(execute_data);
27998 
27999 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
28000 		zend_throw_error(NULL, "Using $this when not in object context");
28001 		HANDLE_EXCEPTION();
28002 	}
28003 
28004 	do {
28005 		if (IS_UNUSED == IS_CONST ||
28006 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
28007 		    if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
28008 		    	obj = Z_REFVAL_P(obj);
28009 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
28010 		    		break;
28011 				}
28012 			}
28013 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
28014 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
28015 				if (UNEXPECTED(EG(exception) != NULL)) {
28016 					HANDLE_EXCEPTION();
28017 				}
28018 			}
28019 			zend_throw_error(NULL, "__clone method called on non-object");
28020 
28021 			HANDLE_EXCEPTION();
28022 		}
28023 	} while (0);
28024 
28025 	ce = Z_OBJCE_P(obj);
28026 	clone = ce->clone;
28027 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
28028 	if (UNEXPECTED(clone_call == NULL)) {
28029 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
28030 
28031 		HANDLE_EXCEPTION();
28032 	}
28033 
28034 	if (clone) {
28035 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
28036 			/* Ensure that if we're calling a private function, we're allowed to do so.
28037 			 */
28038 			scope = EX(func)->op_array.scope;
28039 			if (!zend_check_private(clone, scope, clone->common.function_name)) {
28040 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
28041 
28042 				HANDLE_EXCEPTION();
28043 			}
28044 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
28045 			/* Ensure that if we're calling a protected function, we're allowed to do so.
28046 			 */
28047 			scope = EX(func)->op_array.scope;
28048 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
28049 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
28050 
28051 				HANDLE_EXCEPTION();
28052 			}
28053 		}
28054 	}
28055 
28056 	clone_obj = clone_call(obj);
28057 	if (EXPECTED(EG(exception) == NULL)) {
28058 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
28059 	} else {
28060 		OBJ_RELEASE(clone_obj);
28061 	}
28062 
28063 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28064 }
28065 
28066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28067 {
28068 	USE_OPLINE
28069 
28070 	SAVE_OPLINE();
28071 	if (IS_UNUSED != IS_UNUSED) {
28072 
28073 		zval *ptr = NULL;
28074 
28075 		do {
28076 			if (Z_TYPE_P(ptr) == IS_LONG) {
28077 				EG(exit_status) = Z_LVAL_P(ptr);
28078 			} else {
28079 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
28080 					ptr = Z_REFVAL_P(ptr);
28081 					if (Z_TYPE_P(ptr) == IS_LONG) {
28082 						EG(exit_status) = Z_LVAL_P(ptr);
28083 						break;
28084 					}
28085 				}
28086 				zend_print_variable(ptr);
28087 			}
28088 		} while (0);
28089 
28090 	}
28091 	zend_bailout();
28092 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
28093 }
28094 
28095 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)
28096 {
28097 	USE_OPLINE
28098 	zend_free_op free_op_data1;
28099 	zval *object;
28100 	zval *property;
28101 	zval *value;
28102 	zval *zptr;
28103 
28104 	SAVE_OPLINE();
28105 	object = _get_obj_zval_ptr_unused(execute_data);
28106 
28107 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28108 		zend_throw_error(NULL, "Using $this when not in object context");
28109 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
28110 
28111 		HANDLE_EXCEPTION();
28112 	}
28113 
28114 	property = EX_CONSTANT(opline->op2);
28115 
28116 	do {
28117 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
28118 
28119 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28120 			ZVAL_DEREF(object);
28121 			if (UNEXPECTED(!make_real_object(object))) {
28122 				zend_error(E_WARNING, "Attempt to assign property of non-object");
28123 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28124 					ZVAL_NULL(EX_VAR(opline->result.var));
28125 				}
28126 				break;
28127 			}
28128 		}
28129 
28130 		/* here we are sure we are dealing with an object */
28131 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
28132 			&& 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)) {
28133 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28134 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28135 					ZVAL_NULL(EX_VAR(opline->result.var));
28136 				}
28137 			} else {
28138 				ZVAL_DEREF(zptr);
28139 				SEPARATE_ZVAL_NOREF(zptr);
28140 
28141 				binary_op(zptr, zptr, value);
28142 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28143 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
28144 				}
28145 			}
28146 		} else {
28147 			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));
28148 		}
28149 	} while (0);
28150 
28151 	FREE_OP(free_op_data1);
28152 
28153 
28154 	/* assign_obj has two opcodes! */
28155 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28156 }
28157 
28158 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28159 {
28160 #if 0 || (IS_CONST != IS_UNUSED)
28161 	USE_OPLINE
28162 
28163 # if 0 || (IS_UNUSED != IS_UNUSED)
28164 	if (EXPECTED(0)) {
28165 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28166 	}
28167 	if (EXPECTED(0)) {
28168 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28169 	}
28170 # endif
28171 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28172 #else
28173 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28174 #endif
28175 }
28176 
28177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28178 {
28179 #if 0 || (IS_CONST != IS_UNUSED)
28180 	USE_OPLINE
28181 
28182 # if 0 || (IS_UNUSED != IS_UNUSED)
28183 	if (EXPECTED(0)) {
28184 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28185 	}
28186 	if (EXPECTED(0)) {
28187 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28188 	}
28189 # endif
28190 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28191 #else
28192 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28193 #endif
28194 }
28195 
28196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28197 {
28198 #if 0 || (IS_CONST != IS_UNUSED)
28199 	USE_OPLINE
28200 
28201 # if 0 || (IS_UNUSED != IS_UNUSED)
28202 	if (EXPECTED(0)) {
28203 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28204 	}
28205 	if (EXPECTED(0)) {
28206 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28207 	}
28208 # endif
28209 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28210 #else
28211 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28212 #endif
28213 }
28214 
28215 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28216 {
28217 #if 0 || (IS_CONST != IS_UNUSED)
28218 	USE_OPLINE
28219 
28220 # if 0 || (IS_UNUSED != IS_UNUSED)
28221 	if (EXPECTED(0)) {
28222 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28223 	}
28224 	if (EXPECTED(0)) {
28225 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28226 	}
28227 # endif
28228 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28229 #else
28230 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28231 #endif
28232 }
28233 
28234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28235 {
28236 #if 0 || (IS_CONST != IS_UNUSED)
28237 	USE_OPLINE
28238 
28239 # if 0 || (IS_UNUSED != IS_UNUSED)
28240 	if (EXPECTED(0)) {
28241 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28242 	}
28243 	if (EXPECTED(0)) {
28244 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28245 	}
28246 # endif
28247 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28248 #else
28249 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28250 #endif
28251 }
28252 
28253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28254 {
28255 #if 0 || (IS_CONST != IS_UNUSED)
28256 	USE_OPLINE
28257 
28258 # if 0 || (IS_UNUSED != IS_UNUSED)
28259 	if (EXPECTED(0)) {
28260 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28261 	}
28262 	if (EXPECTED(0)) {
28263 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28264 	}
28265 # endif
28266 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28267 #else
28268 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28269 #endif
28270 }
28271 
28272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28273 {
28274 #if 0 || (IS_CONST != IS_UNUSED)
28275 	USE_OPLINE
28276 
28277 # if 0 || (IS_UNUSED != IS_UNUSED)
28278 	if (EXPECTED(0)) {
28279 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28280 	}
28281 	if (EXPECTED(0)) {
28282 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28283 	}
28284 # endif
28285 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28286 #else
28287 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28288 #endif
28289 }
28290 
28291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28292 {
28293 #if 0 || (IS_CONST != IS_UNUSED)
28294 	USE_OPLINE
28295 
28296 # if 0 || (IS_UNUSED != IS_UNUSED)
28297 	if (EXPECTED(0)) {
28298 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28299 	}
28300 	if (EXPECTED(0)) {
28301 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28302 	}
28303 # endif
28304 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28305 #else
28306 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28307 #endif
28308 }
28309 
28310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28311 {
28312 #if 0 || (IS_CONST != IS_UNUSED)
28313 	USE_OPLINE
28314 
28315 # if 0 || (IS_UNUSED != IS_UNUSED)
28316 	if (EXPECTED(0)) {
28317 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28318 	}
28319 	if (EXPECTED(0)) {
28320 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28321 	}
28322 # endif
28323 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28324 #else
28325 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28326 #endif
28327 }
28328 
28329 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28330 {
28331 #if 0 || (IS_CONST != IS_UNUSED)
28332 	USE_OPLINE
28333 
28334 # if 0 || (IS_UNUSED != IS_UNUSED)
28335 	if (EXPECTED(0)) {
28336 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28337 	}
28338 	if (EXPECTED(0)) {
28339 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28340 	}
28341 # endif
28342 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28343 #else
28344 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28345 #endif
28346 }
28347 
28348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28349 {
28350 #if 0 || (IS_CONST != IS_UNUSED)
28351 	USE_OPLINE
28352 
28353 # if 0 || (IS_UNUSED != IS_UNUSED)
28354 	if (EXPECTED(0)) {
28355 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28356 	}
28357 	if (EXPECTED(0)) {
28358 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28359 	}
28360 # endif
28361 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28362 #else
28363 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28364 #endif
28365 }
28366 
28367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28368 {
28369 #if 0 || (IS_CONST != IS_UNUSED)
28370 	USE_OPLINE
28371 
28372 # if 0 || (IS_UNUSED != IS_UNUSED)
28373 	if (EXPECTED(0)) {
28374 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28375 	}
28376 	if (EXPECTED(0)) {
28377 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28378 	}
28379 # endif
28380 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28381 #else
28382 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28383 #endif
28384 }
28385 
28386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
28387 {
28388 	USE_OPLINE
28389 
28390 	zval *object;
28391 	zval *property;
28392 	zval *zptr;
28393 
28394 	SAVE_OPLINE();
28395 	object = _get_obj_zval_ptr_unused(execute_data);
28396 
28397 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28398 		zend_throw_error(NULL, "Using $this when not in object context");
28399 
28400 		HANDLE_EXCEPTION();
28401 	}
28402 
28403 	property = EX_CONSTANT(opline->op2);
28404 
28405 	do {
28406 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28407 			ZVAL_DEREF(object);
28408 			if (UNEXPECTED(!make_real_object(object))) {
28409 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
28410 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28411 					ZVAL_NULL(EX_VAR(opline->result.var));
28412 				}
28413 				break;
28414 			}
28415 		}
28416 
28417 		/* here we are sure we are dealing with an object */
28418 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
28419 			&& 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)) {
28420 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28421 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28422 					ZVAL_NULL(EX_VAR(opline->result.var));
28423 				}
28424 			} else {
28425 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
28426 					if (inc) {
28427 						fast_long_increment_function(zptr);
28428 					} else {
28429 						fast_long_decrement_function(zptr);
28430 					}
28431 				} else {
28432 					ZVAL_DEREF(zptr);
28433 					SEPARATE_ZVAL_NOREF(zptr);
28434 
28435 					if (inc) {
28436 						increment_function(zptr);
28437 					} else {
28438 						decrement_function(zptr);
28439 					}
28440 				}
28441 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28442 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
28443 				}
28444 			}
28445 		} else {
28446 			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));
28447 		}
28448 	} while (0);
28449 
28450 
28451 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28452 }
28453 
28454 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28455 {
28456 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28457 }
28458 
28459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28460 {
28461 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28462 }
28463 
28464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
28465 {
28466 	USE_OPLINE
28467 
28468 	zval *object;
28469 	zval *property;
28470 	zval *zptr;
28471 
28472 	SAVE_OPLINE();
28473 	object = _get_obj_zval_ptr_unused(execute_data);
28474 
28475 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28476 		zend_throw_error(NULL, "Using $this when not in object context");
28477 
28478 		HANDLE_EXCEPTION();
28479 	}
28480 
28481 	property = EX_CONSTANT(opline->op2);
28482 
28483 	do {
28484 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28485 			ZVAL_DEREF(object);
28486 			if (UNEXPECTED(!make_real_object(object))) {
28487 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
28488 				ZVAL_NULL(EX_VAR(opline->result.var));
28489 				break;
28490 			}
28491 		}
28492 
28493 		/* here we are sure we are dealing with an object */
28494 
28495 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
28496 			&& 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)) {
28497 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28498 				ZVAL_NULL(EX_VAR(opline->result.var));
28499 			} else {
28500 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
28501 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
28502 					if (inc) {
28503 						fast_long_increment_function(zptr);
28504 					} else {
28505 						fast_long_decrement_function(zptr);
28506 					}
28507 				} else {
28508 					ZVAL_DEREF(zptr);
28509 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
28510 					zval_opt_copy_ctor(zptr);
28511 					if (inc) {
28512 						increment_function(zptr);
28513 					} else {
28514 						decrement_function(zptr);
28515 					}
28516 				}
28517 			}
28518 		} else {
28519 			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));
28520 		}
28521 	} while (0);
28522 
28523 
28524 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28525 }
28526 
28527 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28528 {
28529 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28530 }
28531 
28532 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28533 {
28534 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
28535 }
28536 
28537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28538 {
28539 	USE_OPLINE
28540 
28541 	zval *container;
28542 
28543 	zval *offset;
28544 
28545 	SAVE_OPLINE();
28546 	container = _get_obj_zval_ptr_unused(execute_data);
28547 
28548 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28549 		zend_throw_error(NULL, "Using $this when not in object context");
28550 
28551 		HANDLE_EXCEPTION();
28552 	}
28553 
28554 	offset = EX_CONSTANT(opline->op2);
28555 
28556 	if (IS_UNUSED == IS_CONST ||
28557 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
28558 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
28559 			container = Z_REFVAL_P(container);
28560 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
28561 				goto fetch_obj_r_no_object;
28562 			}
28563 		} else {
28564 			goto fetch_obj_r_no_object;
28565 		}
28566 	}
28567 
28568 	/* here we are sure we are dealing with an object */
28569 	do {
28570 		zend_object *zobj = Z_OBJ_P(container);
28571 		zval *retval;
28572 
28573 		if (IS_CONST == IS_CONST &&
28574 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
28575 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
28576 
28577 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
28578 				retval = OBJ_PROP(zobj, prop_offset);
28579 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
28580 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
28581 					break;
28582 				}
28583 			} else if (EXPECTED(zobj->properties != NULL)) {
28584 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
28585 				if (EXPECTED(retval)) {
28586 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
28587 					break;
28588 				}
28589 			}
28590 		}
28591 
28592 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
28593 fetch_obj_r_no_object:
28594 			zend_error(E_NOTICE, "Trying to get property of non-object");
28595 			ZVAL_NULL(EX_VAR(opline->result.var));
28596 		} else {
28597 			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));
28598 
28599 			if (retval != EX_VAR(opline->result.var)) {
28600 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
28601 			}
28602 		}
28603 	} while (0);
28604 
28605 
28606 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28607 }
28608 
28609 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28610 {
28611 	USE_OPLINE
28612 	zend_free_op free_op1;
28613 	zval *property;
28614 	zval *container;
28615 
28616 	SAVE_OPLINE();
28617 	property = EX_CONSTANT(opline->op2);
28618 
28619 	container = _get_obj_zval_ptr_unused(execute_data);
28620 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28621 		zend_throw_error(NULL, "Using $this when not in object context");
28622 
28623 		HANDLE_EXCEPTION();
28624 	}
28625 
28626 	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);
28627 
28628 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
28629 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
28630 	}
28631 
28632 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28633 }
28634 
28635 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28636 {
28637 	USE_OPLINE
28638 	zend_free_op free_op1;
28639 	zval *property;
28640 	zval *container;
28641 
28642 	SAVE_OPLINE();
28643 	property = EX_CONSTANT(opline->op2);
28644 	container = _get_obj_zval_ptr_unused(execute_data);
28645 
28646 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28647 		zend_throw_error(NULL, "Using $this when not in object context");
28648 
28649 		HANDLE_EXCEPTION();
28650 	}
28651 	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);
28652 
28653 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
28654 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
28655 	}
28656 
28657 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28658 }
28659 
28660 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28661 {
28662 	USE_OPLINE
28663 
28664 	zval *container;
28665 
28666 	zval *offset;
28667 
28668 	SAVE_OPLINE();
28669 	container = _get_obj_zval_ptr_unused(execute_data);
28670 
28671 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28672 		zend_throw_error(NULL, "Using $this when not in object context");
28673 
28674 		HANDLE_EXCEPTION();
28675 	}
28676 
28677 	offset  = EX_CONSTANT(opline->op2);
28678 
28679 	if (IS_UNUSED == IS_CONST ||
28680 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
28681 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
28682 			container = Z_REFVAL_P(container);
28683 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
28684 				goto fetch_obj_is_no_object;
28685 			}
28686 		} else {
28687 			goto fetch_obj_is_no_object;
28688 		}
28689 	}
28690 
28691 	/* here we are sure we are dealing with an object */
28692 	do {
28693 		zend_object *zobj = Z_OBJ_P(container);
28694 		zval *retval;
28695 
28696 		if (IS_CONST == IS_CONST &&
28697 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
28698 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
28699 
28700 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
28701 				retval = OBJ_PROP(zobj, prop_offset);
28702 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
28703 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
28704 					break;
28705 				}
28706 			} else if (EXPECTED(zobj->properties != NULL)) {
28707 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
28708 				if (EXPECTED(retval)) {
28709 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
28710 					break;
28711 				}
28712 			}
28713 		}
28714 
28715 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
28716 fetch_obj_is_no_object:
28717 			ZVAL_NULL(EX_VAR(opline->result.var));
28718 		} else {
28719 
28720 			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));
28721 
28722 			if (retval != EX_VAR(opline->result.var)) {
28723 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
28724 			}
28725 		}
28726 	} while (0);
28727 
28728 
28729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28730 }
28731 
28732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28733 {
28734 	USE_OPLINE
28735 	zval *container;
28736 
28737 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
28738 		/* Behave like FETCH_OBJ_W */
28739 		zend_free_op free_op1;
28740 		zval *property;
28741 
28742 		SAVE_OPLINE();
28743 		property = EX_CONSTANT(opline->op2);
28744 		container = _get_obj_zval_ptr_unused(execute_data);
28745 
28746 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28747 			zend_throw_error(NULL, "Using $this when not in object context");
28748 
28749 			HANDLE_EXCEPTION();
28750 		}
28751 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
28752 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
28753 
28754 
28755 			HANDLE_EXCEPTION();
28756 		}
28757 		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);
28758 
28759 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
28760 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
28761 		}
28762 
28763 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28764 	} else {
28765 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28766 	}
28767 }
28768 
28769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28770 {
28771 	USE_OPLINE
28772 	zend_free_op free_op1;
28773 	zval *container, *property;
28774 
28775 	SAVE_OPLINE();
28776 	container = _get_obj_zval_ptr_unused(execute_data);
28777 
28778 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28779 		zend_throw_error(NULL, "Using $this when not in object context");
28780 
28781 		HANDLE_EXCEPTION();
28782 	}
28783 
28784 	property = EX_CONSTANT(opline->op2);
28785 
28786 	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);
28787 
28788 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
28789 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
28790 	}
28791 
28792 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28793 }
28794 
28795 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28796 {
28797 	USE_OPLINE
28798 
28799 	zval *object, *property_name, *value, tmp;
28800 
28801 	SAVE_OPLINE();
28802 	object = _get_obj_zval_ptr_unused(execute_data);
28803 
28804 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28805 		zend_throw_error(NULL, "Using $this when not in object context");
28806 
28807 
28808 		HANDLE_EXCEPTION();
28809 	}
28810 
28811 	property_name = EX_CONSTANT(opline->op2);
28812 	value = EX_CONSTANT((opline+1)->op1);
28813 
28814 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28815 		do {
28816 			if (Z_ISREF_P(object)) {
28817 				object = Z_REFVAL_P(object);
28818 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
28819 					break;
28820 				}
28821 			}
28822 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
28823 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
28824 				zend_object *obj;
28825 
28826 				zval_ptr_dtor(object);
28827 				object_init(object);
28828 				Z_ADDREF_P(object);
28829 				obj = Z_OBJ_P(object);
28830 				zend_error(E_WARNING, "Creating default object from empty value");
28831 				if (GC_REFCOUNT(obj) == 1) {
28832 					/* the enclosing container was deleted, obj is unreferenced */
28833 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28834 						ZVAL_NULL(EX_VAR(opline->result.var));
28835 					}
28836 
28837 					OBJ_RELEASE(obj);
28838 					goto exit_assign_obj;
28839 				}
28840 				Z_DELREF_P(object);
28841 			} else {
28842 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
28843 					zend_error(E_WARNING, "Attempt to assign property of non-object");
28844 				}
28845 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28846 					ZVAL_NULL(EX_VAR(opline->result.var));
28847 				}
28848 
28849 				goto exit_assign_obj;
28850 			}
28851 		} while (0);
28852 	}
28853 
28854 	if (IS_CONST == IS_CONST &&
28855 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
28856 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
28857 		zend_object *zobj = Z_OBJ_P(object);
28858 		zval *property;
28859 
28860 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
28861 			property = OBJ_PROP(zobj, prop_offset);
28862 			if (Z_TYPE_P(property) != IS_UNDEF) {
28863 fast_assign_obj:
28864 				value = zend_assign_to_variable(property, value, IS_CONST);
28865 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28866 					ZVAL_COPY(EX_VAR(opline->result.var), value);
28867 				}
28868 				goto exit_assign_obj;
28869 			}
28870 		} else {
28871 			if (EXPECTED(zobj->properties != NULL)) {
28872 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
28873 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
28874 						GC_REFCOUNT(zobj->properties)--;
28875 					}
28876 					zobj->properties = zend_array_dup(zobj->properties);
28877 				}
28878 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
28879 				if (property) {
28880 					goto fast_assign_obj;
28881 				}
28882 			}
28883 
28884 			if (!zobj->ce->__set) {
28885 
28886 				if (EXPECTED(zobj->properties == NULL)) {
28887 					rebuild_object_properties(zobj);
28888 				}
28889 				if (IS_CONST == IS_CONST) {
28890 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
28891 						Z_ADDREF_P(value);
28892 					}
28893 				} else if (IS_CONST != IS_TMP_VAR) {
28894 					if (Z_ISREF_P(value)) {
28895 						if (IS_CONST == IS_VAR) {
28896 							zend_reference *ref = Z_REF_P(value);
28897 							if (--GC_REFCOUNT(ref) == 0) {
28898 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
28899 								efree_size(ref, sizeof(zend_reference));
28900 								value = &tmp;
28901 							} else {
28902 								value = Z_REFVAL_P(value);
28903 								if (Z_REFCOUNTED_P(value)) {
28904 									Z_ADDREF_P(value);
28905 								}
28906 							}
28907 						} else {
28908 							value = Z_REFVAL_P(value);
28909 							if (Z_REFCOUNTED_P(value)) {
28910 								Z_ADDREF_P(value);
28911 							}
28912 						}
28913 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
28914 						Z_ADDREF_P(value);
28915 					}
28916 				}
28917 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
28918 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28919 					ZVAL_COPY(EX_VAR(opline->result.var), value);
28920 				}
28921 				goto exit_assign_obj;
28922 			}
28923 		}
28924 	}
28925 
28926 	if (!Z_OBJ_HT_P(object)->write_property) {
28927 		zend_error(E_WARNING, "Attempt to assign property of non-object");
28928 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28929 			ZVAL_NULL(EX_VAR(opline->result.var));
28930 		}
28931 
28932 		goto exit_assign_obj;
28933 	}
28934 
28935 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
28936 		ZVAL_DEREF(value);
28937 	}
28938 
28939 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
28940 
28941 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
28942 		ZVAL_COPY(EX_VAR(opline->result.var), value);
28943 	}
28944 
28945 exit_assign_obj:
28946 
28947 
28948 	/* assign_obj has two opcodes! */
28949 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28950 }
28951 
28952 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28953 {
28954 	USE_OPLINE
28955 	zend_free_op free_op_data;
28956 	zval *object, *property_name, *value, tmp;
28957 
28958 	SAVE_OPLINE();
28959 	object = _get_obj_zval_ptr_unused(execute_data);
28960 
28961 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28962 		zend_throw_error(NULL, "Using $this when not in object context");
28963 
28964 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28965 		HANDLE_EXCEPTION();
28966 	}
28967 
28968 	property_name = EX_CONSTANT(opline->op2);
28969 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
28970 
28971 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28972 		do {
28973 			if (Z_ISREF_P(object)) {
28974 				object = Z_REFVAL_P(object);
28975 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
28976 					break;
28977 				}
28978 			}
28979 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
28980 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
28981 				zend_object *obj;
28982 
28983 				zval_ptr_dtor(object);
28984 				object_init(object);
28985 				Z_ADDREF_P(object);
28986 				obj = Z_OBJ_P(object);
28987 				zend_error(E_WARNING, "Creating default object from empty value");
28988 				if (GC_REFCOUNT(obj) == 1) {
28989 					/* the enclosing container was deleted, obj is unreferenced */
28990 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28991 						ZVAL_NULL(EX_VAR(opline->result.var));
28992 					}
28993 					zval_ptr_dtor_nogc(free_op_data);
28994 					OBJ_RELEASE(obj);
28995 					goto exit_assign_obj;
28996 				}
28997 				Z_DELREF_P(object);
28998 			} else {
28999 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
29000 					zend_error(E_WARNING, "Attempt to assign property of non-object");
29001 				}
29002 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29003 					ZVAL_NULL(EX_VAR(opline->result.var));
29004 				}
29005 				zval_ptr_dtor_nogc(free_op_data);
29006 				goto exit_assign_obj;
29007 			}
29008 		} while (0);
29009 	}
29010 
29011 	if (IS_CONST == IS_CONST &&
29012 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
29013 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
29014 		zend_object *zobj = Z_OBJ_P(object);
29015 		zval *property;
29016 
29017 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
29018 			property = OBJ_PROP(zobj, prop_offset);
29019 			if (Z_TYPE_P(property) != IS_UNDEF) {
29020 fast_assign_obj:
29021 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
29022 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29023 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29024 				}
29025 				goto exit_assign_obj;
29026 			}
29027 		} else {
29028 			if (EXPECTED(zobj->properties != NULL)) {
29029 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29030 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29031 						GC_REFCOUNT(zobj->properties)--;
29032 					}
29033 					zobj->properties = zend_array_dup(zobj->properties);
29034 				}
29035 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
29036 				if (property) {
29037 					goto fast_assign_obj;
29038 				}
29039 			}
29040 
29041 			if (!zobj->ce->__set) {
29042 
29043 				if (EXPECTED(zobj->properties == NULL)) {
29044 					rebuild_object_properties(zobj);
29045 				}
29046 				if (IS_TMP_VAR == IS_CONST) {
29047 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29048 						Z_ADDREF_P(value);
29049 					}
29050 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
29051 					if (Z_ISREF_P(value)) {
29052 						if (IS_TMP_VAR == IS_VAR) {
29053 							zend_reference *ref = Z_REF_P(value);
29054 							if (--GC_REFCOUNT(ref) == 0) {
29055 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29056 								efree_size(ref, sizeof(zend_reference));
29057 								value = &tmp;
29058 							} else {
29059 								value = Z_REFVAL_P(value);
29060 								if (Z_REFCOUNTED_P(value)) {
29061 									Z_ADDREF_P(value);
29062 								}
29063 							}
29064 						} else {
29065 							value = Z_REFVAL_P(value);
29066 							if (Z_REFCOUNTED_P(value)) {
29067 								Z_ADDREF_P(value);
29068 							}
29069 						}
29070 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
29071 						Z_ADDREF_P(value);
29072 					}
29073 				}
29074 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
29075 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29076 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29077 				}
29078 				goto exit_assign_obj;
29079 			}
29080 		}
29081 	}
29082 
29083 	if (!Z_OBJ_HT_P(object)->write_property) {
29084 		zend_error(E_WARNING, "Attempt to assign property of non-object");
29085 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29086 			ZVAL_NULL(EX_VAR(opline->result.var));
29087 		}
29088 		zval_ptr_dtor_nogc(free_op_data);
29089 		goto exit_assign_obj;
29090 	}
29091 
29092 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
29093 		ZVAL_DEREF(value);
29094 	}
29095 
29096 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
29097 
29098 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
29099 		ZVAL_COPY(EX_VAR(opline->result.var), value);
29100 	}
29101 	zval_ptr_dtor_nogc(free_op_data);
29102 exit_assign_obj:
29103 
29104 
29105 	/* assign_obj has two opcodes! */
29106 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29107 }
29108 
29109 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29110 {
29111 	USE_OPLINE
29112 	zend_free_op free_op_data;
29113 	zval *object, *property_name, *value, tmp;
29114 
29115 	SAVE_OPLINE();
29116 	object = _get_obj_zval_ptr_unused(execute_data);
29117 
29118 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29119 		zend_throw_error(NULL, "Using $this when not in object context");
29120 
29121 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29122 		HANDLE_EXCEPTION();
29123 	}
29124 
29125 	property_name = EX_CONSTANT(opline->op2);
29126 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
29127 
29128 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29129 		do {
29130 			if (Z_ISREF_P(object)) {
29131 				object = Z_REFVAL_P(object);
29132 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
29133 					break;
29134 				}
29135 			}
29136 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
29137 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
29138 				zend_object *obj;
29139 
29140 				zval_ptr_dtor(object);
29141 				object_init(object);
29142 				Z_ADDREF_P(object);
29143 				obj = Z_OBJ_P(object);
29144 				zend_error(E_WARNING, "Creating default object from empty value");
29145 				if (GC_REFCOUNT(obj) == 1) {
29146 					/* the enclosing container was deleted, obj is unreferenced */
29147 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29148 						ZVAL_NULL(EX_VAR(opline->result.var));
29149 					}
29150 					zval_ptr_dtor_nogc(free_op_data);
29151 					OBJ_RELEASE(obj);
29152 					goto exit_assign_obj;
29153 				}
29154 				Z_DELREF_P(object);
29155 			} else {
29156 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
29157 					zend_error(E_WARNING, "Attempt to assign property of non-object");
29158 				}
29159 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29160 					ZVAL_NULL(EX_VAR(opline->result.var));
29161 				}
29162 				zval_ptr_dtor_nogc(free_op_data);
29163 				goto exit_assign_obj;
29164 			}
29165 		} while (0);
29166 	}
29167 
29168 	if (IS_CONST == IS_CONST &&
29169 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
29170 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
29171 		zend_object *zobj = Z_OBJ_P(object);
29172 		zval *property;
29173 
29174 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
29175 			property = OBJ_PROP(zobj, prop_offset);
29176 			if (Z_TYPE_P(property) != IS_UNDEF) {
29177 fast_assign_obj:
29178 				value = zend_assign_to_variable(property, value, IS_VAR);
29179 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29180 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29181 				}
29182 				goto exit_assign_obj;
29183 			}
29184 		} else {
29185 			if (EXPECTED(zobj->properties != NULL)) {
29186 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29187 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29188 						GC_REFCOUNT(zobj->properties)--;
29189 					}
29190 					zobj->properties = zend_array_dup(zobj->properties);
29191 				}
29192 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
29193 				if (property) {
29194 					goto fast_assign_obj;
29195 				}
29196 			}
29197 
29198 			if (!zobj->ce->__set) {
29199 
29200 				if (EXPECTED(zobj->properties == NULL)) {
29201 					rebuild_object_properties(zobj);
29202 				}
29203 				if (IS_VAR == IS_CONST) {
29204 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29205 						Z_ADDREF_P(value);
29206 					}
29207 				} else if (IS_VAR != IS_TMP_VAR) {
29208 					if (Z_ISREF_P(value)) {
29209 						if (IS_VAR == IS_VAR) {
29210 							zend_reference *ref = Z_REF_P(value);
29211 							if (--GC_REFCOUNT(ref) == 0) {
29212 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29213 								efree_size(ref, sizeof(zend_reference));
29214 								value = &tmp;
29215 							} else {
29216 								value = Z_REFVAL_P(value);
29217 								if (Z_REFCOUNTED_P(value)) {
29218 									Z_ADDREF_P(value);
29219 								}
29220 							}
29221 						} else {
29222 							value = Z_REFVAL_P(value);
29223 							if (Z_REFCOUNTED_P(value)) {
29224 								Z_ADDREF_P(value);
29225 							}
29226 						}
29227 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
29228 						Z_ADDREF_P(value);
29229 					}
29230 				}
29231 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
29232 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29233 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29234 				}
29235 				goto exit_assign_obj;
29236 			}
29237 		}
29238 	}
29239 
29240 	if (!Z_OBJ_HT_P(object)->write_property) {
29241 		zend_error(E_WARNING, "Attempt to assign property of non-object");
29242 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29243 			ZVAL_NULL(EX_VAR(opline->result.var));
29244 		}
29245 		zval_ptr_dtor_nogc(free_op_data);
29246 		goto exit_assign_obj;
29247 	}
29248 
29249 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
29250 		ZVAL_DEREF(value);
29251 	}
29252 
29253 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
29254 
29255 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
29256 		ZVAL_COPY(EX_VAR(opline->result.var), value);
29257 	}
29258 	zval_ptr_dtor_nogc(free_op_data);
29259 exit_assign_obj:
29260 
29261 
29262 	/* assign_obj has two opcodes! */
29263 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29264 }
29265 
29266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29267 {
29268 	USE_OPLINE
29269 
29270 	zval *object, *property_name, *value, tmp;
29271 
29272 	SAVE_OPLINE();
29273 	object = _get_obj_zval_ptr_unused(execute_data);
29274 
29275 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29276 		zend_throw_error(NULL, "Using $this when not in object context");
29277 
29278 
29279 		HANDLE_EXCEPTION();
29280 	}
29281 
29282 	property_name = EX_CONSTANT(opline->op2);
29283 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
29284 
29285 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29286 		do {
29287 			if (Z_ISREF_P(object)) {
29288 				object = Z_REFVAL_P(object);
29289 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
29290 					break;
29291 				}
29292 			}
29293 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
29294 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
29295 				zend_object *obj;
29296 
29297 				zval_ptr_dtor(object);
29298 				object_init(object);
29299 				Z_ADDREF_P(object);
29300 				obj = Z_OBJ_P(object);
29301 				zend_error(E_WARNING, "Creating default object from empty value");
29302 				if (GC_REFCOUNT(obj) == 1) {
29303 					/* the enclosing container was deleted, obj is unreferenced */
29304 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29305 						ZVAL_NULL(EX_VAR(opline->result.var));
29306 					}
29307 
29308 					OBJ_RELEASE(obj);
29309 					goto exit_assign_obj;
29310 				}
29311 				Z_DELREF_P(object);
29312 			} else {
29313 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
29314 					zend_error(E_WARNING, "Attempt to assign property of non-object");
29315 				}
29316 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29317 					ZVAL_NULL(EX_VAR(opline->result.var));
29318 				}
29319 
29320 				goto exit_assign_obj;
29321 			}
29322 		} while (0);
29323 	}
29324 
29325 	if (IS_CONST == IS_CONST &&
29326 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
29327 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
29328 		zend_object *zobj = Z_OBJ_P(object);
29329 		zval *property;
29330 
29331 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
29332 			property = OBJ_PROP(zobj, prop_offset);
29333 			if (Z_TYPE_P(property) != IS_UNDEF) {
29334 fast_assign_obj:
29335 				value = zend_assign_to_variable(property, value, IS_CV);
29336 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29337 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29338 				}
29339 				goto exit_assign_obj;
29340 			}
29341 		} else {
29342 			if (EXPECTED(zobj->properties != NULL)) {
29343 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
29344 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
29345 						GC_REFCOUNT(zobj->properties)--;
29346 					}
29347 					zobj->properties = zend_array_dup(zobj->properties);
29348 				}
29349 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
29350 				if (property) {
29351 					goto fast_assign_obj;
29352 				}
29353 			}
29354 
29355 			if (!zobj->ce->__set) {
29356 
29357 				if (EXPECTED(zobj->properties == NULL)) {
29358 					rebuild_object_properties(zobj);
29359 				}
29360 				if (IS_CV == IS_CONST) {
29361 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
29362 						Z_ADDREF_P(value);
29363 					}
29364 				} else if (IS_CV != IS_TMP_VAR) {
29365 					if (Z_ISREF_P(value)) {
29366 						if (IS_CV == IS_VAR) {
29367 							zend_reference *ref = Z_REF_P(value);
29368 							if (--GC_REFCOUNT(ref) == 0) {
29369 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29370 								efree_size(ref, sizeof(zend_reference));
29371 								value = &tmp;
29372 							} else {
29373 								value = Z_REFVAL_P(value);
29374 								if (Z_REFCOUNTED_P(value)) {
29375 									Z_ADDREF_P(value);
29376 								}
29377 							}
29378 						} else {
29379 							value = Z_REFVAL_P(value);
29380 							if (Z_REFCOUNTED_P(value)) {
29381 								Z_ADDREF_P(value);
29382 							}
29383 						}
29384 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
29385 						Z_ADDREF_P(value);
29386 					}
29387 				}
29388 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
29389 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29390 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29391 				}
29392 				goto exit_assign_obj;
29393 			}
29394 		}
29395 	}
29396 
29397 	if (!Z_OBJ_HT_P(object)->write_property) {
29398 		zend_error(E_WARNING, "Attempt to assign property of non-object");
29399 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29400 			ZVAL_NULL(EX_VAR(opline->result.var));
29401 		}
29402 
29403 		goto exit_assign_obj;
29404 	}
29405 
29406 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
29407 		ZVAL_DEREF(value);
29408 	}
29409 
29410 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
29411 
29412 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
29413 		ZVAL_COPY(EX_VAR(opline->result.var), value);
29414 	}
29415 
29416 exit_assign_obj:
29417 
29418 
29419 	/* assign_obj has two opcodes! */
29420 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29421 }
29422 
29423 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29424 {
29425 	USE_OPLINE
29426 
29427 	zend_string **rope;
29428 	zval *var;
29429 
29430 	/* Compiler allocates the necessary number of zval slots to keep the rope */
29431 	rope = (zend_string**)EX_VAR(opline->result.var);
29432 	if (IS_CONST == IS_CONST) {
29433 		var = EX_CONSTANT(opline->op2);
29434 		rope[0] = zend_string_copy(Z_STR_P(var));
29435 	} else {
29436 		var = EX_CONSTANT(opline->op2);
29437 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
29438 			if (IS_CONST == IS_CV) {
29439 				rope[0] = zend_string_copy(Z_STR_P(var));
29440 			} else {
29441 				rope[0] = Z_STR_P(var);
29442 			}
29443 		} else {
29444 			SAVE_OPLINE();
29445 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
29446 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
29447 			}
29448 			rope[0] = _zval_get_string_func(var);
29449 
29450 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29451 		}
29452 	}
29453 	ZEND_VM_NEXT_OPCODE();
29454 }
29455 
29456 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29457 {
29458 	USE_OPLINE
29459 	zval *function_name;
29460 
29461 	zval *object;
29462 	zend_function *fbc;
29463 	zend_class_entry *called_scope;
29464 	zend_object *obj;
29465 	zend_execute_data *call;
29466 	uint32_t call_info;
29467 
29468 	SAVE_OPLINE();
29469 
29470 	function_name = EX_CONSTANT(opline->op2);
29471 
29472 	if (IS_CONST != IS_CONST &&
29473 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
29474 		do {
29475 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
29476 				function_name = Z_REFVAL_P(function_name);
29477 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
29478 					break;
29479 				}
29480 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
29481 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
29482 				if (UNEXPECTED(EG(exception) != NULL)) {
29483 					HANDLE_EXCEPTION();
29484 				}
29485 			}
29486 			zend_throw_error(NULL, "Method name must be a string");
29487 
29488 
29489 			HANDLE_EXCEPTION();
29490 		} while (0);
29491 	}
29492 
29493 	object = _get_obj_zval_ptr_unused(execute_data);
29494 
29495 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29496 		zend_throw_error(NULL, "Using $this when not in object context");
29497 
29498 		HANDLE_EXCEPTION();
29499 	}
29500 
29501 	if (IS_UNUSED != IS_UNUSED) {
29502 		do {
29503 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
29504 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
29505 					object = Z_REFVAL_P(object);
29506 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
29507 						break;
29508 					}
29509 				}
29510 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
29511 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
29512 					if (UNEXPECTED(EG(exception) != NULL)) {
29513 
29514 						HANDLE_EXCEPTION();
29515 					}
29516 				}
29517 				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)));
29518 
29519 
29520 				HANDLE_EXCEPTION();
29521 			}
29522 		} while (0);
29523 	}
29524 
29525 	obj = Z_OBJ_P(object);
29526 	called_scope = obj->ce;
29527 
29528 	if (IS_CONST != IS_CONST ||
29529 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
29530 	    zend_object *orig_obj = obj;
29531 
29532 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
29533 			zend_throw_error(NULL, "Object does not support method calls");
29534 
29535 
29536 			HANDLE_EXCEPTION();
29537 		}
29538 
29539 		/* First, locate the function. */
29540 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
29541 		if (UNEXPECTED(fbc == NULL)) {
29542 			if (EXPECTED(!EG(exception))) {
29543 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
29544 			}
29545 
29546 
29547 			HANDLE_EXCEPTION();
29548 		}
29549 		if (IS_CONST == IS_CONST &&
29550 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
29551 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
29552 		    EXPECTED(obj == orig_obj)) {
29553 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
29554 		}
29555 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
29556 			init_func_run_time_cache(&fbc->op_array);
29557 		}
29558 	}
29559 
29560 	call_info = ZEND_CALL_NESTED_FUNCTION;
29561 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
29562 		obj = NULL;
29563 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
29564 		/* CV may be changed indirectly (e.g. when it's a reference) */
29565 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
29566 		GC_REFCOUNT(obj)++; /* For $this pointer */
29567 	}
29568 
29569 
29570 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
29571 		HANDLE_EXCEPTION();
29572 	}
29573 
29574 	call = zend_vm_stack_push_call_frame(call_info,
29575 		fbc, opline->extended_value, called_scope, obj);
29576 	call->prev_execute_data = EX(call);
29577 	EX(call) = call;
29578 
29579 	ZEND_VM_NEXT_OPCODE();
29580 }
29581 
29582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29583 {
29584 	USE_OPLINE
29585 	zval *function_name;
29586 	zend_class_entry *ce;
29587 	zend_object *object;
29588 	zend_function *fbc;
29589 	zend_execute_data *call;
29590 
29591 	SAVE_OPLINE();
29592 
29593 	if (IS_UNUSED == IS_CONST) {
29594 		/* no function found. try a static method in class */
29595 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
29596 		if (UNEXPECTED(ce == NULL)) {
29597 			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);
29598 			if (UNEXPECTED(ce == NULL)) {
29599 				ZEND_ASSERT(EG(exception));
29600 				HANDLE_EXCEPTION();
29601 			}
29602 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
29603 		}
29604 	} else if (IS_UNUSED == IS_UNUSED) {
29605 		ce = zend_fetch_class(NULL, opline->op1.num);
29606 		if (UNEXPECTED(ce == NULL)) {
29607 			ZEND_ASSERT(EG(exception));
29608 
29609 			HANDLE_EXCEPTION();
29610 		}
29611 	} else {
29612 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29613 	}
29614 
29615 	if (IS_UNUSED == IS_CONST &&
29616 	    IS_CONST == IS_CONST &&
29617 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
29618 		/* nothing to do */
29619 	} else if (IS_UNUSED != IS_CONST &&
29620 	           IS_CONST == IS_CONST &&
29621 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
29622 		/* do nothing */
29623 	} else if (IS_CONST != IS_UNUSED) {
29624 
29625 
29626 		function_name = EX_CONSTANT(opline->op2);
29627 		if (IS_CONST != IS_CONST) {
29628 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
29629 				do {
29630 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
29631 						function_name = Z_REFVAL_P(function_name);
29632 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
29633 							break;
29634 						}
29635 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
29636 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
29637 						if (UNEXPECTED(EG(exception) != NULL)) {
29638 							HANDLE_EXCEPTION();
29639 						}
29640 					}
29641 					zend_throw_error(NULL, "Function name must be a string");
29642 
29643 					HANDLE_EXCEPTION();
29644 				} while (0);
29645  			}
29646 		}
29647 
29648 		if (ce->get_static_method) {
29649 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
29650 		} else {
29651 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
29652 		}
29653 		if (UNEXPECTED(fbc == NULL)) {
29654 			if (EXPECTED(!EG(exception))) {
29655 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
29656 			}
29657 
29658 			HANDLE_EXCEPTION();
29659 		}
29660 		if (IS_CONST == IS_CONST &&
29661 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
29662 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
29663 			if (IS_UNUSED == IS_CONST) {
29664 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
29665 			} else {
29666 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
29667 			}
29668 		}
29669 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
29670 			init_func_run_time_cache(&fbc->op_array);
29671 		}
29672 		if (IS_CONST != IS_CONST) {
29673 
29674 		}
29675 	} else {
29676 		if (UNEXPECTED(ce->constructor == NULL)) {
29677 			zend_throw_error(NULL, "Cannot call constructor");
29678 			HANDLE_EXCEPTION();
29679 		}
29680 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
29681 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
29682 			HANDLE_EXCEPTION();
29683 		}
29684 		fbc = ce->constructor;
29685 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
29686 			init_func_run_time_cache(&fbc->op_array);
29687 		}
29688 	}
29689 
29690 	object = NULL;
29691 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
29692 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
29693 			object = Z_OBJ(EX(This));
29694 			ce = object->ce;
29695 		} else {
29696 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
29697 				/* Allowed for PHP 4 compatibility. */
29698 				zend_error(
29699 					E_DEPRECATED,
29700 					"Non-static method %s::%s() should not be called statically",
29701 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
29702 				if (UNEXPECTED(EG(exception) != NULL)) {
29703 					HANDLE_EXCEPTION();
29704 				}
29705 			} else {
29706 				/* An internal function assumes $this is present and won't check that.
29707 				 * So PHP would crash by allowing the call. */
29708 				zend_throw_error(
29709 					zend_ce_error,
29710 					"Non-static method %s::%s() cannot be called statically",
29711 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
29712 				HANDLE_EXCEPTION();
29713 			}
29714 		}
29715 	}
29716 
29717 	if (IS_UNUSED == IS_UNUSED) {
29718 		/* previous opcode is ZEND_FETCH_CLASS */
29719 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
29720 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
29721 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
29722 				ce = Z_OBJCE(EX(This));
29723 			} else {
29724 				ce = Z_CE(EX(This));
29725 			}
29726 		}
29727 	}
29728 
29729 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
29730 		fbc, opline->extended_value, ce, object);
29731 	call->prev_execute_data = EX(call);
29732 	EX(call) = call;
29733 
29734 	ZEND_VM_NEXT_OPCODE();
29735 }
29736 
29737 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29738 {
29739 	USE_OPLINE
29740 	zend_constant *c;
29741 
29742 	SAVE_OPLINE();
29743 
29744 	if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
29745 		c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
29746 	} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
29747 		if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
29748 			char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
29749 			if (!actual) {
29750 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(EX_CONSTANT(opline->op2)));
29751 			} else {
29752 				actual++;
29753 				ZVAL_STRINGL(EX_VAR(opline->result.var),
29754 						actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
29755 			}
29756 			/* non-qualified constant - allow text substitution */
29757 			zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
29758 					Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
29759 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29760 		} else {
29761 			zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
29762 			HANDLE_EXCEPTION();
29763 		}
29764 	} else {
29765 		CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), c);
29766 	}
29767 
29768 #ifdef ZTS
29769 	if (c->flags & CONST_PERSISTENT) {
29770 		ZVAL_DUP(EX_VAR(opline->result.var), &c->value);
29771 	} else {
29772 		ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
29773 	}
29774 #else
29775 	ZVAL_COPY(EX_VAR(opline->result.var), &c->value);
29776 #endif
29777 
29778 	ZEND_VM_NEXT_OPCODE();
29779 }
29780 
29781 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29782 {
29783 	zend_class_entry *ce, *scope;
29784 	zend_class_constant *c;
29785 	zval *value;
29786 	USE_OPLINE
29787 
29788 	SAVE_OPLINE();
29789 
29790 	do {
29791 		if (IS_UNUSED == IS_CONST) {
29792 			if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
29793 				value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
29794 #ifdef ZTS
29795 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
29796 #endif
29797 				break;
29798 			} else if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))))) {
29799 				ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
29800 			} else {
29801 				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);
29802 				if (UNEXPECTED(ce == NULL)) {
29803 					ZEND_ASSERT(EG(exception));
29804 					HANDLE_EXCEPTION();
29805 				}
29806 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
29807 			}
29808 		} else {
29809 			if (IS_UNUSED == IS_UNUSED) {
29810 				ce = zend_fetch_class(NULL, opline->op1.num);
29811 				if (UNEXPECTED(ce == NULL)) {
29812 					ZEND_ASSERT(EG(exception));
29813 					HANDLE_EXCEPTION();
29814 				}
29815 			} else {
29816 				ce = Z_CE_P(EX_VAR(opline->op1.var));
29817 			}
29818 			if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
29819 				break;
29820 			}
29821 		}
29822 
29823 		if (EXPECTED((c = zend_hash_find_ptr(&ce->constants_table, Z_STR_P(EX_CONSTANT(opline->op2)))) != NULL)) {
29824 			scope = EX(func)->op_array.scope;
29825 			if (!zend_verify_const_access(c, scope)) {
29826 				zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
29827 				HANDLE_EXCEPTION();
29828 			}
29829 			value = &c->value;
29830 			if (Z_CONSTANT_P(value)) {
29831 				zval_update_constant_ex(value, c->ce);
29832 				if (UNEXPECTED(EG(exception) != NULL)) {
29833 					HANDLE_EXCEPTION();
29834 				}
29835 			}
29836 			if (IS_UNUSED == IS_CONST) {
29837 				CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), value);
29838 			} else {
29839 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce, value);
29840 			}
29841 		} else {
29842 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
29843 			HANDLE_EXCEPTION();
29844 		}
29845 	} while (0);
29846 
29847 #ifdef ZTS
29848 	if (ce->type == ZEND_INTERNAL_CLASS) {
29849 		ZVAL_DUP(EX_VAR(opline->result.var), value);
29850 	} else {
29851 		ZVAL_COPY(EX_VAR(opline->result.var), value);
29852 	}
29853 #else
29854 	ZVAL_COPY(EX_VAR(opline->result.var), value);
29855 #endif
29856 
29857 	ZEND_VM_NEXT_OPCODE();
29858 }
29859 
29860 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29861 {
29862 	zval *array;
29863 	uint32_t size;
29864 	USE_OPLINE
29865 
29866 	array = EX_VAR(opline->result.var);
29867 	if (IS_UNUSED != IS_UNUSED) {
29868 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
29869 	} else {
29870 		size = 0;
29871 	}
29872 	ZVAL_NEW_ARR(array);
29873 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
29874 
29875 	if (IS_UNUSED != IS_UNUSED) {
29876 		/* Explicitly initialize array as not-packed if flag is set */
29877 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
29878 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
29879 		}
29880 	}
29881 
29882 	if (IS_UNUSED == IS_UNUSED) {
29883 		ZEND_VM_NEXT_OPCODE();
29884 #if 0 || (IS_UNUSED != IS_UNUSED)
29885 	} else {
29886 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29887 #endif
29888 	}
29889 }
29890 
29891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29892 {
29893 	USE_OPLINE
29894 
29895 	zval *container;
29896 	zval *offset;
29897 
29898 	SAVE_OPLINE();
29899 	container = _get_obj_zval_ptr_unused(execute_data);
29900 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
29901 		zend_throw_error(NULL, "Using $this when not in object context");
29902 
29903 		HANDLE_EXCEPTION();
29904 	}
29905 	offset = EX_CONSTANT(opline->op2);
29906 
29907 	do {
29908 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
29909 			if (Z_ISREF_P(container)) {
29910 				container = Z_REFVAL_P(container);
29911 				if (Z_TYPE_P(container) != IS_OBJECT) {
29912 					break;
29913 				}
29914 			} else {
29915 				break;
29916 			}
29917 		}
29918 		if (Z_OBJ_HT_P(container)->unset_property) {
29919 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
29920 		} else {
29921 			zend_error(E_NOTICE, "Trying to unset property of non-object");
29922 		}
29923 	} while (0);
29924 
29925 
29926 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29927 }
29928 
29929 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29930 {
29931 	USE_OPLINE
29932 
29933 	zval *container;
29934 	int result;
29935 	zval *offset;
29936 
29937 	SAVE_OPLINE();
29938 	container = _get_obj_zval_ptr_unused(execute_data);
29939 
29940 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
29941 		zend_throw_error(NULL, "Using $this when not in object context");
29942 
29943 		HANDLE_EXCEPTION();
29944 	}
29945 
29946 	offset = EX_CONSTANT(opline->op2);
29947 
29948 	if (IS_UNUSED == IS_CONST ||
29949 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
29950 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
29951 			container = Z_REFVAL_P(container);
29952 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
29953 				goto isset_no_object;
29954 			}
29955 		} else {
29956 			goto isset_no_object;
29957 		}
29958 	}
29959 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
29960 		zend_error(E_NOTICE, "Trying to check property of non-object");
29961 isset_no_object:
29962 		result = ((opline->extended_value & ZEND_ISSET) == 0);
29963 	} else {
29964 		result =
29965 			((opline->extended_value & ZEND_ISSET) == 0) ^
29966 			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));
29967 	}
29968 
29969 
29970 	ZEND_VM_SMART_BRANCH(result, 1);
29971 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
29972 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29973 }
29974 
29975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29976 {
29977 	USE_OPLINE
29978 
29979 	zend_generator *generator = zend_get_running_generator(execute_data);
29980 
29981 	SAVE_OPLINE();
29982 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
29983 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
29984 
29985 
29986 		HANDLE_EXCEPTION();
29987 	}
29988 
29989 	/* Destroy the previously yielded value */
29990 	zval_ptr_dtor(&generator->value);
29991 
29992 	/* Destroy the previously yielded key */
29993 	zval_ptr_dtor(&generator->key);
29994 
29995 	/* Set the new yielded value */
29996 	if (IS_UNUSED != IS_UNUSED) {
29997 
29998 
29999 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30000 			/* Constants and temporary variables aren't yieldable by reference,
30001 			 * but we still allow them with a notice. */
30002 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
30003 				zval *value;
30004 
30005 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30006 
30007 				value = NULL;
30008 				ZVAL_COPY_VALUE(&generator->value, value);
30009 				if (IS_UNUSED == IS_CONST) {
30010 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30011 						Z_ADDREF(generator->value);
30012 					}
30013 				}
30014 			} else {
30015 				zval *value_ptr = NULL;
30016 
30017 				/* If a function call result is yielded and the function did
30018 				 * not return by reference we throw a notice. */
30019 				if (IS_UNUSED == IS_VAR &&
30020 				    (value_ptr == &EG(uninitialized_zval) ||
30021 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
30022 				      !Z_ISREF_P(value_ptr)))) {
30023 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30024 				} else {
30025 					ZVAL_MAKE_REF(value_ptr);
30026 				}
30027 				ZVAL_COPY(&generator->value, value_ptr);
30028 
30029 			}
30030 		} else {
30031 			zval *value = NULL;
30032 
30033 			/* Consts, temporary variables and references need copying */
30034 			if (IS_UNUSED == IS_CONST) {
30035 				ZVAL_COPY_VALUE(&generator->value, value);
30036 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30037 					Z_ADDREF(generator->value);
30038 				}
30039 			} else if (IS_UNUSED == IS_TMP_VAR) {
30040 				ZVAL_COPY_VALUE(&generator->value, value);
30041             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30042 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30043 
30044 			} else {
30045 				ZVAL_COPY_VALUE(&generator->value, value);
30046 				if (IS_UNUSED == IS_CV) {
30047 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30048 				}
30049 			}
30050 		}
30051 	} else {
30052 		/* If no value was specified yield null */
30053 		ZVAL_NULL(&generator->value);
30054 	}
30055 
30056 	/* Set the new yielded key */
30057 	if (IS_CONST != IS_UNUSED) {
30058 
30059 		zval *key = EX_CONSTANT(opline->op2);
30060 
30061 		/* Consts, temporary variables and references need copying */
30062 		if (IS_CONST == IS_CONST) {
30063 			ZVAL_COPY_VALUE(&generator->key, key);
30064 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
30065 				Z_ADDREF(generator->key);
30066 			}
30067 		} else if (IS_CONST == IS_TMP_VAR) {
30068 			ZVAL_COPY_VALUE(&generator->key, key);
30069 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
30070 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
30071 
30072 		} else {
30073 			ZVAL_COPY_VALUE(&generator->key, key);
30074 			if (IS_CONST == IS_CV) {
30075 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
30076 			}
30077 		}
30078 
30079 		if (Z_TYPE(generator->key) == IS_LONG
30080 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30081 		) {
30082 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30083 		}
30084 	} else {
30085 		/* If no key was specified we use auto-increment keys */
30086 		generator->largest_used_integer_key++;
30087 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30088 	}
30089 
30090 	if (RETURN_VALUE_USED(opline)) {
30091 		/* If the return value of yield is used set the send
30092 		 * target and initialize it to NULL */
30093 		generator->send_target = EX_VAR(opline->result.var);
30094 		ZVAL_NULL(generator->send_target);
30095 	} else {
30096 		generator->send_target = NULL;
30097 	}
30098 
30099 	/* We increment to the next op, so we are at the correct position when the
30100 	 * generator is resumed. */
30101 	ZEND_VM_INC_OPCODE();
30102 
30103 	/* The GOTO VM uses a local opline variable. We need to set the opline
30104 	 * variable in execute_data so we don't resume at an old position. */
30105 	SAVE_OPLINE();
30106 
30107 	ZEND_VM_RETURN();
30108 }
30109 
30110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30111 {
30112 	USE_OPLINE
30113 
30114 	zend_generator *generator = zend_get_running_generator(execute_data);
30115 
30116 	SAVE_OPLINE();
30117 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30118 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
30119 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
30120 
30121 		HANDLE_EXCEPTION();
30122 	}
30123 
30124 	/* Destroy the previously yielded value */
30125 	zval_ptr_dtor(&generator->value);
30126 
30127 	/* Destroy the previously yielded key */
30128 	zval_ptr_dtor(&generator->key);
30129 
30130 	/* Set the new yielded value */
30131 	if (IS_UNUSED != IS_UNUSED) {
30132 
30133 
30134 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30135 			/* Constants and temporary variables aren't yieldable by reference,
30136 			 * but we still allow them with a notice. */
30137 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
30138 				zval *value;
30139 
30140 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30141 
30142 				value = NULL;
30143 				ZVAL_COPY_VALUE(&generator->value, value);
30144 				if (IS_UNUSED == IS_CONST) {
30145 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30146 						Z_ADDREF(generator->value);
30147 					}
30148 				}
30149 			} else {
30150 				zval *value_ptr = NULL;
30151 
30152 				/* If a function call result is yielded and the function did
30153 				 * not return by reference we throw a notice. */
30154 				if (IS_UNUSED == IS_VAR &&
30155 				    (value_ptr == &EG(uninitialized_zval) ||
30156 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
30157 				      !Z_ISREF_P(value_ptr)))) {
30158 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30159 				} else {
30160 					ZVAL_MAKE_REF(value_ptr);
30161 				}
30162 				ZVAL_COPY(&generator->value, value_ptr);
30163 
30164 			}
30165 		} else {
30166 			zval *value = NULL;
30167 
30168 			/* Consts, temporary variables and references need copying */
30169 			if (IS_UNUSED == IS_CONST) {
30170 				ZVAL_COPY_VALUE(&generator->value, value);
30171 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30172 					Z_ADDREF(generator->value);
30173 				}
30174 			} else if (IS_UNUSED == IS_TMP_VAR) {
30175 				ZVAL_COPY_VALUE(&generator->value, value);
30176             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30177 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30178 
30179 			} else {
30180 				ZVAL_COPY_VALUE(&generator->value, value);
30181 				if (IS_UNUSED == IS_CV) {
30182 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30183 				}
30184 			}
30185 		}
30186 	} else {
30187 		/* If no value was specified yield null */
30188 		ZVAL_NULL(&generator->value);
30189 	}
30190 
30191 	/* Set the new yielded key */
30192 	if (IS_TMP_VAR != IS_UNUSED) {
30193 		zend_free_op free_op2;
30194 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
30195 
30196 		/* Consts, temporary variables and references need copying */
30197 		if (IS_TMP_VAR == IS_CONST) {
30198 			ZVAL_COPY_VALUE(&generator->key, key);
30199 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
30200 				Z_ADDREF(generator->key);
30201 			}
30202 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
30203 			ZVAL_COPY_VALUE(&generator->key, key);
30204 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
30205 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
30206 
30207 		} else {
30208 			ZVAL_COPY_VALUE(&generator->key, key);
30209 			if (IS_TMP_VAR == IS_CV) {
30210 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
30211 			}
30212 		}
30213 
30214 		if (Z_TYPE(generator->key) == IS_LONG
30215 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30216 		) {
30217 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30218 		}
30219 	} else {
30220 		/* If no key was specified we use auto-increment keys */
30221 		generator->largest_used_integer_key++;
30222 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30223 	}
30224 
30225 	if (RETURN_VALUE_USED(opline)) {
30226 		/* If the return value of yield is used set the send
30227 		 * target and initialize it to NULL */
30228 		generator->send_target = EX_VAR(opline->result.var);
30229 		ZVAL_NULL(generator->send_target);
30230 	} else {
30231 		generator->send_target = NULL;
30232 	}
30233 
30234 	/* We increment to the next op, so we are at the correct position when the
30235 	 * generator is resumed. */
30236 	ZEND_VM_INC_OPCODE();
30237 
30238 	/* The GOTO VM uses a local opline variable. We need to set the opline
30239 	 * variable in execute_data so we don't resume at an old position. */
30240 	SAVE_OPLINE();
30241 
30242 	ZEND_VM_RETURN();
30243 }
30244 
30245 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30246 {
30247 	USE_OPLINE
30248 
30249 	zend_generator *generator = zend_get_running_generator(execute_data);
30250 
30251 	SAVE_OPLINE();
30252 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30253 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
30254 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
30255 
30256 		HANDLE_EXCEPTION();
30257 	}
30258 
30259 	/* Destroy the previously yielded value */
30260 	zval_ptr_dtor(&generator->value);
30261 
30262 	/* Destroy the previously yielded key */
30263 	zval_ptr_dtor(&generator->key);
30264 
30265 	/* Set the new yielded value */
30266 	if (IS_UNUSED != IS_UNUSED) {
30267 
30268 
30269 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30270 			/* Constants and temporary variables aren't yieldable by reference,
30271 			 * but we still allow them with a notice. */
30272 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
30273 				zval *value;
30274 
30275 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30276 
30277 				value = NULL;
30278 				ZVAL_COPY_VALUE(&generator->value, value);
30279 				if (IS_UNUSED == IS_CONST) {
30280 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30281 						Z_ADDREF(generator->value);
30282 					}
30283 				}
30284 			} else {
30285 				zval *value_ptr = NULL;
30286 
30287 				/* If a function call result is yielded and the function did
30288 				 * not return by reference we throw a notice. */
30289 				if (IS_UNUSED == IS_VAR &&
30290 				    (value_ptr == &EG(uninitialized_zval) ||
30291 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
30292 				      !Z_ISREF_P(value_ptr)))) {
30293 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30294 				} else {
30295 					ZVAL_MAKE_REF(value_ptr);
30296 				}
30297 				ZVAL_COPY(&generator->value, value_ptr);
30298 
30299 			}
30300 		} else {
30301 			zval *value = NULL;
30302 
30303 			/* Consts, temporary variables and references need copying */
30304 			if (IS_UNUSED == IS_CONST) {
30305 				ZVAL_COPY_VALUE(&generator->value, value);
30306 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30307 					Z_ADDREF(generator->value);
30308 				}
30309 			} else if (IS_UNUSED == IS_TMP_VAR) {
30310 				ZVAL_COPY_VALUE(&generator->value, value);
30311             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30312 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30313 
30314 			} else {
30315 				ZVAL_COPY_VALUE(&generator->value, value);
30316 				if (IS_UNUSED == IS_CV) {
30317 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30318 				}
30319 			}
30320 		}
30321 	} else {
30322 		/* If no value was specified yield null */
30323 		ZVAL_NULL(&generator->value);
30324 	}
30325 
30326 	/* Set the new yielded key */
30327 	if (IS_VAR != IS_UNUSED) {
30328 		zend_free_op free_op2;
30329 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
30330 
30331 		/* Consts, temporary variables and references need copying */
30332 		if (IS_VAR == IS_CONST) {
30333 			ZVAL_COPY_VALUE(&generator->key, key);
30334 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
30335 				Z_ADDREF(generator->key);
30336 			}
30337 		} else if (IS_VAR == IS_TMP_VAR) {
30338 			ZVAL_COPY_VALUE(&generator->key, key);
30339 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
30340 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
30341 			zval_ptr_dtor_nogc(free_op2);
30342 		} else {
30343 			ZVAL_COPY_VALUE(&generator->key, key);
30344 			if (IS_VAR == IS_CV) {
30345 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
30346 			}
30347 		}
30348 
30349 		if (Z_TYPE(generator->key) == IS_LONG
30350 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30351 		) {
30352 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30353 		}
30354 	} else {
30355 		/* If no key was specified we use auto-increment keys */
30356 		generator->largest_used_integer_key++;
30357 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30358 	}
30359 
30360 	if (RETURN_VALUE_USED(opline)) {
30361 		/* If the return value of yield is used set the send
30362 		 * target and initialize it to NULL */
30363 		generator->send_target = EX_VAR(opline->result.var);
30364 		ZVAL_NULL(generator->send_target);
30365 	} else {
30366 		generator->send_target = NULL;
30367 	}
30368 
30369 	/* We increment to the next op, so we are at the correct position when the
30370 	 * generator is resumed. */
30371 	ZEND_VM_INC_OPCODE();
30372 
30373 	/* The GOTO VM uses a local opline variable. We need to set the opline
30374 	 * variable in execute_data so we don't resume at an old position. */
30375 	SAVE_OPLINE();
30376 
30377 	ZEND_VM_RETURN();
30378 }
30379 
30380 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30381 {
30382 	USE_OPLINE
30383 	zval *function_name;
30384 	zend_class_entry *ce;
30385 	zend_object *object;
30386 	zend_function *fbc;
30387 	zend_execute_data *call;
30388 
30389 	SAVE_OPLINE();
30390 
30391 	if (IS_UNUSED == IS_CONST) {
30392 		/* no function found. try a static method in class */
30393 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
30394 		if (UNEXPECTED(ce == NULL)) {
30395 			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);
30396 			if (UNEXPECTED(ce == NULL)) {
30397 				ZEND_ASSERT(EG(exception));
30398 				HANDLE_EXCEPTION();
30399 			}
30400 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
30401 		}
30402 	} else if (IS_UNUSED == IS_UNUSED) {
30403 		ce = zend_fetch_class(NULL, opline->op1.num);
30404 		if (UNEXPECTED(ce == NULL)) {
30405 			ZEND_ASSERT(EG(exception));
30406 
30407 			HANDLE_EXCEPTION();
30408 		}
30409 	} else {
30410 		ce = Z_CE_P(EX_VAR(opline->op1.var));
30411 	}
30412 
30413 	if (IS_UNUSED == IS_CONST &&
30414 	    IS_UNUSED == IS_CONST &&
30415 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
30416 		/* nothing to do */
30417 	} else if (IS_UNUSED != IS_CONST &&
30418 	           IS_UNUSED == IS_CONST &&
30419 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
30420 		/* do nothing */
30421 	} else if (IS_UNUSED != IS_UNUSED) {
30422 
30423 
30424 		function_name = NULL;
30425 		if (IS_UNUSED != IS_CONST) {
30426 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
30427 				do {
30428 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
30429 						function_name = Z_REFVAL_P(function_name);
30430 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
30431 							break;
30432 						}
30433 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
30434 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
30435 						if (UNEXPECTED(EG(exception) != NULL)) {
30436 							HANDLE_EXCEPTION();
30437 						}
30438 					}
30439 					zend_throw_error(NULL, "Function name must be a string");
30440 
30441 					HANDLE_EXCEPTION();
30442 				} while (0);
30443  			}
30444 		}
30445 
30446 		if (ce->get_static_method) {
30447 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
30448 		} else {
30449 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
30450 		}
30451 		if (UNEXPECTED(fbc == NULL)) {
30452 			if (EXPECTED(!EG(exception))) {
30453 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
30454 			}
30455 
30456 			HANDLE_EXCEPTION();
30457 		}
30458 		if (IS_UNUSED == IS_CONST &&
30459 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
30460 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
30461 			if (IS_UNUSED == IS_CONST) {
30462 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
30463 			} else {
30464 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
30465 			}
30466 		}
30467 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
30468 			init_func_run_time_cache(&fbc->op_array);
30469 		}
30470 		if (IS_UNUSED != IS_CONST) {
30471 
30472 		}
30473 	} else {
30474 		if (UNEXPECTED(ce->constructor == NULL)) {
30475 			zend_throw_error(NULL, "Cannot call constructor");
30476 			HANDLE_EXCEPTION();
30477 		}
30478 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
30479 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
30480 			HANDLE_EXCEPTION();
30481 		}
30482 		fbc = ce->constructor;
30483 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
30484 			init_func_run_time_cache(&fbc->op_array);
30485 		}
30486 	}
30487 
30488 	object = NULL;
30489 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
30490 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
30491 			object = Z_OBJ(EX(This));
30492 			ce = object->ce;
30493 		} else {
30494 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
30495 				/* Allowed for PHP 4 compatibility. */
30496 				zend_error(
30497 					E_DEPRECATED,
30498 					"Non-static method %s::%s() should not be called statically",
30499 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
30500 				if (UNEXPECTED(EG(exception) != NULL)) {
30501 					HANDLE_EXCEPTION();
30502 				}
30503 			} else {
30504 				/* An internal function assumes $this is present and won't check that.
30505 				 * So PHP would crash by allowing the call. */
30506 				zend_throw_error(
30507 					zend_ce_error,
30508 					"Non-static method %s::%s() cannot be called statically",
30509 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
30510 				HANDLE_EXCEPTION();
30511 			}
30512 		}
30513 	}
30514 
30515 	if (IS_UNUSED == IS_UNUSED) {
30516 		/* previous opcode is ZEND_FETCH_CLASS */
30517 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
30518 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
30519 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
30520 				ce = Z_OBJCE(EX(This));
30521 			} else {
30522 				ce = Z_CE(EX(This));
30523 			}
30524 		}
30525 	}
30526 
30527 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
30528 		fbc, opline->extended_value, ce, object);
30529 	call->prev_execute_data = EX(call);
30530 	EX(call) = call;
30531 
30532 	ZEND_VM_NEXT_OPCODE();
30533 }
30534 
30535 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30536 {
30537 	USE_OPLINE
30538 
30539 	SAVE_OPLINE();
30540 	if (IS_UNUSED == IS_UNUSED) {
30541 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
30542 	} else {
30543 /* prevents "undefined variable opline" errors */
30544 #if 0 || (IS_UNUSED != IS_UNUSED)
30545 		zval *retval_ref, *retval_ptr;
30546 
30547 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
30548 
30549 		retval_ref = retval_ptr = NULL;
30550 
30551 		if (IS_UNUSED == IS_CONST) {
30552 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
30553 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
30554 		} else if (IS_UNUSED == IS_VAR) {
30555 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
30556 				retval_ptr = Z_INDIRECT_P(retval_ptr);
30557 			}
30558 			ZVAL_DEREF(retval_ptr);
30559 		} else if (IS_UNUSED == IS_CV) {
30560 			ZVAL_DEREF(retval_ptr);
30561 		}
30562 
30563 		if (UNEXPECTED(!ret_info->class_name
30564 			&& ret_info->type_hint != IS_CALLABLE
30565 			&& ret_info->type_hint != IS_ITERABLE
30566 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
30567 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
30568 			&& retval_ref != retval_ptr)
30569 		) {
30570 			/* A cast might happen - unwrap the reference if this is a by-value return */
30571 			if (Z_REFCOUNT_P(retval_ref) == 1) {
30572 				ZVAL_UNREF(retval_ref);
30573 			} else {
30574 				Z_DELREF_P(retval_ref);
30575 				ZVAL_COPY(retval_ref, retval_ptr);
30576 			}
30577 			retval_ptr = retval_ref;
30578 		}
30579 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
30580 
30581 		if (UNEXPECTED(EG(exception) != NULL)) {
30582 			if (IS_UNUSED == IS_CONST) {
30583 				zval_ptr_dtor_nogc(retval_ptr);
30584 			}
30585 		}
30586 #endif
30587 	}
30588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30589 }
30590 
30591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30592 {
30593 	zval *array;
30594 	uint32_t size;
30595 	USE_OPLINE
30596 
30597 	array = EX_VAR(opline->result.var);
30598 	if (IS_UNUSED != IS_UNUSED) {
30599 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
30600 	} else {
30601 		size = 0;
30602 	}
30603 	ZVAL_NEW_ARR(array);
30604 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
30605 
30606 	if (IS_UNUSED != IS_UNUSED) {
30607 		/* Explicitly initialize array as not-packed if flag is set */
30608 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
30609 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
30610 		}
30611 	}
30612 
30613 	if (IS_UNUSED == IS_UNUSED) {
30614 		ZEND_VM_NEXT_OPCODE();
30615 #if 0 || (IS_UNUSED != IS_UNUSED)
30616 	} else {
30617 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30618 #endif
30619 	}
30620 }
30621 
30622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30623 {
30624 	USE_OPLINE
30625 
30626 	zend_generator *generator = zend_get_running_generator(execute_data);
30627 
30628 	SAVE_OPLINE();
30629 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30630 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
30631 
30632 
30633 		HANDLE_EXCEPTION();
30634 	}
30635 
30636 	/* Destroy the previously yielded value */
30637 	zval_ptr_dtor(&generator->value);
30638 
30639 	/* Destroy the previously yielded key */
30640 	zval_ptr_dtor(&generator->key);
30641 
30642 	/* Set the new yielded value */
30643 	if (IS_UNUSED != IS_UNUSED) {
30644 
30645 
30646 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30647 			/* Constants and temporary variables aren't yieldable by reference,
30648 			 * but we still allow them with a notice. */
30649 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
30650 				zval *value;
30651 
30652 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30653 
30654 				value = NULL;
30655 				ZVAL_COPY_VALUE(&generator->value, value);
30656 				if (IS_UNUSED == IS_CONST) {
30657 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30658 						Z_ADDREF(generator->value);
30659 					}
30660 				}
30661 			} else {
30662 				zval *value_ptr = NULL;
30663 
30664 				/* If a function call result is yielded and the function did
30665 				 * not return by reference we throw a notice. */
30666 				if (IS_UNUSED == IS_VAR &&
30667 				    (value_ptr == &EG(uninitialized_zval) ||
30668 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
30669 				      !Z_ISREF_P(value_ptr)))) {
30670 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30671 				} else {
30672 					ZVAL_MAKE_REF(value_ptr);
30673 				}
30674 				ZVAL_COPY(&generator->value, value_ptr);
30675 
30676 			}
30677 		} else {
30678 			zval *value = NULL;
30679 
30680 			/* Consts, temporary variables and references need copying */
30681 			if (IS_UNUSED == IS_CONST) {
30682 				ZVAL_COPY_VALUE(&generator->value, value);
30683 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30684 					Z_ADDREF(generator->value);
30685 				}
30686 			} else if (IS_UNUSED == IS_TMP_VAR) {
30687 				ZVAL_COPY_VALUE(&generator->value, value);
30688             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30689 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30690 
30691 			} else {
30692 				ZVAL_COPY_VALUE(&generator->value, value);
30693 				if (IS_UNUSED == IS_CV) {
30694 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30695 				}
30696 			}
30697 		}
30698 	} else {
30699 		/* If no value was specified yield null */
30700 		ZVAL_NULL(&generator->value);
30701 	}
30702 
30703 	/* Set the new yielded key */
30704 	if (IS_UNUSED != IS_UNUSED) {
30705 
30706 		zval *key = NULL;
30707 
30708 		/* Consts, temporary variables and references need copying */
30709 		if (IS_UNUSED == IS_CONST) {
30710 			ZVAL_COPY_VALUE(&generator->key, key);
30711 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
30712 				Z_ADDREF(generator->key);
30713 			}
30714 		} else if (IS_UNUSED == IS_TMP_VAR) {
30715 			ZVAL_COPY_VALUE(&generator->key, key);
30716 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
30717 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
30718 
30719 		} else {
30720 			ZVAL_COPY_VALUE(&generator->key, key);
30721 			if (IS_UNUSED == IS_CV) {
30722 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
30723 			}
30724 		}
30725 
30726 		if (Z_TYPE(generator->key) == IS_LONG
30727 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30728 		) {
30729 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30730 		}
30731 	} else {
30732 		/* If no key was specified we use auto-increment keys */
30733 		generator->largest_used_integer_key++;
30734 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30735 	}
30736 
30737 	if (RETURN_VALUE_USED(opline)) {
30738 		/* If the return value of yield is used set the send
30739 		 * target and initialize it to NULL */
30740 		generator->send_target = EX_VAR(opline->result.var);
30741 		ZVAL_NULL(generator->send_target);
30742 	} else {
30743 		generator->send_target = NULL;
30744 	}
30745 
30746 	/* We increment to the next op, so we are at the correct position when the
30747 	 * generator is resumed. */
30748 	ZEND_VM_INC_OPCODE();
30749 
30750 	/* The GOTO VM uses a local opline variable. We need to set the opline
30751 	 * variable in execute_data so we don't resume at an old position. */
30752 	SAVE_OPLINE();
30753 
30754 	ZEND_VM_RETURN();
30755 }
30756 
30757 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30758 {
30759 	USE_OPLINE
30760 
30761 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
30762 		zval *result = EX_VAR(opline->result.var);
30763 
30764 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
30765 		Z_ADDREF_P(result);
30766 		ZEND_VM_NEXT_OPCODE();
30767 	} else {
30768 		SAVE_OPLINE();
30769 		zend_throw_error(NULL, "Using $this when not in object context");
30770 		HANDLE_EXCEPTION();
30771 	}
30772 }
30773 
30774 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30775 {
30776 	USE_OPLINE
30777 
30778 	ZVAL_BOOL(EX_VAR(opline->result.var),
30779 		(opline->extended_value & ZEND_ISSET) ?
30780 			 (Z_TYPE(EX(This)) == IS_OBJECT) :
30781 			 (Z_TYPE(EX(This)) != IS_OBJECT));
30782 	ZEND_VM_NEXT_OPCODE();
30783 }
30784 
30785 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)
30786 {
30787 	USE_OPLINE
30788 	zend_free_op free_op_data1;
30789 	zval *object;
30790 	zval *property;
30791 	zval *value;
30792 	zval *zptr;
30793 
30794 	SAVE_OPLINE();
30795 	object = _get_obj_zval_ptr_unused(execute_data);
30796 
30797 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30798 		zend_throw_error(NULL, "Using $this when not in object context");
30799 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
30800 
30801 		HANDLE_EXCEPTION();
30802 	}
30803 
30804 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
30805 
30806 	do {
30807 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
30808 
30809 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30810 			ZVAL_DEREF(object);
30811 			if (UNEXPECTED(!make_real_object(object))) {
30812 				zend_error(E_WARNING, "Attempt to assign property of non-object");
30813 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30814 					ZVAL_NULL(EX_VAR(opline->result.var));
30815 				}
30816 				break;
30817 			}
30818 		}
30819 
30820 		/* here we are sure we are dealing with an object */
30821 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
30822 			&& 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)) {
30823 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30824 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30825 					ZVAL_NULL(EX_VAR(opline->result.var));
30826 				}
30827 			} else {
30828 				ZVAL_DEREF(zptr);
30829 				SEPARATE_ZVAL_NOREF(zptr);
30830 
30831 				binary_op(zptr, zptr, value);
30832 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30833 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
30834 				}
30835 			}
30836 		} else {
30837 			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));
30838 		}
30839 	} while (0);
30840 
30841 	FREE_OP(free_op_data1);
30842 
30843 
30844 	/* assign_obj has two opcodes! */
30845 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30846 }
30847 
30848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30849 {
30850 #if 0 || (IS_CV != IS_UNUSED)
30851 	USE_OPLINE
30852 
30853 # if 0 || (IS_UNUSED != IS_UNUSED)
30854 	if (EXPECTED(0)) {
30855 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30856 	}
30857 	if (EXPECTED(0)) {
30858 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30859 	}
30860 # endif
30861 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30862 #else
30863 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30864 #endif
30865 }
30866 
30867 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30868 {
30869 #if 0 || (IS_CV != IS_UNUSED)
30870 	USE_OPLINE
30871 
30872 # if 0 || (IS_UNUSED != IS_UNUSED)
30873 	if (EXPECTED(0)) {
30874 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30875 	}
30876 	if (EXPECTED(0)) {
30877 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30878 	}
30879 # endif
30880 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30881 #else
30882 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30883 #endif
30884 }
30885 
30886 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30887 {
30888 #if 0 || (IS_CV != IS_UNUSED)
30889 	USE_OPLINE
30890 
30891 # if 0 || (IS_UNUSED != IS_UNUSED)
30892 	if (EXPECTED(0)) {
30893 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30894 	}
30895 	if (EXPECTED(0)) {
30896 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30897 	}
30898 # endif
30899 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30900 #else
30901 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30902 #endif
30903 }
30904 
30905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30906 {
30907 #if 0 || (IS_CV != IS_UNUSED)
30908 	USE_OPLINE
30909 
30910 # if 0 || (IS_UNUSED != IS_UNUSED)
30911 	if (EXPECTED(0)) {
30912 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30913 	}
30914 	if (EXPECTED(0)) {
30915 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30916 	}
30917 # endif
30918 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30919 #else
30920 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30921 #endif
30922 }
30923 
30924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30925 {
30926 #if 0 || (IS_CV != IS_UNUSED)
30927 	USE_OPLINE
30928 
30929 # if 0 || (IS_UNUSED != IS_UNUSED)
30930 	if (EXPECTED(0)) {
30931 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30932 	}
30933 	if (EXPECTED(0)) {
30934 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30935 	}
30936 # endif
30937 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30938 #else
30939 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30940 #endif
30941 }
30942 
30943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30944 {
30945 #if 0 || (IS_CV != IS_UNUSED)
30946 	USE_OPLINE
30947 
30948 # if 0 || (IS_UNUSED != IS_UNUSED)
30949 	if (EXPECTED(0)) {
30950 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30951 	}
30952 	if (EXPECTED(0)) {
30953 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30954 	}
30955 # endif
30956 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30957 #else
30958 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30959 #endif
30960 }
30961 
30962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30963 {
30964 #if 0 || (IS_CV != IS_UNUSED)
30965 	USE_OPLINE
30966 
30967 # if 0 || (IS_UNUSED != IS_UNUSED)
30968 	if (EXPECTED(0)) {
30969 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30970 	}
30971 	if (EXPECTED(0)) {
30972 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30973 	}
30974 # endif
30975 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30976 #else
30977 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30978 #endif
30979 }
30980 
30981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30982 {
30983 #if 0 || (IS_CV != IS_UNUSED)
30984 	USE_OPLINE
30985 
30986 # if 0 || (IS_UNUSED != IS_UNUSED)
30987 	if (EXPECTED(0)) {
30988 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30989 	}
30990 	if (EXPECTED(0)) {
30991 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30992 	}
30993 # endif
30994 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30995 #else
30996 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
30997 #endif
30998 }
30999 
31000 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31001 {
31002 #if 0 || (IS_CV != IS_UNUSED)
31003 	USE_OPLINE
31004 
31005 # if 0 || (IS_UNUSED != IS_UNUSED)
31006 	if (EXPECTED(0)) {
31007 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31008 	}
31009 	if (EXPECTED(0)) {
31010 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31011 	}
31012 # endif
31013 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31014 #else
31015 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31016 #endif
31017 }
31018 
31019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31020 {
31021 #if 0 || (IS_CV != IS_UNUSED)
31022 	USE_OPLINE
31023 
31024 # if 0 || (IS_UNUSED != IS_UNUSED)
31025 	if (EXPECTED(0)) {
31026 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31027 	}
31028 	if (EXPECTED(0)) {
31029 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31030 	}
31031 # endif
31032 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31033 #else
31034 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31035 #endif
31036 }
31037 
31038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31039 {
31040 #if 0 || (IS_CV != IS_UNUSED)
31041 	USE_OPLINE
31042 
31043 # if 0 || (IS_UNUSED != IS_UNUSED)
31044 	if (EXPECTED(0)) {
31045 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31046 	}
31047 	if (EXPECTED(0)) {
31048 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31049 	}
31050 # endif
31051 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31052 #else
31053 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31054 #endif
31055 }
31056 
31057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31058 {
31059 #if 0 || (IS_CV != IS_UNUSED)
31060 	USE_OPLINE
31061 
31062 # if 0 || (IS_UNUSED != IS_UNUSED)
31063 	if (EXPECTED(0)) {
31064 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31065 	}
31066 	if (EXPECTED(0)) {
31067 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31068 	}
31069 # endif
31070 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31071 #else
31072 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31073 #endif
31074 }
31075 
31076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
31077 {
31078 	USE_OPLINE
31079 
31080 	zval *object;
31081 	zval *property;
31082 	zval *zptr;
31083 
31084 	SAVE_OPLINE();
31085 	object = _get_obj_zval_ptr_unused(execute_data);
31086 
31087 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31088 		zend_throw_error(NULL, "Using $this when not in object context");
31089 
31090 		HANDLE_EXCEPTION();
31091 	}
31092 
31093 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31094 
31095 	do {
31096 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31097 			ZVAL_DEREF(object);
31098 			if (UNEXPECTED(!make_real_object(object))) {
31099 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
31100 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31101 					ZVAL_NULL(EX_VAR(opline->result.var));
31102 				}
31103 				break;
31104 			}
31105 		}
31106 
31107 		/* here we are sure we are dealing with an object */
31108 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
31109 			&& 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)) {
31110 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31111 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31112 					ZVAL_NULL(EX_VAR(opline->result.var));
31113 				}
31114 			} else {
31115 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
31116 					if (inc) {
31117 						fast_long_increment_function(zptr);
31118 					} else {
31119 						fast_long_decrement_function(zptr);
31120 					}
31121 				} else {
31122 					ZVAL_DEREF(zptr);
31123 					SEPARATE_ZVAL_NOREF(zptr);
31124 
31125 					if (inc) {
31126 						increment_function(zptr);
31127 					} else {
31128 						decrement_function(zptr);
31129 					}
31130 				}
31131 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31132 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
31133 				}
31134 			}
31135 		} else {
31136 			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));
31137 		}
31138 	} while (0);
31139 
31140 
31141 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31142 }
31143 
31144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31145 {
31146 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31147 }
31148 
31149 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31150 {
31151 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31152 }
31153 
31154 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
31155 {
31156 	USE_OPLINE
31157 
31158 	zval *object;
31159 	zval *property;
31160 	zval *zptr;
31161 
31162 	SAVE_OPLINE();
31163 	object = _get_obj_zval_ptr_unused(execute_data);
31164 
31165 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31166 		zend_throw_error(NULL, "Using $this when not in object context");
31167 
31168 		HANDLE_EXCEPTION();
31169 	}
31170 
31171 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31172 
31173 	do {
31174 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31175 			ZVAL_DEREF(object);
31176 			if (UNEXPECTED(!make_real_object(object))) {
31177 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
31178 				ZVAL_NULL(EX_VAR(opline->result.var));
31179 				break;
31180 			}
31181 		}
31182 
31183 		/* here we are sure we are dealing with an object */
31184 
31185 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
31186 			&& 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)) {
31187 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
31188 				ZVAL_NULL(EX_VAR(opline->result.var));
31189 			} else {
31190 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
31191 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
31192 					if (inc) {
31193 						fast_long_increment_function(zptr);
31194 					} else {
31195 						fast_long_decrement_function(zptr);
31196 					}
31197 				} else {
31198 					ZVAL_DEREF(zptr);
31199 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
31200 					zval_opt_copy_ctor(zptr);
31201 					if (inc) {
31202 						increment_function(zptr);
31203 					} else {
31204 						decrement_function(zptr);
31205 					}
31206 				}
31207 			}
31208 		} else {
31209 			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));
31210 		}
31211 	} while (0);
31212 
31213 
31214 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31215 }
31216 
31217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31218 {
31219 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31220 }
31221 
31222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31223 {
31224 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
31225 }
31226 
31227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31228 {
31229 	USE_OPLINE
31230 
31231 	zval *container;
31232 
31233 	zval *offset;
31234 
31235 	SAVE_OPLINE();
31236 	container = _get_obj_zval_ptr_unused(execute_data);
31237 
31238 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31239 		zend_throw_error(NULL, "Using $this when not in object context");
31240 
31241 		HANDLE_EXCEPTION();
31242 	}
31243 
31244 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31245 
31246 	if (IS_UNUSED == IS_CONST ||
31247 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31248 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31249 			container = Z_REFVAL_P(container);
31250 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31251 				goto fetch_obj_r_no_object;
31252 			}
31253 		} else {
31254 			goto fetch_obj_r_no_object;
31255 		}
31256 	}
31257 
31258 	/* here we are sure we are dealing with an object */
31259 	do {
31260 		zend_object *zobj = Z_OBJ_P(container);
31261 		zval *retval;
31262 
31263 		if (IS_CV == IS_CONST &&
31264 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
31265 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
31266 
31267 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31268 				retval = OBJ_PROP(zobj, prop_offset);
31269 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
31270 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
31271 					break;
31272 				}
31273 			} else if (EXPECTED(zobj->properties != NULL)) {
31274 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
31275 				if (EXPECTED(retval)) {
31276 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
31277 					break;
31278 				}
31279 			}
31280 		}
31281 
31282 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
31283 fetch_obj_r_no_object:
31284 			zend_error(E_NOTICE, "Trying to get property of non-object");
31285 			ZVAL_NULL(EX_VAR(opline->result.var));
31286 		} else {
31287 			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));
31288 
31289 			if (retval != EX_VAR(opline->result.var)) {
31290 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
31291 			}
31292 		}
31293 	} while (0);
31294 
31295 
31296 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31297 }
31298 
31299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31300 {
31301 	USE_OPLINE
31302 	zend_free_op free_op1;
31303 	zval *property;
31304 	zval *container;
31305 
31306 	SAVE_OPLINE();
31307 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31308 
31309 	container = _get_obj_zval_ptr_unused(execute_data);
31310 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31311 		zend_throw_error(NULL, "Using $this when not in object context");
31312 
31313 		HANDLE_EXCEPTION();
31314 	}
31315 
31316 	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);
31317 
31318 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
31319 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
31320 	}
31321 
31322 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31323 }
31324 
31325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31326 {
31327 	USE_OPLINE
31328 	zend_free_op free_op1;
31329 	zval *property;
31330 	zval *container;
31331 
31332 	SAVE_OPLINE();
31333 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31334 	container = _get_obj_zval_ptr_unused(execute_data);
31335 
31336 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31337 		zend_throw_error(NULL, "Using $this when not in object context");
31338 
31339 		HANDLE_EXCEPTION();
31340 	}
31341 	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);
31342 
31343 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
31344 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
31345 	}
31346 
31347 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31348 }
31349 
31350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31351 {
31352 	USE_OPLINE
31353 
31354 	zval *container;
31355 
31356 	zval *offset;
31357 
31358 	SAVE_OPLINE();
31359 	container = _get_obj_zval_ptr_unused(execute_data);
31360 
31361 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31362 		zend_throw_error(NULL, "Using $this when not in object context");
31363 
31364 		HANDLE_EXCEPTION();
31365 	}
31366 
31367 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31368 
31369 	if (IS_UNUSED == IS_CONST ||
31370 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
31371 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
31372 			container = Z_REFVAL_P(container);
31373 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
31374 				goto fetch_obj_is_no_object;
31375 			}
31376 		} else {
31377 			goto fetch_obj_is_no_object;
31378 		}
31379 	}
31380 
31381 	/* here we are sure we are dealing with an object */
31382 	do {
31383 		zend_object *zobj = Z_OBJ_P(container);
31384 		zval *retval;
31385 
31386 		if (IS_CV == IS_CONST &&
31387 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
31388 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
31389 
31390 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31391 				retval = OBJ_PROP(zobj, prop_offset);
31392 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
31393 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31394 					break;
31395 				}
31396 			} else if (EXPECTED(zobj->properties != NULL)) {
31397 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
31398 				if (EXPECTED(retval)) {
31399 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
31400 					break;
31401 				}
31402 			}
31403 		}
31404 
31405 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
31406 fetch_obj_is_no_object:
31407 			ZVAL_NULL(EX_VAR(opline->result.var));
31408 		} else {
31409 
31410 			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));
31411 
31412 			if (retval != EX_VAR(opline->result.var)) {
31413 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
31414 			}
31415 		}
31416 	} while (0);
31417 
31418 
31419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31420 }
31421 
31422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31423 {
31424 	USE_OPLINE
31425 	zval *container;
31426 
31427 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
31428 		/* Behave like FETCH_OBJ_W */
31429 		zend_free_op free_op1;
31430 		zval *property;
31431 
31432 		SAVE_OPLINE();
31433 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31434 		container = _get_obj_zval_ptr_unused(execute_data);
31435 
31436 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31437 			zend_throw_error(NULL, "Using $this when not in object context");
31438 
31439 			HANDLE_EXCEPTION();
31440 		}
31441 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
31442 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
31443 
31444 
31445 			HANDLE_EXCEPTION();
31446 		}
31447 		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);
31448 
31449 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
31450 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
31451 		}
31452 
31453 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31454 	} else {
31455 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31456 	}
31457 }
31458 
31459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31460 {
31461 	USE_OPLINE
31462 	zend_free_op free_op1;
31463 	zval *container, *property;
31464 
31465 	SAVE_OPLINE();
31466 	container = _get_obj_zval_ptr_unused(execute_data);
31467 
31468 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31469 		zend_throw_error(NULL, "Using $this when not in object context");
31470 
31471 		HANDLE_EXCEPTION();
31472 	}
31473 
31474 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31475 
31476 	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);
31477 
31478 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
31479 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
31480 	}
31481 
31482 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31483 }
31484 
31485 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31486 {
31487 	USE_OPLINE
31488 
31489 	zval *object, *property_name, *value, tmp;
31490 
31491 	SAVE_OPLINE();
31492 	object = _get_obj_zval_ptr_unused(execute_data);
31493 
31494 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31495 		zend_throw_error(NULL, "Using $this when not in object context");
31496 
31497 
31498 		HANDLE_EXCEPTION();
31499 	}
31500 
31501 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31502 	value = EX_CONSTANT((opline+1)->op1);
31503 
31504 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31505 		do {
31506 			if (Z_ISREF_P(object)) {
31507 				object = Z_REFVAL_P(object);
31508 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
31509 					break;
31510 				}
31511 			}
31512 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
31513 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
31514 				zend_object *obj;
31515 
31516 				zval_ptr_dtor(object);
31517 				object_init(object);
31518 				Z_ADDREF_P(object);
31519 				obj = Z_OBJ_P(object);
31520 				zend_error(E_WARNING, "Creating default object from empty value");
31521 				if (GC_REFCOUNT(obj) == 1) {
31522 					/* the enclosing container was deleted, obj is unreferenced */
31523 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31524 						ZVAL_NULL(EX_VAR(opline->result.var));
31525 					}
31526 
31527 					OBJ_RELEASE(obj);
31528 					goto exit_assign_obj;
31529 				}
31530 				Z_DELREF_P(object);
31531 			} else {
31532 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
31533 					zend_error(E_WARNING, "Attempt to assign property of non-object");
31534 				}
31535 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31536 					ZVAL_NULL(EX_VAR(opline->result.var));
31537 				}
31538 
31539 				goto exit_assign_obj;
31540 			}
31541 		} while (0);
31542 	}
31543 
31544 	if (IS_CV == IS_CONST &&
31545 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
31546 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
31547 		zend_object *zobj = Z_OBJ_P(object);
31548 		zval *property;
31549 
31550 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31551 			property = OBJ_PROP(zobj, prop_offset);
31552 			if (Z_TYPE_P(property) != IS_UNDEF) {
31553 fast_assign_obj:
31554 				value = zend_assign_to_variable(property, value, IS_CONST);
31555 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31556 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31557 				}
31558 				goto exit_assign_obj;
31559 			}
31560 		} else {
31561 			if (EXPECTED(zobj->properties != NULL)) {
31562 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31563 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31564 						GC_REFCOUNT(zobj->properties)--;
31565 					}
31566 					zobj->properties = zend_array_dup(zobj->properties);
31567 				}
31568 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
31569 				if (property) {
31570 					goto fast_assign_obj;
31571 				}
31572 			}
31573 
31574 			if (!zobj->ce->__set) {
31575 
31576 				if (EXPECTED(zobj->properties == NULL)) {
31577 					rebuild_object_properties(zobj);
31578 				}
31579 				if (IS_CONST == IS_CONST) {
31580 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31581 						Z_ADDREF_P(value);
31582 					}
31583 				} else if (IS_CONST != IS_TMP_VAR) {
31584 					if (Z_ISREF_P(value)) {
31585 						if (IS_CONST == IS_VAR) {
31586 							zend_reference *ref = Z_REF_P(value);
31587 							if (--GC_REFCOUNT(ref) == 0) {
31588 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31589 								efree_size(ref, sizeof(zend_reference));
31590 								value = &tmp;
31591 							} else {
31592 								value = Z_REFVAL_P(value);
31593 								if (Z_REFCOUNTED_P(value)) {
31594 									Z_ADDREF_P(value);
31595 								}
31596 							}
31597 						} else {
31598 							value = Z_REFVAL_P(value);
31599 							if (Z_REFCOUNTED_P(value)) {
31600 								Z_ADDREF_P(value);
31601 							}
31602 						}
31603 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
31604 						Z_ADDREF_P(value);
31605 					}
31606 				}
31607 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
31608 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31609 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31610 				}
31611 				goto exit_assign_obj;
31612 			}
31613 		}
31614 	}
31615 
31616 	if (!Z_OBJ_HT_P(object)->write_property) {
31617 		zend_error(E_WARNING, "Attempt to assign property of non-object");
31618 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31619 			ZVAL_NULL(EX_VAR(opline->result.var));
31620 		}
31621 
31622 		goto exit_assign_obj;
31623 	}
31624 
31625 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
31626 		ZVAL_DEREF(value);
31627 	}
31628 
31629 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
31630 
31631 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
31632 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31633 	}
31634 
31635 exit_assign_obj:
31636 
31637 
31638 	/* assign_obj has two opcodes! */
31639 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31640 }
31641 
31642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31643 {
31644 	USE_OPLINE
31645 	zend_free_op free_op_data;
31646 	zval *object, *property_name, *value, tmp;
31647 
31648 	SAVE_OPLINE();
31649 	object = _get_obj_zval_ptr_unused(execute_data);
31650 
31651 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31652 		zend_throw_error(NULL, "Using $this when not in object context");
31653 
31654 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31655 		HANDLE_EXCEPTION();
31656 	}
31657 
31658 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31659 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
31660 
31661 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31662 		do {
31663 			if (Z_ISREF_P(object)) {
31664 				object = Z_REFVAL_P(object);
31665 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
31666 					break;
31667 				}
31668 			}
31669 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
31670 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
31671 				zend_object *obj;
31672 
31673 				zval_ptr_dtor(object);
31674 				object_init(object);
31675 				Z_ADDREF_P(object);
31676 				obj = Z_OBJ_P(object);
31677 				zend_error(E_WARNING, "Creating default object from empty value");
31678 				if (GC_REFCOUNT(obj) == 1) {
31679 					/* the enclosing container was deleted, obj is unreferenced */
31680 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31681 						ZVAL_NULL(EX_VAR(opline->result.var));
31682 					}
31683 					zval_ptr_dtor_nogc(free_op_data);
31684 					OBJ_RELEASE(obj);
31685 					goto exit_assign_obj;
31686 				}
31687 				Z_DELREF_P(object);
31688 			} else {
31689 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
31690 					zend_error(E_WARNING, "Attempt to assign property of non-object");
31691 				}
31692 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31693 					ZVAL_NULL(EX_VAR(opline->result.var));
31694 				}
31695 				zval_ptr_dtor_nogc(free_op_data);
31696 				goto exit_assign_obj;
31697 			}
31698 		} while (0);
31699 	}
31700 
31701 	if (IS_CV == IS_CONST &&
31702 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
31703 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
31704 		zend_object *zobj = Z_OBJ_P(object);
31705 		zval *property;
31706 
31707 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31708 			property = OBJ_PROP(zobj, prop_offset);
31709 			if (Z_TYPE_P(property) != IS_UNDEF) {
31710 fast_assign_obj:
31711 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
31712 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31713 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31714 				}
31715 				goto exit_assign_obj;
31716 			}
31717 		} else {
31718 			if (EXPECTED(zobj->properties != NULL)) {
31719 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31720 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31721 						GC_REFCOUNT(zobj->properties)--;
31722 					}
31723 					zobj->properties = zend_array_dup(zobj->properties);
31724 				}
31725 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
31726 				if (property) {
31727 					goto fast_assign_obj;
31728 				}
31729 			}
31730 
31731 			if (!zobj->ce->__set) {
31732 
31733 				if (EXPECTED(zobj->properties == NULL)) {
31734 					rebuild_object_properties(zobj);
31735 				}
31736 				if (IS_TMP_VAR == IS_CONST) {
31737 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31738 						Z_ADDREF_P(value);
31739 					}
31740 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
31741 					if (Z_ISREF_P(value)) {
31742 						if (IS_TMP_VAR == IS_VAR) {
31743 							zend_reference *ref = Z_REF_P(value);
31744 							if (--GC_REFCOUNT(ref) == 0) {
31745 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31746 								efree_size(ref, sizeof(zend_reference));
31747 								value = &tmp;
31748 							} else {
31749 								value = Z_REFVAL_P(value);
31750 								if (Z_REFCOUNTED_P(value)) {
31751 									Z_ADDREF_P(value);
31752 								}
31753 							}
31754 						} else {
31755 							value = Z_REFVAL_P(value);
31756 							if (Z_REFCOUNTED_P(value)) {
31757 								Z_ADDREF_P(value);
31758 							}
31759 						}
31760 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
31761 						Z_ADDREF_P(value);
31762 					}
31763 				}
31764 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
31765 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31766 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31767 				}
31768 				goto exit_assign_obj;
31769 			}
31770 		}
31771 	}
31772 
31773 	if (!Z_OBJ_HT_P(object)->write_property) {
31774 		zend_error(E_WARNING, "Attempt to assign property of non-object");
31775 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31776 			ZVAL_NULL(EX_VAR(opline->result.var));
31777 		}
31778 		zval_ptr_dtor_nogc(free_op_data);
31779 		goto exit_assign_obj;
31780 	}
31781 
31782 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
31783 		ZVAL_DEREF(value);
31784 	}
31785 
31786 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
31787 
31788 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
31789 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31790 	}
31791 	zval_ptr_dtor_nogc(free_op_data);
31792 exit_assign_obj:
31793 
31794 
31795 	/* assign_obj has two opcodes! */
31796 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31797 }
31798 
31799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31800 {
31801 	USE_OPLINE
31802 	zend_free_op free_op_data;
31803 	zval *object, *property_name, *value, tmp;
31804 
31805 	SAVE_OPLINE();
31806 	object = _get_obj_zval_ptr_unused(execute_data);
31807 
31808 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31809 		zend_throw_error(NULL, "Using $this when not in object context");
31810 
31811 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31812 		HANDLE_EXCEPTION();
31813 	}
31814 
31815 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31816 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
31817 
31818 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31819 		do {
31820 			if (Z_ISREF_P(object)) {
31821 				object = Z_REFVAL_P(object);
31822 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
31823 					break;
31824 				}
31825 			}
31826 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
31827 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
31828 				zend_object *obj;
31829 
31830 				zval_ptr_dtor(object);
31831 				object_init(object);
31832 				Z_ADDREF_P(object);
31833 				obj = Z_OBJ_P(object);
31834 				zend_error(E_WARNING, "Creating default object from empty value");
31835 				if (GC_REFCOUNT(obj) == 1) {
31836 					/* the enclosing container was deleted, obj is unreferenced */
31837 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31838 						ZVAL_NULL(EX_VAR(opline->result.var));
31839 					}
31840 					zval_ptr_dtor_nogc(free_op_data);
31841 					OBJ_RELEASE(obj);
31842 					goto exit_assign_obj;
31843 				}
31844 				Z_DELREF_P(object);
31845 			} else {
31846 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
31847 					zend_error(E_WARNING, "Attempt to assign property of non-object");
31848 				}
31849 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31850 					ZVAL_NULL(EX_VAR(opline->result.var));
31851 				}
31852 				zval_ptr_dtor_nogc(free_op_data);
31853 				goto exit_assign_obj;
31854 			}
31855 		} while (0);
31856 	}
31857 
31858 	if (IS_CV == IS_CONST &&
31859 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
31860 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
31861 		zend_object *zobj = Z_OBJ_P(object);
31862 		zval *property;
31863 
31864 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
31865 			property = OBJ_PROP(zobj, prop_offset);
31866 			if (Z_TYPE_P(property) != IS_UNDEF) {
31867 fast_assign_obj:
31868 				value = zend_assign_to_variable(property, value, IS_VAR);
31869 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31870 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31871 				}
31872 				goto exit_assign_obj;
31873 			}
31874 		} else {
31875 			if (EXPECTED(zobj->properties != NULL)) {
31876 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31877 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31878 						GC_REFCOUNT(zobj->properties)--;
31879 					}
31880 					zobj->properties = zend_array_dup(zobj->properties);
31881 				}
31882 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
31883 				if (property) {
31884 					goto fast_assign_obj;
31885 				}
31886 			}
31887 
31888 			if (!zobj->ce->__set) {
31889 
31890 				if (EXPECTED(zobj->properties == NULL)) {
31891 					rebuild_object_properties(zobj);
31892 				}
31893 				if (IS_VAR == IS_CONST) {
31894 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31895 						Z_ADDREF_P(value);
31896 					}
31897 				} else if (IS_VAR != IS_TMP_VAR) {
31898 					if (Z_ISREF_P(value)) {
31899 						if (IS_VAR == IS_VAR) {
31900 							zend_reference *ref = Z_REF_P(value);
31901 							if (--GC_REFCOUNT(ref) == 0) {
31902 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31903 								efree_size(ref, sizeof(zend_reference));
31904 								value = &tmp;
31905 							} else {
31906 								value = Z_REFVAL_P(value);
31907 								if (Z_REFCOUNTED_P(value)) {
31908 									Z_ADDREF_P(value);
31909 								}
31910 							}
31911 						} else {
31912 							value = Z_REFVAL_P(value);
31913 							if (Z_REFCOUNTED_P(value)) {
31914 								Z_ADDREF_P(value);
31915 							}
31916 						}
31917 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
31918 						Z_ADDREF_P(value);
31919 					}
31920 				}
31921 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
31922 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31923 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31924 				}
31925 				goto exit_assign_obj;
31926 			}
31927 		}
31928 	}
31929 
31930 	if (!Z_OBJ_HT_P(object)->write_property) {
31931 		zend_error(E_WARNING, "Attempt to assign property of non-object");
31932 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31933 			ZVAL_NULL(EX_VAR(opline->result.var));
31934 		}
31935 		zval_ptr_dtor_nogc(free_op_data);
31936 		goto exit_assign_obj;
31937 	}
31938 
31939 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
31940 		ZVAL_DEREF(value);
31941 	}
31942 
31943 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
31944 
31945 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
31946 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31947 	}
31948 	zval_ptr_dtor_nogc(free_op_data);
31949 exit_assign_obj:
31950 
31951 
31952 	/* assign_obj has two opcodes! */
31953 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31954 }
31955 
31956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31957 {
31958 	USE_OPLINE
31959 
31960 	zval *object, *property_name, *value, tmp;
31961 
31962 	SAVE_OPLINE();
31963 	object = _get_obj_zval_ptr_unused(execute_data);
31964 
31965 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31966 		zend_throw_error(NULL, "Using $this when not in object context");
31967 
31968 
31969 		HANDLE_EXCEPTION();
31970 	}
31971 
31972 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
31973 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
31974 
31975 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31976 		do {
31977 			if (Z_ISREF_P(object)) {
31978 				object = Z_REFVAL_P(object);
31979 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
31980 					break;
31981 				}
31982 			}
31983 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
31984 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
31985 				zend_object *obj;
31986 
31987 				zval_ptr_dtor(object);
31988 				object_init(object);
31989 				Z_ADDREF_P(object);
31990 				obj = Z_OBJ_P(object);
31991 				zend_error(E_WARNING, "Creating default object from empty value");
31992 				if (GC_REFCOUNT(obj) == 1) {
31993 					/* the enclosing container was deleted, obj is unreferenced */
31994 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31995 						ZVAL_NULL(EX_VAR(opline->result.var));
31996 					}
31997 
31998 					OBJ_RELEASE(obj);
31999 					goto exit_assign_obj;
32000 				}
32001 				Z_DELREF_P(object);
32002 			} else {
32003 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
32004 					zend_error(E_WARNING, "Attempt to assign property of non-object");
32005 				}
32006 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32007 					ZVAL_NULL(EX_VAR(opline->result.var));
32008 				}
32009 
32010 				goto exit_assign_obj;
32011 			}
32012 		} while (0);
32013 	}
32014 
32015 	if (IS_CV == IS_CONST &&
32016 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
32017 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
32018 		zend_object *zobj = Z_OBJ_P(object);
32019 		zval *property;
32020 
32021 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
32022 			property = OBJ_PROP(zobj, prop_offset);
32023 			if (Z_TYPE_P(property) != IS_UNDEF) {
32024 fast_assign_obj:
32025 				value = zend_assign_to_variable(property, value, IS_CV);
32026 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32027 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32028 				}
32029 				goto exit_assign_obj;
32030 			}
32031 		} else {
32032 			if (EXPECTED(zobj->properties != NULL)) {
32033 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32034 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32035 						GC_REFCOUNT(zobj->properties)--;
32036 					}
32037 					zobj->properties = zend_array_dup(zobj->properties);
32038 				}
32039 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
32040 				if (property) {
32041 					goto fast_assign_obj;
32042 				}
32043 			}
32044 
32045 			if (!zobj->ce->__set) {
32046 
32047 				if (EXPECTED(zobj->properties == NULL)) {
32048 					rebuild_object_properties(zobj);
32049 				}
32050 				if (IS_CV == IS_CONST) {
32051 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32052 						Z_ADDREF_P(value);
32053 					}
32054 				} else if (IS_CV != IS_TMP_VAR) {
32055 					if (Z_ISREF_P(value)) {
32056 						if (IS_CV == IS_VAR) {
32057 							zend_reference *ref = Z_REF_P(value);
32058 							if (--GC_REFCOUNT(ref) == 0) {
32059 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32060 								efree_size(ref, sizeof(zend_reference));
32061 								value = &tmp;
32062 							} else {
32063 								value = Z_REFVAL_P(value);
32064 								if (Z_REFCOUNTED_P(value)) {
32065 									Z_ADDREF_P(value);
32066 								}
32067 							}
32068 						} else {
32069 							value = Z_REFVAL_P(value);
32070 							if (Z_REFCOUNTED_P(value)) {
32071 								Z_ADDREF_P(value);
32072 							}
32073 						}
32074 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
32075 						Z_ADDREF_P(value);
32076 					}
32077 				}
32078 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
32079 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32080 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32081 				}
32082 				goto exit_assign_obj;
32083 			}
32084 		}
32085 	}
32086 
32087 	if (!Z_OBJ_HT_P(object)->write_property) {
32088 		zend_error(E_WARNING, "Attempt to assign property of non-object");
32089 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32090 			ZVAL_NULL(EX_VAR(opline->result.var));
32091 		}
32092 
32093 		goto exit_assign_obj;
32094 	}
32095 
32096 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
32097 		ZVAL_DEREF(value);
32098 	}
32099 
32100 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
32101 
32102 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
32103 		ZVAL_COPY(EX_VAR(opline->result.var), value);
32104 	}
32105 
32106 exit_assign_obj:
32107 
32108 
32109 	/* assign_obj has two opcodes! */
32110 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32111 }
32112 
32113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32114 {
32115 	USE_OPLINE
32116 
32117 	zend_string **rope;
32118 	zval *var;
32119 
32120 	/* Compiler allocates the necessary number of zval slots to keep the rope */
32121 	rope = (zend_string**)EX_VAR(opline->result.var);
32122 	if (IS_CV == IS_CONST) {
32123 		var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
32124 		rope[0] = zend_string_copy(Z_STR_P(var));
32125 	} else {
32126 		var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
32127 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
32128 			if (IS_CV == IS_CV) {
32129 				rope[0] = zend_string_copy(Z_STR_P(var));
32130 			} else {
32131 				rope[0] = Z_STR_P(var);
32132 			}
32133 		} else {
32134 			SAVE_OPLINE();
32135 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
32136 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
32137 			}
32138 			rope[0] = _zval_get_string_func(var);
32139 
32140 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32141 		}
32142 	}
32143 	ZEND_VM_NEXT_OPCODE();
32144 }
32145 
32146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32147 {
32148 	USE_OPLINE
32149 	zval *function_name;
32150 
32151 	zval *object;
32152 	zend_function *fbc;
32153 	zend_class_entry *called_scope;
32154 	zend_object *obj;
32155 	zend_execute_data *call;
32156 	uint32_t call_info;
32157 
32158 	SAVE_OPLINE();
32159 
32160 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
32161 
32162 	if (IS_CV != IS_CONST &&
32163 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32164 		do {
32165 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
32166 				function_name = Z_REFVAL_P(function_name);
32167 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32168 					break;
32169 				}
32170 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32171 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
32172 				if (UNEXPECTED(EG(exception) != NULL)) {
32173 					HANDLE_EXCEPTION();
32174 				}
32175 			}
32176 			zend_throw_error(NULL, "Method name must be a string");
32177 
32178 
32179 			HANDLE_EXCEPTION();
32180 		} while (0);
32181 	}
32182 
32183 	object = _get_obj_zval_ptr_unused(execute_data);
32184 
32185 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32186 		zend_throw_error(NULL, "Using $this when not in object context");
32187 
32188 		HANDLE_EXCEPTION();
32189 	}
32190 
32191 	if (IS_UNUSED != IS_UNUSED) {
32192 		do {
32193 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32194 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
32195 					object = Z_REFVAL_P(object);
32196 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
32197 						break;
32198 					}
32199 				}
32200 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32201 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
32202 					if (UNEXPECTED(EG(exception) != NULL)) {
32203 
32204 						HANDLE_EXCEPTION();
32205 					}
32206 				}
32207 				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)));
32208 
32209 
32210 				HANDLE_EXCEPTION();
32211 			}
32212 		} while (0);
32213 	}
32214 
32215 	obj = Z_OBJ_P(object);
32216 	called_scope = obj->ce;
32217 
32218 	if (IS_CV != IS_CONST ||
32219 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
32220 	    zend_object *orig_obj = obj;
32221 
32222 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
32223 			zend_throw_error(NULL, "Object does not support method calls");
32224 
32225 
32226 			HANDLE_EXCEPTION();
32227 		}
32228 
32229 		/* First, locate the function. */
32230 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
32231 		if (UNEXPECTED(fbc == NULL)) {
32232 			if (EXPECTED(!EG(exception))) {
32233 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
32234 			}
32235 
32236 
32237 			HANDLE_EXCEPTION();
32238 		}
32239 		if (IS_CV == IS_CONST &&
32240 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
32241 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
32242 		    EXPECTED(obj == orig_obj)) {
32243 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
32244 		}
32245 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
32246 			init_func_run_time_cache(&fbc->op_array);
32247 		}
32248 	}
32249 
32250 	call_info = ZEND_CALL_NESTED_FUNCTION;
32251 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
32252 		obj = NULL;
32253 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
32254 		/* CV may be changed indirectly (e.g. when it's a reference) */
32255 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
32256 		GC_REFCOUNT(obj)++; /* For $this pointer */
32257 	}
32258 
32259 
32260 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
32261 		HANDLE_EXCEPTION();
32262 	}
32263 
32264 	call = zend_vm_stack_push_call_frame(call_info,
32265 		fbc, opline->extended_value, called_scope, obj);
32266 	call->prev_execute_data = EX(call);
32267 	EX(call) = call;
32268 
32269 	ZEND_VM_NEXT_OPCODE();
32270 }
32271 
32272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32273 {
32274 	USE_OPLINE
32275 	zval *function_name;
32276 	zend_class_entry *ce;
32277 	zend_object *object;
32278 	zend_function *fbc;
32279 	zend_execute_data *call;
32280 
32281 	SAVE_OPLINE();
32282 
32283 	if (IS_UNUSED == IS_CONST) {
32284 		/* no function found. try a static method in class */
32285 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
32286 		if (UNEXPECTED(ce == NULL)) {
32287 			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);
32288 			if (UNEXPECTED(ce == NULL)) {
32289 				ZEND_ASSERT(EG(exception));
32290 				HANDLE_EXCEPTION();
32291 			}
32292 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
32293 		}
32294 	} else if (IS_UNUSED == IS_UNUSED) {
32295 		ce = zend_fetch_class(NULL, opline->op1.num);
32296 		if (UNEXPECTED(ce == NULL)) {
32297 			ZEND_ASSERT(EG(exception));
32298 
32299 			HANDLE_EXCEPTION();
32300 		}
32301 	} else {
32302 		ce = Z_CE_P(EX_VAR(opline->op1.var));
32303 	}
32304 
32305 	if (IS_UNUSED == IS_CONST &&
32306 	    IS_CV == IS_CONST &&
32307 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
32308 		/* nothing to do */
32309 	} else if (IS_UNUSED != IS_CONST &&
32310 	           IS_CV == IS_CONST &&
32311 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
32312 		/* do nothing */
32313 	} else if (IS_CV != IS_UNUSED) {
32314 
32315 
32316 		function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
32317 		if (IS_CV != IS_CONST) {
32318 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
32319 				do {
32320 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
32321 						function_name = Z_REFVAL_P(function_name);
32322 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
32323 							break;
32324 						}
32325 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
32326 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
32327 						if (UNEXPECTED(EG(exception) != NULL)) {
32328 							HANDLE_EXCEPTION();
32329 						}
32330 					}
32331 					zend_throw_error(NULL, "Function name must be a string");
32332 
32333 					HANDLE_EXCEPTION();
32334 				} while (0);
32335  			}
32336 		}
32337 
32338 		if (ce->get_static_method) {
32339 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
32340 		} else {
32341 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
32342 		}
32343 		if (UNEXPECTED(fbc == NULL)) {
32344 			if (EXPECTED(!EG(exception))) {
32345 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
32346 			}
32347 
32348 			HANDLE_EXCEPTION();
32349 		}
32350 		if (IS_CV == IS_CONST &&
32351 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
32352 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
32353 			if (IS_UNUSED == IS_CONST) {
32354 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
32355 			} else {
32356 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
32357 			}
32358 		}
32359 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
32360 			init_func_run_time_cache(&fbc->op_array);
32361 		}
32362 		if (IS_CV != IS_CONST) {
32363 
32364 		}
32365 	} else {
32366 		if (UNEXPECTED(ce->constructor == NULL)) {
32367 			zend_throw_error(NULL, "Cannot call constructor");
32368 			HANDLE_EXCEPTION();
32369 		}
32370 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
32371 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
32372 			HANDLE_EXCEPTION();
32373 		}
32374 		fbc = ce->constructor;
32375 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
32376 			init_func_run_time_cache(&fbc->op_array);
32377 		}
32378 	}
32379 
32380 	object = NULL;
32381 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
32382 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
32383 			object = Z_OBJ(EX(This));
32384 			ce = object->ce;
32385 		} else {
32386 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
32387 				/* Allowed for PHP 4 compatibility. */
32388 				zend_error(
32389 					E_DEPRECATED,
32390 					"Non-static method %s::%s() should not be called statically",
32391 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
32392 				if (UNEXPECTED(EG(exception) != NULL)) {
32393 					HANDLE_EXCEPTION();
32394 				}
32395 			} else {
32396 				/* An internal function assumes $this is present and won't check that.
32397 				 * So PHP would crash by allowing the call. */
32398 				zend_throw_error(
32399 					zend_ce_error,
32400 					"Non-static method %s::%s() cannot be called statically",
32401 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
32402 				HANDLE_EXCEPTION();
32403 			}
32404 		}
32405 	}
32406 
32407 	if (IS_UNUSED == IS_UNUSED) {
32408 		/* previous opcode is ZEND_FETCH_CLASS */
32409 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
32410 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
32411 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32412 				ce = Z_OBJCE(EX(This));
32413 			} else {
32414 				ce = Z_CE(EX(This));
32415 			}
32416 		}
32417 	}
32418 
32419 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
32420 		fbc, opline->extended_value, ce, object);
32421 	call->prev_execute_data = EX(call);
32422 	EX(call) = call;
32423 
32424 	ZEND_VM_NEXT_OPCODE();
32425 }
32426 
32427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32428 {
32429 	zval *array;
32430 	uint32_t size;
32431 	USE_OPLINE
32432 
32433 	array = EX_VAR(opline->result.var);
32434 	if (IS_UNUSED != IS_UNUSED) {
32435 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
32436 	} else {
32437 		size = 0;
32438 	}
32439 	ZVAL_NEW_ARR(array);
32440 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
32441 
32442 	if (IS_UNUSED != IS_UNUSED) {
32443 		/* Explicitly initialize array as not-packed if flag is set */
32444 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
32445 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
32446 		}
32447 	}
32448 
32449 	if (IS_UNUSED == IS_UNUSED) {
32450 		ZEND_VM_NEXT_OPCODE();
32451 #if 0 || (IS_UNUSED != IS_UNUSED)
32452 	} else {
32453 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32454 #endif
32455 	}
32456 }
32457 
32458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32459 {
32460 	USE_OPLINE
32461 
32462 	zval *container;
32463 	zval *offset;
32464 
32465 	SAVE_OPLINE();
32466 	container = _get_obj_zval_ptr_unused(execute_data);
32467 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32468 		zend_throw_error(NULL, "Using $this when not in object context");
32469 
32470 		HANDLE_EXCEPTION();
32471 	}
32472 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
32473 
32474 	do {
32475 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32476 			if (Z_ISREF_P(container)) {
32477 				container = Z_REFVAL_P(container);
32478 				if (Z_TYPE_P(container) != IS_OBJECT) {
32479 					break;
32480 				}
32481 			} else {
32482 				break;
32483 			}
32484 		}
32485 		if (Z_OBJ_HT_P(container)->unset_property) {
32486 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
32487 		} else {
32488 			zend_error(E_NOTICE, "Trying to unset property of non-object");
32489 		}
32490 	} while (0);
32491 
32492 
32493 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32494 }
32495 
32496 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32497 {
32498 	USE_OPLINE
32499 
32500 	zval *container;
32501 	int result;
32502 	zval *offset;
32503 
32504 	SAVE_OPLINE();
32505 	container = _get_obj_zval_ptr_unused(execute_data);
32506 
32507 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32508 		zend_throw_error(NULL, "Using $this when not in object context");
32509 
32510 		HANDLE_EXCEPTION();
32511 	}
32512 
32513 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
32514 
32515 	if (IS_UNUSED == IS_CONST ||
32516 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32517 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32518 			container = Z_REFVAL_P(container);
32519 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32520 				goto isset_no_object;
32521 			}
32522 		} else {
32523 			goto isset_no_object;
32524 		}
32525 	}
32526 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
32527 		zend_error(E_NOTICE, "Trying to check property of non-object");
32528 isset_no_object:
32529 		result = ((opline->extended_value & ZEND_ISSET) == 0);
32530 	} else {
32531 		result =
32532 			((opline->extended_value & ZEND_ISSET) == 0) ^
32533 			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));
32534 	}
32535 
32536 
32537 	ZEND_VM_SMART_BRANCH(result, 1);
32538 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
32539 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32540 }
32541 
32542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32543 {
32544 	USE_OPLINE
32545 
32546 	zend_generator *generator = zend_get_running_generator(execute_data);
32547 
32548 	SAVE_OPLINE();
32549 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
32550 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
32551 
32552 
32553 		HANDLE_EXCEPTION();
32554 	}
32555 
32556 	/* Destroy the previously yielded value */
32557 	zval_ptr_dtor(&generator->value);
32558 
32559 	/* Destroy the previously yielded key */
32560 	zval_ptr_dtor(&generator->key);
32561 
32562 	/* Set the new yielded value */
32563 	if (IS_UNUSED != IS_UNUSED) {
32564 
32565 
32566 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
32567 			/* Constants and temporary variables aren't yieldable by reference,
32568 			 * but we still allow them with a notice. */
32569 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
32570 				zval *value;
32571 
32572 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32573 
32574 				value = NULL;
32575 				ZVAL_COPY_VALUE(&generator->value, value);
32576 				if (IS_UNUSED == IS_CONST) {
32577 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32578 						Z_ADDREF(generator->value);
32579 					}
32580 				}
32581 			} else {
32582 				zval *value_ptr = NULL;
32583 
32584 				/* If a function call result is yielded and the function did
32585 				 * not return by reference we throw a notice. */
32586 				if (IS_UNUSED == IS_VAR &&
32587 				    (value_ptr == &EG(uninitialized_zval) ||
32588 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
32589 				      !Z_ISREF_P(value_ptr)))) {
32590 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32591 				} else {
32592 					ZVAL_MAKE_REF(value_ptr);
32593 				}
32594 				ZVAL_COPY(&generator->value, value_ptr);
32595 
32596 			}
32597 		} else {
32598 			zval *value = NULL;
32599 
32600 			/* Consts, temporary variables and references need copying */
32601 			if (IS_UNUSED == IS_CONST) {
32602 				ZVAL_COPY_VALUE(&generator->value, value);
32603 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32604 					Z_ADDREF(generator->value);
32605 				}
32606 			} else if (IS_UNUSED == IS_TMP_VAR) {
32607 				ZVAL_COPY_VALUE(&generator->value, value);
32608             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
32609 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
32610 
32611 			} else {
32612 				ZVAL_COPY_VALUE(&generator->value, value);
32613 				if (IS_UNUSED == IS_CV) {
32614 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
32615 				}
32616 			}
32617 		}
32618 	} else {
32619 		/* If no value was specified yield null */
32620 		ZVAL_NULL(&generator->value);
32621 	}
32622 
32623 	/* Set the new yielded key */
32624 	if (IS_CV != IS_UNUSED) {
32625 
32626 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
32627 
32628 		/* Consts, temporary variables and references need copying */
32629 		if (IS_CV == IS_CONST) {
32630 			ZVAL_COPY_VALUE(&generator->key, key);
32631 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
32632 				Z_ADDREF(generator->key);
32633 			}
32634 		} else if (IS_CV == IS_TMP_VAR) {
32635 			ZVAL_COPY_VALUE(&generator->key, key);
32636 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
32637 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
32638 
32639 		} else {
32640 			ZVAL_COPY_VALUE(&generator->key, key);
32641 			if (IS_CV == IS_CV) {
32642 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
32643 			}
32644 		}
32645 
32646 		if (Z_TYPE(generator->key) == IS_LONG
32647 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
32648 		) {
32649 			generator->largest_used_integer_key = Z_LVAL(generator->key);
32650 		}
32651 	} else {
32652 		/* If no key was specified we use auto-increment keys */
32653 		generator->largest_used_integer_key++;
32654 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
32655 	}
32656 
32657 	if (RETURN_VALUE_USED(opline)) {
32658 		/* If the return value of yield is used set the send
32659 		 * target and initialize it to NULL */
32660 		generator->send_target = EX_VAR(opline->result.var);
32661 		ZVAL_NULL(generator->send_target);
32662 	} else {
32663 		generator->send_target = NULL;
32664 	}
32665 
32666 	/* We increment to the next op, so we are at the correct position when the
32667 	 * generator is resumed. */
32668 	ZEND_VM_INC_OPCODE();
32669 
32670 	/* The GOTO VM uses a local opline variable. We need to set the opline
32671 	 * variable in execute_data so we don't resume at an old position. */
32672 	SAVE_OPLINE();
32673 
32674 	ZEND_VM_RETURN();
32675 }
32676 
32677 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)
32678 {
32679 	USE_OPLINE
32680 	zend_free_op free_op2, free_op_data1;
32681 	zval *object;
32682 	zval *property;
32683 	zval *value;
32684 	zval *zptr;
32685 
32686 	SAVE_OPLINE();
32687 	object = _get_obj_zval_ptr_unused(execute_data);
32688 
32689 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32690 		zend_throw_error(NULL, "Using $this when not in object context");
32691 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
32692 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
32693 		HANDLE_EXCEPTION();
32694 	}
32695 
32696 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
32697 
32698 	do {
32699 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
32700 
32701 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32702 			ZVAL_DEREF(object);
32703 			if (UNEXPECTED(!make_real_object(object))) {
32704 				zend_error(E_WARNING, "Attempt to assign property of non-object");
32705 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32706 					ZVAL_NULL(EX_VAR(opline->result.var));
32707 				}
32708 				break;
32709 			}
32710 		}
32711 
32712 		/* here we are sure we are dealing with an object */
32713 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
32714 			&& 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)) {
32715 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32716 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32717 					ZVAL_NULL(EX_VAR(opline->result.var));
32718 				}
32719 			} else {
32720 				ZVAL_DEREF(zptr);
32721 				SEPARATE_ZVAL_NOREF(zptr);
32722 
32723 				binary_op(zptr, zptr, value);
32724 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32725 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
32726 				}
32727 			}
32728 		} else {
32729 			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));
32730 		}
32731 	} while (0);
32732 
32733 	FREE_OP(free_op_data1);
32734 	zval_ptr_dtor_nogc(free_op2);
32735 
32736 	/* assign_obj has two opcodes! */
32737 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32738 }
32739 
32740 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32741 {
32742 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32743 	USE_OPLINE
32744 
32745 # if 0 || (IS_UNUSED != IS_UNUSED)
32746 	if (EXPECTED(0)) {
32747 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32748 	}
32749 	if (EXPECTED(0)) {
32750 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32751 	}
32752 # endif
32753 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32754 #else
32755 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32756 #endif
32757 }
32758 
32759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32760 {
32761 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32762 	USE_OPLINE
32763 
32764 # if 0 || (IS_UNUSED != IS_UNUSED)
32765 	if (EXPECTED(0)) {
32766 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32767 	}
32768 	if (EXPECTED(0)) {
32769 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32770 	}
32771 # endif
32772 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32773 #else
32774 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32775 #endif
32776 }
32777 
32778 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32779 {
32780 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32781 	USE_OPLINE
32782 
32783 # if 0 || (IS_UNUSED != IS_UNUSED)
32784 	if (EXPECTED(0)) {
32785 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32786 	}
32787 	if (EXPECTED(0)) {
32788 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32789 	}
32790 # endif
32791 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32792 #else
32793 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32794 #endif
32795 }
32796 
32797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32798 {
32799 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32800 	USE_OPLINE
32801 
32802 # if 0 || (IS_UNUSED != IS_UNUSED)
32803 	if (EXPECTED(0)) {
32804 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32805 	}
32806 	if (EXPECTED(0)) {
32807 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32808 	}
32809 # endif
32810 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32811 #else
32812 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32813 #endif
32814 }
32815 
32816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32817 {
32818 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32819 	USE_OPLINE
32820 
32821 # if 0 || (IS_UNUSED != IS_UNUSED)
32822 	if (EXPECTED(0)) {
32823 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32824 	}
32825 	if (EXPECTED(0)) {
32826 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32827 	}
32828 # endif
32829 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32830 #else
32831 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32832 #endif
32833 }
32834 
32835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32836 {
32837 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32838 	USE_OPLINE
32839 
32840 # if 0 || (IS_UNUSED != IS_UNUSED)
32841 	if (EXPECTED(0)) {
32842 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32843 	}
32844 	if (EXPECTED(0)) {
32845 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32846 	}
32847 # endif
32848 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32849 #else
32850 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32851 #endif
32852 }
32853 
32854 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32855 {
32856 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32857 	USE_OPLINE
32858 
32859 # if 0 || (IS_UNUSED != IS_UNUSED)
32860 	if (EXPECTED(0)) {
32861 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32862 	}
32863 	if (EXPECTED(0)) {
32864 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32865 	}
32866 # endif
32867 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32868 #else
32869 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32870 #endif
32871 }
32872 
32873 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32874 {
32875 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32876 	USE_OPLINE
32877 
32878 # if 0 || (IS_UNUSED != IS_UNUSED)
32879 	if (EXPECTED(0)) {
32880 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32881 	}
32882 	if (EXPECTED(0)) {
32883 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32884 	}
32885 # endif
32886 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32887 #else
32888 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32889 #endif
32890 }
32891 
32892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32893 {
32894 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32895 	USE_OPLINE
32896 
32897 # if 0 || (IS_UNUSED != IS_UNUSED)
32898 	if (EXPECTED(0)) {
32899 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32900 	}
32901 	if (EXPECTED(0)) {
32902 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32903 	}
32904 # endif
32905 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32906 #else
32907 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32908 #endif
32909 }
32910 
32911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32912 {
32913 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32914 	USE_OPLINE
32915 
32916 # if 0 || (IS_UNUSED != IS_UNUSED)
32917 	if (EXPECTED(0)) {
32918 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32919 	}
32920 	if (EXPECTED(0)) {
32921 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32922 	}
32923 # endif
32924 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32925 #else
32926 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32927 #endif
32928 }
32929 
32930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32931 {
32932 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32933 	USE_OPLINE
32934 
32935 # if 0 || (IS_UNUSED != IS_UNUSED)
32936 	if (EXPECTED(0)) {
32937 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32938 	}
32939 	if (EXPECTED(0)) {
32940 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32941 	}
32942 # endif
32943 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32944 #else
32945 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32946 #endif
32947 }
32948 
32949 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32950 {
32951 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
32952 	USE_OPLINE
32953 
32954 # if 0 || (IS_UNUSED != IS_UNUSED)
32955 	if (EXPECTED(0)) {
32956 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32957 	}
32958 	if (EXPECTED(0)) {
32959 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32960 	}
32961 # endif
32962 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32963 #else
32964 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
32965 #endif
32966 }
32967 
32968 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
32969 {
32970 	USE_OPLINE
32971 	zend_free_op free_op2;
32972 	zval *object;
32973 	zval *property;
32974 	zval *zptr;
32975 
32976 	SAVE_OPLINE();
32977 	object = _get_obj_zval_ptr_unused(execute_data);
32978 
32979 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32980 		zend_throw_error(NULL, "Using $this when not in object context");
32981 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
32982 		HANDLE_EXCEPTION();
32983 	}
32984 
32985 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
32986 
32987 	do {
32988 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32989 			ZVAL_DEREF(object);
32990 			if (UNEXPECTED(!make_real_object(object))) {
32991 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
32992 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32993 					ZVAL_NULL(EX_VAR(opline->result.var));
32994 				}
32995 				break;
32996 			}
32997 		}
32998 
32999 		/* here we are sure we are dealing with an object */
33000 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
33001 			&& 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)) {
33002 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33003 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33004 					ZVAL_NULL(EX_VAR(opline->result.var));
33005 				}
33006 			} else {
33007 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
33008 					if (inc) {
33009 						fast_long_increment_function(zptr);
33010 					} else {
33011 						fast_long_decrement_function(zptr);
33012 					}
33013 				} else {
33014 					ZVAL_DEREF(zptr);
33015 					SEPARATE_ZVAL_NOREF(zptr);
33016 
33017 					if (inc) {
33018 						increment_function(zptr);
33019 					} else {
33020 						decrement_function(zptr);
33021 					}
33022 				}
33023 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33024 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
33025 				}
33026 			}
33027 		} else {
33028 			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));
33029 		}
33030 	} while (0);
33031 
33032 	zval_ptr_dtor_nogc(free_op2);
33033 
33034 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33035 }
33036 
33037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33038 {
33039 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33040 }
33041 
33042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33043 {
33044 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33045 }
33046 
33047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
33048 {
33049 	USE_OPLINE
33050 	zend_free_op free_op2;
33051 	zval *object;
33052 	zval *property;
33053 	zval *zptr;
33054 
33055 	SAVE_OPLINE();
33056 	object = _get_obj_zval_ptr_unused(execute_data);
33057 
33058 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33059 		zend_throw_error(NULL, "Using $this when not in object context");
33060 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33061 		HANDLE_EXCEPTION();
33062 	}
33063 
33064 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33065 
33066 	do {
33067 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33068 			ZVAL_DEREF(object);
33069 			if (UNEXPECTED(!make_real_object(object))) {
33070 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
33071 				ZVAL_NULL(EX_VAR(opline->result.var));
33072 				break;
33073 			}
33074 		}
33075 
33076 		/* here we are sure we are dealing with an object */
33077 
33078 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
33079 			&& 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)) {
33080 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
33081 				ZVAL_NULL(EX_VAR(opline->result.var));
33082 			} else {
33083 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
33084 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
33085 					if (inc) {
33086 						fast_long_increment_function(zptr);
33087 					} else {
33088 						fast_long_decrement_function(zptr);
33089 					}
33090 				} else {
33091 					ZVAL_DEREF(zptr);
33092 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
33093 					zval_opt_copy_ctor(zptr);
33094 					if (inc) {
33095 						increment_function(zptr);
33096 					} else {
33097 						decrement_function(zptr);
33098 					}
33099 				}
33100 			}
33101 		} else {
33102 			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));
33103 		}
33104 	} while (0);
33105 
33106 	zval_ptr_dtor_nogc(free_op2);
33107 
33108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33109 }
33110 
33111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33112 {
33113 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33114 }
33115 
33116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33117 {
33118 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
33119 }
33120 
33121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33122 {
33123 	USE_OPLINE
33124 
33125 	zval *container;
33126 	zend_free_op free_op2;
33127 	zval *offset;
33128 
33129 	SAVE_OPLINE();
33130 	container = _get_obj_zval_ptr_unused(execute_data);
33131 
33132 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33133 		zend_throw_error(NULL, "Using $this when not in object context");
33134 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33135 		HANDLE_EXCEPTION();
33136 	}
33137 
33138 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33139 
33140 	if (IS_UNUSED == IS_CONST ||
33141 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33142 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33143 			container = Z_REFVAL_P(container);
33144 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33145 				goto fetch_obj_r_no_object;
33146 			}
33147 		} else {
33148 			goto fetch_obj_r_no_object;
33149 		}
33150 	}
33151 
33152 	/* here we are sure we are dealing with an object */
33153 	do {
33154 		zend_object *zobj = Z_OBJ_P(container);
33155 		zval *retval;
33156 
33157 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33158 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
33159 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
33160 
33161 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33162 				retval = OBJ_PROP(zobj, prop_offset);
33163 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
33164 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
33165 					break;
33166 				}
33167 			} else if (EXPECTED(zobj->properties != NULL)) {
33168 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
33169 				if (EXPECTED(retval)) {
33170 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
33171 					break;
33172 				}
33173 			}
33174 		}
33175 
33176 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
33177 fetch_obj_r_no_object:
33178 			zend_error(E_NOTICE, "Trying to get property of non-object");
33179 			ZVAL_NULL(EX_VAR(opline->result.var));
33180 		} else {
33181 			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));
33182 
33183 			if (retval != EX_VAR(opline->result.var)) {
33184 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
33185 			}
33186 		}
33187 	} while (0);
33188 
33189 	zval_ptr_dtor_nogc(free_op2);
33190 
33191 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33192 }
33193 
33194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33195 {
33196 	USE_OPLINE
33197 	zend_free_op free_op1, free_op2;
33198 	zval *property;
33199 	zval *container;
33200 
33201 	SAVE_OPLINE();
33202 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33203 
33204 	container = _get_obj_zval_ptr_unused(execute_data);
33205 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33206 		zend_throw_error(NULL, "Using $this when not in object context");
33207 		zval_ptr_dtor_nogc(free_op2);
33208 		HANDLE_EXCEPTION();
33209 	}
33210 
33211 	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);
33212 	zval_ptr_dtor_nogc(free_op2);
33213 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
33214 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
33215 	}
33216 
33217 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33218 }
33219 
33220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33221 {
33222 	USE_OPLINE
33223 	zend_free_op free_op1, free_op2;
33224 	zval *property;
33225 	zval *container;
33226 
33227 	SAVE_OPLINE();
33228 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33229 	container = _get_obj_zval_ptr_unused(execute_data);
33230 
33231 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33232 		zend_throw_error(NULL, "Using $this when not in object context");
33233 		zval_ptr_dtor_nogc(free_op2);
33234 		HANDLE_EXCEPTION();
33235 	}
33236 	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);
33237 	zval_ptr_dtor_nogc(free_op2);
33238 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
33239 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
33240 	}
33241 
33242 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33243 }
33244 
33245 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33246 {
33247 	USE_OPLINE
33248 
33249 	zval *container;
33250 	zend_free_op free_op2;
33251 	zval *offset;
33252 
33253 	SAVE_OPLINE();
33254 	container = _get_obj_zval_ptr_unused(execute_data);
33255 
33256 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33257 		zend_throw_error(NULL, "Using $this when not in object context");
33258 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33259 		HANDLE_EXCEPTION();
33260 	}
33261 
33262 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33263 
33264 	if (IS_UNUSED == IS_CONST ||
33265 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33266 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33267 			container = Z_REFVAL_P(container);
33268 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33269 				goto fetch_obj_is_no_object;
33270 			}
33271 		} else {
33272 			goto fetch_obj_is_no_object;
33273 		}
33274 	}
33275 
33276 	/* here we are sure we are dealing with an object */
33277 	do {
33278 		zend_object *zobj = Z_OBJ_P(container);
33279 		zval *retval;
33280 
33281 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33282 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
33283 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
33284 
33285 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33286 				retval = OBJ_PROP(zobj, prop_offset);
33287 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
33288 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
33289 					break;
33290 				}
33291 			} else if (EXPECTED(zobj->properties != NULL)) {
33292 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
33293 				if (EXPECTED(retval)) {
33294 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
33295 					break;
33296 				}
33297 			}
33298 		}
33299 
33300 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
33301 fetch_obj_is_no_object:
33302 			ZVAL_NULL(EX_VAR(opline->result.var));
33303 		} else {
33304 
33305 			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));
33306 
33307 			if (retval != EX_VAR(opline->result.var)) {
33308 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
33309 			}
33310 		}
33311 	} while (0);
33312 
33313 	zval_ptr_dtor_nogc(free_op2);
33314 
33315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33316 }
33317 
33318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33319 {
33320 	USE_OPLINE
33321 	zval *container;
33322 
33323 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
33324 		/* Behave like FETCH_OBJ_W */
33325 		zend_free_op free_op1, free_op2;
33326 		zval *property;
33327 
33328 		SAVE_OPLINE();
33329 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33330 		container = _get_obj_zval_ptr_unused(execute_data);
33331 
33332 		if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33333 			zend_throw_error(NULL, "Using $this when not in object context");
33334 			zval_ptr_dtor_nogc(free_op2);
33335 			HANDLE_EXCEPTION();
33336 		}
33337 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
33338 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
33339 			zval_ptr_dtor_nogc(free_op2);
33340 
33341 			HANDLE_EXCEPTION();
33342 		}
33343 		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);
33344 		zval_ptr_dtor_nogc(free_op2);
33345 		if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
33346 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
33347 		}
33348 
33349 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33350 	} else {
33351 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33352 	}
33353 }
33354 
33355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33356 {
33357 	USE_OPLINE
33358 	zend_free_op free_op1, free_op2;
33359 	zval *container, *property;
33360 
33361 	SAVE_OPLINE();
33362 	container = _get_obj_zval_ptr_unused(execute_data);
33363 
33364 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33365 		zend_throw_error(NULL, "Using $this when not in object context");
33366 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33367 		HANDLE_EXCEPTION();
33368 	}
33369 
33370 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33371 
33372 	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);
33373 	zval_ptr_dtor_nogc(free_op2);
33374 	if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
33375 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
33376 	}
33377 
33378 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33379 }
33380 
33381 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33382 {
33383 	USE_OPLINE
33384 	zend_free_op free_op2;
33385 	zval *object, *property_name, *value, tmp;
33386 
33387 	SAVE_OPLINE();
33388 	object = _get_obj_zval_ptr_unused(execute_data);
33389 
33390 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33391 		zend_throw_error(NULL, "Using $this when not in object context");
33392 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33393 
33394 		HANDLE_EXCEPTION();
33395 	}
33396 
33397 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33398 	value = EX_CONSTANT((opline+1)->op1);
33399 
33400 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33401 		do {
33402 			if (Z_ISREF_P(object)) {
33403 				object = Z_REFVAL_P(object);
33404 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33405 					break;
33406 				}
33407 			}
33408 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
33409 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
33410 				zend_object *obj;
33411 
33412 				zval_ptr_dtor(object);
33413 				object_init(object);
33414 				Z_ADDREF_P(object);
33415 				obj = Z_OBJ_P(object);
33416 				zend_error(E_WARNING, "Creating default object from empty value");
33417 				if (GC_REFCOUNT(obj) == 1) {
33418 					/* the enclosing container was deleted, obj is unreferenced */
33419 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33420 						ZVAL_NULL(EX_VAR(opline->result.var));
33421 					}
33422 
33423 					OBJ_RELEASE(obj);
33424 					goto exit_assign_obj;
33425 				}
33426 				Z_DELREF_P(object);
33427 			} else {
33428 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
33429 					zend_error(E_WARNING, "Attempt to assign property of non-object");
33430 				}
33431 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33432 					ZVAL_NULL(EX_VAR(opline->result.var));
33433 				}
33434 
33435 				goto exit_assign_obj;
33436 			}
33437 		} while (0);
33438 	}
33439 
33440 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33441 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
33442 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
33443 		zend_object *zobj = Z_OBJ_P(object);
33444 		zval *property;
33445 
33446 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33447 			property = OBJ_PROP(zobj, prop_offset);
33448 			if (Z_TYPE_P(property) != IS_UNDEF) {
33449 fast_assign_obj:
33450 				value = zend_assign_to_variable(property, value, IS_CONST);
33451 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33452 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33453 				}
33454 				goto exit_assign_obj;
33455 			}
33456 		} else {
33457 			if (EXPECTED(zobj->properties != NULL)) {
33458 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33459 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33460 						GC_REFCOUNT(zobj->properties)--;
33461 					}
33462 					zobj->properties = zend_array_dup(zobj->properties);
33463 				}
33464 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
33465 				if (property) {
33466 					goto fast_assign_obj;
33467 				}
33468 			}
33469 
33470 			if (!zobj->ce->__set) {
33471 
33472 				if (EXPECTED(zobj->properties == NULL)) {
33473 					rebuild_object_properties(zobj);
33474 				}
33475 				if (IS_CONST == IS_CONST) {
33476 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33477 						Z_ADDREF_P(value);
33478 					}
33479 				} else if (IS_CONST != IS_TMP_VAR) {
33480 					if (Z_ISREF_P(value)) {
33481 						if (IS_CONST == IS_VAR) {
33482 							zend_reference *ref = Z_REF_P(value);
33483 							if (--GC_REFCOUNT(ref) == 0) {
33484 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33485 								efree_size(ref, sizeof(zend_reference));
33486 								value = &tmp;
33487 							} else {
33488 								value = Z_REFVAL_P(value);
33489 								if (Z_REFCOUNTED_P(value)) {
33490 									Z_ADDREF_P(value);
33491 								}
33492 							}
33493 						} else {
33494 							value = Z_REFVAL_P(value);
33495 							if (Z_REFCOUNTED_P(value)) {
33496 								Z_ADDREF_P(value);
33497 							}
33498 						}
33499 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
33500 						Z_ADDREF_P(value);
33501 					}
33502 				}
33503 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
33504 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33505 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33506 				}
33507 				goto exit_assign_obj;
33508 			}
33509 		}
33510 	}
33511 
33512 	if (!Z_OBJ_HT_P(object)->write_property) {
33513 		zend_error(E_WARNING, "Attempt to assign property of non-object");
33514 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33515 			ZVAL_NULL(EX_VAR(opline->result.var));
33516 		}
33517 
33518 		goto exit_assign_obj;
33519 	}
33520 
33521 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
33522 		ZVAL_DEREF(value);
33523 	}
33524 
33525 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
33526 
33527 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
33528 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33529 	}
33530 
33531 exit_assign_obj:
33532 	zval_ptr_dtor_nogc(free_op2);
33533 
33534 	/* assign_obj has two opcodes! */
33535 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33536 }
33537 
33538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33539 {
33540 	USE_OPLINE
33541 	zend_free_op free_op2, free_op_data;
33542 	zval *object, *property_name, *value, tmp;
33543 
33544 	SAVE_OPLINE();
33545 	object = _get_obj_zval_ptr_unused(execute_data);
33546 
33547 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33548 		zend_throw_error(NULL, "Using $this when not in object context");
33549 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33550 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33551 		HANDLE_EXCEPTION();
33552 	}
33553 
33554 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33555 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
33556 
33557 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33558 		do {
33559 			if (Z_ISREF_P(object)) {
33560 				object = Z_REFVAL_P(object);
33561 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33562 					break;
33563 				}
33564 			}
33565 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
33566 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
33567 				zend_object *obj;
33568 
33569 				zval_ptr_dtor(object);
33570 				object_init(object);
33571 				Z_ADDREF_P(object);
33572 				obj = Z_OBJ_P(object);
33573 				zend_error(E_WARNING, "Creating default object from empty value");
33574 				if (GC_REFCOUNT(obj) == 1) {
33575 					/* the enclosing container was deleted, obj is unreferenced */
33576 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33577 						ZVAL_NULL(EX_VAR(opline->result.var));
33578 					}
33579 					zval_ptr_dtor_nogc(free_op_data);
33580 					OBJ_RELEASE(obj);
33581 					goto exit_assign_obj;
33582 				}
33583 				Z_DELREF_P(object);
33584 			} else {
33585 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
33586 					zend_error(E_WARNING, "Attempt to assign property of non-object");
33587 				}
33588 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33589 					ZVAL_NULL(EX_VAR(opline->result.var));
33590 				}
33591 				zval_ptr_dtor_nogc(free_op_data);
33592 				goto exit_assign_obj;
33593 			}
33594 		} while (0);
33595 	}
33596 
33597 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33598 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
33599 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
33600 		zend_object *zobj = Z_OBJ_P(object);
33601 		zval *property;
33602 
33603 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33604 			property = OBJ_PROP(zobj, prop_offset);
33605 			if (Z_TYPE_P(property) != IS_UNDEF) {
33606 fast_assign_obj:
33607 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
33608 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33609 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33610 				}
33611 				goto exit_assign_obj;
33612 			}
33613 		} else {
33614 			if (EXPECTED(zobj->properties != NULL)) {
33615 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33616 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33617 						GC_REFCOUNT(zobj->properties)--;
33618 					}
33619 					zobj->properties = zend_array_dup(zobj->properties);
33620 				}
33621 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
33622 				if (property) {
33623 					goto fast_assign_obj;
33624 				}
33625 			}
33626 
33627 			if (!zobj->ce->__set) {
33628 
33629 				if (EXPECTED(zobj->properties == NULL)) {
33630 					rebuild_object_properties(zobj);
33631 				}
33632 				if (IS_TMP_VAR == IS_CONST) {
33633 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33634 						Z_ADDREF_P(value);
33635 					}
33636 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
33637 					if (Z_ISREF_P(value)) {
33638 						if (IS_TMP_VAR == IS_VAR) {
33639 							zend_reference *ref = Z_REF_P(value);
33640 							if (--GC_REFCOUNT(ref) == 0) {
33641 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33642 								efree_size(ref, sizeof(zend_reference));
33643 								value = &tmp;
33644 							} else {
33645 								value = Z_REFVAL_P(value);
33646 								if (Z_REFCOUNTED_P(value)) {
33647 									Z_ADDREF_P(value);
33648 								}
33649 							}
33650 						} else {
33651 							value = Z_REFVAL_P(value);
33652 							if (Z_REFCOUNTED_P(value)) {
33653 								Z_ADDREF_P(value);
33654 							}
33655 						}
33656 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
33657 						Z_ADDREF_P(value);
33658 					}
33659 				}
33660 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
33661 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33662 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33663 				}
33664 				goto exit_assign_obj;
33665 			}
33666 		}
33667 	}
33668 
33669 	if (!Z_OBJ_HT_P(object)->write_property) {
33670 		zend_error(E_WARNING, "Attempt to assign property of non-object");
33671 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33672 			ZVAL_NULL(EX_VAR(opline->result.var));
33673 		}
33674 		zval_ptr_dtor_nogc(free_op_data);
33675 		goto exit_assign_obj;
33676 	}
33677 
33678 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
33679 		ZVAL_DEREF(value);
33680 	}
33681 
33682 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
33683 
33684 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
33685 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33686 	}
33687 	zval_ptr_dtor_nogc(free_op_data);
33688 exit_assign_obj:
33689 	zval_ptr_dtor_nogc(free_op2);
33690 
33691 	/* assign_obj has two opcodes! */
33692 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33693 }
33694 
33695 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33696 {
33697 	USE_OPLINE
33698 	zend_free_op free_op2, free_op_data;
33699 	zval *object, *property_name, *value, tmp;
33700 
33701 	SAVE_OPLINE();
33702 	object = _get_obj_zval_ptr_unused(execute_data);
33703 
33704 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33705 		zend_throw_error(NULL, "Using $this when not in object context");
33706 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33707 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33708 		HANDLE_EXCEPTION();
33709 	}
33710 
33711 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33712 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
33713 
33714 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33715 		do {
33716 			if (Z_ISREF_P(object)) {
33717 				object = Z_REFVAL_P(object);
33718 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33719 					break;
33720 				}
33721 			}
33722 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
33723 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
33724 				zend_object *obj;
33725 
33726 				zval_ptr_dtor(object);
33727 				object_init(object);
33728 				Z_ADDREF_P(object);
33729 				obj = Z_OBJ_P(object);
33730 				zend_error(E_WARNING, "Creating default object from empty value");
33731 				if (GC_REFCOUNT(obj) == 1) {
33732 					/* the enclosing container was deleted, obj is unreferenced */
33733 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33734 						ZVAL_NULL(EX_VAR(opline->result.var));
33735 					}
33736 					zval_ptr_dtor_nogc(free_op_data);
33737 					OBJ_RELEASE(obj);
33738 					goto exit_assign_obj;
33739 				}
33740 				Z_DELREF_P(object);
33741 			} else {
33742 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
33743 					zend_error(E_WARNING, "Attempt to assign property of non-object");
33744 				}
33745 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33746 					ZVAL_NULL(EX_VAR(opline->result.var));
33747 				}
33748 				zval_ptr_dtor_nogc(free_op_data);
33749 				goto exit_assign_obj;
33750 			}
33751 		} while (0);
33752 	}
33753 
33754 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33755 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
33756 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
33757 		zend_object *zobj = Z_OBJ_P(object);
33758 		zval *property;
33759 
33760 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33761 			property = OBJ_PROP(zobj, prop_offset);
33762 			if (Z_TYPE_P(property) != IS_UNDEF) {
33763 fast_assign_obj:
33764 				value = zend_assign_to_variable(property, value, IS_VAR);
33765 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33766 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33767 				}
33768 				goto exit_assign_obj;
33769 			}
33770 		} else {
33771 			if (EXPECTED(zobj->properties != NULL)) {
33772 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33773 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33774 						GC_REFCOUNT(zobj->properties)--;
33775 					}
33776 					zobj->properties = zend_array_dup(zobj->properties);
33777 				}
33778 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
33779 				if (property) {
33780 					goto fast_assign_obj;
33781 				}
33782 			}
33783 
33784 			if (!zobj->ce->__set) {
33785 
33786 				if (EXPECTED(zobj->properties == NULL)) {
33787 					rebuild_object_properties(zobj);
33788 				}
33789 				if (IS_VAR == IS_CONST) {
33790 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33791 						Z_ADDREF_P(value);
33792 					}
33793 				} else if (IS_VAR != IS_TMP_VAR) {
33794 					if (Z_ISREF_P(value)) {
33795 						if (IS_VAR == IS_VAR) {
33796 							zend_reference *ref = Z_REF_P(value);
33797 							if (--GC_REFCOUNT(ref) == 0) {
33798 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33799 								efree_size(ref, sizeof(zend_reference));
33800 								value = &tmp;
33801 							} else {
33802 								value = Z_REFVAL_P(value);
33803 								if (Z_REFCOUNTED_P(value)) {
33804 									Z_ADDREF_P(value);
33805 								}
33806 							}
33807 						} else {
33808 							value = Z_REFVAL_P(value);
33809 							if (Z_REFCOUNTED_P(value)) {
33810 								Z_ADDREF_P(value);
33811 							}
33812 						}
33813 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
33814 						Z_ADDREF_P(value);
33815 					}
33816 				}
33817 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
33818 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33819 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33820 				}
33821 				goto exit_assign_obj;
33822 			}
33823 		}
33824 	}
33825 
33826 	if (!Z_OBJ_HT_P(object)->write_property) {
33827 		zend_error(E_WARNING, "Attempt to assign property of non-object");
33828 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33829 			ZVAL_NULL(EX_VAR(opline->result.var));
33830 		}
33831 		zval_ptr_dtor_nogc(free_op_data);
33832 		goto exit_assign_obj;
33833 	}
33834 
33835 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
33836 		ZVAL_DEREF(value);
33837 	}
33838 
33839 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
33840 
33841 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
33842 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33843 	}
33844 	zval_ptr_dtor_nogc(free_op_data);
33845 exit_assign_obj:
33846 	zval_ptr_dtor_nogc(free_op2);
33847 
33848 	/* assign_obj has two opcodes! */
33849 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33850 }
33851 
33852 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33853 {
33854 	USE_OPLINE
33855 	zend_free_op free_op2;
33856 	zval *object, *property_name, *value, tmp;
33857 
33858 	SAVE_OPLINE();
33859 	object = _get_obj_zval_ptr_unused(execute_data);
33860 
33861 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33862 		zend_throw_error(NULL, "Using $this when not in object context");
33863 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33864 
33865 		HANDLE_EXCEPTION();
33866 	}
33867 
33868 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
33869 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
33870 
33871 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33872 		do {
33873 			if (Z_ISREF_P(object)) {
33874 				object = Z_REFVAL_P(object);
33875 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33876 					break;
33877 				}
33878 			}
33879 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
33880 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
33881 				zend_object *obj;
33882 
33883 				zval_ptr_dtor(object);
33884 				object_init(object);
33885 				Z_ADDREF_P(object);
33886 				obj = Z_OBJ_P(object);
33887 				zend_error(E_WARNING, "Creating default object from empty value");
33888 				if (GC_REFCOUNT(obj) == 1) {
33889 					/* the enclosing container was deleted, obj is unreferenced */
33890 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33891 						ZVAL_NULL(EX_VAR(opline->result.var));
33892 					}
33893 
33894 					OBJ_RELEASE(obj);
33895 					goto exit_assign_obj;
33896 				}
33897 				Z_DELREF_P(object);
33898 			} else {
33899 				if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
33900 					zend_error(E_WARNING, "Attempt to assign property of non-object");
33901 				}
33902 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33903 					ZVAL_NULL(EX_VAR(opline->result.var));
33904 				}
33905 
33906 				goto exit_assign_obj;
33907 			}
33908 		} while (0);
33909 	}
33910 
33911 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33912 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
33913 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
33914 		zend_object *zobj = Z_OBJ_P(object);
33915 		zval *property;
33916 
33917 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
33918 			property = OBJ_PROP(zobj, prop_offset);
33919 			if (Z_TYPE_P(property) != IS_UNDEF) {
33920 fast_assign_obj:
33921 				value = zend_assign_to_variable(property, value, IS_CV);
33922 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33923 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33924 				}
33925 				goto exit_assign_obj;
33926 			}
33927 		} else {
33928 			if (EXPECTED(zobj->properties != NULL)) {
33929 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33930 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33931 						GC_REFCOUNT(zobj->properties)--;
33932 					}
33933 					zobj->properties = zend_array_dup(zobj->properties);
33934 				}
33935 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
33936 				if (property) {
33937 					goto fast_assign_obj;
33938 				}
33939 			}
33940 
33941 			if (!zobj->ce->__set) {
33942 
33943 				if (EXPECTED(zobj->properties == NULL)) {
33944 					rebuild_object_properties(zobj);
33945 				}
33946 				if (IS_CV == IS_CONST) {
33947 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33948 						Z_ADDREF_P(value);
33949 					}
33950 				} else if (IS_CV != IS_TMP_VAR) {
33951 					if (Z_ISREF_P(value)) {
33952 						if (IS_CV == IS_VAR) {
33953 							zend_reference *ref = Z_REF_P(value);
33954 							if (--GC_REFCOUNT(ref) == 0) {
33955 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33956 								efree_size(ref, sizeof(zend_reference));
33957 								value = &tmp;
33958 							} else {
33959 								value = Z_REFVAL_P(value);
33960 								if (Z_REFCOUNTED_P(value)) {
33961 									Z_ADDREF_P(value);
33962 								}
33963 							}
33964 						} else {
33965 							value = Z_REFVAL_P(value);
33966 							if (Z_REFCOUNTED_P(value)) {
33967 								Z_ADDREF_P(value);
33968 							}
33969 						}
33970 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
33971 						Z_ADDREF_P(value);
33972 					}
33973 				}
33974 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
33975 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33976 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33977 				}
33978 				goto exit_assign_obj;
33979 			}
33980 		}
33981 	}
33982 
33983 	if (!Z_OBJ_HT_P(object)->write_property) {
33984 		zend_error(E_WARNING, "Attempt to assign property of non-object");
33985 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33986 			ZVAL_NULL(EX_VAR(opline->result.var));
33987 		}
33988 
33989 		goto exit_assign_obj;
33990 	}
33991 
33992 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
33993 		ZVAL_DEREF(value);
33994 	}
33995 
33996 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
33997 
33998 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
33999 		ZVAL_COPY(EX_VAR(opline->result.var), value);
34000 	}
34001 
34002 exit_assign_obj:
34003 	zval_ptr_dtor_nogc(free_op2);
34004 
34005 	/* assign_obj has two opcodes! */
34006 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34007 }
34008 
34009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34010 {
34011 	USE_OPLINE
34012 	zend_free_op free_op2;
34013 	zend_string **rope;
34014 	zval *var;
34015 
34016 	/* Compiler allocates the necessary number of zval slots to keep the rope */
34017 	rope = (zend_string**)EX_VAR(opline->result.var);
34018 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34019 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34020 		rope[0] = zend_string_copy(Z_STR_P(var));
34021 	} else {
34022 		var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34023 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
34024 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
34025 				rope[0] = zend_string_copy(Z_STR_P(var));
34026 			} else {
34027 				rope[0] = Z_STR_P(var);
34028 			}
34029 		} else {
34030 			SAVE_OPLINE();
34031 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
34032 				GET_OP2_UNDEF_CV(var, BP_VAR_R);
34033 			}
34034 			rope[0] = _zval_get_string_func(var);
34035 			zval_ptr_dtor_nogc(free_op2);
34036 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34037 		}
34038 	}
34039 	ZEND_VM_NEXT_OPCODE();
34040 }
34041 
34042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34043 {
34044 	USE_OPLINE
34045 	zval *function_name;
34046 	zend_free_op free_op2;
34047 	zval *object;
34048 	zend_function *fbc;
34049 	zend_class_entry *called_scope;
34050 	zend_object *obj;
34051 	zend_execute_data *call;
34052 	uint32_t call_info;
34053 
34054 	SAVE_OPLINE();
34055 
34056 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34057 
34058 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
34059 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34060 		do {
34061 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
34062 				function_name = Z_REFVAL_P(function_name);
34063 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34064 					break;
34065 				}
34066 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34067 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
34068 				if (UNEXPECTED(EG(exception) != NULL)) {
34069 					HANDLE_EXCEPTION();
34070 				}
34071 			}
34072 			zend_throw_error(NULL, "Method name must be a string");
34073 			zval_ptr_dtor_nogc(free_op2);
34074 
34075 			HANDLE_EXCEPTION();
34076 		} while (0);
34077 	}
34078 
34079 	object = _get_obj_zval_ptr_unused(execute_data);
34080 
34081 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34082 		zend_throw_error(NULL, "Using $this when not in object context");
34083 		zval_ptr_dtor_nogc(free_op2);
34084 		HANDLE_EXCEPTION();
34085 	}
34086 
34087 	if (IS_UNUSED != IS_UNUSED) {
34088 		do {
34089 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34090 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
34091 					object = Z_REFVAL_P(object);
34092 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
34093 						break;
34094 					}
34095 				}
34096 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34097 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
34098 					if (UNEXPECTED(EG(exception) != NULL)) {
34099 						zval_ptr_dtor_nogc(free_op2);
34100 						HANDLE_EXCEPTION();
34101 					}
34102 				}
34103 				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)));
34104 				zval_ptr_dtor_nogc(free_op2);
34105 
34106 				HANDLE_EXCEPTION();
34107 			}
34108 		} while (0);
34109 	}
34110 
34111 	obj = Z_OBJ_P(object);
34112 	called_scope = obj->ce;
34113 
34114 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
34115 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
34116 	    zend_object *orig_obj = obj;
34117 
34118 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
34119 			zend_throw_error(NULL, "Object does not support method calls");
34120 			zval_ptr_dtor_nogc(free_op2);
34121 
34122 			HANDLE_EXCEPTION();
34123 		}
34124 
34125 		/* First, locate the function. */
34126 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
34127 		if (UNEXPECTED(fbc == NULL)) {
34128 			if (EXPECTED(!EG(exception))) {
34129 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
34130 			}
34131 			zval_ptr_dtor_nogc(free_op2);
34132 
34133 			HANDLE_EXCEPTION();
34134 		}
34135 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34136 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
34137 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34138 		    EXPECTED(obj == orig_obj)) {
34139 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
34140 		}
34141 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
34142 			init_func_run_time_cache(&fbc->op_array);
34143 		}
34144 	}
34145 
34146 	call_info = ZEND_CALL_NESTED_FUNCTION;
34147 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
34148 		obj = NULL;
34149 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
34150 		/* CV may be changed indirectly (e.g. when it's a reference) */
34151 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
34152 		GC_REFCOUNT(obj)++; /* For $this pointer */
34153 	}
34154 
34155 	zval_ptr_dtor_nogc(free_op2);
34156 
34157 	if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
34158 		HANDLE_EXCEPTION();
34159 	}
34160 
34161 	call = zend_vm_stack_push_call_frame(call_info,
34162 		fbc, opline->extended_value, called_scope, obj);
34163 	call->prev_execute_data = EX(call);
34164 	EX(call) = call;
34165 
34166 	ZEND_VM_NEXT_OPCODE();
34167 }
34168 
34169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34170 {
34171 	USE_OPLINE
34172 	zval *function_name;
34173 	zend_class_entry *ce;
34174 	zend_object *object;
34175 	zend_function *fbc;
34176 	zend_execute_data *call;
34177 
34178 	SAVE_OPLINE();
34179 
34180 	if (IS_UNUSED == IS_CONST) {
34181 		/* no function found. try a static method in class */
34182 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
34183 		if (UNEXPECTED(ce == NULL)) {
34184 			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);
34185 			if (UNEXPECTED(ce == NULL)) {
34186 				ZEND_ASSERT(EG(exception));
34187 				HANDLE_EXCEPTION();
34188 			}
34189 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
34190 		}
34191 	} else if (IS_UNUSED == IS_UNUSED) {
34192 		ce = zend_fetch_class(NULL, opline->op1.num);
34193 		if (UNEXPECTED(ce == NULL)) {
34194 			ZEND_ASSERT(EG(exception));
34195 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34196 			HANDLE_EXCEPTION();
34197 		}
34198 	} else {
34199 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34200 	}
34201 
34202 	if (IS_UNUSED == IS_CONST &&
34203 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
34204 	    EXPECTED((fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) != NULL)) {
34205 		/* nothing to do */
34206 	} else if (IS_UNUSED != IS_CONST &&
34207 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
34208 	           (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
34209 		/* do nothing */
34210 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
34211 		zend_free_op free_op2;
34212 
34213 		function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34214 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34215 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34216 				do {
34217 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
34218 						function_name = Z_REFVAL_P(function_name);
34219 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34220 							break;
34221 						}
34222 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34223 						GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
34224 						if (UNEXPECTED(EG(exception) != NULL)) {
34225 							HANDLE_EXCEPTION();
34226 						}
34227 					}
34228 					zend_throw_error(NULL, "Function name must be a string");
34229 					zval_ptr_dtor_nogc(free_op2);
34230 					HANDLE_EXCEPTION();
34231 				} while (0);
34232  			}
34233 		}
34234 
34235 		if (ce->get_static_method) {
34236 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
34237 		} else {
34238 			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));
34239 		}
34240 		if (UNEXPECTED(fbc == NULL)) {
34241 			if (EXPECTED(!EG(exception))) {
34242 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(ce->name), Z_STRVAL_P(function_name));
34243 			}
34244 			zval_ptr_dtor_nogc(free_op2);
34245 			HANDLE_EXCEPTION();
34246 		}
34247 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
34248 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
34249 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
34250 			if (IS_UNUSED == IS_CONST) {
34251 				CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
34252 			} else {
34253 				CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), ce, fbc);
34254 			}
34255 		}
34256 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
34257 			init_func_run_time_cache(&fbc->op_array);
34258 		}
34259 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34260 			zval_ptr_dtor_nogc(free_op2);
34261 		}
34262 	} else {
34263 		if (UNEXPECTED(ce->constructor == NULL)) {
34264 			zend_throw_error(NULL, "Cannot call constructor");
34265 			HANDLE_EXCEPTION();
34266 		}
34267 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
34268 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
34269 			HANDLE_EXCEPTION();
34270 		}
34271 		fbc = ce->constructor;
34272 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
34273 			init_func_run_time_cache(&fbc->op_array);
34274 		}
34275 	}
34276 
34277 	object = NULL;
34278 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
34279 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
34280 			object = Z_OBJ(EX(This));
34281 			ce = object->ce;
34282 		} else {
34283 			if (fbc->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
34284 				/* Allowed for PHP 4 compatibility. */
34285 				zend_error(
34286 					E_DEPRECATED,
34287 					"Non-static method %s::%s() should not be called statically",
34288 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
34289 				if (UNEXPECTED(EG(exception) != NULL)) {
34290 					HANDLE_EXCEPTION();
34291 				}
34292 			} else {
34293 				/* An internal function assumes $this is present and won't check that.
34294 				 * So PHP would crash by allowing the call. */
34295 				zend_throw_error(
34296 					zend_ce_error,
34297 					"Non-static method %s::%s() cannot be called statically",
34298 					ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
34299 				HANDLE_EXCEPTION();
34300 			}
34301 		}
34302 	}
34303 
34304 	if (IS_UNUSED == IS_UNUSED) {
34305 		/* previous opcode is ZEND_FETCH_CLASS */
34306 		if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
34307 		    (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
34308 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
34309 				ce = Z_OBJCE(EX(This));
34310 			} else {
34311 				ce = Z_CE(EX(This));
34312 			}
34313 		}
34314 	}
34315 
34316 	call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
34317 		fbc, opline->extended_value, ce, object);
34318 	call->prev_execute_data = EX(call);
34319 	EX(call) = call;
34320 
34321 	ZEND_VM_NEXT_OPCODE();
34322 }
34323 
34324 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34325 {
34326 	zval *array;
34327 	uint32_t size;
34328 	USE_OPLINE
34329 
34330 	array = EX_VAR(opline->result.var);
34331 	if (IS_UNUSED != IS_UNUSED) {
34332 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
34333 	} else {
34334 		size = 0;
34335 	}
34336 	ZVAL_NEW_ARR(array);
34337 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
34338 
34339 	if (IS_UNUSED != IS_UNUSED) {
34340 		/* Explicitly initialize array as not-packed if flag is set */
34341 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
34342 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
34343 		}
34344 	}
34345 
34346 	if (IS_UNUSED == IS_UNUSED) {
34347 		ZEND_VM_NEXT_OPCODE();
34348 #if 0 || (IS_UNUSED != IS_UNUSED)
34349 	} else {
34350 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34351 #endif
34352 	}
34353 }
34354 
34355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34356 {
34357 	USE_OPLINE
34358 	zend_free_op free_op2;
34359 	zval *container;
34360 	zval *offset;
34361 
34362 	SAVE_OPLINE();
34363 	container = _get_obj_zval_ptr_unused(execute_data);
34364 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34365 		zend_throw_error(NULL, "Using $this when not in object context");
34366 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34367 		HANDLE_EXCEPTION();
34368 	}
34369 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34370 
34371 	do {
34372 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34373 			if (Z_ISREF_P(container)) {
34374 				container = Z_REFVAL_P(container);
34375 				if (Z_TYPE_P(container) != IS_OBJECT) {
34376 					break;
34377 				}
34378 			} else {
34379 				break;
34380 			}
34381 		}
34382 		if (Z_OBJ_HT_P(container)->unset_property) {
34383 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
34384 		} else {
34385 			zend_error(E_NOTICE, "Trying to unset property of non-object");
34386 		}
34387 	} while (0);
34388 
34389 	zval_ptr_dtor_nogc(free_op2);
34390 
34391 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34392 }
34393 
34394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34395 {
34396 	USE_OPLINE
34397 	zend_free_op free_op2;
34398 	zval *container;
34399 	int result;
34400 	zval *offset;
34401 
34402 	SAVE_OPLINE();
34403 	container = _get_obj_zval_ptr_unused(execute_data);
34404 
34405 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34406 		zend_throw_error(NULL, "Using $this when not in object context");
34407 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34408 		HANDLE_EXCEPTION();
34409 	}
34410 
34411 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
34412 
34413 	if (IS_UNUSED == IS_CONST ||
34414 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34415 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34416 			container = Z_REFVAL_P(container);
34417 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34418 				goto isset_no_object;
34419 			}
34420 		} else {
34421 			goto isset_no_object;
34422 		}
34423 	}
34424 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
34425 		zend_error(E_NOTICE, "Trying to check property of non-object");
34426 isset_no_object:
34427 		result = ((opline->extended_value & ZEND_ISSET) == 0);
34428 	} else {
34429 		result =
34430 			((opline->extended_value & ZEND_ISSET) == 0) ^
34431 			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));
34432 	}
34433 
34434 	zval_ptr_dtor_nogc(free_op2);
34435 
34436 	ZEND_VM_SMART_BRANCH(result, 1);
34437 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
34438 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34439 }
34440 
34441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34442 {
34443 	USE_OPLINE
34444 
34445 
34446 	SAVE_OPLINE();
34447 	bitwise_not_function(EX_VAR(opline->result.var),
34448 		_get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var));
34449 
34450 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34451 }
34452 
34453 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34454 {
34455 	USE_OPLINE
34456 	zval *val;
34457 
34458 
34459 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34460 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
34461 		ZVAL_FALSE(EX_VAR(opline->result.var));
34462 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34463 		ZVAL_TRUE(EX_VAR(opline->result.var));
34464 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34465 			SAVE_OPLINE();
34466 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34467 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34468 		}
34469 	} else {
34470 		SAVE_OPLINE();
34471 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
34472 
34473 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34474 	}
34475 	ZEND_VM_NEXT_OPCODE();
34476 }
34477 
34478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34479 {
34480 	USE_OPLINE
34481 
34482 	zval *var_ptr;
34483 
34484 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34485 
34486 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34487 		fast_long_increment_function(var_ptr);
34488 		if (UNEXPECTED(0)) {
34489 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34490 		}
34491 		ZEND_VM_NEXT_OPCODE();
34492 	}
34493 
34494 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34495 		if (UNEXPECTED(0)) {
34496 			ZVAL_NULL(EX_VAR(opline->result.var));
34497 		}
34498 		ZEND_VM_NEXT_OPCODE();
34499 	}
34500 
34501 	SAVE_OPLINE();
34502 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34503 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34504 	}
34505 	ZVAL_DEREF(var_ptr);
34506 	SEPARATE_ZVAL_NOREF(var_ptr);
34507 
34508 	increment_function(var_ptr);
34509 
34510 	if (UNEXPECTED(0)) {
34511 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
34512 	}
34513 
34514 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34515 }
34516 
34517 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34518 {
34519 	USE_OPLINE
34520 
34521 	zval *var_ptr;
34522 
34523 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34524 
34525 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34526 		fast_long_increment_function(var_ptr);
34527 		if (UNEXPECTED(1)) {
34528 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34529 		}
34530 		ZEND_VM_NEXT_OPCODE();
34531 	}
34532 
34533 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34534 		if (UNEXPECTED(1)) {
34535 			ZVAL_NULL(EX_VAR(opline->result.var));
34536 		}
34537 		ZEND_VM_NEXT_OPCODE();
34538 	}
34539 
34540 	SAVE_OPLINE();
34541 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34542 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34543 	}
34544 	ZVAL_DEREF(var_ptr);
34545 	SEPARATE_ZVAL_NOREF(var_ptr);
34546 
34547 	increment_function(var_ptr);
34548 
34549 	if (UNEXPECTED(1)) {
34550 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
34551 	}
34552 
34553 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34554 }
34555 
34556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34557 {
34558 	USE_OPLINE
34559 
34560 	zval *var_ptr;
34561 
34562 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34563 
34564 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34565 		fast_long_decrement_function(var_ptr);
34566 		if (UNEXPECTED(0)) {
34567 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34568 		}
34569 		ZEND_VM_NEXT_OPCODE();
34570 	}
34571 
34572 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34573 		if (UNEXPECTED(0)) {
34574 			ZVAL_NULL(EX_VAR(opline->result.var));
34575 		}
34576 		ZEND_VM_NEXT_OPCODE();
34577 	}
34578 
34579 	SAVE_OPLINE();
34580 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34581 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34582 	}
34583 	ZVAL_DEREF(var_ptr);
34584 	SEPARATE_ZVAL_NOREF(var_ptr);
34585 
34586 	decrement_function(var_ptr);
34587 
34588 	if (UNEXPECTED(0)) {
34589 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
34590 	}
34591 
34592 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34593 }
34594 
34595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34596 {
34597 	USE_OPLINE
34598 
34599 	zval *var_ptr;
34600 
34601 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34602 
34603 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34604 		fast_long_decrement_function(var_ptr);
34605 		if (UNEXPECTED(1)) {
34606 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34607 		}
34608 		ZEND_VM_NEXT_OPCODE();
34609 	}
34610 
34611 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34612 		if (UNEXPECTED(1)) {
34613 			ZVAL_NULL(EX_VAR(opline->result.var));
34614 		}
34615 		ZEND_VM_NEXT_OPCODE();
34616 	}
34617 
34618 	SAVE_OPLINE();
34619 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34620 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34621 	}
34622 	ZVAL_DEREF(var_ptr);
34623 	SEPARATE_ZVAL_NOREF(var_ptr);
34624 
34625 	decrement_function(var_ptr);
34626 
34627 	if (UNEXPECTED(1)) {
34628 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
34629 	}
34630 
34631 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34632 }
34633 
34634 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34635 {
34636 	USE_OPLINE
34637 
34638 	zval *var_ptr;
34639 
34640 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34641 
34642 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34643 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34644 		fast_long_increment_function(var_ptr);
34645 		ZEND_VM_NEXT_OPCODE();
34646 	}
34647 
34648 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34649 		ZVAL_NULL(EX_VAR(opline->result.var));
34650 		ZEND_VM_NEXT_OPCODE();
34651 	}
34652 
34653 	SAVE_OPLINE();
34654 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34655 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34656 	}
34657 	ZVAL_DEREF(var_ptr);
34658 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34659 	zval_opt_copy_ctor(var_ptr);
34660 
34661 	increment_function(var_ptr);
34662 
34663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34664 }
34665 
34666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34667 {
34668 	USE_OPLINE
34669 
34670 	zval *var_ptr;
34671 
34672 	var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
34673 
34674 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
34675 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34676 		fast_long_decrement_function(var_ptr);
34677 		ZEND_VM_NEXT_OPCODE();
34678 	}
34679 
34680 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
34681 		ZVAL_NULL(EX_VAR(opline->result.var));
34682 		ZEND_VM_NEXT_OPCODE();
34683 	}
34684 
34685 	SAVE_OPLINE();
34686 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
34687 		var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
34688 	}
34689 	ZVAL_DEREF(var_ptr);
34690 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
34691 	zval_opt_copy_ctor(var_ptr);
34692 
34693 	decrement_function(var_ptr);
34694 
34695 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34696 }
34697 
34698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34699 {
34700 	USE_OPLINE
34701 
34702 	zval *z;
34703 
34704 	SAVE_OPLINE();
34705 	z = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34706 
34707 	if (Z_TYPE_P(z) == IS_STRING) {
34708 		zend_string *str = Z_STR_P(z);
34709 
34710 		if (ZSTR_LEN(str) != 0) {
34711 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
34712 		}
34713 	} else {
34714 		zend_string *str = _zval_get_string_func(z);
34715 
34716 		if (ZSTR_LEN(str) != 0) {
34717 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
34718 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
34719 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
34720 		}
34721 		zend_string_release(str);
34722 	}
34723 
34724 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34725 }
34726 
34727 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34728 {
34729 	USE_OPLINE
34730 
34731 	zval *val;
34732 
34733 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34734 
34735 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
34736 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
34737 		ZEND_VM_CONTINUE();
34738 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34739 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34740 			SAVE_OPLINE();
34741 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34742 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
34743 		} else {
34744 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
34745 			ZEND_VM_CONTINUE();
34746 		}
34747 	}
34748 
34749 	SAVE_OPLINE();
34750 	if (i_zend_is_true(val)) {
34751 		opline++;
34752 	} else {
34753 		opline = OP_JMP_ADDR(opline, opline->op2);
34754 	}
34755 
34756 	ZEND_VM_JMP(opline);
34757 }
34758 
34759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34760 {
34761 	USE_OPLINE
34762 
34763 	zval *val;
34764 
34765 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34766 
34767 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
34768 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
34769 		ZEND_VM_CONTINUE();
34770 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34771 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34772 			SAVE_OPLINE();
34773 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34774 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34775 		} else {
34776 			ZEND_VM_NEXT_OPCODE();
34777 		}
34778 	}
34779 
34780 	SAVE_OPLINE();
34781 	if (i_zend_is_true(val)) {
34782 		opline = OP_JMP_ADDR(opline, opline->op2);
34783 	} else {
34784 		opline++;
34785 	}
34786 
34787 	ZEND_VM_JMP(opline);
34788 }
34789 
34790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34791 {
34792 	USE_OPLINE
34793 
34794 	zval *val;
34795 
34796 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34797 
34798 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
34799 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
34800 		ZEND_VM_CONTINUE();
34801 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34802 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34803 			SAVE_OPLINE();
34804 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34805 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
34806 		} else {
34807 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
34808 			ZEND_VM_CONTINUE();
34809 		}
34810 	}
34811 
34812 	SAVE_OPLINE();
34813 	if (i_zend_is_true(val)) {
34814 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
34815 	} else {
34816 		opline = OP_JMP_ADDR(opline, opline->op2);
34817 	}
34818 
34819 	ZEND_VM_JMP(opline);
34820 }
34821 
34822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34823 {
34824 	USE_OPLINE
34825 
34826 	zval *val;
34827 	int ret;
34828 
34829 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34830 
34831 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
34832 		ZVAL_TRUE(EX_VAR(opline->result.var));
34833 		ZEND_VM_NEXT_OPCODE();
34834 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34835 		ZVAL_FALSE(EX_VAR(opline->result.var));
34836 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34837 			SAVE_OPLINE();
34838 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34839 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
34840 		} else {
34841 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
34842 			ZEND_VM_CONTINUE();
34843 		}
34844 	}
34845 
34846 	SAVE_OPLINE();
34847 	ret = i_zend_is_true(val);
34848 
34849 	if (ret) {
34850 		ZVAL_TRUE(EX_VAR(opline->result.var));
34851 		opline++;
34852 	} else {
34853 		ZVAL_FALSE(EX_VAR(opline->result.var));
34854 		opline = OP_JMP_ADDR(opline, opline->op2);
34855 	}
34856 	ZEND_VM_JMP(opline);
34857 }
34858 
34859 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34860 {
34861 	USE_OPLINE
34862 
34863 	zval *val;
34864 	int ret;
34865 
34866 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34867 
34868 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
34869 		ZVAL_TRUE(EX_VAR(opline->result.var));
34870 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
34871 		ZEND_VM_CONTINUE();
34872 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
34873 		ZVAL_FALSE(EX_VAR(opline->result.var));
34874 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
34875 			SAVE_OPLINE();
34876 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
34877 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34878 		} else {
34879 			ZEND_VM_NEXT_OPCODE();
34880 		}
34881 	}
34882 
34883 	SAVE_OPLINE();
34884 	ret = i_zend_is_true(val);
34885 
34886 	if (ret) {
34887 		ZVAL_TRUE(EX_VAR(opline->result.var));
34888 		opline = OP_JMP_ADDR(opline, opline->op2);
34889 	} else {
34890 		ZVAL_FALSE(EX_VAR(opline->result.var));
34891 		opline++;
34892 	}
34893 	ZEND_VM_JMP(opline);
34894 }
34895 
34896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34897 {
34898 	USE_OPLINE
34899 	zval *retval_ptr;
34900 	zval *return_value;
34901 	zend_free_op free_op1;
34902 
34903 	retval_ptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
34904 	return_value = EX(return_value);
34905 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
34906 		SAVE_OPLINE();
34907 		retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R);
34908 		if (return_value) {
34909 			ZVAL_NULL(return_value);
34910 		}
34911 	} else if (!return_value) {
34912 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
34913 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
34914 				SAVE_OPLINE();
34915 				zval_dtor_func(Z_COUNTED_P(free_op1));
34916 			}
34917 		}
34918 	} else {
34919 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
34920 			ZVAL_COPY_VALUE(return_value, retval_ptr);
34921 			if (IS_CV == IS_CONST) {
34922 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
34923 					Z_ADDREF_P(return_value);
34924 				}
34925 			}
34926 		} else if (IS_CV == IS_CV) {
34927 			if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
34928 				if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
34929 					ZVAL_COPY_VALUE(return_value, retval_ptr);
34930 					if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
34931 						ZVAL_NULL(retval_ptr);
34932 					} else {
34933 						Z_ADDREF_P(return_value);
34934 					}
34935 				} else {
34936 					retval_ptr = Z_REFVAL_P(retval_ptr);
34937 					ZVAL_COPY(return_value, retval_ptr);
34938 				}
34939 			} else {
34940 				ZVAL_COPY_VALUE(return_value, retval_ptr);
34941 			}
34942 		} else /* if (IS_CV == IS_VAR) */ {
34943 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
34944 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
34945 
34946 				retval_ptr = Z_REFVAL_P(retval_ptr);
34947 				ZVAL_COPY_VALUE(return_value, retval_ptr);
34948 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
34949 					efree_size(ref, sizeof(zend_reference));
34950 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
34951 					Z_ADDREF_P(retval_ptr);
34952 				}
34953 			} else {
34954 				ZVAL_COPY_VALUE(return_value, retval_ptr);
34955 			}
34956 		}
34957 	}
34958 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34959 }
34960 
34961 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34962 {
34963 	USE_OPLINE
34964 	zval *retval_ptr;
34965 
34966 
34967 	SAVE_OPLINE();
34968 
34969 	do {
34970 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
34971 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
34972 			/* Not supposed to happen, but we'll allow it */
34973 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
34974 
34975 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
34976 			if (!EX(return_value)) {
34977 
34978 			} else {
34979 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
34980 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
34981 					break;
34982 				}
34983 
34984 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
34985 				if (IS_CV == IS_CONST) {
34986 					if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
34987 				}
34988 			}
34989 			break;
34990 		}
34991 
34992 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
34993 
34994 		if (IS_CV == IS_VAR) {
34995 			if (retval_ptr == &EG(uninitialized_zval) ||
34996 			    (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) {
34997 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
34998 				if (EX(return_value)) {
34999 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
35000 				} else {
35001 
35002 				}
35003 				break;
35004 			}
35005 		}
35006 
35007 		if (EX(return_value)) {
35008 			ZVAL_MAKE_REF(retval_ptr);
35009 			Z_ADDREF_P(retval_ptr);
35010 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
35011 		}
35012 
35013 	} while (0);
35014 
35015 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35016 }
35017 
35018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35019 {
35020 	USE_OPLINE
35021 	zval *retval;
35022 
35023 
35024 	zend_generator *generator = zend_get_running_generator(execute_data);
35025 
35026 	SAVE_OPLINE();
35027 	retval = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35028 
35029 	/* Copy return value into generator->retval */
35030 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
35031 		ZVAL_COPY_VALUE(&generator->retval, retval);
35032 		if (IS_CV == IS_CONST) {
35033 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
35034 				Z_ADDREF(generator->retval);
35035 			}
35036 		}
35037 	} else if (IS_CV == IS_CV) {
35038 		ZVAL_DEREF(retval);
35039 		ZVAL_COPY(&generator->retval, retval);
35040 	} else /* if (IS_CV == IS_VAR) */ {
35041 		if (UNEXPECTED(Z_ISREF_P(retval))) {
35042 			zend_refcounted *ref = Z_COUNTED_P(retval);
35043 
35044 			retval = Z_REFVAL_P(retval);
35045 			ZVAL_COPY_VALUE(&generator->retval, retval);
35046 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
35047 				efree_size(ref, sizeof(zend_reference));
35048 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
35049 				Z_ADDREF_P(retval);
35050 			}
35051 		} else {
35052 			ZVAL_COPY_VALUE(&generator->retval, retval);
35053 		}
35054 	}
35055 
35056 	/* Close the generator to free up resources */
35057 	zend_generator_close(generator, 1);
35058 
35059 	/* Pass execution back to handling code */
35060 	ZEND_VM_RETURN();
35061 }
35062 
35063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35064 {
35065 	USE_OPLINE
35066 	zval *value;
35067 
35068 
35069 	SAVE_OPLINE();
35070 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35071 
35072 	do {
35073 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
35074 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
35075 				value = Z_REFVAL_P(value);
35076 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
35077 					break;
35078 				}
35079 			}
35080 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
35081 				GET_OP1_UNDEF_CV(value, BP_VAR_R);
35082 				if (UNEXPECTED(EG(exception) != NULL)) {
35083 					HANDLE_EXCEPTION();
35084 				}
35085 			}
35086 			zend_throw_error(NULL, "Can only throw objects");
35087 
35088 			HANDLE_EXCEPTION();
35089 		}
35090 	} while (0);
35091 
35092 	zend_exception_save();
35093 	if (IS_CV != IS_TMP_VAR) {
35094 		if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
35095 	}
35096 
35097 	zend_throw_exception_object(value);
35098 	zend_exception_restore();
35099 
35100 	HANDLE_EXCEPTION();
35101 }
35102 
35103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35104 {
35105 	USE_OPLINE
35106 	zval *varptr, *arg;
35107 
35108 
35109 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35110 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
35111 		SAVE_OPLINE();
35112 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
35113 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35114 		ZVAL_NULL(arg);
35115 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35116 	}
35117 
35118 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35119 
35120 	if (IS_CV == IS_CV) {
35121 		ZVAL_OPT_DEREF(varptr);
35122 		ZVAL_COPY(arg, varptr);
35123 	} else /* if (IS_CV == IS_VAR) */ {
35124 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
35125 			zend_refcounted *ref = Z_COUNTED_P(varptr);
35126 
35127 			varptr = Z_REFVAL_P(varptr);
35128 			ZVAL_COPY_VALUE(arg, varptr);
35129 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
35130 				efree_size(ref, sizeof(zend_reference));
35131 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
35132 				Z_ADDREF_P(arg);
35133 			}
35134 		} else {
35135 			ZVAL_COPY_VALUE(arg, varptr);
35136 		}
35137 	}
35138 
35139 	ZEND_VM_NEXT_OPCODE();
35140 }
35141 
35142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35143 {
35144 	USE_OPLINE
35145 
35146 	zval *varptr, *arg;
35147 
35148 	SAVE_OPLINE();
35149 	varptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
35150 
35151 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35152 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
35153 		ZVAL_NEW_EMPTY_REF(arg);
35154 		ZVAL_NULL(Z_REFVAL_P(arg));
35155 		ZEND_VM_NEXT_OPCODE();
35156 	}
35157 
35158 	if (Z_ISREF_P(varptr)) {
35159 		Z_ADDREF_P(varptr);
35160 		ZVAL_COPY_VALUE(arg, varptr);
35161 	} else {
35162 		ZVAL_NEW_REF(arg, varptr);
35163 		Z_ADDREF_P(arg);
35164 		ZVAL_REF(varptr, Z_REF_P(arg));
35165 	}
35166 
35167 	ZEND_VM_NEXT_OPCODE();
35168 }
35169 
35170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35171 {
35172 	USE_OPLINE
35173 	zval *varptr, *arg;
35174 
35175 	uint32_t arg_num = opline->op2.num;
35176 
35177 	if (EXPECTED(0)) {
35178 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35179 			goto send_var_by_ref;
35180 		}
35181 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35182 send_var_by_ref:
35183 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35184 	}
35185 
35186 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35187 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
35188 		SAVE_OPLINE();
35189 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
35190 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35191 		ZVAL_NULL(arg);
35192 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35193 	}
35194 
35195 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35196 
35197 	if (IS_CV == IS_CV) {
35198 		ZVAL_OPT_DEREF(varptr);
35199 		ZVAL_COPY(arg, varptr);
35200 	} else /* if (IS_CV == IS_VAR) */ {
35201 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
35202 			zend_refcounted *ref = Z_COUNTED_P(varptr);
35203 
35204 			varptr = Z_REFVAL_P(varptr);
35205 			ZVAL_COPY_VALUE(arg, varptr);
35206 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
35207 				efree_size(ref, sizeof(zend_reference));
35208 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
35209 				Z_ADDREF_P(arg);
35210 			}
35211 		} else {
35212 			ZVAL_COPY_VALUE(arg, varptr);
35213 		}
35214 	}
35215 
35216 	ZEND_VM_NEXT_OPCODE();
35217 }
35218 
35219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35220 {
35221 	USE_OPLINE
35222 	zval *varptr, *arg;
35223 
35224 	uint32_t arg_num = opline->op2.num;
35225 
35226 	if (EXPECTED(1)) {
35227 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35228 			goto send_var_by_ref;
35229 		}
35230 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
35231 send_var_by_ref:
35232 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35233 	}
35234 
35235 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35236 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
35237 		SAVE_OPLINE();
35238 		GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
35239 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35240 		ZVAL_NULL(arg);
35241 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35242 	}
35243 
35244 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
35245 
35246 	if (IS_CV == IS_CV) {
35247 		ZVAL_OPT_DEREF(varptr);
35248 		ZVAL_COPY(arg, varptr);
35249 	} else /* if (IS_CV == IS_VAR) */ {
35250 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
35251 			zend_refcounted *ref = Z_COUNTED_P(varptr);
35252 
35253 			varptr = Z_REFVAL_P(varptr);
35254 			ZVAL_COPY_VALUE(arg, varptr);
35255 			if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
35256 				efree_size(ref, sizeof(zend_reference));
35257 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
35258 				Z_ADDREF_P(arg);
35259 			}
35260 		} else {
35261 			ZVAL_COPY_VALUE(arg, varptr);
35262 		}
35263 	}
35264 
35265 	ZEND_VM_NEXT_OPCODE();
35266 }
35267 
35268 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35269 {
35270 	USE_OPLINE
35271 	zval *arg, *param;
35272 
35273 
35274 	SAVE_OPLINE();
35275 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
35276 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
35277 
35278 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
35279 		zend_error(E_WARNING, "Parameter %d to %s%s%s() expected to be a reference, value given",
35280 			opline->op2.num,
35281 			EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
35282 			EX(call)->func->common.scope ? "::" : "",
35283 			ZSTR_VAL(EX(call)->func->common.function_name));
35284 	}
35285 
35286 	ZVAL_COPY(param, arg);
35287 
35288 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35289 }
35290 
35291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35292 {
35293 	USE_OPLINE
35294 	zval *val;
35295 
35296 
35297 	val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35298 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
35299 		ZVAL_TRUE(EX_VAR(opline->result.var));
35300 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
35301 		ZVAL_FALSE(EX_VAR(opline->result.var));
35302 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
35303 			SAVE_OPLINE();
35304 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
35305 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35306 		}
35307 	} else {
35308 		SAVE_OPLINE();
35309 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
35310 
35311 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35312 	}
35313 	ZEND_VM_NEXT_OPCODE();
35314 }
35315 
35316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35317 {
35318 	USE_OPLINE
35319 
35320 	zval *obj;
35321 	zend_object *clone_obj;
35322 	zend_class_entry *ce, *scope;
35323 	zend_function *clone;
35324 	zend_object_clone_obj_t clone_call;
35325 
35326 	SAVE_OPLINE();
35327 	obj = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35328 
35329 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
35330 		zend_throw_error(NULL, "Using $this when not in object context");
35331 		HANDLE_EXCEPTION();
35332 	}
35333 
35334 	do {
35335 		if (IS_CV == IS_CONST ||
35336 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
35337 		    if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
35338 		    	obj = Z_REFVAL_P(obj);
35339 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
35340 		    		break;
35341 				}
35342 			}
35343 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
35344 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
35345 				if (UNEXPECTED(EG(exception) != NULL)) {
35346 					HANDLE_EXCEPTION();
35347 				}
35348 			}
35349 			zend_throw_error(NULL, "__clone method called on non-object");
35350 
35351 			HANDLE_EXCEPTION();
35352 		}
35353 	} while (0);
35354 
35355 	ce = Z_OBJCE_P(obj);
35356 	clone = ce->clone;
35357 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
35358 	if (UNEXPECTED(clone_call == NULL)) {
35359 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
35360 
35361 		HANDLE_EXCEPTION();
35362 	}
35363 
35364 	if (clone) {
35365 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
35366 			/* Ensure that if we're calling a private function, we're allowed to do so.
35367 			 */
35368 			scope = EX(func)->op_array.scope;
35369 			if (!zend_check_private(clone, scope, clone->common.function_name)) {
35370 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
35371 
35372 				HANDLE_EXCEPTION();
35373 			}
35374 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
35375 			/* Ensure that if we're calling a protected function, we're allowed to do so.
35376 			 */
35377 			scope = EX(func)->op_array.scope;
35378 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
35379 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
35380 
35381 				HANDLE_EXCEPTION();
35382 			}
35383 		}
35384 	}
35385 
35386 	clone_obj = clone_call(obj);
35387 	if (EXPECTED(EG(exception) == NULL)) {
35388 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
35389 	} else {
35390 		OBJ_RELEASE(clone_obj);
35391 	}
35392 
35393 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35394 }
35395 
35396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35397 {
35398 	USE_OPLINE
35399 
35400 	zval *expr;
35401 	zval *result = EX_VAR(opline->result.var);
35402 
35403 	SAVE_OPLINE();
35404 	expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35405 
35406 	switch (opline->extended_value) {
35407 		case IS_NULL:
35408 			/* This code is taken from convert_to_null. However, it does not seems very useful,
35409 			 * because a conversion to null always results in the same value. This could only
35410 			 * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
35411 #if 0
35412 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
35413 				ZVAL_DEREF(expr);
35414 			}
35415 			if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
35416 				if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
35417 					break;
35418 				}
35419 			}
35420 #endif
35421 
35422 			ZVAL_NULL(result);
35423 			break;
35424 		case _IS_BOOL:
35425 			ZVAL_BOOL(result, zend_is_true(expr));
35426 			break;
35427 		case IS_LONG:
35428 			ZVAL_LONG(result, zval_get_long(expr));
35429 			break;
35430 		case IS_DOUBLE:
35431 			ZVAL_DOUBLE(result, zval_get_double(expr));
35432 			break;
35433 		case IS_STRING:
35434 			ZVAL_STR(result, zval_get_string(expr));
35435 			break;
35436 		default:
35437 			if (IS_CV & (IS_VAR|IS_CV)) {
35438 				ZVAL_DEREF(expr);
35439 			}
35440 			/* If value is already of correct type, return it directly */
35441 			if (Z_TYPE_P(expr) == opline->extended_value) {
35442 				ZVAL_COPY_VALUE(result, expr);
35443 				if (IS_CV == IS_CONST) {
35444 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
35445 				} else if (IS_CV != IS_TMP_VAR) {
35446 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
35447 				}
35448 
35449 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35450 			}
35451 
35452 			if (opline->extended_value == IS_ARRAY) {
35453 				if (Z_TYPE_P(expr) != IS_OBJECT) {
35454 					ZVAL_NEW_ARR(result);
35455 					zend_hash_init(Z_ARRVAL_P(result), 8, NULL, ZVAL_PTR_DTOR, 0);
35456 					if (Z_TYPE_P(expr) != IS_NULL) {
35457 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
35458 						if (IS_CV == IS_CONST) {
35459 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
35460 						} else {
35461 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
35462 						}
35463 					}
35464 				} else {
35465 					ZVAL_COPY_VALUE(result, expr);
35466 					Z_ADDREF_P(result);
35467 					convert_to_array(result);
35468 				}
35469 			} else {
35470 				if (Z_TYPE_P(expr) != IS_ARRAY) {
35471 					object_init(result);
35472 					if (Z_TYPE_P(expr) != IS_NULL) {
35473 						expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
35474 						if (IS_CV == IS_CONST) {
35475 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
35476 						} else {
35477 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
35478 						}
35479 					}
35480 				} else {
35481 					ZVAL_COPY(result, expr);
35482 					convert_to_object(result);
35483 				}
35484 			}
35485 	}
35486 
35487 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35488 }
35489 
35490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35491 {
35492 	USE_OPLINE
35493 	zend_op_array *new_op_array;
35494 
35495 	zval *inc_filename;
35496 
35497 	SAVE_OPLINE();
35498 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35499 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
35500 
35501 	if (UNEXPECTED(EG(exception) != NULL)) {
35502 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
35503 			destroy_op_array(new_op_array);
35504 			efree_size(new_op_array, sizeof(zend_op_array));
35505 		}
35506 		HANDLE_EXCEPTION();
35507 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
35508 		if (RETURN_VALUE_USED(opline)) {
35509 			ZVAL_TRUE(EX_VAR(opline->result.var));
35510 		}
35511 	} else if (EXPECTED(new_op_array != NULL)) {
35512 		zval *return_value = NULL;
35513 		zend_execute_data *call;
35514 
35515 		if (RETURN_VALUE_USED(opline)) {
35516 			return_value = EX_VAR(opline->result.var);
35517 		}
35518 
35519 		new_op_array->scope = EX(func)->op_array.scope;
35520 
35521 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
35522 			(zend_function*)new_op_array, 0,
35523 			Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
35524 			Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
35525 
35526 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
35527 			call->symbol_table = EX(symbol_table);
35528 		} else {
35529 			call->symbol_table = zend_rebuild_symbol_table();
35530 		}
35531 
35532 		call->prev_execute_data = execute_data;
35533 		i_init_code_execute_data(call, new_op_array, return_value);
35534 		if (EXPECTED(zend_execute_ex == execute_ex)) {
35535 			ZEND_VM_ENTER();
35536 		} else {
35537 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
35538 			zend_execute_ex(call);
35539 			zend_vm_stack_free_call_frame(call);
35540 		}
35541 
35542 		destroy_op_array(new_op_array);
35543 		efree_size(new_op_array, sizeof(zend_op_array));
35544 		if (UNEXPECTED(EG(exception) != NULL)) {
35545 			zend_throw_exception_internal(NULL);
35546 			HANDLE_EXCEPTION();
35547 		}
35548 	} else if (RETURN_VALUE_USED(opline)) {
35549 		ZVAL_FALSE(EX_VAR(opline->result.var));
35550 	}
35551 	ZEND_VM_SET_OPCODE(opline + 1);
35552 	ZEND_VM_CONTINUE();
35553 }
35554 
35555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35556 {
35557 	USE_OPLINE
35558 
35559 	zval *array_ptr, *result;
35560 	HashTable *fe_ht;
35561 
35562 	SAVE_OPLINE();
35563 
35564 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
35565 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
35566 		result = EX_VAR(opline->result.var);
35567 		ZVAL_COPY_VALUE(result, array_ptr);
35568 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
35569 			Z_ADDREF_P(array_ptr);
35570 		}
35571 		Z_FE_POS_P(result) = 0;
35572 
35573 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35574 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
35575 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
35576 			HashPosition pos = 0;
35577 			Bucket *p;
35578 
35579 			result = EX_VAR(opline->result.var);
35580 			ZVAL_COPY_VALUE(result, array_ptr);
35581 			if (IS_CV != IS_TMP_VAR) {
35582 				Z_ADDREF_P(array_ptr);
35583 			}
35584 			if (Z_OBJ_P(array_ptr)->properties
35585 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
35586 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
35587 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
35588 				}
35589 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
35590 			}
35591 			fe_ht = Z_OBJPROP_P(array_ptr);
35592 			pos = 0;
35593 			p = fe_ht->arData;
35594 			while (1) {
35595 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
35596 
35597 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35598 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35599 				}
35600 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
35601 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
35602 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
35603 				    (UNEXPECTED(!p->key) ||
35604 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
35605 					break;
35606 				}
35607 				pos++;
35608 				p++;
35609 			}
35610 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
35611 
35612 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35613 		} else {
35614 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
35615 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 0);
35616 			zend_bool is_empty;
35617 
35618 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
35619 
35620 				if (iter) {
35621 					OBJ_RELEASE(&iter->std);
35622 				}
35623 				if (!EG(exception)) {
35624 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
35625 				}
35626 				zend_throw_exception_internal(NULL);
35627 				HANDLE_EXCEPTION();
35628 			}
35629 
35630 			iter->index = 0;
35631 			if (iter->funcs->rewind) {
35632 				iter->funcs->rewind(iter);
35633 				if (UNEXPECTED(EG(exception) != NULL)) {
35634 					OBJ_RELEASE(&iter->std);
35635 
35636 					HANDLE_EXCEPTION();
35637 				}
35638 			}
35639 
35640 			is_empty = iter->funcs->valid(iter) != SUCCESS;
35641 
35642 			if (UNEXPECTED(EG(exception) != NULL)) {
35643 				OBJ_RELEASE(&iter->std);
35644 
35645 				HANDLE_EXCEPTION();
35646 			}
35647 			iter->index = -1; /* will be set to 0 before using next handler */
35648 
35649 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
35650 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35651 
35652 			if (is_empty) {
35653 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35654 			} else {
35655 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35656 			}
35657 		}
35658 	} else {
35659 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
35660 		ZVAL_UNDEF(EX_VAR(opline->result.var));
35661 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35662 
35663 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35664 	}
35665 }
35666 
35667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35668 {
35669 	USE_OPLINE
35670 
35671 	zval *array_ptr, *array_ref;
35672 	HashTable *fe_ht;
35673 	HashPosition pos = 0;
35674 	Bucket *p;
35675 
35676 	SAVE_OPLINE();
35677 
35678 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
35679 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35680 		if (Z_ISREF_P(array_ref)) {
35681 			array_ptr = Z_REFVAL_P(array_ref);
35682 		}
35683 	} else {
35684 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35685 	}
35686 
35687 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
35688 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
35689 			if (array_ptr == array_ref) {
35690 				ZVAL_NEW_REF(array_ref, array_ref);
35691 				array_ptr = Z_REFVAL_P(array_ref);
35692 			}
35693 			Z_ADDREF_P(array_ref);
35694 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
35695 		} else {
35696 			array_ref = EX_VAR(opline->result.var);
35697 			ZVAL_NEW_REF(array_ref, array_ptr);
35698 			array_ptr = Z_REFVAL_P(array_ref);
35699 		}
35700 		if (IS_CV == IS_CONST) {
35701 			zval_copy_ctor_func(array_ptr);
35702 		} else {
35703 			SEPARATE_ARRAY(array_ptr);
35704 		}
35705 		fe_ht = Z_ARRVAL_P(array_ptr);
35706 		p = fe_ht->arData;
35707 		while (1) {
35708 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
35709 
35710 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35711 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35712 			}
35713 			if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
35714 			    (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
35715 			     EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
35716 				break;
35717 			}
35718 			pos++;
35719 			p++;
35720 		}
35721 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
35722 
35723 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35724 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
35725 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
35726 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
35727 				if (array_ptr == array_ref) {
35728 					ZVAL_NEW_REF(array_ref, array_ref);
35729 					array_ptr = Z_REFVAL_P(array_ref);
35730 				}
35731 				Z_ADDREF_P(array_ref);
35732 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
35733 			} else {
35734 				array_ptr = EX_VAR(opline->result.var);
35735 				ZVAL_COPY_VALUE(array_ptr, array_ref);
35736 			}
35737 			if (Z_OBJ_P(array_ptr)->properties
35738 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
35739 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
35740 					GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties)--;
35741 				}
35742 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
35743 			}
35744 			fe_ht = Z_OBJPROP_P(array_ptr);
35745 			p = fe_ht->arData;
35746 			while (1) {
35747 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
35748 
35749 					Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35750 					ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35751 				}
35752 				if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
35753 				     (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
35754 				      EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
35755 				    (UNEXPECTED(!p->key) ||
35756 				     EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
35757 					break;
35758 				}
35759 				pos++;
35760 				p++;
35761 			}
35762 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
35763 
35764 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35765 		} else {
35766 			zend_class_entry *ce = Z_OBJCE_P(array_ptr);
35767 			zend_object_iterator *iter = ce->get_iterator(ce, array_ptr, 1);
35768 			zend_bool is_empty;
35769 
35770 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
35771 				if (IS_CV == IS_VAR) {
35772 
35773 				} else {
35774 
35775 				}
35776 				if (!EG(exception)) {
35777 					zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
35778 				}
35779 				zend_throw_exception_internal(NULL);
35780 				HANDLE_EXCEPTION();
35781 			}
35782 
35783 			iter->index = 0;
35784 			if (iter->funcs->rewind) {
35785 				iter->funcs->rewind(iter);
35786 				if (UNEXPECTED(EG(exception) != NULL)) {
35787 					OBJ_RELEASE(&iter->std);
35788 					if (IS_CV == IS_VAR) {
35789 
35790 					} else {
35791 
35792 					}
35793 					HANDLE_EXCEPTION();
35794 				}
35795 			}
35796 
35797 			is_empty = iter->funcs->valid(iter) != SUCCESS;
35798 
35799 			if (UNEXPECTED(EG(exception) != NULL)) {
35800 				OBJ_RELEASE(&iter->std);
35801 				if (IS_CV == IS_VAR) {
35802 
35803 				} else {
35804 
35805 				}
35806 				HANDLE_EXCEPTION();
35807 			}
35808 			iter->index = -1; /* will be set to 0 before using next handler */
35809 
35810 			ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
35811 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35812 
35813 			if (IS_CV == IS_VAR) {
35814 
35815 			} else {
35816 
35817 			}
35818 			if (is_empty) {
35819 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35820 			} else {
35821 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35822 			}
35823 		}
35824 	} else {
35825 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
35826 		ZVAL_UNDEF(EX_VAR(opline->result.var));
35827 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
35828 		if (IS_CV == IS_VAR) {
35829 
35830 		} else {
35831 
35832 		}
35833 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35834 	}
35835 }
35836 
35837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35838 {
35839 	USE_OPLINE
35840 
35841 	SAVE_OPLINE();
35842 	if (IS_CV != IS_UNUSED) {
35843 
35844 		zval *ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35845 
35846 		do {
35847 			if (Z_TYPE_P(ptr) == IS_LONG) {
35848 				EG(exit_status) = Z_LVAL_P(ptr);
35849 			} else {
35850 				if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
35851 					ptr = Z_REFVAL_P(ptr);
35852 					if (Z_TYPE_P(ptr) == IS_LONG) {
35853 						EG(exit_status) = Z_LVAL_P(ptr);
35854 						break;
35855 					}
35856 				}
35857 				zend_print_variable(ptr);
35858 			}
35859 		} while (0);
35860 
35861 	}
35862 	zend_bailout();
35863 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
35864 }
35865 
35866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35867 {
35868 	USE_OPLINE
35869 
35870 	zval *value;
35871 	zval *ref = NULL;
35872 
35873 	SAVE_OPLINE();
35874 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
35875 
35876 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
35877 		if (IS_CV == IS_VAR) {
35878 			ref = value;
35879 		}
35880 		value = Z_REFVAL_P(value);
35881 	}
35882 	if (i_zend_is_true(value)) {
35883 		zval *result = EX_VAR(opline->result.var);
35884 
35885 		ZVAL_COPY_VALUE(result, value);
35886 		if (IS_CV == IS_CONST) {
35887 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
35888 		} else if (IS_CV == IS_CV) {
35889 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
35890 		} else if (IS_CV == IS_VAR && ref) {
35891 			zend_reference *r = Z_REF_P(ref);
35892 
35893 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
35894 				efree_size(r, sizeof(zend_reference));
35895 			} else if (Z_OPT_REFCOUNTED_P(result)) {
35896 				Z_ADDREF_P(result);
35897 			}
35898 		}
35899 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35900 	}
35901 
35902 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35903 }
35904 
35905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35906 {
35907 	USE_OPLINE
35908 
35909 	zval *value;
35910 	zval *ref = NULL;
35911 
35912 	SAVE_OPLINE();
35913 	value = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
35914 
35915 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
35916 		if (IS_CV == IS_VAR) {
35917 			ref = value;
35918 		}
35919 		value = Z_REFVAL_P(value);
35920 	}
35921 
35922 	if (Z_TYPE_P(value) > IS_NULL) {
35923 		zval *result = EX_VAR(opline->result.var);
35924 		ZVAL_COPY_VALUE(result, value);
35925 		if (IS_CV == IS_CONST) {
35926 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
35927 		} else if (IS_CV == IS_CV) {
35928 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
35929 		} else if (IS_CV == IS_VAR && ref) {
35930 			zend_reference *r = Z_REF_P(ref);
35931 
35932 			if (UNEXPECTED(--GC_REFCOUNT(r) == 0)) {
35933 				efree_size(r, sizeof(zend_reference));
35934 			} else if (Z_OPT_REFCOUNTED_P(result)) {
35935 				Z_ADDREF_P(result);
35936 			}
35937 		}
35938 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
35939 	}
35940 
35941 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35942 }
35943 
35944 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35945 {
35946 	USE_OPLINE
35947 
35948 	zval *value;
35949 	zval *result = EX_VAR(opline->result.var);
35950 
35951 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
35952 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
35953 		SAVE_OPLINE();
35954 		GET_OP1_UNDEF_CV(value, BP_VAR_R);
35955 		ZVAL_NULL(result);
35956 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35957 	}
35958 
35959 	if (IS_CV == IS_CV) {
35960 		ZVAL_DEREF(value);
35961 		ZVAL_COPY(result, value);
35962 	} else if (IS_CV == IS_VAR) {
35963 		if (UNEXPECTED(Z_ISREF_P(value))) {
35964 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
35965 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
35966 				efree_size(Z_REF_P(value), sizeof(zend_reference));
35967 			} else if (Z_OPT_REFCOUNTED_P(result)) {
35968 				Z_ADDREF_P(result);
35969 			}
35970 		} else {
35971 			ZVAL_COPY_VALUE(result, value);
35972 		}
35973 	} else {
35974 		ZVAL_COPY_VALUE(result, value);
35975 		if (IS_CV == IS_CONST) {
35976 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
35977 				Z_ADDREF_P(result);
35978 			}
35979 		}
35980 	}
35981 	ZEND_VM_NEXT_OPCODE();
35982 }
35983 
35984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35985 {
35986 	USE_OPLINE
35987 
35988 	zend_generator *generator = zend_get_running_generator(execute_data);
35989 
35990 	zval *val;
35991 
35992 
35993 	SAVE_OPLINE();
35994 	val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
35995 
35996 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
35997 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
35998 
35999 		HANDLE_EXCEPTION();
36000 	}
36001 
36002 	if (Z_TYPE_P(val) == IS_ARRAY) {
36003 		ZVAL_COPY_VALUE(&generator->values, val);
36004 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
36005 			Z_ADDREF_P(val);
36006 		}
36007 		Z_FE_POS(generator->values) = 0;
36008 
36009 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
36010 		zend_class_entry *ce = Z_OBJCE_P(val);
36011 		if (ce == zend_ce_generator) {
36012 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
36013 
36014 			if (IS_CV != IS_TMP_VAR) {
36015 				Z_ADDREF_P(val);
36016 			}
36017 
36018 			if (Z_ISUNDEF(new_gen->retval)) {
36019 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
36020 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
36021 					zval_ptr_dtor(val);
36022 					HANDLE_EXCEPTION();
36023 				} else {
36024 					zend_generator_yield_from(generator, new_gen);
36025 				}
36026 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
36027 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
36028 				zval_ptr_dtor(val);
36029 				HANDLE_EXCEPTION();
36030 			} else {
36031 				if (RETURN_VALUE_USED(opline)) {
36032 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
36033 				}
36034 				ZEND_VM_NEXT_OPCODE();
36035 			}
36036 		} else {
36037 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
36038 
36039 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
36040 				if (!EG(exception)) {
36041 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
36042 				}
36043 				HANDLE_EXCEPTION();
36044 			}
36045 
36046 			iter->index = 0;
36047 			if (iter->funcs->rewind) {
36048 				iter->funcs->rewind(iter);
36049 				if (UNEXPECTED(EG(exception) != NULL)) {
36050 					OBJ_RELEASE(&iter->std);
36051 					HANDLE_EXCEPTION();
36052 				}
36053 			}
36054 
36055 			ZVAL_OBJ(&generator->values, &iter->std);
36056 		}
36057 	} else {
36058 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
36059 		HANDLE_EXCEPTION();
36060 	}
36061 
36062 	/* This is the default return value
36063 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
36064 	if (RETURN_VALUE_USED(opline)) {
36065 		ZVAL_NULL(EX_VAR(opline->result.var));
36066 	}
36067 
36068 	/* This generator has no send target (though the generator we delegate to might have one) */
36069 	generator->send_target = NULL;
36070 
36071 	/* We increment to the next op, so we are at the correct position when the
36072 	 * generator is resumed. */
36073 	ZEND_VM_INC_OPCODE();
36074 
36075 	/* The GOTO VM uses a local opline variable. We need to set the opline
36076 	 * variable in execute_data so we don't resume at an old position. */
36077 	SAVE_OPLINE();
36078 
36079 	ZEND_VM_RETURN();
36080 }
36081 
36082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36083 {
36084 	USE_OPLINE
36085 	zval *value;
36086 
36087 
36088 	SAVE_OPLINE();
36089 	value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36090 try_strlen:
36091 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
36092 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
36093 	} else {
36094 		zend_bool strict;
36095 
36096 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
36097 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
36098 		}
36099 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
36100 			value = Z_REFVAL_P(value);
36101 			goto try_strlen;
36102 		}
36103 		strict = EX_USES_STRICT_TYPES();
36104 		do {
36105 			if (EXPECTED(!strict)) {
36106 				zend_string *str;
36107 				zval tmp;
36108 
36109 				ZVAL_COPY(&tmp, value);
36110 				if (zend_parse_arg_str_weak(&tmp, &str)) {
36111 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
36112 					zval_ptr_dtor(&tmp);
36113 					break;
36114 				}
36115 				zval_ptr_dtor(&tmp);
36116 			}
36117 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
36118 			ZVAL_NULL(EX_VAR(opline->result.var));
36119 		} while (0);
36120 	}
36121 
36122 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36123 }
36124 
36125 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36126 {
36127 	USE_OPLINE
36128 	zval *value;
36129 	int result = 0;
36130 
36131 
36132 	SAVE_OPLINE();
36133 	value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
36134 	if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
36135 		if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
36136 			zend_class_entry *ce = Z_OBJCE_P(value);
36137 
36138 			if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
36139 			    EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
36140 				result = 1;
36141 			}
36142 		} else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
36143 			const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
36144 
36145 			if (EXPECTED(type_name != NULL)) {
36146 				result = 1;
36147 			}
36148 		} else {
36149 			result = 1;
36150 		}
36151 	} else if (UNEXPECTED(opline->extended_value == _IS_BOOL) &&
36152 			   EXPECTED(Z_TYPE_P(value) == IS_TRUE || Z_TYPE_P(value) == IS_FALSE)) {
36153 		result = 1;
36154 	}
36155 
36156 	ZEND_VM_SMART_BRANCH(result, 1);
36157 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
36158 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36159 }
36160 
36161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36162 {
36163 	USE_OPLINE
36164 	zval *varptr, *arg;
36165 
36166 
36167 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36168 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
36169 
36170 	if (IS_CV == IS_CV) {
36171 		ZVAL_COPY(arg, varptr);
36172 	} else /* if (IS_CV == IS_VAR) */ {
36173 		ZVAL_COPY_VALUE(arg, varptr);
36174 	}
36175 
36176 	ZEND_VM_NEXT_OPCODE();
36177 }
36178 
36179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36180 {
36181 	USE_OPLINE
36182 	zval *varptr, *arg;
36183 
36184 	uint32_t arg_num = opline->op2.num;
36185 
36186 	if (EXPECTED(0)) {
36187 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36188 			goto send_var_by_ref_simple;
36189 		}
36190 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36191 send_var_by_ref_simple:
36192 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36193 	}
36194 
36195 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36196 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
36197 
36198 	if (IS_CV == IS_CV) {
36199 		ZVAL_COPY(arg, varptr);
36200 	} else /* if (IS_CV == IS_VAR) */ {
36201 		ZVAL_COPY_VALUE(arg, varptr);
36202 	}
36203 
36204 	ZEND_VM_NEXT_OPCODE();
36205 }
36206 
36207 
36208 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36209 {
36210 	USE_OPLINE
36211 	zval *varptr, *arg;
36212 
36213 	uint32_t arg_num = opline->op2.num;
36214 
36215 	if (EXPECTED(1)) {
36216 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36217 			goto send_var_by_ref_simple;
36218 		}
36219 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36220 send_var_by_ref_simple:
36221 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36222 	}
36223 
36224 	varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36225 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
36226 
36227 	if (IS_CV == IS_CV) {
36228 		ZVAL_COPY(arg, varptr);
36229 	} else /* if (IS_CV == IS_VAR) */ {
36230 		ZVAL_COPY_VALUE(arg, varptr);
36231 	}
36232 
36233 	ZEND_VM_NEXT_OPCODE();
36234 }
36235 
36236 
36237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36238 {
36239 	USE_OPLINE
36240 
36241 	zval *op1, *op2, *result;
36242 
36243 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36244 	op2 = EX_CONSTANT(opline->op2);
36245 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36246 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36247 			result = EX_VAR(opline->result.var);
36248 			fast_long_add_function(result, op1, op2);
36249 			ZEND_VM_NEXT_OPCODE();
36250 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36251 			result = EX_VAR(opline->result.var);
36252 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
36253 			ZEND_VM_NEXT_OPCODE();
36254 		}
36255 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36256 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36257 			result = EX_VAR(opline->result.var);
36258 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
36259 			ZEND_VM_NEXT_OPCODE();
36260 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36261 			result = EX_VAR(opline->result.var);
36262 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
36263 			ZEND_VM_NEXT_OPCODE();
36264 		}
36265 	}
36266 
36267 	SAVE_OPLINE();
36268 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36269 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36270 	}
36271 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36272 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36273 	}
36274 	add_function(EX_VAR(opline->result.var), op1, op2);
36275 
36276 
36277 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36278 }
36279 
36280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36281 {
36282 	USE_OPLINE
36283 
36284 	zval *op1, *op2, *result;
36285 
36286 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36287 	op2 = EX_CONSTANT(opline->op2);
36288 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36289 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36290 			result = EX_VAR(opline->result.var);
36291 			fast_long_sub_function(result, op1, op2);
36292 			ZEND_VM_NEXT_OPCODE();
36293 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36294 			result = EX_VAR(opline->result.var);
36295 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
36296 			ZEND_VM_NEXT_OPCODE();
36297 		}
36298 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36299 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36300 			result = EX_VAR(opline->result.var);
36301 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
36302 			ZEND_VM_NEXT_OPCODE();
36303 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36304 			result = EX_VAR(opline->result.var);
36305 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
36306 			ZEND_VM_NEXT_OPCODE();
36307 		}
36308 	}
36309 
36310 	SAVE_OPLINE();
36311 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36312 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36313 	}
36314 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36315 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36316 	}
36317 	sub_function(EX_VAR(opline->result.var), op1, op2);
36318 
36319 
36320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36321 }
36322 
36323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36324 {
36325 	USE_OPLINE
36326 
36327 	zval *op1, *op2, *result;
36328 
36329 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36330 	op2 = EX_CONSTANT(opline->op2);
36331 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36332 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36333 			zend_long overflow;
36334 
36335 			result = EX_VAR(opline->result.var);
36336 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
36337 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
36338 			ZEND_VM_NEXT_OPCODE();
36339 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36340 			result = EX_VAR(opline->result.var);
36341 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
36342 			ZEND_VM_NEXT_OPCODE();
36343 		}
36344 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36345 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36346 			result = EX_VAR(opline->result.var);
36347 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
36348 			ZEND_VM_NEXT_OPCODE();
36349 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36350 			result = EX_VAR(opline->result.var);
36351 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
36352 			ZEND_VM_NEXT_OPCODE();
36353 		}
36354 	}
36355 
36356 	SAVE_OPLINE();
36357 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36358 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36359 	}
36360 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36361 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36362 	}
36363 	mul_function(EX_VAR(opline->result.var), op1, op2);
36364 
36365 
36366 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36367 }
36368 
36369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36370 {
36371 	USE_OPLINE
36372 
36373 	zval *op1, *op2;
36374 
36375 	SAVE_OPLINE();
36376 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36377 	op2 = EX_CONSTANT(opline->op2);
36378 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
36379 
36380 
36381 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36382 }
36383 
36384 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36385 {
36386 	USE_OPLINE
36387 
36388 	zval *op1, *op2, *result;
36389 
36390 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36391 	op2 = EX_CONSTANT(opline->op2);
36392 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36393 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36394 			result = EX_VAR(opline->result.var);
36395 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
36396 				SAVE_OPLINE();
36397 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
36398 				HANDLE_EXCEPTION();
36399 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
36400 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
36401 				ZVAL_LONG(result, 0);
36402 			} else {
36403 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
36404 			}
36405 			ZEND_VM_NEXT_OPCODE();
36406 		}
36407 	}
36408 
36409 	SAVE_OPLINE();
36410 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36411 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36412 	}
36413 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36414 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36415 	}
36416 	mod_function(EX_VAR(opline->result.var), op1, op2);
36417 
36418 
36419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36420 }
36421 
36422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36423 {
36424 	USE_OPLINE
36425 
36426 	zval *op1, *op2;
36427 
36428 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36429 	op2 = EX_CONSTANT(opline->op2);
36430 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
36431 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
36432 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
36433 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
36434 		ZEND_VM_NEXT_OPCODE();
36435 	}
36436 
36437 	SAVE_OPLINE();
36438 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36439 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36440 	}
36441 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36442 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36443 	}
36444 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
36445 
36446 
36447 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36448 }
36449 
36450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36451 {
36452 	USE_OPLINE
36453 
36454 	zval *op1, *op2;
36455 
36456 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36457 	op2 = EX_CONSTANT(opline->op2);
36458 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
36459 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
36460 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
36461 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
36462 		ZEND_VM_NEXT_OPCODE();
36463 	}
36464 
36465 	SAVE_OPLINE();
36466 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36467 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36468 	}
36469 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36470 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36471 	}
36472 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
36473 
36474 
36475 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36476 }
36477 
36478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36479 {
36480 	USE_OPLINE
36481 
36482 	zval *op1, *op2;
36483 
36484 	SAVE_OPLINE();
36485 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36486 	op2 = EX_CONSTANT(opline->op2);
36487 	pow_function(EX_VAR(opline->result.var), op1, op2);
36488 
36489 
36490 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36491 }
36492 
36493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36494 {
36495 	USE_OPLINE
36496 
36497 	zval *op1, *op2;
36498 
36499 	SAVE_OPLINE();
36500 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36501 	op2 = EX_CONSTANT(opline->op2);
36502 
36503 	do {
36504 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
36505 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
36506 			zend_string *op1_str = Z_STR_P(op1);
36507 			zend_string *op2_str = Z_STR_P(op2);
36508 			zend_string *str;
36509 
36510 			if (IS_CV != IS_CONST) {
36511 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
36512 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
36513 
36514 					break;
36515 				}
36516 			}
36517 			if (IS_CONST != IS_CONST) {
36518 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
36519 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
36520 
36521 					break;
36522 				}
36523 			}
36524 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
36525 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
36526 			    size_t len = ZSTR_LEN(op1_str);
36527 
36528 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
36529 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
36530 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
36531 				break;
36532 			} else {
36533 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
36534 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
36535 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
36536 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
36537 			}
36538 		} else {
36539 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
36540 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36541 			}
36542 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
36543 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36544 			}
36545 			concat_function(EX_VAR(opline->result.var), op1, op2);
36546 		}
36547 
36548 	} while (0);
36549 
36550 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36551 }
36552 
36553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36554 {
36555 	USE_OPLINE
36556 
36557 	zval *op1, *op2;
36558 	int result;
36559 
36560 	SAVE_OPLINE();
36561 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
36562 	op2 = EX_CONSTANT(opline->op2);
36563 	result = fast_is_identical_function(op1, op2);
36564 
36565 
36566 	ZEND_VM_SMART_BRANCH(result, 1);
36567 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
36568 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36569 }
36570 
36571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36572 {
36573 	USE_OPLINE
36574 
36575 	zval *op1, *op2;
36576 	int result;
36577 
36578 	SAVE_OPLINE();
36579 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
36580 	op2 = EX_CONSTANT(opline->op2);
36581 	result = fast_is_not_identical_function(op1, op2);
36582 
36583 
36584 	ZEND_VM_SMART_BRANCH(result, 1);
36585 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
36586 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36587 }
36588 
36589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36590 {
36591 	USE_OPLINE
36592 
36593 	zval *op1, *op2, *result;
36594 
36595 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36596 	op2 = EX_CONSTANT(opline->op2);
36597 	do {
36598 		int result;
36599 
36600 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
36601 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
36602 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
36603 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
36604 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
36605 			} else {
36606 				break;
36607 			}
36608 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
36609 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
36610 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
36611 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
36612 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
36613 			} else {
36614 				break;
36615 			}
36616 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
36617 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
36618 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
36619 					result = 1;
36620 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
36621 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
36622 						result = 0;
36623 					} else {
36624 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
36625 					}
36626 				} else {
36627 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
36628 				}
36629 
36630 
36631 			} else {
36632 				break;
36633 			}
36634 		} else {
36635 			break;
36636 		}
36637 		ZEND_VM_SMART_BRANCH(result, 0);
36638 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
36639 		ZEND_VM_NEXT_OPCODE();
36640 	} while (0);
36641 
36642 	SAVE_OPLINE();
36643 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
36644 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36645 	}
36646 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
36647 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36648 	}
36649 	result = EX_VAR(opline->result.var);
36650 	compare_function(result, op1, op2);
36651 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
36652 
36653 
36654 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36655 }
36656 
36657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36658 {
36659 	USE_OPLINE
36660 
36661 	zval *op1, *op2, *result;
36662 
36663 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36664 	op2 = EX_CONSTANT(opline->op2);
36665 	do {
36666 		int result;
36667 
36668 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
36669 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
36670 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
36671 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
36672 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
36673 			} else {
36674 				break;
36675 			}
36676 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
36677 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
36678 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
36679 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
36680 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
36681 			} else {
36682 				break;
36683 			}
36684 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
36685 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
36686 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
36687 					result = 0;
36688 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
36689 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
36690 						result = 1;
36691 					} else {
36692 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
36693 					}
36694 				} else {
36695 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
36696 				}
36697 
36698 
36699 			} else {
36700 				break;
36701 			}
36702 		} else {
36703 			break;
36704 		}
36705 		ZEND_VM_SMART_BRANCH(result, 0);
36706 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
36707 		ZEND_VM_NEXT_OPCODE();
36708 	} while (0);
36709 
36710 	SAVE_OPLINE();
36711 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
36712 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36713 	}
36714 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
36715 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36716 	}
36717 	result = EX_VAR(opline->result.var);
36718 	compare_function(result, op1, op2);
36719 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
36720 
36721 
36722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36723 }
36724 
36725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36726 {
36727 	USE_OPLINE
36728 
36729 	zval *op1, *op2, *result;
36730 
36731 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36732 	op2 = EX_CONSTANT(opline->op2);
36733 	do {
36734 		int result;
36735 
36736 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36737 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36738 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
36739 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36740 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
36741 			} else {
36742 				break;
36743 			}
36744 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36745 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36746 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
36747 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36748 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
36749 			} else {
36750 				break;
36751 			}
36752 		} else {
36753 			break;
36754 		}
36755 		ZEND_VM_SMART_BRANCH(result, 0);
36756 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
36757 		ZEND_VM_NEXT_OPCODE();
36758 	} while (0);
36759 
36760 	SAVE_OPLINE();
36761 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36762 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36763 	}
36764 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36765 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36766 	}
36767 	result = EX_VAR(opline->result.var);
36768 	compare_function(result, op1, op2);
36769 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
36770 
36771 
36772 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36773 }
36774 
36775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36776 {
36777 	USE_OPLINE
36778 
36779 	zval *op1, *op2, *result;
36780 
36781 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36782 	op2 = EX_CONSTANT(opline->op2);
36783 	do {
36784 		int result;
36785 
36786 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36787 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36788 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
36789 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36790 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
36791 			} else {
36792 				break;
36793 			}
36794 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
36795 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
36796 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
36797 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36798 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
36799 			} else {
36800 				break;
36801 			}
36802 		} else {
36803 			break;
36804 		}
36805 		ZEND_VM_SMART_BRANCH(result, 0);
36806 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
36807 		ZEND_VM_NEXT_OPCODE();
36808 	} while (0);
36809 
36810 	SAVE_OPLINE();
36811 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36812 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36813 	}
36814 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36815 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36816 	}
36817 	result = EX_VAR(opline->result.var);
36818 	compare_function(result, op1, op2);
36819 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
36820 
36821 
36822 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36823 }
36824 
36825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36826 {
36827 	USE_OPLINE
36828 
36829 	zval *op1, *op2;
36830 
36831 	SAVE_OPLINE();
36832 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36833 	op2 = EX_CONSTANT(opline->op2);
36834 	compare_function(EX_VAR(opline->result.var), op1, op2);
36835 
36836 
36837 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36838 }
36839 
36840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36841 {
36842 	USE_OPLINE
36843 
36844 	zval *op1, *op2;
36845 
36846 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36847 	op2 = EX_CONSTANT(opline->op2);
36848 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
36849 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36850 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
36851 		ZEND_VM_NEXT_OPCODE();
36852 	}
36853 
36854 	SAVE_OPLINE();
36855 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36856 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36857 	}
36858 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36859 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36860 	}
36861 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
36862 
36863 
36864 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36865 }
36866 
36867 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36868 {
36869 	USE_OPLINE
36870 
36871 	zval *op1, *op2;
36872 
36873 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36874 	op2 = EX_CONSTANT(opline->op2);
36875 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
36876 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36877 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
36878 		ZEND_VM_NEXT_OPCODE();
36879 	}
36880 
36881 	SAVE_OPLINE();
36882 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36883 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36884 	}
36885 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36886 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36887 	}
36888 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
36889 
36890 
36891 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36892 }
36893 
36894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36895 {
36896 	USE_OPLINE
36897 
36898 	zval *op1, *op2;
36899 
36900 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
36901 	op2 = EX_CONSTANT(opline->op2);
36902 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
36903 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
36904 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
36905 		ZEND_VM_NEXT_OPCODE();
36906 	}
36907 
36908 	SAVE_OPLINE();
36909 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
36910 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
36911 	}
36912 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
36913 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
36914 	}
36915 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
36916 
36917 
36918 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36919 }
36920 
36921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36922 {
36923 	USE_OPLINE
36924 
36925 	zval *op1, *op2;
36926 
36927 	SAVE_OPLINE();
36928 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
36929 	op2 = EX_CONSTANT(opline->op2);
36930 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
36931 
36932 
36933 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36934 }
36935 
36936 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)
36937 {
36938 	USE_OPLINE
36939 	zend_free_op free_op_data1;
36940 	zval *object;
36941 	zval *property;
36942 	zval *value;
36943 	zval *zptr;
36944 
36945 	SAVE_OPLINE();
36946 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
36947 
36948 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36949 		zend_throw_error(NULL, "Using $this when not in object context");
36950 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
36951 
36952 		HANDLE_EXCEPTION();
36953 	}
36954 
36955 	property = EX_CONSTANT(opline->op2);
36956 
36957 	do {
36958 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
36959 
36960 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
36961 			ZVAL_DEREF(object);
36962 			if (UNEXPECTED(!make_real_object(object))) {
36963 				zend_error(E_WARNING, "Attempt to assign property of non-object");
36964 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36965 					ZVAL_NULL(EX_VAR(opline->result.var));
36966 				}
36967 				break;
36968 			}
36969 		}
36970 
36971 		/* here we are sure we are dealing with an object */
36972 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
36973 			&& 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)) {
36974 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
36975 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36976 					ZVAL_NULL(EX_VAR(opline->result.var));
36977 				}
36978 			} else {
36979 				ZVAL_DEREF(zptr);
36980 				SEPARATE_ZVAL_NOREF(zptr);
36981 
36982 				binary_op(zptr, zptr, value);
36983 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36984 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
36985 				}
36986 			}
36987 		} else {
36988 			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));
36989 		}
36990 	} while (0);
36991 
36992 	FREE_OP(free_op_data1);
36993 
36994 
36995 	/* assign_obj has two opcodes! */
36996 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
36997 }
36998 
36999 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)
37000 {
37001 	USE_OPLINE
37002 	zend_free_op free_op_data1;
37003 	zval *var_ptr;
37004 	zval *value, *container, *dim;
37005 
37006 	SAVE_OPLINE();
37007 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
37008 
37009 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37010 assign_dim_op_array:
37011 		SEPARATE_ARRAY(container);
37012 assign_dim_op_new_array:
37013 		if (IS_CONST == IS_UNUSED) {
37014 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
37015 			if (UNEXPECTED(!var_ptr)) {
37016 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
37017 				goto assign_dim_op_ret_null;
37018 			}
37019 		} else {
37020 			dim = EX_CONSTANT(opline->op2);
37021 
37022 			if (IS_CONST == IS_CONST) {
37023 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
37024 			} else {
37025 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
37026 			}
37027 			if (UNEXPECTED(!var_ptr)) {
37028 				goto assign_dim_op_ret_null;
37029 			}
37030 			ZVAL_DEREF(var_ptr);
37031 			SEPARATE_ZVAL_NOREF(var_ptr);
37032 		}
37033 
37034 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37035 
37036 		binary_op(var_ptr, var_ptr, value);
37037 
37038 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37039 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37040 		}
37041 	} else {
37042 		if (EXPECTED(Z_ISREF_P(container))) {
37043 			container = Z_REFVAL_P(container);
37044 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
37045 				goto assign_dim_op_array;
37046 			}
37047 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
37048 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
37049 assign_dim_op_convert_to_array:
37050 			ZVAL_NEW_ARR(container);
37051 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
37052 			goto assign_dim_op_new_array;
37053 		}
37054 
37055 		dim = EX_CONSTANT(opline->op2);
37056 
37057 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37058 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37059 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
37060 		} else {
37061 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
37062 				if (IS_CONST == IS_UNUSED) {
37063 					zend_throw_error(NULL, "[] operator not supported for strings");
37064 				} else {
37065 					zend_check_string_offset(dim, BP_VAR_RW);
37066 					if (EXPECTED(EG(exception) == NULL)) {
37067 						zend_wrong_string_offset();
37068 					}
37069 				}
37070 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
37071 				goto assign_dim_op_convert_to_array;
37072 			} else {
37073 				if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
37074 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
37075 				}
37076 assign_dim_op_ret_null:
37077 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37078 					ZVAL_NULL(EX_VAR(opline->result.var));
37079 				}
37080 			}
37081 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
37082 		}
37083 	}
37084 
37085 	FREE_OP(free_op_data1);
37086 
37087 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37088 }
37089 
37090 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)
37091 {
37092 	USE_OPLINE
37093 
37094 	zval *var_ptr;
37095 	zval *value;
37096 
37097 	SAVE_OPLINE();
37098 	value = EX_CONSTANT(opline->op2);
37099 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
37100 
37101 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
37102 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37103 			ZVAL_NULL(EX_VAR(opline->result.var));
37104 		}
37105 	} else {
37106 		ZVAL_DEREF(var_ptr);
37107 		SEPARATE_ZVAL_NOREF(var_ptr);
37108 
37109 		binary_op(var_ptr, var_ptr, value);
37110 
37111 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37112 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
37113 		}
37114 	}
37115 
37116 
37117 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37118 }
37119 
37120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37121 {
37122 #if 0 || (IS_CONST != IS_UNUSED)
37123 	USE_OPLINE
37124 
37125 # if 0 || (IS_CV != IS_UNUSED)
37126 	if (EXPECTED(1)) {
37127 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37128 	}
37129 	if (EXPECTED(0)) {
37130 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37131 	}
37132 # endif
37133 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37134 #else
37135 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37136 #endif
37137 }
37138 
37139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37140 {
37141 #if 0 || (IS_CONST != IS_UNUSED)
37142 	USE_OPLINE
37143 
37144 # if 0 || (IS_CV != IS_UNUSED)
37145 	if (EXPECTED(0)) {
37146 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37147 	}
37148 	if (EXPECTED(1)) {
37149 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37150 	}
37151 # endif
37152 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37153 #else
37154 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37155 #endif
37156 }
37157 
37158 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37159 {
37160 #if 0 || (IS_CONST != IS_UNUSED)
37161 	USE_OPLINE
37162 
37163 # if 0 || (IS_CV != IS_UNUSED)
37164 	if (EXPECTED(0)) {
37165 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37166 	}
37167 	if (EXPECTED(0)) {
37168 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37169 	}
37170 # endif
37171 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37172 #else
37173 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37174 #endif
37175 }
37176 
37177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37178 {
37179 #if 0 || (IS_CONST != IS_UNUSED)
37180 	USE_OPLINE
37181 
37182 # if 0 || (IS_CV != IS_UNUSED)
37183 	if (EXPECTED(1)) {
37184 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37185 	}
37186 	if (EXPECTED(0)) {
37187 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37188 	}
37189 # endif
37190 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37191 #else
37192 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37193 #endif
37194 }
37195 
37196 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37197 {
37198 #if 0 || (IS_CONST != IS_UNUSED)
37199 	USE_OPLINE
37200 
37201 # if 0 || (IS_CV != IS_UNUSED)
37202 	if (EXPECTED(0)) {
37203 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37204 	}
37205 	if (EXPECTED(1)) {
37206 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37207 	}
37208 # endif
37209 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37210 #else
37211 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37212 #endif
37213 }
37214 
37215 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37216 {
37217 #if 0 || (IS_CONST != IS_UNUSED)
37218 	USE_OPLINE
37219 
37220 # if 0 || (IS_CV != IS_UNUSED)
37221 	if (EXPECTED(0)) {
37222 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37223 	}
37224 	if (EXPECTED(0)) {
37225 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37226 	}
37227 # endif
37228 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37229 #else
37230 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37231 #endif
37232 }
37233 
37234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37235 {
37236 #if 0 || (IS_CONST != IS_UNUSED)
37237 	USE_OPLINE
37238 
37239 # if 0 || (IS_CV != IS_UNUSED)
37240 	if (EXPECTED(1)) {
37241 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37242 	}
37243 	if (EXPECTED(0)) {
37244 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37245 	}
37246 # endif
37247 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37248 #else
37249 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37250 #endif
37251 }
37252 
37253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37254 {
37255 #if 0 || (IS_CONST != IS_UNUSED)
37256 	USE_OPLINE
37257 
37258 # if 0 || (IS_CV != IS_UNUSED)
37259 	if (EXPECTED(0)) {
37260 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37261 	}
37262 	if (EXPECTED(1)) {
37263 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37264 	}
37265 # endif
37266 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37267 #else
37268 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37269 #endif
37270 }
37271 
37272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37273 {
37274 #if 0 || (IS_CONST != IS_UNUSED)
37275 	USE_OPLINE
37276 
37277 # if 0 || (IS_CV != IS_UNUSED)
37278 	if (EXPECTED(0)) {
37279 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37280 	}
37281 	if (EXPECTED(0)) {
37282 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37283 	}
37284 # endif
37285 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37286 #else
37287 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37288 #endif
37289 }
37290 
37291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37292 {
37293 #if 0 || (IS_CONST != IS_UNUSED)
37294 	USE_OPLINE
37295 
37296 # if 0 || (IS_CV != IS_UNUSED)
37297 	if (EXPECTED(1)) {
37298 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37299 	}
37300 	if (EXPECTED(0)) {
37301 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37302 	}
37303 # endif
37304 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37305 #else
37306 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37307 #endif
37308 }
37309 
37310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37311 {
37312 #if 0 || (IS_CONST != IS_UNUSED)
37313 	USE_OPLINE
37314 
37315 # if 0 || (IS_CV != IS_UNUSED)
37316 	if (EXPECTED(0)) {
37317 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37318 	}
37319 	if (EXPECTED(1)) {
37320 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37321 	}
37322 # endif
37323 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37324 #else
37325 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37326 #endif
37327 }
37328 
37329 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37330 {
37331 #if 0 || (IS_CONST != IS_UNUSED)
37332 	USE_OPLINE
37333 
37334 # if 0 || (IS_CV != IS_UNUSED)
37335 	if (EXPECTED(0)) {
37336 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37337 	}
37338 	if (EXPECTED(0)) {
37339 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37340 	}
37341 # endif
37342 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37343 #else
37344 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37345 #endif
37346 }
37347 
37348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37349 {
37350 #if 0 || (IS_CONST != IS_UNUSED)
37351 	USE_OPLINE
37352 
37353 # if 0 || (IS_CV != IS_UNUSED)
37354 	if (EXPECTED(1)) {
37355 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37356 	}
37357 	if (EXPECTED(0)) {
37358 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37359 	}
37360 # endif
37361 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37362 #else
37363 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37364 #endif
37365 }
37366 
37367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37368 {
37369 #if 0 || (IS_CONST != IS_UNUSED)
37370 	USE_OPLINE
37371 
37372 # if 0 || (IS_CV != IS_UNUSED)
37373 	if (EXPECTED(0)) {
37374 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37375 	}
37376 	if (EXPECTED(1)) {
37377 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37378 	}
37379 # endif
37380 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37381 #else
37382 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37383 #endif
37384 }
37385 
37386 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37387 {
37388 #if 0 || (IS_CONST != IS_UNUSED)
37389 	USE_OPLINE
37390 
37391 # if 0 || (IS_CV != IS_UNUSED)
37392 	if (EXPECTED(0)) {
37393 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37394 	}
37395 	if (EXPECTED(0)) {
37396 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37397 	}
37398 # endif
37399 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37400 #else
37401 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37402 #endif
37403 }
37404 
37405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37406 {
37407 #if 0 || (IS_CONST != IS_UNUSED)
37408 	USE_OPLINE
37409 
37410 # if 0 || (IS_CV != IS_UNUSED)
37411 	if (EXPECTED(1)) {
37412 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37413 	}
37414 	if (EXPECTED(0)) {
37415 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37416 	}
37417 # endif
37418 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37419 #else
37420 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37421 #endif
37422 }
37423 
37424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37425 {
37426 #if 0 || (IS_CONST != IS_UNUSED)
37427 	USE_OPLINE
37428 
37429 # if 0 || (IS_CV != IS_UNUSED)
37430 	if (EXPECTED(0)) {
37431 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37432 	}
37433 	if (EXPECTED(1)) {
37434 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37435 	}
37436 # endif
37437 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37438 #else
37439 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37440 #endif
37441 }
37442 
37443 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37444 {
37445 #if 0 || (IS_CONST != IS_UNUSED)
37446 	USE_OPLINE
37447 
37448 # if 0 || (IS_CV != IS_UNUSED)
37449 	if (EXPECTED(0)) {
37450 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37451 	}
37452 	if (EXPECTED(0)) {
37453 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37454 	}
37455 # endif
37456 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37457 #else
37458 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37459 #endif
37460 }
37461 
37462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37463 {
37464 #if 0 || (IS_CONST != IS_UNUSED)
37465 	USE_OPLINE
37466 
37467 # if 0 || (IS_CV != IS_UNUSED)
37468 	if (EXPECTED(1)) {
37469 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37470 	}
37471 	if (EXPECTED(0)) {
37472 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37473 	}
37474 # endif
37475 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37476 #else
37477 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37478 #endif
37479 }
37480 
37481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37482 {
37483 #if 0 || (IS_CONST != IS_UNUSED)
37484 	USE_OPLINE
37485 
37486 # if 0 || (IS_CV != IS_UNUSED)
37487 	if (EXPECTED(0)) {
37488 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37489 	}
37490 	if (EXPECTED(1)) {
37491 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37492 	}
37493 # endif
37494 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37495 #else
37496 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37497 #endif
37498 }
37499 
37500 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37501 {
37502 #if 0 || (IS_CONST != IS_UNUSED)
37503 	USE_OPLINE
37504 
37505 # if 0 || (IS_CV != IS_UNUSED)
37506 	if (EXPECTED(0)) {
37507 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37508 	}
37509 	if (EXPECTED(0)) {
37510 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37511 	}
37512 # endif
37513 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37514 #else
37515 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37516 #endif
37517 }
37518 
37519 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37520 {
37521 #if 0 || (IS_CONST != IS_UNUSED)
37522 	USE_OPLINE
37523 
37524 # if 0 || (IS_CV != IS_UNUSED)
37525 	if (EXPECTED(1)) {
37526 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37527 	}
37528 	if (EXPECTED(0)) {
37529 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37530 	}
37531 # endif
37532 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37533 #else
37534 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37535 #endif
37536 }
37537 
37538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37539 {
37540 #if 0 || (IS_CONST != IS_UNUSED)
37541 	USE_OPLINE
37542 
37543 # if 0 || (IS_CV != IS_UNUSED)
37544 	if (EXPECTED(0)) {
37545 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37546 	}
37547 	if (EXPECTED(1)) {
37548 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37549 	}
37550 # endif
37551 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37552 #else
37553 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37554 #endif
37555 }
37556 
37557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37558 {
37559 #if 0 || (IS_CONST != IS_UNUSED)
37560 	USE_OPLINE
37561 
37562 # if 0 || (IS_CV != IS_UNUSED)
37563 	if (EXPECTED(0)) {
37564 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37565 	}
37566 	if (EXPECTED(0)) {
37567 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37568 	}
37569 # endif
37570 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37571 #else
37572 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37573 #endif
37574 }
37575 
37576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37577 {
37578 #if 0 || (IS_CONST != IS_UNUSED)
37579 	USE_OPLINE
37580 
37581 # if 0 || (IS_CV != IS_UNUSED)
37582 	if (EXPECTED(1)) {
37583 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37584 	}
37585 	if (EXPECTED(0)) {
37586 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37587 	}
37588 # endif
37589 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37590 #else
37591 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37592 #endif
37593 }
37594 
37595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37596 {
37597 #if 0 || (IS_CONST != IS_UNUSED)
37598 	USE_OPLINE
37599 
37600 # if 0 || (IS_CV != IS_UNUSED)
37601 	if (EXPECTED(0)) {
37602 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37603 	}
37604 	if (EXPECTED(1)) {
37605 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37606 	}
37607 # endif
37608 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37609 #else
37610 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37611 #endif
37612 }
37613 
37614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37615 {
37616 #if 0 || (IS_CONST != IS_UNUSED)
37617 	USE_OPLINE
37618 
37619 # if 0 || (IS_CV != IS_UNUSED)
37620 	if (EXPECTED(0)) {
37621 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37622 	}
37623 	if (EXPECTED(0)) {
37624 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37625 	}
37626 # endif
37627 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37628 #else
37629 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37630 #endif
37631 }
37632 
37633 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37634 {
37635 #if 0 || (IS_CONST != IS_UNUSED)
37636 	USE_OPLINE
37637 
37638 # if 0 || (IS_CV != IS_UNUSED)
37639 	if (EXPECTED(1)) {
37640 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37641 	}
37642 	if (EXPECTED(0)) {
37643 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37644 	}
37645 # endif
37646 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37647 #else
37648 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37649 #endif
37650 }
37651 
37652 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37653 {
37654 #if 0 || (IS_CONST != IS_UNUSED)
37655 	USE_OPLINE
37656 
37657 # if 0 || (IS_CV != IS_UNUSED)
37658 	if (EXPECTED(0)) {
37659 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37660 	}
37661 	if (EXPECTED(1)) {
37662 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37663 	}
37664 # endif
37665 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37666 #else
37667 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37668 #endif
37669 }
37670 
37671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37672 {
37673 #if 0 || (IS_CONST != IS_UNUSED)
37674 	USE_OPLINE
37675 
37676 # if 0 || (IS_CV != IS_UNUSED)
37677 	if (EXPECTED(0)) {
37678 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37679 	}
37680 	if (EXPECTED(0)) {
37681 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37682 	}
37683 # endif
37684 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37685 #else
37686 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37687 #endif
37688 }
37689 
37690 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37691 {
37692 #if 0 || (IS_CONST != IS_UNUSED)
37693 	USE_OPLINE
37694 
37695 # if 0 || (IS_CV != IS_UNUSED)
37696 	if (EXPECTED(1)) {
37697 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37698 	}
37699 	if (EXPECTED(0)) {
37700 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37701 	}
37702 # endif
37703 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37704 #else
37705 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37706 #endif
37707 }
37708 
37709 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37710 {
37711 #if 0 || (IS_CONST != IS_UNUSED)
37712 	USE_OPLINE
37713 
37714 # if 0 || (IS_CV != IS_UNUSED)
37715 	if (EXPECTED(0)) {
37716 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37717 	}
37718 	if (EXPECTED(1)) {
37719 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37720 	}
37721 # endif
37722 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37723 #else
37724 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37725 #endif
37726 }
37727 
37728 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37729 {
37730 #if 0 || (IS_CONST != IS_UNUSED)
37731 	USE_OPLINE
37732 
37733 # if 0 || (IS_CV != IS_UNUSED)
37734 	if (EXPECTED(0)) {
37735 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37736 	}
37737 	if (EXPECTED(0)) {
37738 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37739 	}
37740 # endif
37741 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37742 #else
37743 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37744 #endif
37745 }
37746 
37747 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37748 {
37749 #if 0 || (IS_CONST != IS_UNUSED)
37750 	USE_OPLINE
37751 
37752 # if 0 || (IS_CV != IS_UNUSED)
37753 	if (EXPECTED(1)) {
37754 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37755 	}
37756 	if (EXPECTED(0)) {
37757 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37758 	}
37759 # endif
37760 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37761 #else
37762 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37763 #endif
37764 }
37765 
37766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37767 {
37768 #if 0 || (IS_CONST != IS_UNUSED)
37769 	USE_OPLINE
37770 
37771 # if 0 || (IS_CV != IS_UNUSED)
37772 	if (EXPECTED(0)) {
37773 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37774 	}
37775 	if (EXPECTED(1)) {
37776 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37777 	}
37778 # endif
37779 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37780 #else
37781 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37782 #endif
37783 }
37784 
37785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37786 {
37787 #if 0 || (IS_CONST != IS_UNUSED)
37788 	USE_OPLINE
37789 
37790 # if 0 || (IS_CV != IS_UNUSED)
37791 	if (EXPECTED(0)) {
37792 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37793 	}
37794 	if (EXPECTED(0)) {
37795 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37796 	}
37797 # endif
37798 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37799 #else
37800 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37801 #endif
37802 }
37803 
37804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
37805 {
37806 	USE_OPLINE
37807 
37808 	zval *object;
37809 	zval *property;
37810 	zval *zptr;
37811 
37812 	SAVE_OPLINE();
37813 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
37814 
37815 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37816 		zend_throw_error(NULL, "Using $this when not in object context");
37817 
37818 		HANDLE_EXCEPTION();
37819 	}
37820 
37821 	property = EX_CONSTANT(opline->op2);
37822 
37823 	do {
37824 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37825 			ZVAL_DEREF(object);
37826 			if (UNEXPECTED(!make_real_object(object))) {
37827 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
37828 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37829 					ZVAL_NULL(EX_VAR(opline->result.var));
37830 				}
37831 				break;
37832 			}
37833 		}
37834 
37835 		/* here we are sure we are dealing with an object */
37836 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
37837 			&& 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)) {
37838 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37839 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37840 					ZVAL_NULL(EX_VAR(opline->result.var));
37841 				}
37842 			} else {
37843 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
37844 					if (inc) {
37845 						fast_long_increment_function(zptr);
37846 					} else {
37847 						fast_long_decrement_function(zptr);
37848 					}
37849 				} else {
37850 					ZVAL_DEREF(zptr);
37851 					SEPARATE_ZVAL_NOREF(zptr);
37852 
37853 					if (inc) {
37854 						increment_function(zptr);
37855 					} else {
37856 						decrement_function(zptr);
37857 					}
37858 				}
37859 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37860 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
37861 				}
37862 			}
37863 		} else {
37864 			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));
37865 		}
37866 	} while (0);
37867 
37868 
37869 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37870 }
37871 
37872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37873 {
37874 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37875 }
37876 
37877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37878 {
37879 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37880 }
37881 
37882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
37883 {
37884 	USE_OPLINE
37885 
37886 	zval *object;
37887 	zval *property;
37888 	zval *zptr;
37889 
37890 	SAVE_OPLINE();
37891 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
37892 
37893 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37894 		zend_throw_error(NULL, "Using $this when not in object context");
37895 
37896 		HANDLE_EXCEPTION();
37897 	}
37898 
37899 	property = EX_CONSTANT(opline->op2);
37900 
37901 	do {
37902 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37903 			ZVAL_DEREF(object);
37904 			if (UNEXPECTED(!make_real_object(object))) {
37905 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
37906 				ZVAL_NULL(EX_VAR(opline->result.var));
37907 				break;
37908 			}
37909 		}
37910 
37911 		/* here we are sure we are dealing with an object */
37912 
37913 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
37914 			&& 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)) {
37915 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37916 				ZVAL_NULL(EX_VAR(opline->result.var));
37917 			} else {
37918 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
37919 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
37920 					if (inc) {
37921 						fast_long_increment_function(zptr);
37922 					} else {
37923 						fast_long_decrement_function(zptr);
37924 					}
37925 				} else {
37926 					ZVAL_DEREF(zptr);
37927 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
37928 					zval_opt_copy_ctor(zptr);
37929 					if (inc) {
37930 						increment_function(zptr);
37931 					} else {
37932 						decrement_function(zptr);
37933 					}
37934 				}
37935 			}
37936 		} else {
37937 			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));
37938 		}
37939 	} while (0);
37940 
37941 
37942 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37943 }
37944 
37945 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37946 {
37947 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37948 }
37949 
37950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37951 {
37952 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
37953 }
37954 
37955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
37956 {
37957 	USE_OPLINE
37958 
37959 	zval *varname;
37960 	zval *retval;
37961 	zend_string *name;
37962 	zend_class_entry *ce;
37963 
37964 	SAVE_OPLINE();
37965 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
37966 
37967  	if (IS_CV == IS_CONST) {
37968 		name = Z_STR_P(varname);
37969 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
37970 		name = Z_STR_P(varname);
37971 		zend_string_addref(name);
37972 	} else {
37973 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
37974 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
37975 		}
37976 		name = zval_get_string(varname);
37977 	}
37978 
37979 	if (IS_CONST == IS_CONST) {
37980 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
37981 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
37982 
37983 			/* check if static properties were destoyed */
37984 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
37985 				if (type == BP_VAR_IS) {
37986 					retval = &EG(uninitialized_zval);
37987 				} else {
37988 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
37989 
37990 					HANDLE_EXCEPTION();
37991 				}
37992 			}
37993 
37994 			goto fetch_static_prop_return;
37995 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
37996 			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);
37997 			if (UNEXPECTED(ce == NULL)) {
37998 				ZEND_ASSERT(EG(exception));
37999 				if (IS_CV != IS_CONST) {
38000 					zend_string_release(name);
38001 				}
38002 
38003 				HANDLE_EXCEPTION();
38004 			}
38005 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
38006 		}
38007 	} else {
38008 		if (IS_CONST == IS_UNUSED) {
38009 			ce = zend_fetch_class(NULL, opline->op2.num);
38010 			if (UNEXPECTED(ce == NULL)) {
38011 				ZEND_ASSERT(EG(exception));
38012 				if (IS_CV != IS_CONST) {
38013 					zend_string_release(name);
38014 				}
38015 
38016 				HANDLE_EXCEPTION();
38017 			}
38018 		} else {
38019 			ce = Z_CE_P(EX_VAR(opline->op2.var));
38020 		}
38021 		if (IS_CV == IS_CONST &&
38022 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
38023 
38024 			/* check if static properties were destoyed */
38025 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
38026 				if (type == BP_VAR_IS) {
38027 					retval = &EG(uninitialized_zval);
38028 				} else {
38029 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
38030 
38031 					HANDLE_EXCEPTION();
38032 				}
38033 			}
38034 
38035 			goto fetch_static_prop_return;
38036 		}
38037 	}
38038 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
38039 	if (UNEXPECTED(retval == NULL)) {
38040 		if (type == BP_VAR_IS) {
38041 			retval = &EG(uninitialized_zval);
38042 		} else {
38043 			ZEND_ASSERT(EG(exception));
38044 			if (IS_CV != IS_CONST) {
38045 				zend_string_release(name);
38046 			}
38047 
38048 			HANDLE_EXCEPTION();
38049 		}
38050 	} else if (IS_CV == IS_CONST) {
38051 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
38052 	}
38053 
38054 	if (IS_CV != IS_CONST) {
38055 		zend_string_release(name);
38056 	}
38057 
38058 fetch_static_prop_return:
38059 	if (type == BP_VAR_R || type == BP_VAR_IS) {
38060 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
38061 	} else {
38062 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
38063 	}
38064 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38065 }
38066 
38067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38068 {
38069 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38070 }
38071 
38072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38073 {
38074 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38075 }
38076 
38077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38078 {
38079 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38080 }
38081 
38082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38083 {
38084 	USE_OPLINE
38085 
38086 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
38087 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38088 	} else {
38089 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38090 	}
38091 }
38092 
38093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38094 {
38095 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38096 }
38097 
38098 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38099 {
38100 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38101 }
38102 
38103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38104 {
38105 	USE_OPLINE
38106 
38107 	zval *container, *dim, *value, *result;
38108 
38109 	SAVE_OPLINE();
38110 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38111 	dim = EX_CONSTANT(opline->op2);
38112 	if (IS_CV != IS_CONST) {
38113 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
38114 fetch_dim_r_array:
38115 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
38116 			result = EX_VAR(opline->result.var);
38117 			ZVAL_COPY_UNREF(result, value);
38118 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
38119 			container = Z_REFVAL_P(container);
38120 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
38121 				goto fetch_dim_r_array;
38122 			} else {
38123 				goto fetch_dim_r_slow;
38124 			}
38125 		} else {
38126 fetch_dim_r_slow:
38127 			result = EX_VAR(opline->result.var);
38128 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
38129 		}
38130 	} else {
38131 		result = EX_VAR(opline->result.var);
38132 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
38133 	}
38134 
38135 
38136 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38137 }
38138 
38139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38140 {
38141 	USE_OPLINE
38142 	zend_free_op free_op1;
38143 	zval *container;
38144 
38145 	SAVE_OPLINE();
38146 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38147 
38148 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38149 
38150 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38151 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38152 	}
38153 
38154 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38155 }
38156 
38157 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38158 {
38159 	USE_OPLINE
38160 	zend_free_op free_op1;
38161 	zval *container;
38162 
38163 	SAVE_OPLINE();
38164 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
38165 
38166 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38167 
38168 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38169 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38170 	}
38171 
38172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38173 }
38174 
38175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38176 {
38177 	USE_OPLINE
38178 
38179 	zval *container;
38180 
38181 	SAVE_OPLINE();
38182 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38183 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38184 
38185 
38186 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38187 }
38188 
38189 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38190 {
38191 	USE_OPLINE
38192 	zval *container;
38193 	zend_free_op free_op1;
38194 
38195 	SAVE_OPLINE();
38196 
38197 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
38198         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
38199             zend_throw_error(NULL, "Cannot use temporary expression in write context");
38200 
38201 
38202 			HANDLE_EXCEPTION();
38203         }
38204 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38205 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38206 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38207 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38208 		}
38209 
38210 
38211 	} else {
38212 		if (IS_CONST == IS_UNUSED) {
38213 			zend_throw_error(NULL, "Cannot use [] for reading");
38214 
38215 
38216 			HANDLE_EXCEPTION();
38217 		}
38218 		container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38219 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38220 
38221 
38222 	}
38223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38224 }
38225 
38226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38227 {
38228 	USE_OPLINE
38229 	zend_free_op free_op1;
38230 	zval *container;
38231 
38232 	SAVE_OPLINE();
38233 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
38234 
38235 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
38236 
38237 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38238 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38239 	}
38240 
38241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38242 }
38243 
38244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38245 {
38246 	USE_OPLINE
38247 
38248 	zval *container;
38249 
38250 	zval *offset;
38251 
38252 	SAVE_OPLINE();
38253 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
38254 
38255 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38256 		zend_throw_error(NULL, "Using $this when not in object context");
38257 
38258 		HANDLE_EXCEPTION();
38259 	}
38260 
38261 	offset = EX_CONSTANT(opline->op2);
38262 
38263 	if (IS_CV == IS_CONST ||
38264 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
38265 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
38266 			container = Z_REFVAL_P(container);
38267 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
38268 				goto fetch_obj_r_no_object;
38269 			}
38270 		} else {
38271 			goto fetch_obj_r_no_object;
38272 		}
38273 	}
38274 
38275 	/* here we are sure we are dealing with an object */
38276 	do {
38277 		zend_object *zobj = Z_OBJ_P(container);
38278 		zval *retval;
38279 
38280 		if (IS_CONST == IS_CONST &&
38281 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
38282 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
38283 
38284 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
38285 				retval = OBJ_PROP(zobj, prop_offset);
38286 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
38287 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
38288 					break;
38289 				}
38290 			} else if (EXPECTED(zobj->properties != NULL)) {
38291 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
38292 				if (EXPECTED(retval)) {
38293 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
38294 					break;
38295 				}
38296 			}
38297 		}
38298 
38299 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
38300 fetch_obj_r_no_object:
38301 			zend_error(E_NOTICE, "Trying to get property of non-object");
38302 			ZVAL_NULL(EX_VAR(opline->result.var));
38303 		} else {
38304 			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));
38305 
38306 			if (retval != EX_VAR(opline->result.var)) {
38307 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
38308 			}
38309 		}
38310 	} while (0);
38311 
38312 
38313 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38314 }
38315 
38316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38317 {
38318 	USE_OPLINE
38319 	zend_free_op free_op1;
38320 	zval *property;
38321 	zval *container;
38322 
38323 	SAVE_OPLINE();
38324 	property = EX_CONSTANT(opline->op2);
38325 
38326 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38327 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38328 		zend_throw_error(NULL, "Using $this when not in object context");
38329 
38330 		HANDLE_EXCEPTION();
38331 	}
38332 
38333 	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);
38334 
38335 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38336 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38337 	}
38338 
38339 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38340 }
38341 
38342 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38343 {
38344 	USE_OPLINE
38345 	zend_free_op free_op1;
38346 	zval *property;
38347 	zval *container;
38348 
38349 	SAVE_OPLINE();
38350 	property = EX_CONSTANT(opline->op2);
38351 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
38352 
38353 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38354 		zend_throw_error(NULL, "Using $this when not in object context");
38355 
38356 		HANDLE_EXCEPTION();
38357 	}
38358 	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);
38359 
38360 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38361 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38362 	}
38363 
38364 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38365 }
38366 
38367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38368 {
38369 	USE_OPLINE
38370 
38371 	zval *container;
38372 
38373 	zval *offset;
38374 
38375 	SAVE_OPLINE();
38376 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
38377 
38378 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38379 		zend_throw_error(NULL, "Using $this when not in object context");
38380 
38381 		HANDLE_EXCEPTION();
38382 	}
38383 
38384 	offset  = EX_CONSTANT(opline->op2);
38385 
38386 	if (IS_CV == IS_CONST ||
38387 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
38388 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
38389 			container = Z_REFVAL_P(container);
38390 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
38391 				goto fetch_obj_is_no_object;
38392 			}
38393 		} else {
38394 			goto fetch_obj_is_no_object;
38395 		}
38396 	}
38397 
38398 	/* here we are sure we are dealing with an object */
38399 	do {
38400 		zend_object *zobj = Z_OBJ_P(container);
38401 		zval *retval;
38402 
38403 		if (IS_CONST == IS_CONST &&
38404 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
38405 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
38406 
38407 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
38408 				retval = OBJ_PROP(zobj, prop_offset);
38409 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
38410 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
38411 					break;
38412 				}
38413 			} else if (EXPECTED(zobj->properties != NULL)) {
38414 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
38415 				if (EXPECTED(retval)) {
38416 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
38417 					break;
38418 				}
38419 			}
38420 		}
38421 
38422 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
38423 fetch_obj_is_no_object:
38424 			ZVAL_NULL(EX_VAR(opline->result.var));
38425 		} else {
38426 
38427 			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));
38428 
38429 			if (retval != EX_VAR(opline->result.var)) {
38430 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
38431 			}
38432 		}
38433 	} while (0);
38434 
38435 
38436 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38437 }
38438 
38439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38440 {
38441 	USE_OPLINE
38442 	zval *container;
38443 
38444 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
38445 		/* Behave like FETCH_OBJ_W */
38446 		zend_free_op free_op1;
38447 		zval *property;
38448 
38449 		SAVE_OPLINE();
38450 		property = EX_CONSTANT(opline->op2);
38451 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38452 
38453 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38454 			zend_throw_error(NULL, "Using $this when not in object context");
38455 
38456 			HANDLE_EXCEPTION();
38457 		}
38458 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
38459 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
38460 
38461 
38462 			HANDLE_EXCEPTION();
38463 		}
38464 		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);
38465 
38466 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38467 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38468 		}
38469 
38470 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38471 	} else {
38472 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38473 	}
38474 }
38475 
38476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38477 {
38478 	USE_OPLINE
38479 	zend_free_op free_op1;
38480 	zval *container, *property;
38481 
38482 	SAVE_OPLINE();
38483 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
38484 
38485 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38486 		zend_throw_error(NULL, "Using $this when not in object context");
38487 
38488 		HANDLE_EXCEPTION();
38489 	}
38490 
38491 	property = EX_CONSTANT(opline->op2);
38492 
38493 	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);
38494 
38495 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
38496 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
38497 	}
38498 
38499 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38500 }
38501 
38502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38503 {
38504 	USE_OPLINE
38505 
38506 	zval *container;
38507 
38508 	SAVE_OPLINE();
38509 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
38510 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
38511 
38512 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38513 }
38514 
38515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38516 {
38517 	USE_OPLINE
38518 
38519 	zval *object, *property_name, *value, tmp;
38520 
38521 	SAVE_OPLINE();
38522 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38523 
38524 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38525 		zend_throw_error(NULL, "Using $this when not in object context");
38526 
38527 
38528 		HANDLE_EXCEPTION();
38529 	}
38530 
38531 	property_name = EX_CONSTANT(opline->op2);
38532 	value = EX_CONSTANT((opline+1)->op1);
38533 
38534 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38535 		do {
38536 			if (Z_ISREF_P(object)) {
38537 				object = Z_REFVAL_P(object);
38538 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38539 					break;
38540 				}
38541 			}
38542 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
38543 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
38544 				zend_object *obj;
38545 
38546 				zval_ptr_dtor(object);
38547 				object_init(object);
38548 				Z_ADDREF_P(object);
38549 				obj = Z_OBJ_P(object);
38550 				zend_error(E_WARNING, "Creating default object from empty value");
38551 				if (GC_REFCOUNT(obj) == 1) {
38552 					/* the enclosing container was deleted, obj is unreferenced */
38553 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38554 						ZVAL_NULL(EX_VAR(opline->result.var));
38555 					}
38556 
38557 					OBJ_RELEASE(obj);
38558 					goto exit_assign_obj;
38559 				}
38560 				Z_DELREF_P(object);
38561 			} else {
38562 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
38563 					zend_error(E_WARNING, "Attempt to assign property of non-object");
38564 				}
38565 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38566 					ZVAL_NULL(EX_VAR(opline->result.var));
38567 				}
38568 
38569 				goto exit_assign_obj;
38570 			}
38571 		} while (0);
38572 	}
38573 
38574 	if (IS_CONST == IS_CONST &&
38575 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
38576 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
38577 		zend_object *zobj = Z_OBJ_P(object);
38578 		zval *property;
38579 
38580 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
38581 			property = OBJ_PROP(zobj, prop_offset);
38582 			if (Z_TYPE_P(property) != IS_UNDEF) {
38583 fast_assign_obj:
38584 				value = zend_assign_to_variable(property, value, IS_CONST);
38585 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38586 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38587 				}
38588 				goto exit_assign_obj;
38589 			}
38590 		} else {
38591 			if (EXPECTED(zobj->properties != NULL)) {
38592 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38593 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38594 						GC_REFCOUNT(zobj->properties)--;
38595 					}
38596 					zobj->properties = zend_array_dup(zobj->properties);
38597 				}
38598 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
38599 				if (property) {
38600 					goto fast_assign_obj;
38601 				}
38602 			}
38603 
38604 			if (!zobj->ce->__set) {
38605 
38606 				if (EXPECTED(zobj->properties == NULL)) {
38607 					rebuild_object_properties(zobj);
38608 				}
38609 				if (IS_CONST == IS_CONST) {
38610 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38611 						Z_ADDREF_P(value);
38612 					}
38613 				} else if (IS_CONST != IS_TMP_VAR) {
38614 					if (Z_ISREF_P(value)) {
38615 						if (IS_CONST == IS_VAR) {
38616 							zend_reference *ref = Z_REF_P(value);
38617 							if (--GC_REFCOUNT(ref) == 0) {
38618 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38619 								efree_size(ref, sizeof(zend_reference));
38620 								value = &tmp;
38621 							} else {
38622 								value = Z_REFVAL_P(value);
38623 								if (Z_REFCOUNTED_P(value)) {
38624 									Z_ADDREF_P(value);
38625 								}
38626 							}
38627 						} else {
38628 							value = Z_REFVAL_P(value);
38629 							if (Z_REFCOUNTED_P(value)) {
38630 								Z_ADDREF_P(value);
38631 							}
38632 						}
38633 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
38634 						Z_ADDREF_P(value);
38635 					}
38636 				}
38637 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
38638 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38639 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38640 				}
38641 				goto exit_assign_obj;
38642 			}
38643 		}
38644 	}
38645 
38646 	if (!Z_OBJ_HT_P(object)->write_property) {
38647 		zend_error(E_WARNING, "Attempt to assign property of non-object");
38648 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38649 			ZVAL_NULL(EX_VAR(opline->result.var));
38650 		}
38651 
38652 		goto exit_assign_obj;
38653 	}
38654 
38655 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
38656 		ZVAL_DEREF(value);
38657 	}
38658 
38659 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
38660 
38661 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
38662 		ZVAL_COPY(EX_VAR(opline->result.var), value);
38663 	}
38664 
38665 exit_assign_obj:
38666 
38667 
38668 	/* assign_obj has two opcodes! */
38669 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38670 }
38671 
38672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38673 {
38674 	USE_OPLINE
38675 	zend_free_op free_op_data;
38676 	zval *object, *property_name, *value, tmp;
38677 
38678 	SAVE_OPLINE();
38679 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38680 
38681 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38682 		zend_throw_error(NULL, "Using $this when not in object context");
38683 
38684 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38685 		HANDLE_EXCEPTION();
38686 	}
38687 
38688 	property_name = EX_CONSTANT(opline->op2);
38689 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
38690 
38691 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38692 		do {
38693 			if (Z_ISREF_P(object)) {
38694 				object = Z_REFVAL_P(object);
38695 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38696 					break;
38697 				}
38698 			}
38699 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
38700 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
38701 				zend_object *obj;
38702 
38703 				zval_ptr_dtor(object);
38704 				object_init(object);
38705 				Z_ADDREF_P(object);
38706 				obj = Z_OBJ_P(object);
38707 				zend_error(E_WARNING, "Creating default object from empty value");
38708 				if (GC_REFCOUNT(obj) == 1) {
38709 					/* the enclosing container was deleted, obj is unreferenced */
38710 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38711 						ZVAL_NULL(EX_VAR(opline->result.var));
38712 					}
38713 					zval_ptr_dtor_nogc(free_op_data);
38714 					OBJ_RELEASE(obj);
38715 					goto exit_assign_obj;
38716 				}
38717 				Z_DELREF_P(object);
38718 			} else {
38719 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
38720 					zend_error(E_WARNING, "Attempt to assign property of non-object");
38721 				}
38722 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38723 					ZVAL_NULL(EX_VAR(opline->result.var));
38724 				}
38725 				zval_ptr_dtor_nogc(free_op_data);
38726 				goto exit_assign_obj;
38727 			}
38728 		} while (0);
38729 	}
38730 
38731 	if (IS_CONST == IS_CONST &&
38732 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
38733 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
38734 		zend_object *zobj = Z_OBJ_P(object);
38735 		zval *property;
38736 
38737 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
38738 			property = OBJ_PROP(zobj, prop_offset);
38739 			if (Z_TYPE_P(property) != IS_UNDEF) {
38740 fast_assign_obj:
38741 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
38742 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38743 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38744 				}
38745 				goto exit_assign_obj;
38746 			}
38747 		} else {
38748 			if (EXPECTED(zobj->properties != NULL)) {
38749 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38750 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38751 						GC_REFCOUNT(zobj->properties)--;
38752 					}
38753 					zobj->properties = zend_array_dup(zobj->properties);
38754 				}
38755 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
38756 				if (property) {
38757 					goto fast_assign_obj;
38758 				}
38759 			}
38760 
38761 			if (!zobj->ce->__set) {
38762 
38763 				if (EXPECTED(zobj->properties == NULL)) {
38764 					rebuild_object_properties(zobj);
38765 				}
38766 				if (IS_TMP_VAR == IS_CONST) {
38767 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38768 						Z_ADDREF_P(value);
38769 					}
38770 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
38771 					if (Z_ISREF_P(value)) {
38772 						if (IS_TMP_VAR == IS_VAR) {
38773 							zend_reference *ref = Z_REF_P(value);
38774 							if (--GC_REFCOUNT(ref) == 0) {
38775 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38776 								efree_size(ref, sizeof(zend_reference));
38777 								value = &tmp;
38778 							} else {
38779 								value = Z_REFVAL_P(value);
38780 								if (Z_REFCOUNTED_P(value)) {
38781 									Z_ADDREF_P(value);
38782 								}
38783 							}
38784 						} else {
38785 							value = Z_REFVAL_P(value);
38786 							if (Z_REFCOUNTED_P(value)) {
38787 								Z_ADDREF_P(value);
38788 							}
38789 						}
38790 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
38791 						Z_ADDREF_P(value);
38792 					}
38793 				}
38794 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
38795 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38796 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38797 				}
38798 				goto exit_assign_obj;
38799 			}
38800 		}
38801 	}
38802 
38803 	if (!Z_OBJ_HT_P(object)->write_property) {
38804 		zend_error(E_WARNING, "Attempt to assign property of non-object");
38805 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38806 			ZVAL_NULL(EX_VAR(opline->result.var));
38807 		}
38808 		zval_ptr_dtor_nogc(free_op_data);
38809 		goto exit_assign_obj;
38810 	}
38811 
38812 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
38813 		ZVAL_DEREF(value);
38814 	}
38815 
38816 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
38817 
38818 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
38819 		ZVAL_COPY(EX_VAR(opline->result.var), value);
38820 	}
38821 	zval_ptr_dtor_nogc(free_op_data);
38822 exit_assign_obj:
38823 
38824 
38825 	/* assign_obj has two opcodes! */
38826 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38827 }
38828 
38829 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38830 {
38831 	USE_OPLINE
38832 	zend_free_op free_op_data;
38833 	zval *object, *property_name, *value, tmp;
38834 
38835 	SAVE_OPLINE();
38836 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38837 
38838 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38839 		zend_throw_error(NULL, "Using $this when not in object context");
38840 
38841 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38842 		HANDLE_EXCEPTION();
38843 	}
38844 
38845 	property_name = EX_CONSTANT(opline->op2);
38846 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
38847 
38848 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38849 		do {
38850 			if (Z_ISREF_P(object)) {
38851 				object = Z_REFVAL_P(object);
38852 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38853 					break;
38854 				}
38855 			}
38856 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
38857 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
38858 				zend_object *obj;
38859 
38860 				zval_ptr_dtor(object);
38861 				object_init(object);
38862 				Z_ADDREF_P(object);
38863 				obj = Z_OBJ_P(object);
38864 				zend_error(E_WARNING, "Creating default object from empty value");
38865 				if (GC_REFCOUNT(obj) == 1) {
38866 					/* the enclosing container was deleted, obj is unreferenced */
38867 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38868 						ZVAL_NULL(EX_VAR(opline->result.var));
38869 					}
38870 					zval_ptr_dtor_nogc(free_op_data);
38871 					OBJ_RELEASE(obj);
38872 					goto exit_assign_obj;
38873 				}
38874 				Z_DELREF_P(object);
38875 			} else {
38876 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
38877 					zend_error(E_WARNING, "Attempt to assign property of non-object");
38878 				}
38879 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38880 					ZVAL_NULL(EX_VAR(opline->result.var));
38881 				}
38882 				zval_ptr_dtor_nogc(free_op_data);
38883 				goto exit_assign_obj;
38884 			}
38885 		} while (0);
38886 	}
38887 
38888 	if (IS_CONST == IS_CONST &&
38889 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
38890 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
38891 		zend_object *zobj = Z_OBJ_P(object);
38892 		zval *property;
38893 
38894 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
38895 			property = OBJ_PROP(zobj, prop_offset);
38896 			if (Z_TYPE_P(property) != IS_UNDEF) {
38897 fast_assign_obj:
38898 				value = zend_assign_to_variable(property, value, IS_VAR);
38899 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38900 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38901 				}
38902 				goto exit_assign_obj;
38903 			}
38904 		} else {
38905 			if (EXPECTED(zobj->properties != NULL)) {
38906 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38907 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38908 						GC_REFCOUNT(zobj->properties)--;
38909 					}
38910 					zobj->properties = zend_array_dup(zobj->properties);
38911 				}
38912 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
38913 				if (property) {
38914 					goto fast_assign_obj;
38915 				}
38916 			}
38917 
38918 			if (!zobj->ce->__set) {
38919 
38920 				if (EXPECTED(zobj->properties == NULL)) {
38921 					rebuild_object_properties(zobj);
38922 				}
38923 				if (IS_VAR == IS_CONST) {
38924 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38925 						Z_ADDREF_P(value);
38926 					}
38927 				} else if (IS_VAR != IS_TMP_VAR) {
38928 					if (Z_ISREF_P(value)) {
38929 						if (IS_VAR == IS_VAR) {
38930 							zend_reference *ref = Z_REF_P(value);
38931 							if (--GC_REFCOUNT(ref) == 0) {
38932 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38933 								efree_size(ref, sizeof(zend_reference));
38934 								value = &tmp;
38935 							} else {
38936 								value = Z_REFVAL_P(value);
38937 								if (Z_REFCOUNTED_P(value)) {
38938 									Z_ADDREF_P(value);
38939 								}
38940 							}
38941 						} else {
38942 							value = Z_REFVAL_P(value);
38943 							if (Z_REFCOUNTED_P(value)) {
38944 								Z_ADDREF_P(value);
38945 							}
38946 						}
38947 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
38948 						Z_ADDREF_P(value);
38949 					}
38950 				}
38951 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
38952 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38953 					ZVAL_COPY(EX_VAR(opline->result.var), value);
38954 				}
38955 				goto exit_assign_obj;
38956 			}
38957 		}
38958 	}
38959 
38960 	if (!Z_OBJ_HT_P(object)->write_property) {
38961 		zend_error(E_WARNING, "Attempt to assign property of non-object");
38962 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38963 			ZVAL_NULL(EX_VAR(opline->result.var));
38964 		}
38965 		zval_ptr_dtor_nogc(free_op_data);
38966 		goto exit_assign_obj;
38967 	}
38968 
38969 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
38970 		ZVAL_DEREF(value);
38971 	}
38972 
38973 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
38974 
38975 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
38976 		ZVAL_COPY(EX_VAR(opline->result.var), value);
38977 	}
38978 	zval_ptr_dtor_nogc(free_op_data);
38979 exit_assign_obj:
38980 
38981 
38982 	/* assign_obj has two opcodes! */
38983 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38984 }
38985 
38986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38987 {
38988 	USE_OPLINE
38989 
38990 	zval *object, *property_name, *value, tmp;
38991 
38992 	SAVE_OPLINE();
38993 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
38994 
38995 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38996 		zend_throw_error(NULL, "Using $this when not in object context");
38997 
38998 
38999 		HANDLE_EXCEPTION();
39000 	}
39001 
39002 	property_name = EX_CONSTANT(opline->op2);
39003 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
39004 
39005 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39006 		do {
39007 			if (Z_ISREF_P(object)) {
39008 				object = Z_REFVAL_P(object);
39009 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
39010 					break;
39011 				}
39012 			}
39013 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
39014 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
39015 				zend_object *obj;
39016 
39017 				zval_ptr_dtor(object);
39018 				object_init(object);
39019 				Z_ADDREF_P(object);
39020 				obj = Z_OBJ_P(object);
39021 				zend_error(E_WARNING, "Creating default object from empty value");
39022 				if (GC_REFCOUNT(obj) == 1) {
39023 					/* the enclosing container was deleted, obj is unreferenced */
39024 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39025 						ZVAL_NULL(EX_VAR(opline->result.var));
39026 					}
39027 
39028 					OBJ_RELEASE(obj);
39029 					goto exit_assign_obj;
39030 				}
39031 				Z_DELREF_P(object);
39032 			} else {
39033 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
39034 					zend_error(E_WARNING, "Attempt to assign property of non-object");
39035 				}
39036 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39037 					ZVAL_NULL(EX_VAR(opline->result.var));
39038 				}
39039 
39040 				goto exit_assign_obj;
39041 			}
39042 		} while (0);
39043 	}
39044 
39045 	if (IS_CONST == IS_CONST &&
39046 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
39047 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
39048 		zend_object *zobj = Z_OBJ_P(object);
39049 		zval *property;
39050 
39051 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
39052 			property = OBJ_PROP(zobj, prop_offset);
39053 			if (Z_TYPE_P(property) != IS_UNDEF) {
39054 fast_assign_obj:
39055 				value = zend_assign_to_variable(property, value, IS_CV);
39056 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39057 					ZVAL_COPY(EX_VAR(opline->result.var), value);
39058 				}
39059 				goto exit_assign_obj;
39060 			}
39061 		} else {
39062 			if (EXPECTED(zobj->properties != NULL)) {
39063 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
39064 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
39065 						GC_REFCOUNT(zobj->properties)--;
39066 					}
39067 					zobj->properties = zend_array_dup(zobj->properties);
39068 				}
39069 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
39070 				if (property) {
39071 					goto fast_assign_obj;
39072 				}
39073 			}
39074 
39075 			if (!zobj->ce->__set) {
39076 
39077 				if (EXPECTED(zobj->properties == NULL)) {
39078 					rebuild_object_properties(zobj);
39079 				}
39080 				if (IS_CV == IS_CONST) {
39081 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
39082 						Z_ADDREF_P(value);
39083 					}
39084 				} else if (IS_CV != IS_TMP_VAR) {
39085 					if (Z_ISREF_P(value)) {
39086 						if (IS_CV == IS_VAR) {
39087 							zend_reference *ref = Z_REF_P(value);
39088 							if (--GC_REFCOUNT(ref) == 0) {
39089 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
39090 								efree_size(ref, sizeof(zend_reference));
39091 								value = &tmp;
39092 							} else {
39093 								value = Z_REFVAL_P(value);
39094 								if (Z_REFCOUNTED_P(value)) {
39095 									Z_ADDREF_P(value);
39096 								}
39097 							}
39098 						} else {
39099 							value = Z_REFVAL_P(value);
39100 							if (Z_REFCOUNTED_P(value)) {
39101 								Z_ADDREF_P(value);
39102 							}
39103 						}
39104 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
39105 						Z_ADDREF_P(value);
39106 					}
39107 				}
39108 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
39109 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39110 					ZVAL_COPY(EX_VAR(opline->result.var), value);
39111 				}
39112 				goto exit_assign_obj;
39113 			}
39114 		}
39115 	}
39116 
39117 	if (!Z_OBJ_HT_P(object)->write_property) {
39118 		zend_error(E_WARNING, "Attempt to assign property of non-object");
39119 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39120 			ZVAL_NULL(EX_VAR(opline->result.var));
39121 		}
39122 
39123 		goto exit_assign_obj;
39124 	}
39125 
39126 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
39127 		ZVAL_DEREF(value);
39128 	}
39129 
39130 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
39131 
39132 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
39133 		ZVAL_COPY(EX_VAR(opline->result.var), value);
39134 	}
39135 
39136 exit_assign_obj:
39137 
39138 
39139 	/* assign_obj has two opcodes! */
39140 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39141 }
39142 
39143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39144 {
39145 	USE_OPLINE
39146 
39147 	zval *object_ptr;
39148 
39149 	zval *value;
39150 	zval *variable_ptr;
39151 	zval *dim;
39152 
39153 	SAVE_OPLINE();
39154 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39155 
39156 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39157 try_assign_dim_array:
39158 		SEPARATE_ARRAY(object_ptr);
39159 		if (IS_CONST == IS_UNUSED) {
39160 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
39161 			if (UNEXPECTED(variable_ptr == NULL)) {
39162 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39163 				goto assign_dim_error;
39164 			}
39165 		} else {
39166 			dim = EX_CONSTANT(opline->op2);
39167 			if (IS_CONST == IS_CONST) {
39168 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
39169 			} else {
39170 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
39171 			}
39172 			if (UNEXPECTED(variable_ptr == NULL)) {
39173 				goto assign_dim_error;
39174 			}
39175 		}
39176 		value = EX_CONSTANT((opline+1)->op1);
39177 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
39178 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39179 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39180 		}
39181 	} else {
39182 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
39183 			object_ptr = Z_REFVAL_P(object_ptr);
39184 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39185 				goto try_assign_dim_array;
39186 			}
39187 		}
39188 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
39189 			dim = EX_CONSTANT(opline->op2);
39190 			value = EX_CONSTANT((opline+1)->op1);
39191 
39192 			zend_assign_to_object_dim(object_ptr, dim, value);
39193 
39194 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
39195 				ZVAL_COPY(EX_VAR(opline->result.var), value);
39196 			}
39197 
39198 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
39199 			if (IS_CONST == IS_UNUSED) {
39200 				zend_throw_error(NULL, "[] operator not supported for strings");
39201 
39202 
39203 				HANDLE_EXCEPTION();
39204 			} else {
39205 				dim = EX_CONSTANT(opline->op2);
39206 				value = EX_CONSTANT((opline+1)->op1);
39207 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39208 
39209 			}
39210 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
39211 			ZVAL_NEW_ARR(object_ptr);
39212 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
39213 			goto try_assign_dim_array;
39214 		} else {
39215 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
39216 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
39217 			}
39218 			dim = EX_CONSTANT(opline->op2);
39219 assign_dim_error:
39220 
39221 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39222 				ZVAL_NULL(EX_VAR(opline->result.var));
39223 			}
39224 		}
39225 	}
39226 	if (IS_CONST != IS_UNUSED) {
39227 
39228 	}
39229 
39230 	/* assign_dim has two opcodes! */
39231 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39232 }
39233 
39234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39235 {
39236 	USE_OPLINE
39237 
39238 	zval *object_ptr;
39239 	zend_free_op free_op_data;
39240 	zval *value;
39241 	zval *variable_ptr;
39242 	zval *dim;
39243 
39244 	SAVE_OPLINE();
39245 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39246 
39247 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39248 try_assign_dim_array:
39249 		SEPARATE_ARRAY(object_ptr);
39250 		if (IS_CONST == IS_UNUSED) {
39251 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
39252 			if (UNEXPECTED(variable_ptr == NULL)) {
39253 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39254 				goto assign_dim_error;
39255 			}
39256 		} else {
39257 			dim = EX_CONSTANT(opline->op2);
39258 			if (IS_CONST == IS_CONST) {
39259 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
39260 			} else {
39261 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
39262 			}
39263 			if (UNEXPECTED(variable_ptr == NULL)) {
39264 				goto assign_dim_error;
39265 			}
39266 		}
39267 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
39268 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
39269 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39270 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39271 		}
39272 	} else {
39273 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
39274 			object_ptr = Z_REFVAL_P(object_ptr);
39275 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39276 				goto try_assign_dim_array;
39277 			}
39278 		}
39279 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
39280 			dim = EX_CONSTANT(opline->op2);
39281 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
39282 
39283 			zend_assign_to_object_dim(object_ptr, dim, value);
39284 
39285 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
39286 				ZVAL_COPY(EX_VAR(opline->result.var), value);
39287 			}
39288 
39289 			zval_ptr_dtor_nogc(free_op_data);
39290 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
39291 			if (IS_CONST == IS_UNUSED) {
39292 				zend_throw_error(NULL, "[] operator not supported for strings");
39293 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
39294 
39295 				HANDLE_EXCEPTION();
39296 			} else {
39297 				dim = EX_CONSTANT(opline->op2);
39298 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
39299 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39300 				zval_ptr_dtor_nogc(free_op_data);
39301 			}
39302 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
39303 			ZVAL_NEW_ARR(object_ptr);
39304 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
39305 			goto try_assign_dim_array;
39306 		} else {
39307 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
39308 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
39309 			}
39310 			dim = EX_CONSTANT(opline->op2);
39311 assign_dim_error:
39312 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
39313 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39314 				ZVAL_NULL(EX_VAR(opline->result.var));
39315 			}
39316 		}
39317 	}
39318 	if (IS_CONST != IS_UNUSED) {
39319 
39320 	}
39321 
39322 	/* assign_dim has two opcodes! */
39323 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39324 }
39325 
39326 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39327 {
39328 	USE_OPLINE
39329 
39330 	zval *object_ptr;
39331 	zend_free_op free_op_data;
39332 	zval *value;
39333 	zval *variable_ptr;
39334 	zval *dim;
39335 
39336 	SAVE_OPLINE();
39337 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39338 
39339 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39340 try_assign_dim_array:
39341 		SEPARATE_ARRAY(object_ptr);
39342 		if (IS_CONST == IS_UNUSED) {
39343 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
39344 			if (UNEXPECTED(variable_ptr == NULL)) {
39345 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39346 				goto assign_dim_error;
39347 			}
39348 		} else {
39349 			dim = EX_CONSTANT(opline->op2);
39350 			if (IS_CONST == IS_CONST) {
39351 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
39352 			} else {
39353 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
39354 			}
39355 			if (UNEXPECTED(variable_ptr == NULL)) {
39356 				goto assign_dim_error;
39357 			}
39358 		}
39359 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
39360 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
39361 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39362 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39363 		}
39364 	} else {
39365 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
39366 			object_ptr = Z_REFVAL_P(object_ptr);
39367 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39368 				goto try_assign_dim_array;
39369 			}
39370 		}
39371 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
39372 			dim = EX_CONSTANT(opline->op2);
39373 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
39374 
39375 			zend_assign_to_object_dim(object_ptr, dim, value);
39376 
39377 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
39378 				ZVAL_COPY(EX_VAR(opline->result.var), value);
39379 			}
39380 
39381 			zval_ptr_dtor_nogc(free_op_data);
39382 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
39383 			if (IS_CONST == IS_UNUSED) {
39384 				zend_throw_error(NULL, "[] operator not supported for strings");
39385 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
39386 
39387 				HANDLE_EXCEPTION();
39388 			} else {
39389 				dim = EX_CONSTANT(opline->op2);
39390 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
39391 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39392 				zval_ptr_dtor_nogc(free_op_data);
39393 			}
39394 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
39395 			ZVAL_NEW_ARR(object_ptr);
39396 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
39397 			goto try_assign_dim_array;
39398 		} else {
39399 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
39400 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
39401 			}
39402 			dim = EX_CONSTANT(opline->op2);
39403 assign_dim_error:
39404 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
39405 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39406 				ZVAL_NULL(EX_VAR(opline->result.var));
39407 			}
39408 		}
39409 	}
39410 	if (IS_CONST != IS_UNUSED) {
39411 
39412 	}
39413 
39414 	/* assign_dim has two opcodes! */
39415 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39416 }
39417 
39418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39419 {
39420 	USE_OPLINE
39421 
39422 	zval *object_ptr;
39423 
39424 	zval *value;
39425 	zval *variable_ptr;
39426 	zval *dim;
39427 
39428 	SAVE_OPLINE();
39429 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39430 
39431 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39432 try_assign_dim_array:
39433 		SEPARATE_ARRAY(object_ptr);
39434 		if (IS_CONST == IS_UNUSED) {
39435 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
39436 			if (UNEXPECTED(variable_ptr == NULL)) {
39437 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39438 				goto assign_dim_error;
39439 			}
39440 		} else {
39441 			dim = EX_CONSTANT(opline->op2);
39442 			if (IS_CONST == IS_CONST) {
39443 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
39444 			} else {
39445 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
39446 			}
39447 			if (UNEXPECTED(variable_ptr == NULL)) {
39448 				goto assign_dim_error;
39449 			}
39450 		}
39451 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
39452 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
39453 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39454 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39455 		}
39456 	} else {
39457 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
39458 			object_ptr = Z_REFVAL_P(object_ptr);
39459 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
39460 				goto try_assign_dim_array;
39461 			}
39462 		}
39463 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
39464 			dim = EX_CONSTANT(opline->op2);
39465 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
39466 
39467 			zend_assign_to_object_dim(object_ptr, dim, value);
39468 
39469 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
39470 				ZVAL_COPY(EX_VAR(opline->result.var), value);
39471 			}
39472 
39473 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
39474 			if (IS_CONST == IS_UNUSED) {
39475 				zend_throw_error(NULL, "[] operator not supported for strings");
39476 
39477 
39478 				HANDLE_EXCEPTION();
39479 			} else {
39480 				dim = EX_CONSTANT(opline->op2);
39481 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
39482 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
39483 
39484 			}
39485 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
39486 			ZVAL_NEW_ARR(object_ptr);
39487 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
39488 			goto try_assign_dim_array;
39489 		} else {
39490 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
39491 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
39492 			}
39493 			dim = EX_CONSTANT(opline->op2);
39494 assign_dim_error:
39495 
39496 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39497 				ZVAL_NULL(EX_VAR(opline->result.var));
39498 			}
39499 		}
39500 	}
39501 	if (IS_CONST != IS_UNUSED) {
39502 
39503 	}
39504 
39505 	/* assign_dim has two opcodes! */
39506 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39507 }
39508 
39509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39510 {
39511 	USE_OPLINE
39512 
39513 	zval *value;
39514 	zval *variable_ptr;
39515 
39516 	SAVE_OPLINE();
39517 	value = EX_CONSTANT(opline->op2);
39518 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39519 
39520 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
39521 
39522 		if (UNEXPECTED(0)) {
39523 			ZVAL_NULL(EX_VAR(opline->result.var));
39524 		}
39525 	} else {
39526 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
39527 		if (UNEXPECTED(0)) {
39528 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39529 		}
39530 
39531 		/* zend_assign_to_variable() always takes care of op2, never free it! */
39532 	}
39533 
39534 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39535 }
39536 
39537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39538 {
39539 	USE_OPLINE
39540 
39541 	zval *value;
39542 	zval *variable_ptr;
39543 
39544 	SAVE_OPLINE();
39545 	value = EX_CONSTANT(opline->op2);
39546 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
39547 
39548 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
39549 
39550 		if (UNEXPECTED(1)) {
39551 			ZVAL_NULL(EX_VAR(opline->result.var));
39552 		}
39553 	} else {
39554 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
39555 		if (UNEXPECTED(1)) {
39556 			ZVAL_COPY(EX_VAR(opline->result.var), value);
39557 		}
39558 
39559 		/* zend_assign_to_variable() always takes care of op2, never free it! */
39560 	}
39561 
39562 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39563 }
39564 
39565 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39566 {
39567 	USE_OPLINE
39568 
39569 	zval *op1, *op2;
39570 	zend_string *op1_str, *op2_str, *str;
39571 
39572 	SAVE_OPLINE();
39573 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
39574 	if (IS_CV == IS_CONST) {
39575 		op1_str = Z_STR_P(op1);
39576 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39577 		op1_str = zend_string_copy(Z_STR_P(op1));
39578 	} else {
39579 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
39580 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
39581 		}
39582 		op1_str = _zval_get_string_func(op1);
39583 	}
39584 	op2 = EX_CONSTANT(opline->op2);
39585 	if (IS_CONST == IS_CONST) {
39586 		op2_str = Z_STR_P(op2);
39587 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39588 		op2_str = zend_string_copy(Z_STR_P(op2));
39589 	} else {
39590 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
39591 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
39592 		}
39593 		op2_str = _zval_get_string_func(op2);
39594 	}
39595 	do {
39596 		if (IS_CV != IS_CONST) {
39597 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
39598 				if (IS_CONST == IS_CONST) {
39599 					zend_string_addref(op2_str);
39600 				}
39601 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
39602 				zend_string_release(op1_str);
39603 				break;
39604 			}
39605 		}
39606 		if (IS_CONST != IS_CONST) {
39607 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
39608 				if (IS_CV == IS_CONST) {
39609 					zend_string_addref(op1_str);
39610 				}
39611 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
39612 				zend_string_release(op2_str);
39613 				break;
39614 			}
39615 		}
39616 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
39617 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
39618 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
39619 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
39620 		if (IS_CV != IS_CONST) {
39621 			zend_string_release(op1_str);
39622 		}
39623 		if (IS_CONST != IS_CONST) {
39624 			zend_string_release(op2_str);
39625 		}
39626 	} while (0);
39627 
39628 
39629 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39630 }
39631 
39632 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39633 {
39634 	USE_OPLINE
39635 	zval *function_name;
39636 
39637 	zval *object;
39638 	zend_function *fbc;
39639 	zend_class_entry *called_scope;
39640 	zend_object *obj;
39641 	zend_execute_data *call;
39642 	uint32_t call_info;
39643 
39644 	SAVE_OPLINE();
39645 
39646 	function_name = EX_CONSTANT(opline->op2);
39647 
39648 	if (IS_CONST != IS_CONST &&
39649 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
39650 		do {
39651 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
39652 				function_name = Z_REFVAL_P(function_name);
39653 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
39654 					break;
39655 				}
39656 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
39657 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
39658 				if (UNEXPECTED(EG(exception) != NULL)) {
39659 					HANDLE_EXCEPTION();
39660 				}
39661 			}
39662 			zend_throw_error(NULL, "Method name must be a string");
39663 
39664 
39665 			HANDLE_EXCEPTION();
39666 		} while (0);
39667 	}
39668 
39669 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
39670 
39671 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39672 		zend_throw_error(NULL, "Using $this when not in object context");
39673 
39674 		HANDLE_EXCEPTION();
39675 	}
39676 
39677 	if (IS_CV != IS_UNUSED) {
39678 		do {
39679 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39680 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
39681 					object = Z_REFVAL_P(object);
39682 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
39683 						break;
39684 					}
39685 				}
39686 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39687 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
39688 					if (UNEXPECTED(EG(exception) != NULL)) {
39689 
39690 						HANDLE_EXCEPTION();
39691 					}
39692 				}
39693 				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)));
39694 
39695 
39696 				HANDLE_EXCEPTION();
39697 			}
39698 		} while (0);
39699 	}
39700 
39701 	obj = Z_OBJ_P(object);
39702 	called_scope = obj->ce;
39703 
39704 	if (IS_CONST != IS_CONST ||
39705 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
39706 	    zend_object *orig_obj = obj;
39707 
39708 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
39709 			zend_throw_error(NULL, "Object does not support method calls");
39710 
39711 
39712 			HANDLE_EXCEPTION();
39713 		}
39714 
39715 		/* First, locate the function. */
39716 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
39717 		if (UNEXPECTED(fbc == NULL)) {
39718 			if (EXPECTED(!EG(exception))) {
39719 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
39720 			}
39721 
39722 
39723 			HANDLE_EXCEPTION();
39724 		}
39725 		if (IS_CONST == IS_CONST &&
39726 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
39727 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
39728 		    EXPECTED(obj == orig_obj)) {
39729 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
39730 		}
39731 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
39732 			init_func_run_time_cache(&fbc->op_array);
39733 		}
39734 	}
39735 
39736 	call_info = ZEND_CALL_NESTED_FUNCTION;
39737 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
39738 		obj = NULL;
39739 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
39740 		/* CV may be changed indirectly (e.g. when it's a reference) */
39741 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
39742 		GC_REFCOUNT(obj)++; /* For $this pointer */
39743 	}
39744 
39745 
39746 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
39747 		HANDLE_EXCEPTION();
39748 	}
39749 
39750 	call = zend_vm_stack_push_call_frame(call_info,
39751 		fbc, opline->extended_value, called_scope, obj);
39752 	call->prev_execute_data = EX(call);
39753 	EX(call) = call;
39754 
39755 	ZEND_VM_NEXT_OPCODE();
39756 }
39757 
39758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39759 {
39760 	USE_OPLINE
39761 
39762 	zval *op1, *op2, *result;
39763 
39764 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
39765 	op2 = EX_CONSTANT(opline->op2);
39766 	do {
39767 		int result;
39768 
39769 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
39770 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39771 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
39772 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39773 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
39774 			} else {
39775 				break;
39776 			}
39777 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
39778 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
39779 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
39780 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
39781 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
39782 			} else {
39783 				break;
39784 			}
39785 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
39786 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
39787 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
39788 					result = 1;
39789 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
39790 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
39791 						result = 0;
39792 					} else {
39793 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
39794 					}
39795 				} else {
39796 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
39797 				}
39798 
39799 			} else {
39800 				break;
39801 			}
39802 		} else {
39803 			break;
39804 		}
39805 		ZEND_VM_SMART_BRANCH(result, 0);
39806 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
39807 		ZEND_VM_NEXT_OPCODE();
39808 	} while (0);
39809 
39810 	SAVE_OPLINE();
39811 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
39812 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
39813 	}
39814 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
39815 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
39816 	}
39817 	result = EX_VAR(opline->result.var);
39818 	compare_function(result, op1, op2);
39819 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
39820 
39821 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39822 }
39823 
39824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39825 {
39826 	USE_OPLINE
39827 
39828 	zval *expr_ptr, new_expr;
39829 
39830 	SAVE_OPLINE();
39831 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
39832 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
39833 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
39834 		ZVAL_MAKE_REF(expr_ptr);
39835 		Z_ADDREF_P(expr_ptr);
39836 
39837 	} else {
39838 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
39839 		if (IS_CV == IS_TMP_VAR) {
39840 			/* pass */
39841 		} else if (IS_CV == IS_CONST) {
39842 			if (Z_REFCOUNTED_P(expr_ptr)) {
39843 				Z_ADDREF_P(expr_ptr);
39844 			}
39845 		} else if (IS_CV == IS_CV) {
39846 			ZVAL_DEREF(expr_ptr);
39847 			if (Z_REFCOUNTED_P(expr_ptr)) {
39848 				Z_ADDREF_P(expr_ptr);
39849 			}
39850 		} else /* if (IS_CV == IS_VAR) */ {
39851 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
39852 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
39853 
39854 				expr_ptr = Z_REFVAL_P(expr_ptr);
39855 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
39856 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
39857 					expr_ptr = &new_expr;
39858 					efree_size(ref, sizeof(zend_reference));
39859 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
39860 					Z_ADDREF_P(expr_ptr);
39861 				}
39862 			}
39863 		}
39864 	}
39865 
39866 	if (IS_CONST != IS_UNUSED) {
39867 
39868 		zval *offset = EX_CONSTANT(opline->op2);
39869 		zend_string *str;
39870 		zend_ulong hval;
39871 
39872 add_again:
39873 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
39874 			str = Z_STR_P(offset);
39875 			if (IS_CONST != IS_CONST) {
39876 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
39877 					goto num_index;
39878 				}
39879 			}
39880 str_index:
39881 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
39882 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
39883 			hval = Z_LVAL_P(offset);
39884 num_index:
39885 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
39886 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
39887 			offset = Z_REFVAL_P(offset);
39888 			goto add_again;
39889 		} else if (Z_TYPE_P(offset) == IS_NULL) {
39890 			str = ZSTR_EMPTY_ALLOC();
39891 			goto str_index;
39892 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
39893 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
39894 			goto num_index;
39895 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
39896 			hval = 0;
39897 			goto num_index;
39898 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
39899 			hval = 1;
39900 			goto num_index;
39901 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
39902 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
39903 			str = ZSTR_EMPTY_ALLOC();
39904 			goto str_index;
39905 		} else {
39906 			zend_error(E_WARNING, "Illegal offset type");
39907 			zval_ptr_dtor(expr_ptr);
39908 		}
39909 
39910 	} else {
39911 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
39912 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
39913 			zval_ptr_dtor(expr_ptr);
39914 		}
39915 	}
39916 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39917 }
39918 
39919 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39920 {
39921 	zval *array;
39922 	uint32_t size;
39923 	USE_OPLINE
39924 
39925 	array = EX_VAR(opline->result.var);
39926 	if (IS_CV != IS_UNUSED) {
39927 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
39928 	} else {
39929 		size = 0;
39930 	}
39931 	ZVAL_NEW_ARR(array);
39932 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
39933 
39934 	if (IS_CV != IS_UNUSED) {
39935 		/* Explicitly initialize array as not-packed if flag is set */
39936 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
39937 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
39938 		}
39939 	}
39940 
39941 	if (IS_CV == IS_UNUSED) {
39942 		ZEND_VM_NEXT_OPCODE();
39943 #if 0 || (IS_CV != IS_UNUSED)
39944 	} else {
39945 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39946 #endif
39947 	}
39948 }
39949 
39950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39951 {
39952 	USE_OPLINE
39953 	zval tmp, *varname;
39954 	zend_class_entry *ce;
39955 
39956 
39957 	SAVE_OPLINE();
39958 
39959 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
39960 
39961 	ZVAL_UNDEF(&tmp);
39962 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
39963 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
39964 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
39965 		}
39966 		ZVAL_STR(&tmp, zval_get_string(varname));
39967 		varname = &tmp;
39968 	}
39969 
39970 	if (IS_CONST == IS_CONST) {
39971 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
39972 		if (UNEXPECTED(ce == NULL)) {
39973 			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);
39974 			if (UNEXPECTED(ce == NULL)) {
39975 				ZEND_ASSERT(EG(exception));
39976 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
39977 					zend_string_release(Z_STR(tmp));
39978 				}
39979 
39980 				HANDLE_EXCEPTION();
39981 			}
39982 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
39983 		}
39984 	} else if (IS_CONST == IS_UNUSED) {
39985 		ce = zend_fetch_class(NULL, opline->op2.num);
39986 		if (UNEXPECTED(ce == NULL)) {
39987 			ZEND_ASSERT(EG(exception));
39988 			if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
39989 				zend_string_release(Z_STR(tmp));
39990 			}
39991 
39992 			HANDLE_EXCEPTION();
39993 		}
39994 	} else {
39995 		ce = Z_CE_P(EX_VAR(opline->op2.var));
39996 	}
39997 	zend_std_unset_static_property(ce, Z_STR_P(varname));
39998 
39999 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
40000 		zend_string_release(Z_STR(tmp));
40001 	}
40002 
40003 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40004 }
40005 
40006 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40007 {
40008 	USE_OPLINE
40009 
40010 	zval *container;
40011 	zval *offset;
40012 	zend_ulong hval;
40013 	zend_string *key;
40014 
40015 	SAVE_OPLINE();
40016 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
40017 	offset = EX_CONSTANT(opline->op2);
40018 
40019 	do {
40020 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40021 			HashTable *ht;
40022 
40023 unset_dim_array:
40024 			SEPARATE_ARRAY(container);
40025 			ht = Z_ARRVAL_P(container);
40026 offset_again:
40027 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
40028 				key = Z_STR_P(offset);
40029 				if (IS_CONST != IS_CONST) {
40030 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
40031 						goto num_index_dim;
40032 					}
40033 				}
40034 str_index_dim:
40035 				if (ht == &EG(symbol_table)) {
40036 					zend_delete_global_variable(key);
40037 				} else {
40038 					zend_hash_del(ht, key);
40039 				}
40040 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40041 				hval = Z_LVAL_P(offset);
40042 num_index_dim:
40043 				zend_hash_index_del(ht, hval);
40044 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
40045 				offset = Z_REFVAL_P(offset);
40046 				goto offset_again;
40047 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
40048 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
40049 				goto num_index_dim;
40050 			} else if (Z_TYPE_P(offset) == IS_NULL) {
40051 				key = ZSTR_EMPTY_ALLOC();
40052 				goto str_index_dim;
40053 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
40054 				hval = 0;
40055 				goto num_index_dim;
40056 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
40057 				hval = 1;
40058 				goto num_index_dim;
40059 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
40060 				hval = Z_RES_HANDLE_P(offset);
40061 				goto num_index_dim;
40062 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
40063 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40064 				key = ZSTR_EMPTY_ALLOC();
40065 				goto str_index_dim;
40066 			} else {
40067 				zend_error(E_WARNING, "Illegal offset type in unset");
40068 			}
40069 			break;
40070 		} else if (Z_ISREF_P(container)) {
40071 			container = Z_REFVAL_P(container);
40072 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40073 				goto unset_dim_array;
40074 			}
40075 		}
40076 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40077 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
40078 		}
40079 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
40080 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40081 		}
40082 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
40083 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
40084 				zend_throw_error(NULL, "Cannot use object as array");
40085 			} else {
40086 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
40087 			}
40088 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
40089 			zend_throw_error(NULL, "Cannot unset string offsets");
40090 		}
40091 	} while (0);
40092 
40093 
40094 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40095 }
40096 
40097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40098 {
40099 	USE_OPLINE
40100 
40101 	zval *container;
40102 	zval *offset;
40103 
40104 	SAVE_OPLINE();
40105 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
40106 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40107 		zend_throw_error(NULL, "Using $this when not in object context");
40108 
40109 		HANDLE_EXCEPTION();
40110 	}
40111 	offset = EX_CONSTANT(opline->op2);
40112 
40113 	do {
40114 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
40115 			if (Z_ISREF_P(container)) {
40116 				container = Z_REFVAL_P(container);
40117 				if (Z_TYPE_P(container) != IS_OBJECT) {
40118 					break;
40119 				}
40120 			} else {
40121 				break;
40122 			}
40123 		}
40124 		if (Z_OBJ_HT_P(container)->unset_property) {
40125 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
40126 		} else {
40127 			zend_error(E_NOTICE, "Trying to unset property of non-object");
40128 		}
40129 	} while (0);
40130 
40131 
40132 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40133 }
40134 
40135 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40136 {
40137 	USE_OPLINE
40138 	zval *value;
40139 	int result;
40140 
40141 	zval tmp, *varname;
40142 	zend_class_entry *ce;
40143 
40144 	SAVE_OPLINE();
40145 	varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
40146 	ZVAL_UNDEF(&tmp);
40147 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
40148 		ZVAL_STR(&tmp, zval_get_string(varname));
40149 		varname = &tmp;
40150 	}
40151 
40152 	if (IS_CONST == IS_CONST) {
40153 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
40154 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
40155 
40156 			/* check if static properties were destoyed */
40157 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
40158 				value = NULL;
40159 			}
40160 
40161 			goto is_static_prop_return;
40162 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
40163 			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);
40164 			if (UNEXPECTED(ce == NULL)) {
40165 				ZEND_ASSERT(EG(exception));
40166 				HANDLE_EXCEPTION();
40167 			}
40168 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
40169 		}
40170 	} else {
40171 		if (IS_CONST == IS_UNUSED) {
40172 			ce = zend_fetch_class(NULL, opline->op2.num);
40173 			if (UNEXPECTED(ce == NULL)) {
40174 				ZEND_ASSERT(EG(exception));
40175 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
40176 					zend_string_release(Z_STR(tmp));
40177 				}
40178 
40179 				HANDLE_EXCEPTION();
40180 			}
40181 		} else {
40182 			ce = Z_CE_P(EX_VAR(opline->op2.var));
40183 		}
40184 		if (IS_CV == IS_CONST &&
40185 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
40186 
40187 			/* check if static properties were destoyed */
40188 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
40189 				value = NULL;
40190 			}
40191 
40192 			goto is_static_prop_return;
40193 		}
40194 	}
40195 
40196 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
40197 
40198 	if (IS_CV == IS_CONST && value) {
40199 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
40200 	}
40201 
40202 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
40203 		zend_string_release(Z_STR(tmp));
40204 	}
40205 
40206 is_static_prop_return:
40207 	if (opline->extended_value & ZEND_ISSET) {
40208 		result = value && Z_TYPE_P(value) > IS_NULL &&
40209 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
40210 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
40211 		result = !value || !i_zend_is_true(value);
40212 	}
40213 
40214 	ZEND_VM_SMART_BRANCH(result, 1);
40215 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40216 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40217 }
40218 
40219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40220 {
40221 	USE_OPLINE
40222 
40223 	zval *container;
40224 	int result;
40225 	zend_ulong hval;
40226 	zval *offset;
40227 
40228 	SAVE_OPLINE();
40229 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
40230 	offset = EX_CONSTANT(opline->op2);
40231 
40232 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40233 		HashTable *ht;
40234 		zval *value;
40235 		zend_string *str;
40236 
40237 isset_dim_obj_array:
40238 		ht = Z_ARRVAL_P(container);
40239 isset_again:
40240 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
40241 			str = Z_STR_P(offset);
40242 			if (IS_CONST != IS_CONST) {
40243 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
40244 					goto num_index_prop;
40245 				}
40246 			}
40247 str_index_prop:
40248 			value = zend_hash_find_ind(ht, str);
40249 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40250 			hval = Z_LVAL_P(offset);
40251 num_index_prop:
40252 			value = zend_hash_index_find(ht, hval);
40253 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
40254 			offset = Z_REFVAL_P(offset);
40255 			goto isset_again;
40256 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
40257 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
40258 			goto num_index_prop;
40259 		} else if (Z_TYPE_P(offset) == IS_NULL) {
40260 			str = ZSTR_EMPTY_ALLOC();
40261 			goto str_index_prop;
40262 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
40263 			hval = 0;
40264 			goto num_index_prop;
40265 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
40266 			hval = 1;
40267 			goto num_index_prop;
40268 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
40269 			hval = Z_RES_HANDLE_P(offset);
40270 			goto num_index_prop;
40271 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
40272 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40273 			str = ZSTR_EMPTY_ALLOC();
40274 			goto str_index_prop;
40275 		} else {
40276 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
40277 			goto isset_not_found;
40278 		}
40279 
40280 		if (opline->extended_value & ZEND_ISSET) {
40281 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
40282 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
40283 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
40284 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
40285 			result = (value == NULL || !i_zend_is_true(value));
40286 		}
40287 		goto isset_dim_obj_exit;
40288 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40289 		container = Z_REFVAL_P(container);
40290 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40291 			goto isset_dim_obj_array;
40292 		}
40293 	}
40294 
40295 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
40296 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
40297 	}
40298 
40299 	if ((IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
40300 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
40301 			result =
40302 				((opline->extended_value & ZEND_ISSET) == 0) ^
40303 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
40304 		} else {
40305 			zend_error(E_NOTICE, "Trying to check element of non-array");
40306 			goto isset_not_found;
40307 		}
40308 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
40309 		zend_long lval;
40310 
40311 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
40312 			lval = Z_LVAL_P(offset);
40313 isset_str_offset:
40314 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
40315 				lval += (zend_long)Z_STRLEN_P(container);
40316 			}
40317 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
40318 				if (opline->extended_value & ZEND_ISSET) {
40319 					result = 1;
40320 				} else {
40321 					result = (Z_STRVAL_P(container)[lval] == '0');
40322 				}
40323 			} else {
40324 				goto isset_not_found;
40325 			}
40326 		} else {
40327 			if (IS_CONST & (IS_CV|IS_VAR)) {
40328 				ZVAL_DEREF(offset);
40329 			}
40330 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
40331 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
40332 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
40333 				lval = zval_get_long(offset);
40334 				goto isset_str_offset;
40335 			}
40336 			goto isset_not_found;
40337 		}
40338 	} else {
40339 isset_not_found:
40340 		result = ((opline->extended_value & ZEND_ISSET) == 0);
40341 	}
40342 
40343 isset_dim_obj_exit:
40344 
40345 
40346 	ZEND_VM_SMART_BRANCH(result, 1);
40347 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40349 }
40350 
40351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40352 {
40353 	USE_OPLINE
40354 
40355 	zval *container;
40356 	int result;
40357 	zval *offset;
40358 
40359 	SAVE_OPLINE();
40360 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
40361 
40362 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40363 		zend_throw_error(NULL, "Using $this when not in object context");
40364 
40365 		HANDLE_EXCEPTION();
40366 	}
40367 
40368 	offset = EX_CONSTANT(opline->op2);
40369 
40370 	if (IS_CV == IS_CONST ||
40371 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
40372 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
40373 			container = Z_REFVAL_P(container);
40374 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
40375 				goto isset_no_object;
40376 			}
40377 		} else {
40378 			goto isset_no_object;
40379 		}
40380 	}
40381 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
40382 		zend_error(E_NOTICE, "Trying to check property of non-object");
40383 isset_no_object:
40384 		result = ((opline->extended_value & ZEND_ISSET) == 0);
40385 	} else {
40386 		result =
40387 			((opline->extended_value & ZEND_ISSET) == 0) ^
40388 			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));
40389 	}
40390 
40391 
40392 	ZEND_VM_SMART_BRANCH(result, 1);
40393 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40394 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40395 }
40396 
40397 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40398 {
40399 	USE_OPLINE
40400 
40401 	zval *expr;
40402 	zend_bool result;
40403 
40404 	SAVE_OPLINE();
40405 	expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
40406 
40407 try_instanceof:
40408 	if (Z_TYPE_P(expr) == IS_OBJECT) {
40409 		zend_class_entry *ce;
40410 
40411 		if (IS_CONST == IS_CONST) {
40412 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
40413 			if (UNEXPECTED(ce == NULL)) {
40414 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
40415 				if (EXPECTED(ce)) {
40416 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
40417 				}
40418 			}
40419 		} else if (IS_CONST == IS_UNUSED) {
40420 			ce = zend_fetch_class(NULL, opline->op2.num);
40421 			if (UNEXPECTED(ce == NULL)) {
40422 				ZEND_ASSERT(EG(exception));
40423 
40424 				HANDLE_EXCEPTION();
40425 			}
40426 		} else {
40427 			ce = Z_CE_P(EX_VAR(opline->op2.var));
40428 		}
40429 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
40430 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
40431 		expr = Z_REFVAL_P(expr);
40432 		goto try_instanceof;
40433 	} else {
40434 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
40435 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
40436 		}
40437 		result = 0;
40438 	}
40439 
40440 	ZEND_VM_SMART_BRANCH(result, 1);
40441 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40443 }
40444 
40445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40446 {
40447 	USE_OPLINE
40448 
40449 	zend_generator *generator = zend_get_running_generator(execute_data);
40450 
40451 	SAVE_OPLINE();
40452 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
40453 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
40454 
40455 
40456 		HANDLE_EXCEPTION();
40457 	}
40458 
40459 	/* Destroy the previously yielded value */
40460 	zval_ptr_dtor(&generator->value);
40461 
40462 	/* Destroy the previously yielded key */
40463 	zval_ptr_dtor(&generator->key);
40464 
40465 	/* Set the new yielded value */
40466 	if (IS_CV != IS_UNUSED) {
40467 
40468 
40469 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
40470 			/* Constants and temporary variables aren't yieldable by reference,
40471 			 * but we still allow them with a notice. */
40472 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
40473 				zval *value;
40474 
40475 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
40476 
40477 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
40478 				ZVAL_COPY_VALUE(&generator->value, value);
40479 				if (IS_CV == IS_CONST) {
40480 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
40481 						Z_ADDREF(generator->value);
40482 					}
40483 				}
40484 			} else {
40485 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
40486 
40487 				/* If a function call result is yielded and the function did
40488 				 * not return by reference we throw a notice. */
40489 				if (IS_CV == IS_VAR &&
40490 				    (value_ptr == &EG(uninitialized_zval) ||
40491 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
40492 				      !Z_ISREF_P(value_ptr)))) {
40493 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
40494 				} else {
40495 					ZVAL_MAKE_REF(value_ptr);
40496 				}
40497 				ZVAL_COPY(&generator->value, value_ptr);
40498 
40499 			}
40500 		} else {
40501 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
40502 
40503 			/* Consts, temporary variables and references need copying */
40504 			if (IS_CV == IS_CONST) {
40505 				ZVAL_COPY_VALUE(&generator->value, value);
40506 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
40507 					Z_ADDREF(generator->value);
40508 				}
40509 			} else if (IS_CV == IS_TMP_VAR) {
40510 				ZVAL_COPY_VALUE(&generator->value, value);
40511             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
40512 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
40513 
40514 			} else {
40515 				ZVAL_COPY_VALUE(&generator->value, value);
40516 				if (IS_CV == IS_CV) {
40517 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
40518 				}
40519 			}
40520 		}
40521 	} else {
40522 		/* If no value was specified yield null */
40523 		ZVAL_NULL(&generator->value);
40524 	}
40525 
40526 	/* Set the new yielded key */
40527 	if (IS_CONST != IS_UNUSED) {
40528 
40529 		zval *key = EX_CONSTANT(opline->op2);
40530 
40531 		/* Consts, temporary variables and references need copying */
40532 		if (IS_CONST == IS_CONST) {
40533 			ZVAL_COPY_VALUE(&generator->key, key);
40534 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
40535 				Z_ADDREF(generator->key);
40536 			}
40537 		} else if (IS_CONST == IS_TMP_VAR) {
40538 			ZVAL_COPY_VALUE(&generator->key, key);
40539 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
40540 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
40541 
40542 		} else {
40543 			ZVAL_COPY_VALUE(&generator->key, key);
40544 			if (IS_CONST == IS_CV) {
40545 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
40546 			}
40547 		}
40548 
40549 		if (Z_TYPE(generator->key) == IS_LONG
40550 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
40551 		) {
40552 			generator->largest_used_integer_key = Z_LVAL(generator->key);
40553 		}
40554 	} else {
40555 		/* If no key was specified we use auto-increment keys */
40556 		generator->largest_used_integer_key++;
40557 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
40558 	}
40559 
40560 	if (RETURN_VALUE_USED(opline)) {
40561 		/* If the return value of yield is used set the send
40562 		 * target and initialize it to NULL */
40563 		generator->send_target = EX_VAR(opline->result.var);
40564 		ZVAL_NULL(generator->send_target);
40565 	} else {
40566 		generator->send_target = NULL;
40567 	}
40568 
40569 	/* We increment to the next op, so we are at the correct position when the
40570 	 * generator is resumed. */
40571 	ZEND_VM_INC_OPCODE();
40572 
40573 	/* The GOTO VM uses a local opline variable. We need to set the opline
40574 	 * variable in execute_data so we don't resume at an old position. */
40575 	SAVE_OPLINE();
40576 
40577 	ZEND_VM_RETURN();
40578 }
40579 
40580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40581 {
40582 	USE_OPLINE
40583 
40584 	zval *varname;
40585 	zval *value;
40586 	zval *variable_ptr;
40587 	uint32_t idx;
40588 	zend_reference *ref;
40589 
40590 	ZEND_VM_REPEATABLE_OPCODE
40591 
40592 	varname = EX_CONSTANT(opline->op2);
40593 
40594 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
40595 	idx = (uint32_t)(uintptr_t)CACHED_PTR(Z_CACHE_SLOT_P(varname)) - 1;
40596 	if (EXPECTED(idx < EG(symbol_table).nNumUsed)) {
40597 		Bucket *p = EG(symbol_table).arData + idx;
40598 
40599 		if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
40600 	        (EXPECTED(p->key == Z_STR_P(varname)) ||
40601 	         (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
40602 	          EXPECTED(p->key != NULL) &&
40603 	          EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(varname)) &&
40604 	          EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(varname), Z_STRLEN_P(varname)) == 0)))) {
40605 
40606 			value = &EG(symbol_table).arData[idx].val;
40607 			goto check_indirect;
40608 		}
40609 	}
40610 
40611 	value = zend_hash_find(&EG(symbol_table), Z_STR_P(varname));
40612 	if (UNEXPECTED(value == NULL)) {
40613 		value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval));
40614 		idx = ((char*)value - (char*)EG(symbol_table).arData) / sizeof(Bucket);
40615 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
40616 		CACHE_PTR(Z_CACHE_SLOT_P(varname), (void*)(uintptr_t)(idx + 1));
40617 	} else {
40618 		idx = ((char*)value - (char*)EG(symbol_table).arData) / sizeof(Bucket);
40619 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
40620 		CACHE_PTR(Z_CACHE_SLOT_P(varname), (void*)(uintptr_t)(idx + 1));
40621 check_indirect:
40622 		/* GLOBAL variable may be an INDIRECT pointer to CV */
40623 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
40624 			value = Z_INDIRECT_P(value);
40625 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40626 				ZVAL_NULL(value);
40627 			}
40628 		}
40629 	}
40630 
40631 	if (UNEXPECTED(!Z_ISREF_P(value))) {
40632 		ref = (zend_reference*)emalloc(sizeof(zend_reference));
40633 		GC_REFCOUNT(ref) = 2;
40634 		GC_TYPE_INFO(ref) = IS_REFERENCE;
40635 		ZVAL_COPY_VALUE(&ref->val, value);
40636 		Z_REF_P(value) = ref;
40637 		Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
40638 	} else {
40639 		ref = Z_REF_P(value);
40640 		GC_REFCOUNT(ref)++;
40641 	}
40642 
40643 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
40644 
40645 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
40646 		uint32_t refcnt = Z_DELREF_P(variable_ptr);
40647 
40648 		if (EXPECTED(variable_ptr != value)) {
40649 			if (refcnt == 0) {
40650 				SAVE_OPLINE();
40651 				zval_dtor_func(Z_COUNTED_P(variable_ptr));
40652 				if (UNEXPECTED(EG(exception))) {
40653 					ZVAL_NULL(variable_ptr);
40654 					HANDLE_EXCEPTION();
40655 				}
40656 			} else {
40657 				GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
40658 			}
40659 		}
40660 	}
40661 	ZVAL_REF(variable_ptr, ref);
40662 
40663 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
40664 	ZEND_VM_NEXT_OPCODE();
40665 }
40666 
40667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40668 {
40669 	USE_OPLINE
40670 
40671 	HashTable *ht;
40672 	zval *varname;
40673 	zval *value;
40674 	zval *variable_ptr;
40675 
40676 	SAVE_OPLINE();
40677 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
40678 	zval_ptr_dtor(variable_ptr);
40679 
40680 	ht = EX(func)->op_array.static_variables;
40681 	ZEND_ASSERT(ht != NULL);
40682 	if (GC_REFCOUNT(ht) > 1) {
40683 		if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
40684 			GC_REFCOUNT(ht)--;
40685 		}
40686 		EX(func)->op_array.static_variables = ht = zend_array_dup(ht);
40687 	}
40688 
40689 	varname = EX_CONSTANT(opline->op2);
40690 	value = zend_hash_find(ht, Z_STR_P(varname));
40691 
40692 	if (opline->extended_value) {
40693 		if (Z_CONSTANT_P(value)) {
40694 			if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
40695 				ZVAL_NULL(variable_ptr);
40696 				HANDLE_EXCEPTION();
40697 			}
40698 		}
40699 		if (UNEXPECTED(!Z_ISREF_P(value))) {
40700 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
40701 			GC_REFCOUNT(ref) = 2;
40702 			GC_TYPE_INFO(ref) = IS_REFERENCE;
40703 			ZVAL_COPY_VALUE(&ref->val, value);
40704 			Z_REF_P(value) = ref;
40705 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
40706 			ZVAL_REF(variable_ptr, ref);
40707 		} else {
40708 			Z_ADDREF_P(value);
40709 			ZVAL_REF(variable_ptr, Z_REF_P(value));
40710 		}
40711 	} else {
40712 		ZVAL_COPY(variable_ptr, value);
40713 	}
40714 
40715 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40716 }
40717 
40718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40719 {
40720 	USE_OPLINE
40721 
40722 	zval *container, *dim, *value;
40723 	zend_long offset;
40724 
40725 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
40726 	dim = EX_CONSTANT(opline->op2);
40727 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40728 fetch_dim_r_index_array:
40729 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
40730 			offset = Z_LVAL_P(dim);
40731 		} else {
40732 			offset = zval_get_long(dim);
40733 		}
40734 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
40735 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
40736 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40737 			SAVE_OPLINE();
40738 
40739 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40740 		} else {
40741 			ZEND_VM_NEXT_OPCODE();
40742 		}
40743 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
40744 		container = Z_REFVAL_P(container);
40745 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
40746 			goto fetch_dim_r_index_array;
40747 		} else {
40748 			goto fetch_dim_r_index_slow;
40749 		}
40750 	} else {
40751 fetch_dim_r_index_slow:
40752 		SAVE_OPLINE();
40753 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
40754 
40755 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40756 	}
40757 
40758 fetch_dim_r_index_undef:
40759 	ZVAL_NULL(EX_VAR(opline->result.var));
40760 	SAVE_OPLINE();
40761 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
40762 
40763 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40764 }
40765 
40766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40767 {
40768 	USE_OPLINE
40769 	zend_free_op free_op2;
40770 	zval *op1, *op2;
40771 	int result;
40772 
40773 	SAVE_OPLINE();
40774 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
40775 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
40776 	result = fast_is_identical_function(op1, op2);
40777 
40778 	zval_ptr_dtor_nogc(free_op2);
40779 	ZEND_VM_SMART_BRANCH(result, 1);
40780 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40781 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40782 }
40783 
40784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40785 {
40786 	USE_OPLINE
40787 	zend_free_op free_op2;
40788 	zval *op1, *op2;
40789 	int result;
40790 
40791 	SAVE_OPLINE();
40792 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
40793 	op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
40794 	result = fast_is_not_identical_function(op1, op2);
40795 
40796 	zval_ptr_dtor_nogc(free_op2);
40797 	ZEND_VM_SMART_BRANCH(result, 1);
40798 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
40799 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40800 }
40801 
40802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40803 {
40804 	USE_OPLINE
40805 	zend_free_op free_op2;
40806 	zval *value;
40807 	zval *variable_ptr;
40808 
40809 	SAVE_OPLINE();
40810 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
40811 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
40812 
40813 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
40814 		zval_ptr_dtor_nogc(free_op2);
40815 		if (UNEXPECTED(0)) {
40816 			ZVAL_NULL(EX_VAR(opline->result.var));
40817 		}
40818 	} else {
40819 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
40820 		if (UNEXPECTED(0)) {
40821 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40822 		}
40823 
40824 		/* zend_assign_to_variable() always takes care of op2, never free it! */
40825 	}
40826 
40827 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40828 }
40829 
40830 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40831 {
40832 	USE_OPLINE
40833 	zend_free_op free_op2;
40834 	zval *value;
40835 	zval *variable_ptr;
40836 
40837 	SAVE_OPLINE();
40838 	value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
40839 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
40840 
40841 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
40842 		zval_ptr_dtor_nogc(free_op2);
40843 		if (UNEXPECTED(1)) {
40844 			ZVAL_NULL(EX_VAR(opline->result.var));
40845 		}
40846 	} else {
40847 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
40848 		if (UNEXPECTED(1)) {
40849 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40850 		}
40851 
40852 		/* zend_assign_to_variable() always takes care of op2, never free it! */
40853 	}
40854 
40855 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40856 }
40857 
40858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40859 {
40860 	USE_OPLINE
40861 
40862 	zend_generator *generator = zend_get_running_generator(execute_data);
40863 
40864 	SAVE_OPLINE();
40865 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
40866 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
40867 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
40868 
40869 		HANDLE_EXCEPTION();
40870 	}
40871 
40872 	/* Destroy the previously yielded value */
40873 	zval_ptr_dtor(&generator->value);
40874 
40875 	/* Destroy the previously yielded key */
40876 	zval_ptr_dtor(&generator->key);
40877 
40878 	/* Set the new yielded value */
40879 	if (IS_CV != IS_UNUSED) {
40880 
40881 
40882 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
40883 			/* Constants and temporary variables aren't yieldable by reference,
40884 			 * but we still allow them with a notice. */
40885 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
40886 				zval *value;
40887 
40888 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
40889 
40890 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
40891 				ZVAL_COPY_VALUE(&generator->value, value);
40892 				if (IS_CV == IS_CONST) {
40893 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
40894 						Z_ADDREF(generator->value);
40895 					}
40896 				}
40897 			} else {
40898 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
40899 
40900 				/* If a function call result is yielded and the function did
40901 				 * not return by reference we throw a notice. */
40902 				if (IS_CV == IS_VAR &&
40903 				    (value_ptr == &EG(uninitialized_zval) ||
40904 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
40905 				      !Z_ISREF_P(value_ptr)))) {
40906 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
40907 				} else {
40908 					ZVAL_MAKE_REF(value_ptr);
40909 				}
40910 				ZVAL_COPY(&generator->value, value_ptr);
40911 
40912 			}
40913 		} else {
40914 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
40915 
40916 			/* Consts, temporary variables and references need copying */
40917 			if (IS_CV == IS_CONST) {
40918 				ZVAL_COPY_VALUE(&generator->value, value);
40919 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
40920 					Z_ADDREF(generator->value);
40921 				}
40922 			} else if (IS_CV == IS_TMP_VAR) {
40923 				ZVAL_COPY_VALUE(&generator->value, value);
40924             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
40925 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
40926 
40927 			} else {
40928 				ZVAL_COPY_VALUE(&generator->value, value);
40929 				if (IS_CV == IS_CV) {
40930 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
40931 				}
40932 			}
40933 		}
40934 	} else {
40935 		/* If no value was specified yield null */
40936 		ZVAL_NULL(&generator->value);
40937 	}
40938 
40939 	/* Set the new yielded key */
40940 	if (IS_TMP_VAR != IS_UNUSED) {
40941 		zend_free_op free_op2;
40942 		zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
40943 
40944 		/* Consts, temporary variables and references need copying */
40945 		if (IS_TMP_VAR == IS_CONST) {
40946 			ZVAL_COPY_VALUE(&generator->key, key);
40947 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
40948 				Z_ADDREF(generator->key);
40949 			}
40950 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
40951 			ZVAL_COPY_VALUE(&generator->key, key);
40952 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
40953 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
40954 
40955 		} else {
40956 			ZVAL_COPY_VALUE(&generator->key, key);
40957 			if (IS_TMP_VAR == IS_CV) {
40958 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
40959 			}
40960 		}
40961 
40962 		if (Z_TYPE(generator->key) == IS_LONG
40963 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
40964 		) {
40965 			generator->largest_used_integer_key = Z_LVAL(generator->key);
40966 		}
40967 	} else {
40968 		/* If no key was specified we use auto-increment keys */
40969 		generator->largest_used_integer_key++;
40970 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
40971 	}
40972 
40973 	if (RETURN_VALUE_USED(opline)) {
40974 		/* If the return value of yield is used set the send
40975 		 * target and initialize it to NULL */
40976 		generator->send_target = EX_VAR(opline->result.var);
40977 		ZVAL_NULL(generator->send_target);
40978 	} else {
40979 		generator->send_target = NULL;
40980 	}
40981 
40982 	/* We increment to the next op, so we are at the correct position when the
40983 	 * generator is resumed. */
40984 	ZEND_VM_INC_OPCODE();
40985 
40986 	/* The GOTO VM uses a local opline variable. We need to set the opline
40987 	 * variable in execute_data so we don't resume at an old position. */
40988 	SAVE_OPLINE();
40989 
40990 	ZEND_VM_RETURN();
40991 }
40992 
40993 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40994 {
40995 	USE_OPLINE
40996 	zend_free_op free_op2;
40997 	zval *op1, *op2;
40998 	int result;
40999 
41000 	SAVE_OPLINE();
41001 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
41002 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
41003 	result = fast_is_identical_function(op1, op2);
41004 
41005 	zval_ptr_dtor_nogc(free_op2);
41006 	ZEND_VM_SMART_BRANCH(result, 1);
41007 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41009 }
41010 
41011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41012 {
41013 	USE_OPLINE
41014 	zend_free_op free_op2;
41015 	zval *op1, *op2;
41016 	int result;
41017 
41018 	SAVE_OPLINE();
41019 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
41020 	op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
41021 	result = fast_is_not_identical_function(op1, op2);
41022 
41023 	zval_ptr_dtor_nogc(free_op2);
41024 	ZEND_VM_SMART_BRANCH(result, 1);
41025 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41026 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41027 }
41028 
41029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
41030 {
41031 	USE_OPLINE
41032 
41033 	zval *varname;
41034 	zval *retval;
41035 	zend_string *name;
41036 	zend_class_entry *ce;
41037 
41038 	SAVE_OPLINE();
41039 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
41040 
41041  	if (IS_CV == IS_CONST) {
41042 		name = Z_STR_P(varname);
41043 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
41044 		name = Z_STR_P(varname);
41045 		zend_string_addref(name);
41046 	} else {
41047 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
41048 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
41049 		}
41050 		name = zval_get_string(varname);
41051 	}
41052 
41053 	if (IS_VAR == IS_CONST) {
41054 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
41055 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
41056 
41057 			/* check if static properties were destoyed */
41058 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41059 				if (type == BP_VAR_IS) {
41060 					retval = &EG(uninitialized_zval);
41061 				} else {
41062 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
41063 
41064 					HANDLE_EXCEPTION();
41065 				}
41066 			}
41067 
41068 			goto fetch_static_prop_return;
41069 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
41070 			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);
41071 			if (UNEXPECTED(ce == NULL)) {
41072 				ZEND_ASSERT(EG(exception));
41073 				if (IS_CV != IS_CONST) {
41074 					zend_string_release(name);
41075 				}
41076 
41077 				HANDLE_EXCEPTION();
41078 			}
41079 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
41080 		}
41081 	} else {
41082 		if (IS_VAR == IS_UNUSED) {
41083 			ce = zend_fetch_class(NULL, opline->op2.num);
41084 			if (UNEXPECTED(ce == NULL)) {
41085 				ZEND_ASSERT(EG(exception));
41086 				if (IS_CV != IS_CONST) {
41087 					zend_string_release(name);
41088 				}
41089 
41090 				HANDLE_EXCEPTION();
41091 			}
41092 		} else {
41093 			ce = Z_CE_P(EX_VAR(opline->op2.var));
41094 		}
41095 		if (IS_CV == IS_CONST &&
41096 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
41097 
41098 			/* check if static properties were destoyed */
41099 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41100 				if (type == BP_VAR_IS) {
41101 					retval = &EG(uninitialized_zval);
41102 				} else {
41103 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
41104 
41105 					HANDLE_EXCEPTION();
41106 				}
41107 			}
41108 
41109 			goto fetch_static_prop_return;
41110 		}
41111 	}
41112 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
41113 	if (UNEXPECTED(retval == NULL)) {
41114 		if (type == BP_VAR_IS) {
41115 			retval = &EG(uninitialized_zval);
41116 		} else {
41117 			ZEND_ASSERT(EG(exception));
41118 			if (IS_CV != IS_CONST) {
41119 				zend_string_release(name);
41120 			}
41121 
41122 			HANDLE_EXCEPTION();
41123 		}
41124 	} else if (IS_CV == IS_CONST) {
41125 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
41126 	}
41127 
41128 	if (IS_CV != IS_CONST) {
41129 		zend_string_release(name);
41130 	}
41131 
41132 fetch_static_prop_return:
41133 	if (type == BP_VAR_R || type == BP_VAR_IS) {
41134 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
41135 	} else {
41136 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
41137 	}
41138 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41139 }
41140 
41141 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41142 {
41143 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41144 }
41145 
41146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41147 {
41148 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41149 }
41150 
41151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41152 {
41153 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41154 }
41155 
41156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41157 {
41158 	USE_OPLINE
41159 
41160 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
41161 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41162 	} else {
41163 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41164 	}
41165 }
41166 
41167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41168 {
41169 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41170 }
41171 
41172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41173 {
41174 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41175 }
41176 
41177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41178 {
41179 	USE_OPLINE
41180 	zend_free_op free_op2;
41181 	zval *value;
41182 	zval *variable_ptr;
41183 
41184 	SAVE_OPLINE();
41185 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
41186 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
41187 
41188 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
41189 		zval_ptr_dtor_nogc(free_op2);
41190 		if (UNEXPECTED(0)) {
41191 			ZVAL_NULL(EX_VAR(opline->result.var));
41192 		}
41193 	} else {
41194 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
41195 		if (UNEXPECTED(0)) {
41196 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41197 		}
41198 
41199 		/* zend_assign_to_variable() always takes care of op2, never free it! */
41200 	}
41201 
41202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41203 }
41204 
41205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41206 {
41207 	USE_OPLINE
41208 	zend_free_op free_op2;
41209 	zval *value;
41210 	zval *variable_ptr;
41211 
41212 	SAVE_OPLINE();
41213 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
41214 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
41215 
41216 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
41217 		zval_ptr_dtor_nogc(free_op2);
41218 		if (UNEXPECTED(1)) {
41219 			ZVAL_NULL(EX_VAR(opline->result.var));
41220 		}
41221 	} else {
41222 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
41223 		if (UNEXPECTED(1)) {
41224 			ZVAL_COPY(EX_VAR(opline->result.var), value);
41225 		}
41226 
41227 		/* zend_assign_to_variable() always takes care of op2, never free it! */
41228 	}
41229 
41230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41231 }
41232 
41233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41234 {
41235 	USE_OPLINE
41236 	zend_free_op free_op2;
41237 	zval *variable_ptr;
41238 	zval *value_ptr;
41239 
41240 	SAVE_OPLINE();
41241 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
41242 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
41243 
41244 	if (IS_CV == IS_VAR &&
41245 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
41246 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var))) &&
41247 	    UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) {
41248 
41249 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
41250 
41251 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
41252 		HANDLE_EXCEPTION();
41253 
41254 	} else if (IS_VAR == IS_VAR &&
41255 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
41256 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
41257 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
41258 		if (UNEXPECTED(EG(exception) != NULL)) {
41259 			if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
41260 			HANDLE_EXCEPTION();
41261 		}
41262 
41263 		value_ptr = zend_assign_to_variable(variable_ptr, value_ptr, IS_VAR);
41264 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41265 			ZVAL_COPY(EX_VAR(opline->result.var), value_ptr);
41266 		}
41267 		/* zend_assign_to_variable() always takes care of op2, never free it! */
41268 
41269 	} else {
41270 
41271 		if ((IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) ||
41272 		    (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr)))) {
41273 			variable_ptr = &EG(uninitialized_zval);
41274 		} else {
41275 			zend_assign_to_variable_reference(variable_ptr, value_ptr);
41276 		}
41277 
41278 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41279 			ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
41280 		}
41281 
41282 		if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
41283 	}
41284 
41285 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41286 }
41287 
41288 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41289 {
41290 	USE_OPLINE
41291 	zval tmp, *varname;
41292 	zend_class_entry *ce;
41293 
41294 
41295 	SAVE_OPLINE();
41296 
41297 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
41298 
41299 	ZVAL_UNDEF(&tmp);
41300 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
41301 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
41302 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
41303 		}
41304 		ZVAL_STR(&tmp, zval_get_string(varname));
41305 		varname = &tmp;
41306 	}
41307 
41308 	if (IS_VAR == IS_CONST) {
41309 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
41310 		if (UNEXPECTED(ce == NULL)) {
41311 			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);
41312 			if (UNEXPECTED(ce == NULL)) {
41313 				ZEND_ASSERT(EG(exception));
41314 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
41315 					zend_string_release(Z_STR(tmp));
41316 				}
41317 
41318 				HANDLE_EXCEPTION();
41319 			}
41320 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
41321 		}
41322 	} else if (IS_VAR == IS_UNUSED) {
41323 		ce = zend_fetch_class(NULL, opline->op2.num);
41324 		if (UNEXPECTED(ce == NULL)) {
41325 			ZEND_ASSERT(EG(exception));
41326 			if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
41327 				zend_string_release(Z_STR(tmp));
41328 			}
41329 
41330 			HANDLE_EXCEPTION();
41331 		}
41332 	} else {
41333 		ce = Z_CE_P(EX_VAR(opline->op2.var));
41334 	}
41335 	zend_std_unset_static_property(ce, Z_STR_P(varname));
41336 
41337 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
41338 		zend_string_release(Z_STR(tmp));
41339 	}
41340 
41341 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41342 }
41343 
41344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41345 {
41346 	USE_OPLINE
41347 	zval *value;
41348 	int result;
41349 
41350 	zval tmp, *varname;
41351 	zend_class_entry *ce;
41352 
41353 	SAVE_OPLINE();
41354 	varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
41355 	ZVAL_UNDEF(&tmp);
41356 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
41357 		ZVAL_STR(&tmp, zval_get_string(varname));
41358 		varname = &tmp;
41359 	}
41360 
41361 	if (IS_VAR == IS_CONST) {
41362 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
41363 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
41364 
41365 			/* check if static properties were destoyed */
41366 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41367 				value = NULL;
41368 			}
41369 
41370 			goto is_static_prop_return;
41371 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
41372 			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);
41373 			if (UNEXPECTED(ce == NULL)) {
41374 				ZEND_ASSERT(EG(exception));
41375 				HANDLE_EXCEPTION();
41376 			}
41377 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
41378 		}
41379 	} else {
41380 		if (IS_VAR == IS_UNUSED) {
41381 			ce = zend_fetch_class(NULL, opline->op2.num);
41382 			if (UNEXPECTED(ce == NULL)) {
41383 				ZEND_ASSERT(EG(exception));
41384 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
41385 					zend_string_release(Z_STR(tmp));
41386 				}
41387 
41388 				HANDLE_EXCEPTION();
41389 			}
41390 		} else {
41391 			ce = Z_CE_P(EX_VAR(opline->op2.var));
41392 		}
41393 		if (IS_CV == IS_CONST &&
41394 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
41395 
41396 			/* check if static properties were destoyed */
41397 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
41398 				value = NULL;
41399 			}
41400 
41401 			goto is_static_prop_return;
41402 		}
41403 	}
41404 
41405 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
41406 
41407 	if (IS_CV == IS_CONST && value) {
41408 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
41409 	}
41410 
41411 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
41412 		zend_string_release(Z_STR(tmp));
41413 	}
41414 
41415 is_static_prop_return:
41416 	if (opline->extended_value & ZEND_ISSET) {
41417 		result = value && Z_TYPE_P(value) > IS_NULL &&
41418 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
41419 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
41420 		result = !value || !i_zend_is_true(value);
41421 	}
41422 
41423 	ZEND_VM_SMART_BRANCH(result, 1);
41424 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41426 }
41427 
41428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41429 {
41430 	USE_OPLINE
41431 
41432 	zval *expr;
41433 	zend_bool result;
41434 
41435 	SAVE_OPLINE();
41436 	expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
41437 
41438 try_instanceof:
41439 	if (Z_TYPE_P(expr) == IS_OBJECT) {
41440 		zend_class_entry *ce;
41441 
41442 		if (IS_VAR == IS_CONST) {
41443 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
41444 			if (UNEXPECTED(ce == NULL)) {
41445 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
41446 				if (EXPECTED(ce)) {
41447 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
41448 				}
41449 			}
41450 		} else if (IS_VAR == IS_UNUSED) {
41451 			ce = zend_fetch_class(NULL, opline->op2.num);
41452 			if (UNEXPECTED(ce == NULL)) {
41453 				ZEND_ASSERT(EG(exception));
41454 
41455 				HANDLE_EXCEPTION();
41456 			}
41457 		} else {
41458 			ce = Z_CE_P(EX_VAR(opline->op2.var));
41459 		}
41460 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
41461 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
41462 		expr = Z_REFVAL_P(expr);
41463 		goto try_instanceof;
41464 	} else {
41465 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
41466 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
41467 		}
41468 		result = 0;
41469 	}
41470 
41471 	ZEND_VM_SMART_BRANCH(result, 1);
41472 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41473 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41474 }
41475 
41476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41477 {
41478 	USE_OPLINE
41479 
41480 	zend_generator *generator = zend_get_running_generator(execute_data);
41481 
41482 	SAVE_OPLINE();
41483 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
41484 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
41485 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
41486 
41487 		HANDLE_EXCEPTION();
41488 	}
41489 
41490 	/* Destroy the previously yielded value */
41491 	zval_ptr_dtor(&generator->value);
41492 
41493 	/* Destroy the previously yielded key */
41494 	zval_ptr_dtor(&generator->key);
41495 
41496 	/* Set the new yielded value */
41497 	if (IS_CV != IS_UNUSED) {
41498 
41499 
41500 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
41501 			/* Constants and temporary variables aren't yieldable by reference,
41502 			 * but we still allow them with a notice. */
41503 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
41504 				zval *value;
41505 
41506 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
41507 
41508 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
41509 				ZVAL_COPY_VALUE(&generator->value, value);
41510 				if (IS_CV == IS_CONST) {
41511 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
41512 						Z_ADDREF(generator->value);
41513 					}
41514 				}
41515 			} else {
41516 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
41517 
41518 				/* If a function call result is yielded and the function did
41519 				 * not return by reference we throw a notice. */
41520 				if (IS_CV == IS_VAR &&
41521 				    (value_ptr == &EG(uninitialized_zval) ||
41522 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
41523 				      !Z_ISREF_P(value_ptr)))) {
41524 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
41525 				} else {
41526 					ZVAL_MAKE_REF(value_ptr);
41527 				}
41528 				ZVAL_COPY(&generator->value, value_ptr);
41529 
41530 			}
41531 		} else {
41532 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
41533 
41534 			/* Consts, temporary variables and references need copying */
41535 			if (IS_CV == IS_CONST) {
41536 				ZVAL_COPY_VALUE(&generator->value, value);
41537 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
41538 					Z_ADDREF(generator->value);
41539 				}
41540 			} else if (IS_CV == IS_TMP_VAR) {
41541 				ZVAL_COPY_VALUE(&generator->value, value);
41542             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
41543 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
41544 
41545 			} else {
41546 				ZVAL_COPY_VALUE(&generator->value, value);
41547 				if (IS_CV == IS_CV) {
41548 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
41549 				}
41550 			}
41551 		}
41552 	} else {
41553 		/* If no value was specified yield null */
41554 		ZVAL_NULL(&generator->value);
41555 	}
41556 
41557 	/* Set the new yielded key */
41558 	if (IS_VAR != IS_UNUSED) {
41559 		zend_free_op free_op2;
41560 		zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
41561 
41562 		/* Consts, temporary variables and references need copying */
41563 		if (IS_VAR == IS_CONST) {
41564 			ZVAL_COPY_VALUE(&generator->key, key);
41565 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
41566 				Z_ADDREF(generator->key);
41567 			}
41568 		} else if (IS_VAR == IS_TMP_VAR) {
41569 			ZVAL_COPY_VALUE(&generator->key, key);
41570 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
41571 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
41572 			zval_ptr_dtor_nogc(free_op2);
41573 		} else {
41574 			ZVAL_COPY_VALUE(&generator->key, key);
41575 			if (IS_VAR == IS_CV) {
41576 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
41577 			}
41578 		}
41579 
41580 		if (Z_TYPE(generator->key) == IS_LONG
41581 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
41582 		) {
41583 			generator->largest_used_integer_key = Z_LVAL(generator->key);
41584 		}
41585 	} else {
41586 		/* If no key was specified we use auto-increment keys */
41587 		generator->largest_used_integer_key++;
41588 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
41589 	}
41590 
41591 	if (RETURN_VALUE_USED(opline)) {
41592 		/* If the return value of yield is used set the send
41593 		 * target and initialize it to NULL */
41594 		generator->send_target = EX_VAR(opline->result.var);
41595 		ZVAL_NULL(generator->send_target);
41596 	} else {
41597 		generator->send_target = NULL;
41598 	}
41599 
41600 	/* We increment to the next op, so we are at the correct position when the
41601 	 * generator is resumed. */
41602 	ZEND_VM_INC_OPCODE();
41603 
41604 	/* The GOTO VM uses a local opline variable. We need to set the opline
41605 	 * variable in execute_data so we don't resume at an old position. */
41606 	SAVE_OPLINE();
41607 
41608 	ZEND_VM_RETURN();
41609 }
41610 
41611 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)
41612 {
41613 	USE_OPLINE
41614 	zend_free_op free_op_data1;
41615 	zval *var_ptr;
41616 	zval *value, *container, *dim;
41617 
41618 	SAVE_OPLINE();
41619 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
41620 
41621 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41622 assign_dim_op_array:
41623 		SEPARATE_ARRAY(container);
41624 assign_dim_op_new_array:
41625 		if (IS_UNUSED == IS_UNUSED) {
41626 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
41627 			if (UNEXPECTED(!var_ptr)) {
41628 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
41629 				goto assign_dim_op_ret_null;
41630 			}
41631 		} else {
41632 			dim = NULL;
41633 
41634 			if (IS_UNUSED == IS_CONST) {
41635 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
41636 			} else {
41637 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
41638 			}
41639 			if (UNEXPECTED(!var_ptr)) {
41640 				goto assign_dim_op_ret_null;
41641 			}
41642 			ZVAL_DEREF(var_ptr);
41643 			SEPARATE_ZVAL_NOREF(var_ptr);
41644 		}
41645 
41646 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
41647 
41648 		binary_op(var_ptr, var_ptr, value);
41649 
41650 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41651 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
41652 		}
41653 	} else {
41654 		if (EXPECTED(Z_ISREF_P(container))) {
41655 			container = Z_REFVAL_P(container);
41656 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41657 				goto assign_dim_op_array;
41658 			}
41659 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
41660 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
41661 assign_dim_op_convert_to_array:
41662 			ZVAL_NEW_ARR(container);
41663 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
41664 			goto assign_dim_op_new_array;
41665 		}
41666 
41667 		dim = NULL;
41668 
41669 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41670 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
41671 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
41672 		} else {
41673 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
41674 				if (IS_UNUSED == IS_UNUSED) {
41675 					zend_throw_error(NULL, "[] operator not supported for strings");
41676 				} else {
41677 					zend_check_string_offset(dim, BP_VAR_RW);
41678 					if (EXPECTED(EG(exception) == NULL)) {
41679 						zend_wrong_string_offset();
41680 					}
41681 				}
41682 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
41683 				goto assign_dim_op_convert_to_array;
41684 			} else {
41685 				if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
41686 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
41687 				}
41688 assign_dim_op_ret_null:
41689 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41690 					ZVAL_NULL(EX_VAR(opline->result.var));
41691 				}
41692 			}
41693 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
41694 		}
41695 	}
41696 
41697 	FREE_OP(free_op_data1);
41698 
41699 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41700 }
41701 
41702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41703 {
41704 #if 0 || (IS_UNUSED != IS_UNUSED)
41705 	USE_OPLINE
41706 
41707 # if 0 || (IS_CV != IS_UNUSED)
41708 	if (EXPECTED(0)) {
41709 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41710 	}
41711 	if (EXPECTED(1)) {
41712 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41713 	}
41714 # endif
41715 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41716 #else
41717 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41718 #endif
41719 }
41720 
41721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41722 {
41723 #if 0 || (IS_UNUSED != IS_UNUSED)
41724 	USE_OPLINE
41725 
41726 # if 0 || (IS_CV != IS_UNUSED)
41727 	if (EXPECTED(0)) {
41728 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41729 	}
41730 	if (EXPECTED(1)) {
41731 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41732 	}
41733 # endif
41734 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41735 #else
41736 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41737 #endif
41738 }
41739 
41740 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41741 {
41742 #if 0 || (IS_UNUSED != IS_UNUSED)
41743 	USE_OPLINE
41744 
41745 # if 0 || (IS_CV != IS_UNUSED)
41746 	if (EXPECTED(0)) {
41747 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41748 	}
41749 	if (EXPECTED(1)) {
41750 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41751 	}
41752 # endif
41753 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41754 #else
41755 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41756 #endif
41757 }
41758 
41759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41760 {
41761 #if 0 || (IS_UNUSED != IS_UNUSED)
41762 	USE_OPLINE
41763 
41764 # if 0 || (IS_CV != IS_UNUSED)
41765 	if (EXPECTED(0)) {
41766 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41767 	}
41768 	if (EXPECTED(1)) {
41769 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41770 	}
41771 # endif
41772 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41773 #else
41774 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41775 #endif
41776 }
41777 
41778 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41779 {
41780 #if 0 || (IS_UNUSED != IS_UNUSED)
41781 	USE_OPLINE
41782 
41783 # if 0 || (IS_CV != IS_UNUSED)
41784 	if (EXPECTED(0)) {
41785 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41786 	}
41787 	if (EXPECTED(1)) {
41788 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41789 	}
41790 # endif
41791 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41792 #else
41793 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41794 #endif
41795 }
41796 
41797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41798 {
41799 #if 0 || (IS_UNUSED != IS_UNUSED)
41800 	USE_OPLINE
41801 
41802 # if 0 || (IS_CV != IS_UNUSED)
41803 	if (EXPECTED(0)) {
41804 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41805 	}
41806 	if (EXPECTED(1)) {
41807 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41808 	}
41809 # endif
41810 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41811 #else
41812 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41813 #endif
41814 }
41815 
41816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41817 {
41818 #if 0 || (IS_UNUSED != IS_UNUSED)
41819 	USE_OPLINE
41820 
41821 # if 0 || (IS_CV != IS_UNUSED)
41822 	if (EXPECTED(0)) {
41823 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41824 	}
41825 	if (EXPECTED(1)) {
41826 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41827 	}
41828 # endif
41829 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41830 #else
41831 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41832 #endif
41833 }
41834 
41835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41836 {
41837 #if 0 || (IS_UNUSED != IS_UNUSED)
41838 	USE_OPLINE
41839 
41840 # if 0 || (IS_CV != IS_UNUSED)
41841 	if (EXPECTED(0)) {
41842 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41843 	}
41844 	if (EXPECTED(1)) {
41845 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41846 	}
41847 # endif
41848 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41849 #else
41850 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41851 #endif
41852 }
41853 
41854 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41855 {
41856 #if 0 || (IS_UNUSED != IS_UNUSED)
41857 	USE_OPLINE
41858 
41859 # if 0 || (IS_CV != IS_UNUSED)
41860 	if (EXPECTED(0)) {
41861 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41862 	}
41863 	if (EXPECTED(1)) {
41864 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41865 	}
41866 # endif
41867 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41868 #else
41869 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41870 #endif
41871 }
41872 
41873 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41874 {
41875 #if 0 || (IS_UNUSED != IS_UNUSED)
41876 	USE_OPLINE
41877 
41878 # if 0 || (IS_CV != IS_UNUSED)
41879 	if (EXPECTED(0)) {
41880 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41881 	}
41882 	if (EXPECTED(1)) {
41883 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41884 	}
41885 # endif
41886 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41887 #else
41888 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41889 #endif
41890 }
41891 
41892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41893 {
41894 #if 0 || (IS_UNUSED != IS_UNUSED)
41895 	USE_OPLINE
41896 
41897 # if 0 || (IS_CV != IS_UNUSED)
41898 	if (EXPECTED(0)) {
41899 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41900 	}
41901 	if (EXPECTED(1)) {
41902 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41903 	}
41904 # endif
41905 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41906 #else
41907 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41908 #endif
41909 }
41910 
41911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41912 {
41913 #if 0 || (IS_UNUSED != IS_UNUSED)
41914 	USE_OPLINE
41915 
41916 # if 0 || (IS_CV != IS_UNUSED)
41917 	if (EXPECTED(0)) {
41918 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41919 	}
41920 	if (EXPECTED(1)) {
41921 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41922 	}
41923 # endif
41924 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41925 #else
41926 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41927 #endif
41928 }
41929 
41930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
41931 {
41932 	USE_OPLINE
41933 
41934 	zval *varname;
41935 	zval *retval;
41936 	zend_string *name;
41937 	HashTable *target_symbol_table;
41938 
41939 	SAVE_OPLINE();
41940 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
41941 
41942  	if (IS_CV == IS_CONST) {
41943 		name = Z_STR_P(varname);
41944 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
41945 		name = Z_STR_P(varname);
41946 		zend_string_addref(name);
41947 	} else {
41948 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
41949 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
41950 		}
41951 		name = zval_get_string(varname);
41952 	}
41953 
41954 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
41955 	retval = zend_hash_find(target_symbol_table, name);
41956 	if (retval == NULL) {
41957 		if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
41958 			zval *result;
41959 
41960 fetch_this:
41961 			result = EX_VAR(opline->result.var);
41962 			switch (type) {
41963 				case BP_VAR_R:
41964 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
41965 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
41966 						Z_ADDREF_P(result);
41967 					} else {
41968 						ZVAL_NULL(result);
41969 						zend_error(E_NOTICE,"Undefined variable: this");
41970 					}
41971 					break;
41972 				case BP_VAR_IS:
41973 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
41974 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
41975 						Z_ADDREF_P(result);
41976 					} else {
41977 						ZVAL_NULL(result);
41978 					}
41979 					break;
41980 				case BP_VAR_RW:
41981 				case BP_VAR_W:
41982 					zend_throw_error(NULL, "Cannot re-assign $this");
41983 					break;
41984 				case BP_VAR_UNSET:
41985 					zend_throw_error(NULL, "Cannot unset $this");
41986 					break;
41987 				EMPTY_SWITCH_DEFAULT_CASE()
41988 			}
41989 			if (IS_CV != IS_CONST) {
41990 				zend_string_release(name);
41991 			}
41992 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41993 		}
41994 		switch (type) {
41995 			case BP_VAR_R:
41996 			case BP_VAR_UNSET:
41997 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
41998 				/* break missing intentionally */
41999 			case BP_VAR_IS:
42000 				retval = &EG(uninitialized_zval);
42001 				break;
42002 			case BP_VAR_RW:
42003 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
42004 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
42005 				break;
42006 			case BP_VAR_W:
42007 				retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
42008 				break;
42009 			EMPTY_SWITCH_DEFAULT_CASE()
42010 		}
42011 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
42012 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
42013 		retval = Z_INDIRECT_P(retval);
42014 		if (Z_TYPE_P(retval) == IS_UNDEF) {
42015 			if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
42016 				goto fetch_this;
42017 			}
42018 			switch (type) {
42019 				case BP_VAR_R:
42020 				case BP_VAR_UNSET:
42021 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
42022 					/* break missing intentionally */
42023 				case BP_VAR_IS:
42024 					retval = &EG(uninitialized_zval);
42025 					break;
42026 				case BP_VAR_RW:
42027 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
42028 					/* break missing intentionally */
42029 				case BP_VAR_W:
42030 					ZVAL_NULL(retval);
42031 					break;
42032 				EMPTY_SWITCH_DEFAULT_CASE()
42033 			}
42034 		}
42035 	}
42036 
42037 	if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
42038 
42039 	}
42040 
42041 	if (IS_CV != IS_CONST) {
42042 		zend_string_release(name);
42043 	}
42044 
42045 	ZEND_ASSERT(retval != NULL);
42046 	if (type == BP_VAR_R || type == BP_VAR_IS) {
42047 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
42048 	} else {
42049 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
42050 	}
42051 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42052 }
42053 
42054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42055 {
42056 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42057 }
42058 
42059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42060 {
42061 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42062 }
42063 
42064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42065 {
42066 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42067 }
42068 
42069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42070 {
42071 	USE_OPLINE
42072 
42073 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
42074 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42075 	} else {
42076 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42077 	}
42078 }
42079 
42080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42081 {
42082 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42083 }
42084 
42085 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42086 {
42087 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42088 }
42089 
42090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
42091 {
42092 	USE_OPLINE
42093 
42094 	zval *varname;
42095 	zval *retval;
42096 	zend_string *name;
42097 	zend_class_entry *ce;
42098 
42099 	SAVE_OPLINE();
42100 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
42101 
42102  	if (IS_CV == IS_CONST) {
42103 		name = Z_STR_P(varname);
42104 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
42105 		name = Z_STR_P(varname);
42106 		zend_string_addref(name);
42107 	} else {
42108 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
42109 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
42110 		}
42111 		name = zval_get_string(varname);
42112 	}
42113 
42114 	if (IS_UNUSED == IS_CONST) {
42115 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
42116 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
42117 
42118 			/* check if static properties were destoyed */
42119 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42120 				if (type == BP_VAR_IS) {
42121 					retval = &EG(uninitialized_zval);
42122 				} else {
42123 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
42124 
42125 					HANDLE_EXCEPTION();
42126 				}
42127 			}
42128 
42129 			goto fetch_static_prop_return;
42130 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
42131 			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);
42132 			if (UNEXPECTED(ce == NULL)) {
42133 				ZEND_ASSERT(EG(exception));
42134 				if (IS_CV != IS_CONST) {
42135 					zend_string_release(name);
42136 				}
42137 
42138 				HANDLE_EXCEPTION();
42139 			}
42140 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42141 		}
42142 	} else {
42143 		if (IS_UNUSED == IS_UNUSED) {
42144 			ce = zend_fetch_class(NULL, opline->op2.num);
42145 			if (UNEXPECTED(ce == NULL)) {
42146 				ZEND_ASSERT(EG(exception));
42147 				if (IS_CV != IS_CONST) {
42148 					zend_string_release(name);
42149 				}
42150 
42151 				HANDLE_EXCEPTION();
42152 			}
42153 		} else {
42154 			ce = Z_CE_P(EX_VAR(opline->op2.var));
42155 		}
42156 		if (IS_CV == IS_CONST &&
42157 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
42158 
42159 			/* check if static properties were destoyed */
42160 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
42161 				if (type == BP_VAR_IS) {
42162 					retval = &EG(uninitialized_zval);
42163 				} else {
42164 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
42165 
42166 					HANDLE_EXCEPTION();
42167 				}
42168 			}
42169 
42170 			goto fetch_static_prop_return;
42171 		}
42172 	}
42173 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
42174 	if (UNEXPECTED(retval == NULL)) {
42175 		if (type == BP_VAR_IS) {
42176 			retval = &EG(uninitialized_zval);
42177 		} else {
42178 			ZEND_ASSERT(EG(exception));
42179 			if (IS_CV != IS_CONST) {
42180 				zend_string_release(name);
42181 			}
42182 
42183 			HANDLE_EXCEPTION();
42184 		}
42185 	} else if (IS_CV == IS_CONST) {
42186 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
42187 	}
42188 
42189 	if (IS_CV != IS_CONST) {
42190 		zend_string_release(name);
42191 	}
42192 
42193 fetch_static_prop_return:
42194 	if (type == BP_VAR_R || type == BP_VAR_IS) {
42195 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
42196 	} else {
42197 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
42198 	}
42199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42200 }
42201 
42202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42203 {
42204 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42205 }
42206 
42207 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42208 {
42209 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42210 }
42211 
42212 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42213 {
42214 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42215 }
42216 
42217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42218 {
42219 	USE_OPLINE
42220 
42221 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
42222 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42223 	} else {
42224 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42225 	}
42226 }
42227 
42228 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42229 {
42230 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42231 }
42232 
42233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42234 {
42235 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42236 }
42237 
42238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42239 {
42240 	USE_OPLINE
42241 	zend_free_op free_op1;
42242 	zval *container;
42243 
42244 	SAVE_OPLINE();
42245 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42246 
42247 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
42248 
42249 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
42250 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
42251 	}
42252 
42253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42254 }
42255 
42256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42257 {
42258 	USE_OPLINE
42259 	zend_free_op free_op1;
42260 	zval *container;
42261 
42262 	SAVE_OPLINE();
42263 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
42264 
42265 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
42266 
42267 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
42268 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
42269 	}
42270 
42271 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42272 }
42273 
42274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42275 {
42276 	USE_OPLINE
42277 	zval *container;
42278 	zend_free_op free_op1;
42279 
42280 	SAVE_OPLINE();
42281 
42282 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
42283         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
42284             zend_throw_error(NULL, "Cannot use temporary expression in write context");
42285 
42286 
42287 			HANDLE_EXCEPTION();
42288         }
42289 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42290 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
42291 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
42292 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
42293 		}
42294 
42295 
42296 	} else {
42297 		if (IS_UNUSED == IS_UNUSED) {
42298 			zend_throw_error(NULL, "Cannot use [] for reading");
42299 
42300 
42301 			HANDLE_EXCEPTION();
42302 		}
42303 		container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
42304 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
42305 
42306 
42307 	}
42308 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42309 }
42310 
42311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42312 {
42313 	USE_OPLINE
42314 
42315 	zval *object_ptr;
42316 
42317 	zval *value;
42318 	zval *variable_ptr;
42319 	zval *dim;
42320 
42321 	SAVE_OPLINE();
42322 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42323 
42324 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42325 try_assign_dim_array:
42326 		SEPARATE_ARRAY(object_ptr);
42327 		if (IS_UNUSED == IS_UNUSED) {
42328 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
42329 			if (UNEXPECTED(variable_ptr == NULL)) {
42330 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
42331 				goto assign_dim_error;
42332 			}
42333 		} else {
42334 			dim = NULL;
42335 			if (IS_UNUSED == IS_CONST) {
42336 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
42337 			} else {
42338 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
42339 			}
42340 			if (UNEXPECTED(variable_ptr == NULL)) {
42341 				goto assign_dim_error;
42342 			}
42343 		}
42344 		value = EX_CONSTANT((opline+1)->op1);
42345 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
42346 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42347 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42348 		}
42349 	} else {
42350 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42351 			object_ptr = Z_REFVAL_P(object_ptr);
42352 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42353 				goto try_assign_dim_array;
42354 			}
42355 		}
42356 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42357 			dim = NULL;
42358 			value = EX_CONSTANT((opline+1)->op1);
42359 
42360 			zend_assign_to_object_dim(object_ptr, dim, value);
42361 
42362 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
42363 				ZVAL_COPY(EX_VAR(opline->result.var), value);
42364 			}
42365 
42366 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42367 			if (IS_UNUSED == IS_UNUSED) {
42368 				zend_throw_error(NULL, "[] operator not supported for strings");
42369 
42370 
42371 				HANDLE_EXCEPTION();
42372 			} else {
42373 				dim = NULL;
42374 				value = EX_CONSTANT((opline+1)->op1);
42375 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
42376 
42377 			}
42378 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42379 			ZVAL_NEW_ARR(object_ptr);
42380 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
42381 			goto try_assign_dim_array;
42382 		} else {
42383 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
42384 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
42385 			}
42386 			dim = NULL;
42387 assign_dim_error:
42388 
42389 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42390 				ZVAL_NULL(EX_VAR(opline->result.var));
42391 			}
42392 		}
42393 	}
42394 	if (IS_UNUSED != IS_UNUSED) {
42395 
42396 	}
42397 
42398 	/* assign_dim has two opcodes! */
42399 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42400 }
42401 
42402 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42403 {
42404 	USE_OPLINE
42405 
42406 	zval *object_ptr;
42407 	zend_free_op free_op_data;
42408 	zval *value;
42409 	zval *variable_ptr;
42410 	zval *dim;
42411 
42412 	SAVE_OPLINE();
42413 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42414 
42415 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42416 try_assign_dim_array:
42417 		SEPARATE_ARRAY(object_ptr);
42418 		if (IS_UNUSED == IS_UNUSED) {
42419 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
42420 			if (UNEXPECTED(variable_ptr == NULL)) {
42421 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
42422 				goto assign_dim_error;
42423 			}
42424 		} else {
42425 			dim = NULL;
42426 			if (IS_UNUSED == IS_CONST) {
42427 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
42428 			} else {
42429 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
42430 			}
42431 			if (UNEXPECTED(variable_ptr == NULL)) {
42432 				goto assign_dim_error;
42433 			}
42434 		}
42435 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
42436 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
42437 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42438 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42439 		}
42440 	} else {
42441 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42442 			object_ptr = Z_REFVAL_P(object_ptr);
42443 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42444 				goto try_assign_dim_array;
42445 			}
42446 		}
42447 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42448 			dim = NULL;
42449 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
42450 
42451 			zend_assign_to_object_dim(object_ptr, dim, value);
42452 
42453 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
42454 				ZVAL_COPY(EX_VAR(opline->result.var), value);
42455 			}
42456 
42457 			zval_ptr_dtor_nogc(free_op_data);
42458 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42459 			if (IS_UNUSED == IS_UNUSED) {
42460 				zend_throw_error(NULL, "[] operator not supported for strings");
42461 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42462 
42463 				HANDLE_EXCEPTION();
42464 			} else {
42465 				dim = NULL;
42466 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
42467 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
42468 				zval_ptr_dtor_nogc(free_op_data);
42469 			}
42470 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42471 			ZVAL_NEW_ARR(object_ptr);
42472 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
42473 			goto try_assign_dim_array;
42474 		} else {
42475 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
42476 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
42477 			}
42478 			dim = NULL;
42479 assign_dim_error:
42480 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42481 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42482 				ZVAL_NULL(EX_VAR(opline->result.var));
42483 			}
42484 		}
42485 	}
42486 	if (IS_UNUSED != IS_UNUSED) {
42487 
42488 	}
42489 
42490 	/* assign_dim has two opcodes! */
42491 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42492 }
42493 
42494 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42495 {
42496 	USE_OPLINE
42497 
42498 	zval *object_ptr;
42499 	zend_free_op free_op_data;
42500 	zval *value;
42501 	zval *variable_ptr;
42502 	zval *dim;
42503 
42504 	SAVE_OPLINE();
42505 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42506 
42507 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42508 try_assign_dim_array:
42509 		SEPARATE_ARRAY(object_ptr);
42510 		if (IS_UNUSED == IS_UNUSED) {
42511 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
42512 			if (UNEXPECTED(variable_ptr == NULL)) {
42513 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
42514 				goto assign_dim_error;
42515 			}
42516 		} else {
42517 			dim = NULL;
42518 			if (IS_UNUSED == IS_CONST) {
42519 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
42520 			} else {
42521 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
42522 			}
42523 			if (UNEXPECTED(variable_ptr == NULL)) {
42524 				goto assign_dim_error;
42525 			}
42526 		}
42527 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
42528 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
42529 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42530 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42531 		}
42532 	} else {
42533 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42534 			object_ptr = Z_REFVAL_P(object_ptr);
42535 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42536 				goto try_assign_dim_array;
42537 			}
42538 		}
42539 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42540 			dim = NULL;
42541 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
42542 
42543 			zend_assign_to_object_dim(object_ptr, dim, value);
42544 
42545 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
42546 				ZVAL_COPY(EX_VAR(opline->result.var), value);
42547 			}
42548 
42549 			zval_ptr_dtor_nogc(free_op_data);
42550 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42551 			if (IS_UNUSED == IS_UNUSED) {
42552 				zend_throw_error(NULL, "[] operator not supported for strings");
42553 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42554 
42555 				HANDLE_EXCEPTION();
42556 			} else {
42557 				dim = NULL;
42558 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
42559 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
42560 				zval_ptr_dtor_nogc(free_op_data);
42561 			}
42562 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42563 			ZVAL_NEW_ARR(object_ptr);
42564 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
42565 			goto try_assign_dim_array;
42566 		} else {
42567 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
42568 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
42569 			}
42570 			dim = NULL;
42571 assign_dim_error:
42572 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42573 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42574 				ZVAL_NULL(EX_VAR(opline->result.var));
42575 			}
42576 		}
42577 	}
42578 	if (IS_UNUSED != IS_UNUSED) {
42579 
42580 	}
42581 
42582 	/* assign_dim has two opcodes! */
42583 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42584 }
42585 
42586 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42587 {
42588 	USE_OPLINE
42589 
42590 	zval *object_ptr;
42591 
42592 	zval *value;
42593 	zval *variable_ptr;
42594 	zval *dim;
42595 
42596 	SAVE_OPLINE();
42597 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
42598 
42599 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42600 try_assign_dim_array:
42601 		SEPARATE_ARRAY(object_ptr);
42602 		if (IS_UNUSED == IS_UNUSED) {
42603 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
42604 			if (UNEXPECTED(variable_ptr == NULL)) {
42605 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
42606 				goto assign_dim_error;
42607 			}
42608 		} else {
42609 			dim = NULL;
42610 			if (IS_UNUSED == IS_CONST) {
42611 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
42612 			} else {
42613 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
42614 			}
42615 			if (UNEXPECTED(variable_ptr == NULL)) {
42616 				goto assign_dim_error;
42617 			}
42618 		}
42619 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
42620 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
42621 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42622 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42623 		}
42624 	} else {
42625 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42626 			object_ptr = Z_REFVAL_P(object_ptr);
42627 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42628 				goto try_assign_dim_array;
42629 			}
42630 		}
42631 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42632 			dim = NULL;
42633 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
42634 
42635 			zend_assign_to_object_dim(object_ptr, dim, value);
42636 
42637 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
42638 				ZVAL_COPY(EX_VAR(opline->result.var), value);
42639 			}
42640 
42641 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42642 			if (IS_UNUSED == IS_UNUSED) {
42643 				zend_throw_error(NULL, "[] operator not supported for strings");
42644 
42645 
42646 				HANDLE_EXCEPTION();
42647 			} else {
42648 				dim = NULL;
42649 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
42650 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
42651 
42652 			}
42653 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42654 			ZVAL_NEW_ARR(object_ptr);
42655 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
42656 			goto try_assign_dim_array;
42657 		} else {
42658 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
42659 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
42660 			}
42661 			dim = NULL;
42662 assign_dim_error:
42663 
42664 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42665 				ZVAL_NULL(EX_VAR(opline->result.var));
42666 			}
42667 		}
42668 	}
42669 	if (IS_UNUSED != IS_UNUSED) {
42670 
42671 	}
42672 
42673 	/* assign_dim has two opcodes! */
42674 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42675 }
42676 
42677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42678 {
42679 	USE_OPLINE
42680 
42681 	SAVE_OPLINE();
42682 	if (IS_CV == IS_UNUSED) {
42683 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
42684 	} else {
42685 /* prevents "undefined variable opline" errors */
42686 #if 0 || (IS_CV != IS_UNUSED)
42687 		zval *retval_ref, *retval_ptr;
42688 
42689 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
42690 
42691 		retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
42692 
42693 		if (IS_CV == IS_CONST) {
42694 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
42695 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
42696 		} else if (IS_CV == IS_VAR) {
42697 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
42698 				retval_ptr = Z_INDIRECT_P(retval_ptr);
42699 			}
42700 			ZVAL_DEREF(retval_ptr);
42701 		} else if (IS_CV == IS_CV) {
42702 			ZVAL_DEREF(retval_ptr);
42703 		}
42704 
42705 		if (UNEXPECTED(!ret_info->class_name
42706 			&& ret_info->type_hint != IS_CALLABLE
42707 			&& ret_info->type_hint != IS_ITERABLE
42708 			&& !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
42709 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
42710 			&& retval_ref != retval_ptr)
42711 		) {
42712 			/* A cast might happen - unwrap the reference if this is a by-value return */
42713 			if (Z_REFCOUNT_P(retval_ref) == 1) {
42714 				ZVAL_UNREF(retval_ref);
42715 			} else {
42716 				Z_DELREF_P(retval_ref);
42717 				ZVAL_COPY(retval_ref, retval_ptr);
42718 			}
42719 			retval_ptr = retval_ref;
42720 		}
42721 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
42722 
42723 		if (UNEXPECTED(EG(exception) != NULL)) {
42724 			if (IS_CV == IS_CONST) {
42725 				zval_ptr_dtor_nogc(retval_ptr);
42726 			}
42727 		}
42728 #endif
42729 	}
42730 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42731 }
42732 
42733 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42734 {
42735 	USE_OPLINE
42736 
42737 	zval *expr_ptr, new_expr;
42738 
42739 	SAVE_OPLINE();
42740 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
42741 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
42742 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
42743 		ZVAL_MAKE_REF(expr_ptr);
42744 		Z_ADDREF_P(expr_ptr);
42745 
42746 	} else {
42747 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
42748 		if (IS_CV == IS_TMP_VAR) {
42749 			/* pass */
42750 		} else if (IS_CV == IS_CONST) {
42751 			if (Z_REFCOUNTED_P(expr_ptr)) {
42752 				Z_ADDREF_P(expr_ptr);
42753 			}
42754 		} else if (IS_CV == IS_CV) {
42755 			ZVAL_DEREF(expr_ptr);
42756 			if (Z_REFCOUNTED_P(expr_ptr)) {
42757 				Z_ADDREF_P(expr_ptr);
42758 			}
42759 		} else /* if (IS_CV == IS_VAR) */ {
42760 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
42761 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
42762 
42763 				expr_ptr = Z_REFVAL_P(expr_ptr);
42764 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
42765 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
42766 					expr_ptr = &new_expr;
42767 					efree_size(ref, sizeof(zend_reference));
42768 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
42769 					Z_ADDREF_P(expr_ptr);
42770 				}
42771 			}
42772 		}
42773 	}
42774 
42775 	if (IS_UNUSED != IS_UNUSED) {
42776 
42777 		zval *offset = NULL;
42778 		zend_string *str;
42779 		zend_ulong hval;
42780 
42781 add_again:
42782 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
42783 			str = Z_STR_P(offset);
42784 			if (IS_UNUSED != IS_CONST) {
42785 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
42786 					goto num_index;
42787 				}
42788 			}
42789 str_index:
42790 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
42791 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
42792 			hval = Z_LVAL_P(offset);
42793 num_index:
42794 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
42795 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
42796 			offset = Z_REFVAL_P(offset);
42797 			goto add_again;
42798 		} else if (Z_TYPE_P(offset) == IS_NULL) {
42799 			str = ZSTR_EMPTY_ALLOC();
42800 			goto str_index;
42801 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
42802 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
42803 			goto num_index;
42804 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
42805 			hval = 0;
42806 			goto num_index;
42807 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
42808 			hval = 1;
42809 			goto num_index;
42810 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
42811 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
42812 			str = ZSTR_EMPTY_ALLOC();
42813 			goto str_index;
42814 		} else {
42815 			zend_error(E_WARNING, "Illegal offset type");
42816 			zval_ptr_dtor(expr_ptr);
42817 		}
42818 
42819 	} else {
42820 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
42821 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
42822 			zval_ptr_dtor(expr_ptr);
42823 		}
42824 	}
42825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42826 }
42827 
42828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42829 {
42830 	zval *array;
42831 	uint32_t size;
42832 	USE_OPLINE
42833 
42834 	array = EX_VAR(opline->result.var);
42835 	if (IS_CV != IS_UNUSED) {
42836 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
42837 	} else {
42838 		size = 0;
42839 	}
42840 	ZVAL_NEW_ARR(array);
42841 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
42842 
42843 	if (IS_CV != IS_UNUSED) {
42844 		/* Explicitly initialize array as not-packed if flag is set */
42845 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
42846 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
42847 		}
42848 	}
42849 
42850 	if (IS_CV == IS_UNUSED) {
42851 		ZEND_VM_NEXT_OPCODE();
42852 #if 0 || (IS_CV != IS_UNUSED)
42853 	} else {
42854 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42855 #endif
42856 	}
42857 }
42858 
42859 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42860 {
42861 	USE_OPLINE
42862 	zval tmp, *varname;
42863 	HashTable *target_symbol_table;
42864 
42865 
42866 	SAVE_OPLINE();
42867 	if (IS_CV == IS_CV &&
42868 	    (opline->extended_value & ZEND_QUICK_SET)) {
42869 		zval *var = EX_VAR(opline->op1.var);
42870 
42871 		if (Z_REFCOUNTED_P(var)) {
42872 			zend_refcounted *garbage = Z_COUNTED_P(var);
42873 
42874 			if (!--GC_REFCOUNT(garbage)) {
42875 				ZVAL_UNDEF(var);
42876 				zval_dtor_func(garbage);
42877 			} else {
42878 				zval *z = var;
42879 				ZVAL_DEREF(z);
42880 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
42881 					ZVAL_UNDEF(var);
42882 					gc_possible_root(Z_COUNTED_P(z));
42883 				} else {
42884 					ZVAL_UNDEF(var);
42885 				}
42886 			}
42887 		} else {
42888 			ZVAL_UNDEF(var);
42889 		}
42890 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42891 	}
42892 
42893 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
42894 
42895 	ZVAL_UNDEF(&tmp);
42896 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
42897 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
42898 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
42899 		}
42900 		ZVAL_STR(&tmp, zval_get_string(varname));
42901 		varname = &tmp;
42902 	}
42903 
42904 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
42905 	zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
42906 
42907 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42908 		zend_string_release(Z_STR(tmp));
42909 	}
42910 
42911 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42912 }
42913 
42914 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42915 {
42916 	USE_OPLINE
42917 	zval tmp, *varname;
42918 	zend_class_entry *ce;
42919 
42920 
42921 	SAVE_OPLINE();
42922 
42923 	varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
42924 
42925 	ZVAL_UNDEF(&tmp);
42926 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
42927 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
42928 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
42929 		}
42930 		ZVAL_STR(&tmp, zval_get_string(varname));
42931 		varname = &tmp;
42932 	}
42933 
42934 	if (IS_UNUSED == IS_CONST) {
42935 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
42936 		if (UNEXPECTED(ce == NULL)) {
42937 			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);
42938 			if (UNEXPECTED(ce == NULL)) {
42939 				ZEND_ASSERT(EG(exception));
42940 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42941 					zend_string_release(Z_STR(tmp));
42942 				}
42943 
42944 				HANDLE_EXCEPTION();
42945 			}
42946 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
42947 		}
42948 	} else if (IS_UNUSED == IS_UNUSED) {
42949 		ce = zend_fetch_class(NULL, opline->op2.num);
42950 		if (UNEXPECTED(ce == NULL)) {
42951 			ZEND_ASSERT(EG(exception));
42952 			if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42953 				zend_string_release(Z_STR(tmp));
42954 			}
42955 
42956 			HANDLE_EXCEPTION();
42957 		}
42958 	} else {
42959 		ce = Z_CE_P(EX_VAR(opline->op2.var));
42960 	}
42961 	zend_std_unset_static_property(ce, Z_STR_P(varname));
42962 
42963 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
42964 		zend_string_release(Z_STR(tmp));
42965 	}
42966 
42967 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42968 }
42969 
42970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42971 {
42972 	USE_OPLINE
42973 	zval *value;
42974 	int result;
42975 
42976 	if (IS_CV == IS_CV &&
42977 	    (opline->extended_value & ZEND_QUICK_SET)) {
42978 		value = EX_VAR(opline->op1.var);
42979 		if (opline->extended_value & ZEND_ISSET) {
42980 			result =
42981 				Z_TYPE_P(value) > IS_NULL &&
42982 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
42983 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
42984 			SAVE_OPLINE();
42985 			result = !i_zend_is_true(value);
42986 			if (UNEXPECTED(EG(exception))) {
42987 				HANDLE_EXCEPTION();
42988 			}
42989 		}
42990 		ZEND_VM_SMART_BRANCH(result, 0);
42991 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
42992 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
42993 		ZEND_VM_CONTINUE();
42994 	} else {
42995 
42996 		zval tmp, *varname;
42997 		HashTable *target_symbol_table;
42998 
42999 		SAVE_OPLINE();
43000 		varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
43001 		ZVAL_UNDEF(&tmp);
43002 		if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43003 			ZVAL_STR(&tmp, zval_get_string(varname));
43004 			varname = &tmp;
43005 		}
43006 
43007 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
43008 		value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
43009 
43010 		if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43011 			zend_string_release(Z_STR(tmp));
43012 		}
43013 
43014 		if (opline->extended_value & ZEND_ISSET) {
43015 			result = value && Z_TYPE_P(value) > IS_NULL &&
43016 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43017 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43018 			result = !value || !i_zend_is_true(value);
43019 		}
43020 
43021 		ZEND_VM_SMART_BRANCH(result, 1);
43022 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43023 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43024 	}
43025 }
43026 
43027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43028 {
43029 	USE_OPLINE
43030 	zval *value;
43031 	int result;
43032 
43033 	zval tmp, *varname;
43034 	zend_class_entry *ce;
43035 
43036 	SAVE_OPLINE();
43037 	varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
43038 	ZVAL_UNDEF(&tmp);
43039 	if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
43040 		ZVAL_STR(&tmp, zval_get_string(varname));
43041 		varname = &tmp;
43042 	}
43043 
43044 	if (IS_UNUSED == IS_CONST) {
43045 		if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
43046 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
43047 
43048 			/* check if static properties were destoyed */
43049 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43050 				value = NULL;
43051 			}
43052 
43053 			goto is_static_prop_return;
43054 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
43055 			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);
43056 			if (UNEXPECTED(ce == NULL)) {
43057 				ZEND_ASSERT(EG(exception));
43058 				HANDLE_EXCEPTION();
43059 			}
43060 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43061 		}
43062 	} else {
43063 		if (IS_UNUSED == IS_UNUSED) {
43064 			ce = zend_fetch_class(NULL, opline->op2.num);
43065 			if (UNEXPECTED(ce == NULL)) {
43066 				ZEND_ASSERT(EG(exception));
43067 				if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43068 					zend_string_release(Z_STR(tmp));
43069 				}
43070 
43071 				HANDLE_EXCEPTION();
43072 			}
43073 		} else {
43074 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43075 		}
43076 		if (IS_CV == IS_CONST &&
43077 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
43078 
43079 			/* check if static properties were destoyed */
43080 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
43081 				value = NULL;
43082 			}
43083 
43084 			goto is_static_prop_return;
43085 		}
43086 	}
43087 
43088 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
43089 
43090 	if (IS_CV == IS_CONST && value) {
43091 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
43092 	}
43093 
43094 	if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
43095 		zend_string_release(Z_STR(tmp));
43096 	}
43097 
43098 is_static_prop_return:
43099 	if (opline->extended_value & ZEND_ISSET) {
43100 		result = value && Z_TYPE_P(value) > IS_NULL &&
43101 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
43102 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
43103 		result = !value || !i_zend_is_true(value);
43104 	}
43105 
43106 	ZEND_VM_SMART_BRANCH(result, 1);
43107 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
43108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43109 }
43110 
43111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43112 {
43113 	USE_OPLINE
43114 
43115 	zval *expr;
43116 	zend_bool result;
43117 
43118 	SAVE_OPLINE();
43119 	expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43120 
43121 try_instanceof:
43122 	if (Z_TYPE_P(expr) == IS_OBJECT) {
43123 		zend_class_entry *ce;
43124 
43125 		if (IS_UNUSED == IS_CONST) {
43126 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
43127 			if (UNEXPECTED(ce == NULL)) {
43128 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
43129 				if (EXPECTED(ce)) {
43130 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
43131 				}
43132 			}
43133 		} else if (IS_UNUSED == IS_UNUSED) {
43134 			ce = zend_fetch_class(NULL, opline->op2.num);
43135 			if (UNEXPECTED(ce == NULL)) {
43136 				ZEND_ASSERT(EG(exception));
43137 
43138 				HANDLE_EXCEPTION();
43139 			}
43140 		} else {
43141 			ce = Z_CE_P(EX_VAR(opline->op2.var));
43142 		}
43143 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
43144 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
43145 		expr = Z_REFVAL_P(expr);
43146 		goto try_instanceof;
43147 	} else {
43148 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
43149 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
43150 		}
43151 		result = 0;
43152 	}
43153 
43154 	ZEND_VM_SMART_BRANCH(result, 1);
43155 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
43156 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43157 }
43158 
43159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43160 {
43161 	USE_OPLINE
43162 
43163 	zend_generator *generator = zend_get_running_generator(execute_data);
43164 
43165 	SAVE_OPLINE();
43166 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
43167 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
43168 
43169 
43170 		HANDLE_EXCEPTION();
43171 	}
43172 
43173 	/* Destroy the previously yielded value */
43174 	zval_ptr_dtor(&generator->value);
43175 
43176 	/* Destroy the previously yielded key */
43177 	zval_ptr_dtor(&generator->key);
43178 
43179 	/* Set the new yielded value */
43180 	if (IS_CV != IS_UNUSED) {
43181 
43182 
43183 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
43184 			/* Constants and temporary variables aren't yieldable by reference,
43185 			 * but we still allow them with a notice. */
43186 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
43187 				zval *value;
43188 
43189 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
43190 
43191 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
43192 				ZVAL_COPY_VALUE(&generator->value, value);
43193 				if (IS_CV == IS_CONST) {
43194 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
43195 						Z_ADDREF(generator->value);
43196 					}
43197 				}
43198 			} else {
43199 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
43200 
43201 				/* If a function call result is yielded and the function did
43202 				 * not return by reference we throw a notice. */
43203 				if (IS_CV == IS_VAR &&
43204 				    (value_ptr == &EG(uninitialized_zval) ||
43205 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
43206 				      !Z_ISREF_P(value_ptr)))) {
43207 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
43208 				} else {
43209 					ZVAL_MAKE_REF(value_ptr);
43210 				}
43211 				ZVAL_COPY(&generator->value, value_ptr);
43212 
43213 			}
43214 		} else {
43215 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
43216 
43217 			/* Consts, temporary variables and references need copying */
43218 			if (IS_CV == IS_CONST) {
43219 				ZVAL_COPY_VALUE(&generator->value, value);
43220 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
43221 					Z_ADDREF(generator->value);
43222 				}
43223 			} else if (IS_CV == IS_TMP_VAR) {
43224 				ZVAL_COPY_VALUE(&generator->value, value);
43225             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
43226 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
43227 
43228 			} else {
43229 				ZVAL_COPY_VALUE(&generator->value, value);
43230 				if (IS_CV == IS_CV) {
43231 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
43232 				}
43233 			}
43234 		}
43235 	} else {
43236 		/* If no value was specified yield null */
43237 		ZVAL_NULL(&generator->value);
43238 	}
43239 
43240 	/* Set the new yielded key */
43241 	if (IS_UNUSED != IS_UNUSED) {
43242 
43243 		zval *key = NULL;
43244 
43245 		/* Consts, temporary variables and references need copying */
43246 		if (IS_UNUSED == IS_CONST) {
43247 			ZVAL_COPY_VALUE(&generator->key, key);
43248 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
43249 				Z_ADDREF(generator->key);
43250 			}
43251 		} else if (IS_UNUSED == IS_TMP_VAR) {
43252 			ZVAL_COPY_VALUE(&generator->key, key);
43253 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
43254 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
43255 
43256 		} else {
43257 			ZVAL_COPY_VALUE(&generator->key, key);
43258 			if (IS_UNUSED == IS_CV) {
43259 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
43260 			}
43261 		}
43262 
43263 		if (Z_TYPE(generator->key) == IS_LONG
43264 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
43265 		) {
43266 			generator->largest_used_integer_key = Z_LVAL(generator->key);
43267 		}
43268 	} else {
43269 		/* If no key was specified we use auto-increment keys */
43270 		generator->largest_used_integer_key++;
43271 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
43272 	}
43273 
43274 	if (RETURN_VALUE_USED(opline)) {
43275 		/* If the return value of yield is used set the send
43276 		 * target and initialize it to NULL */
43277 		generator->send_target = EX_VAR(opline->result.var);
43278 		ZVAL_NULL(generator->send_target);
43279 	} else {
43280 		generator->send_target = NULL;
43281 	}
43282 
43283 	/* We increment to the next op, so we are at the correct position when the
43284 	 * generator is resumed. */
43285 	ZEND_VM_INC_OPCODE();
43286 
43287 	/* The GOTO VM uses a local opline variable. We need to set the opline
43288 	 * variable in execute_data so we don't resume at an old position. */
43289 	SAVE_OPLINE();
43290 
43291 	ZEND_VM_RETURN();
43292 }
43293 
43294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43295 {
43296 	USE_OPLINE
43297 	zval *op1 = EX_VAR(opline->op1.var);
43298 
43299 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43300 		SAVE_OPLINE();
43301 		GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43302 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43303 	}
43304 	ZEND_VM_NEXT_OPCODE();
43305 }
43306 
43307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43308 {
43309 	USE_OPLINE
43310 	zval *op1 = EX_VAR(opline->op1.var);
43311 
43312 	if (IS_CV == IS_CV) {
43313 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43314 			ZVAL_NEW_EMPTY_REF(op1);
43315 			Z_SET_REFCOUNT_P(op1, 2);
43316 			ZVAL_NULL(Z_REFVAL_P(op1));
43317 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
43318 		} else {
43319 			ZVAL_MAKE_REF(op1);
43320 			ZVAL_COPY(EX_VAR(opline->result.var), op1);
43321 		}
43322 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
43323 		op1 = Z_INDIRECT_P(op1);
43324 		if (EXPECTED(!Z_ISREF_P(op1))) {
43325 			ZVAL_MAKE_REF(op1);
43326 		}
43327 		GC_REFCOUNT(Z_REF_P(op1))++;
43328 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
43329 	} else {
43330 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
43331 	}
43332 	ZEND_VM_NEXT_OPCODE();
43333 }
43334 
43335 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43336 {
43337 	USE_OPLINE
43338 
43339 	zval *op1, *op2, *result;
43340 
43341 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43342 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43343 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43344 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43345 			result = EX_VAR(opline->result.var);
43346 			fast_long_add_function(result, op1, op2);
43347 			ZEND_VM_NEXT_OPCODE();
43348 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43349 			result = EX_VAR(opline->result.var);
43350 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
43351 			ZEND_VM_NEXT_OPCODE();
43352 		}
43353 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43354 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43355 			result = EX_VAR(opline->result.var);
43356 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
43357 			ZEND_VM_NEXT_OPCODE();
43358 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43359 			result = EX_VAR(opline->result.var);
43360 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
43361 			ZEND_VM_NEXT_OPCODE();
43362 		}
43363 	}
43364 
43365 	SAVE_OPLINE();
43366 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43367 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43368 	}
43369 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43370 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43371 	}
43372 	add_function(EX_VAR(opline->result.var), op1, op2);
43373 
43374 
43375 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43376 }
43377 
43378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43379 {
43380 	USE_OPLINE
43381 
43382 	zval *op1, *op2, *result;
43383 
43384 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43385 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43386 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43387 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43388 			result = EX_VAR(opline->result.var);
43389 			fast_long_sub_function(result, op1, op2);
43390 			ZEND_VM_NEXT_OPCODE();
43391 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43392 			result = EX_VAR(opline->result.var);
43393 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
43394 			ZEND_VM_NEXT_OPCODE();
43395 		}
43396 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43397 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43398 			result = EX_VAR(opline->result.var);
43399 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
43400 			ZEND_VM_NEXT_OPCODE();
43401 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43402 			result = EX_VAR(opline->result.var);
43403 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
43404 			ZEND_VM_NEXT_OPCODE();
43405 		}
43406 	}
43407 
43408 	SAVE_OPLINE();
43409 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43410 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43411 	}
43412 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43413 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43414 	}
43415 	sub_function(EX_VAR(opline->result.var), op1, op2);
43416 
43417 
43418 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43419 }
43420 
43421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43422 {
43423 	USE_OPLINE
43424 
43425 	zval *op1, *op2, *result;
43426 
43427 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43428 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43429 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43430 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43431 			zend_long overflow;
43432 
43433 			result = EX_VAR(opline->result.var);
43434 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
43435 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
43436 			ZEND_VM_NEXT_OPCODE();
43437 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43438 			result = EX_VAR(opline->result.var);
43439 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
43440 			ZEND_VM_NEXT_OPCODE();
43441 		}
43442 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43443 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43444 			result = EX_VAR(opline->result.var);
43445 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
43446 			ZEND_VM_NEXT_OPCODE();
43447 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43448 			result = EX_VAR(opline->result.var);
43449 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
43450 			ZEND_VM_NEXT_OPCODE();
43451 		}
43452 	}
43453 
43454 	SAVE_OPLINE();
43455 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43456 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43457 	}
43458 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43459 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43460 	}
43461 	mul_function(EX_VAR(opline->result.var), op1, op2);
43462 
43463 
43464 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43465 }
43466 
43467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43468 {
43469 	USE_OPLINE
43470 
43471 	zval *op1, *op2;
43472 
43473 	SAVE_OPLINE();
43474 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
43475 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43476 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
43477 
43478 
43479 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43480 }
43481 
43482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43483 {
43484 	USE_OPLINE
43485 
43486 	zval *op1, *op2, *result;
43487 
43488 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43489 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43490 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43491 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43492 			result = EX_VAR(opline->result.var);
43493 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
43494 				SAVE_OPLINE();
43495 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
43496 				HANDLE_EXCEPTION();
43497 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
43498 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
43499 				ZVAL_LONG(result, 0);
43500 			} else {
43501 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
43502 			}
43503 			ZEND_VM_NEXT_OPCODE();
43504 		}
43505 	}
43506 
43507 	SAVE_OPLINE();
43508 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43509 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43510 	}
43511 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43512 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43513 	}
43514 	mod_function(EX_VAR(opline->result.var), op1, op2);
43515 
43516 
43517 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43518 }
43519 
43520 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43521 {
43522 	USE_OPLINE
43523 
43524 	zval *op1, *op2;
43525 
43526 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43527 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43528 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
43529 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
43530 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
43531 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
43532 		ZEND_VM_NEXT_OPCODE();
43533 	}
43534 
43535 	SAVE_OPLINE();
43536 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43537 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43538 	}
43539 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43540 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43541 	}
43542 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
43543 
43544 
43545 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43546 }
43547 
43548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43549 {
43550 	USE_OPLINE
43551 
43552 	zval *op1, *op2;
43553 
43554 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43555 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43556 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
43557 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
43558 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
43559 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
43560 		ZEND_VM_NEXT_OPCODE();
43561 	}
43562 
43563 	SAVE_OPLINE();
43564 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43565 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43566 	}
43567 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43568 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43569 	}
43570 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
43571 
43572 
43573 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43574 }
43575 
43576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43577 {
43578 	USE_OPLINE
43579 
43580 	zval *op1, *op2;
43581 
43582 	SAVE_OPLINE();
43583 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
43584 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43585 	pow_function(EX_VAR(opline->result.var), op1, op2);
43586 
43587 
43588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43589 }
43590 
43591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43592 {
43593 	USE_OPLINE
43594 
43595 	zval *op1, *op2;
43596 
43597 	SAVE_OPLINE();
43598 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43599 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43600 
43601 	do {
43602 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
43603 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
43604 			zend_string *op1_str = Z_STR_P(op1);
43605 			zend_string *op2_str = Z_STR_P(op2);
43606 			zend_string *str;
43607 
43608 			if (IS_CV != IS_CONST) {
43609 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43610 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
43611 
43612 					break;
43613 				}
43614 			}
43615 			if (IS_CV != IS_CONST) {
43616 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43617 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
43618 
43619 					break;
43620 				}
43621 			}
43622 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
43623 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
43624 			    size_t len = ZSTR_LEN(op1_str);
43625 
43626 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
43627 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43628 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43629 				break;
43630 			} else {
43631 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43632 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43633 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43634 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43635 			}
43636 		} else {
43637 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43638 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43639 			}
43640 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43641 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43642 			}
43643 			concat_function(EX_VAR(opline->result.var), op1, op2);
43644 		}
43645 
43646 	} while (0);
43647 
43648 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43649 }
43650 
43651 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43652 {
43653 	USE_OPLINE
43654 
43655 	zval *op1, *op2;
43656 	int result;
43657 
43658 	SAVE_OPLINE();
43659 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
43660 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
43661 	result = fast_is_identical_function(op1, op2);
43662 
43663 
43664 	ZEND_VM_SMART_BRANCH(result, 1);
43665 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
43666 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43667 }
43668 
43669 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43670 {
43671 	USE_OPLINE
43672 
43673 	zval *op1, *op2;
43674 	int result;
43675 
43676 	SAVE_OPLINE();
43677 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
43678 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
43679 	result = fast_is_not_identical_function(op1, op2);
43680 
43681 
43682 	ZEND_VM_SMART_BRANCH(result, 1);
43683 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
43684 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43685 }
43686 
43687 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43688 {
43689 	USE_OPLINE
43690 
43691 	zval *op1, *op2, *result;
43692 
43693 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43694 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43695 	do {
43696 		int result;
43697 
43698 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43699 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43700 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
43701 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43702 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
43703 			} else {
43704 				break;
43705 			}
43706 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43707 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43708 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
43709 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43710 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
43711 			} else {
43712 				break;
43713 			}
43714 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43715 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43716 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
43717 					result = 1;
43718 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
43719 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
43720 						result = 0;
43721 					} else {
43722 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
43723 					}
43724 				} else {
43725 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
43726 				}
43727 
43728 
43729 			} else {
43730 				break;
43731 			}
43732 		} else {
43733 			break;
43734 		}
43735 		ZEND_VM_SMART_BRANCH(result, 0);
43736 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43737 		ZEND_VM_NEXT_OPCODE();
43738 	} while (0);
43739 
43740 	SAVE_OPLINE();
43741 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43742 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43743 	}
43744 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43745 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43746 	}
43747 	result = EX_VAR(opline->result.var);
43748 	compare_function(result, op1, op2);
43749 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
43750 
43751 
43752 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43753 }
43754 
43755 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43756 {
43757 	USE_OPLINE
43758 
43759 	zval *op1, *op2, *result;
43760 
43761 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43762 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43763 	do {
43764 		int result;
43765 
43766 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
43767 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43768 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
43769 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43770 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
43771 			} else {
43772 				break;
43773 			}
43774 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
43775 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
43776 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
43777 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
43778 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
43779 			} else {
43780 				break;
43781 			}
43782 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43783 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43784 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
43785 					result = 0;
43786 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
43787 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
43788 						result = 1;
43789 					} else {
43790 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
43791 					}
43792 				} else {
43793 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
43794 				}
43795 
43796 
43797 			} else {
43798 				break;
43799 			}
43800 		} else {
43801 			break;
43802 		}
43803 		ZEND_VM_SMART_BRANCH(result, 0);
43804 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43805 		ZEND_VM_NEXT_OPCODE();
43806 	} while (0);
43807 
43808 	SAVE_OPLINE();
43809 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43810 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43811 	}
43812 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43813 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43814 	}
43815 	result = EX_VAR(opline->result.var);
43816 	compare_function(result, op1, op2);
43817 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
43818 
43819 
43820 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43821 }
43822 
43823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43824 {
43825 	USE_OPLINE
43826 
43827 	zval *op1, *op2, *result;
43828 
43829 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43830 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43831 	do {
43832 		int result;
43833 
43834 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43835 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43836 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
43837 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43838 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
43839 			} else {
43840 				break;
43841 			}
43842 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43843 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43844 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
43845 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43846 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
43847 			} else {
43848 				break;
43849 			}
43850 		} else {
43851 			break;
43852 		}
43853 		ZEND_VM_SMART_BRANCH(result, 0);
43854 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43855 		ZEND_VM_NEXT_OPCODE();
43856 	} while (0);
43857 
43858 	SAVE_OPLINE();
43859 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43860 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43861 	}
43862 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43863 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43864 	}
43865 	result = EX_VAR(opline->result.var);
43866 	compare_function(result, op1, op2);
43867 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
43868 
43869 
43870 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43871 }
43872 
43873 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43874 {
43875 	USE_OPLINE
43876 
43877 	zval *op1, *op2, *result;
43878 
43879 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43880 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43881 	do {
43882 		int result;
43883 
43884 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
43885 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43886 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
43887 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43888 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
43889 			} else {
43890 				break;
43891 			}
43892 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
43893 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
43894 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
43895 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43896 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
43897 			} else {
43898 				break;
43899 			}
43900 		} else {
43901 			break;
43902 		}
43903 		ZEND_VM_SMART_BRANCH(result, 0);
43904 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
43905 		ZEND_VM_NEXT_OPCODE();
43906 	} while (0);
43907 
43908 	SAVE_OPLINE();
43909 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43910 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43911 	}
43912 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43913 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43914 	}
43915 	result = EX_VAR(opline->result.var);
43916 	compare_function(result, op1, op2);
43917 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
43918 
43919 
43920 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43921 }
43922 
43923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43924 {
43925 	USE_OPLINE
43926 
43927 	zval *op1, *op2;
43928 
43929 	SAVE_OPLINE();
43930 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
43931 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
43932 	compare_function(EX_VAR(opline->result.var), op1, op2);
43933 
43934 
43935 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43936 }
43937 
43938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43939 {
43940 	USE_OPLINE
43941 
43942 	zval *op1, *op2;
43943 
43944 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43945 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43946 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
43947 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43948 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
43949 		ZEND_VM_NEXT_OPCODE();
43950 	}
43951 
43952 	SAVE_OPLINE();
43953 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43954 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43955 	}
43956 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43957 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43958 	}
43959 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
43960 
43961 
43962 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43963 }
43964 
43965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43966 {
43967 	USE_OPLINE
43968 
43969 	zval *op1, *op2;
43970 
43971 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43972 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
43973 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
43974 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
43975 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
43976 		ZEND_VM_NEXT_OPCODE();
43977 	}
43978 
43979 	SAVE_OPLINE();
43980 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
43981 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
43982 	}
43983 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
43984 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
43985 	}
43986 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
43987 
43988 
43989 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43990 }
43991 
43992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43993 {
43994 	USE_OPLINE
43995 
43996 	zval *op1, *op2;
43997 
43998 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
43999 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44000 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
44001 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
44002 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
44003 		ZEND_VM_NEXT_OPCODE();
44004 	}
44005 
44006 	SAVE_OPLINE();
44007 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
44008 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
44009 	}
44010 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
44011 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
44012 	}
44013 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
44014 
44015 
44016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44017 }
44018 
44019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44020 {
44021 	USE_OPLINE
44022 
44023 	zval *op1, *op2;
44024 
44025 	SAVE_OPLINE();
44026 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
44027 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44028 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
44029 
44030 
44031 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44032 }
44033 
44034 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)
44035 {
44036 	USE_OPLINE
44037 	zend_free_op free_op_data1;
44038 	zval *object;
44039 	zval *property;
44040 	zval *value;
44041 	zval *zptr;
44042 
44043 	SAVE_OPLINE();
44044 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
44045 
44046 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44047 		zend_throw_error(NULL, "Using $this when not in object context");
44048 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
44049 
44050 		HANDLE_EXCEPTION();
44051 	}
44052 
44053 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44054 
44055 	do {
44056 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
44057 
44058 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44059 			ZVAL_DEREF(object);
44060 			if (UNEXPECTED(!make_real_object(object))) {
44061 				zend_error(E_WARNING, "Attempt to assign property of non-object");
44062 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44063 					ZVAL_NULL(EX_VAR(opline->result.var));
44064 				}
44065 				break;
44066 			}
44067 		}
44068 
44069 		/* here we are sure we are dealing with an object */
44070 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
44071 			&& 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)) {
44072 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
44073 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44074 					ZVAL_NULL(EX_VAR(opline->result.var));
44075 				}
44076 			} else {
44077 				ZVAL_DEREF(zptr);
44078 				SEPARATE_ZVAL_NOREF(zptr);
44079 
44080 				binary_op(zptr, zptr, value);
44081 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44082 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
44083 				}
44084 			}
44085 		} else {
44086 			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));
44087 		}
44088 	} while (0);
44089 
44090 	FREE_OP(free_op_data1);
44091 
44092 
44093 	/* assign_obj has two opcodes! */
44094 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44095 }
44096 
44097 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)
44098 {
44099 	USE_OPLINE
44100 	zend_free_op free_op_data1;
44101 	zval *var_ptr;
44102 	zval *value, *container, *dim;
44103 
44104 	SAVE_OPLINE();
44105 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
44106 
44107 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44108 assign_dim_op_array:
44109 		SEPARATE_ARRAY(container);
44110 assign_dim_op_new_array:
44111 		if (IS_CV == IS_UNUSED) {
44112 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
44113 			if (UNEXPECTED(!var_ptr)) {
44114 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
44115 				goto assign_dim_op_ret_null;
44116 			}
44117 		} else {
44118 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
44119 
44120 			if (IS_CV == IS_CONST) {
44121 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
44122 			} else {
44123 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
44124 			}
44125 			if (UNEXPECTED(!var_ptr)) {
44126 				goto assign_dim_op_ret_null;
44127 			}
44128 			ZVAL_DEREF(var_ptr);
44129 			SEPARATE_ZVAL_NOREF(var_ptr);
44130 		}
44131 
44132 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
44133 
44134 		binary_op(var_ptr, var_ptr, value);
44135 
44136 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44137 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
44138 		}
44139 	} else {
44140 		if (EXPECTED(Z_ISREF_P(container))) {
44141 			container = Z_REFVAL_P(container);
44142 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44143 				goto assign_dim_op_array;
44144 			}
44145 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
44146 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
44147 assign_dim_op_convert_to_array:
44148 			ZVAL_NEW_ARR(container);
44149 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
44150 			goto assign_dim_op_new_array;
44151 		}
44152 
44153 		dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44154 
44155 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44156 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
44157 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
44158 		} else {
44159 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
44160 				if (IS_CV == IS_UNUSED) {
44161 					zend_throw_error(NULL, "[] operator not supported for strings");
44162 				} else {
44163 					zend_check_string_offset(dim, BP_VAR_RW);
44164 					if (EXPECTED(EG(exception) == NULL)) {
44165 						zend_wrong_string_offset();
44166 					}
44167 				}
44168 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
44169 				goto assign_dim_op_convert_to_array;
44170 			} else {
44171 				if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
44172 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
44173 				}
44174 assign_dim_op_ret_null:
44175 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44176 					ZVAL_NULL(EX_VAR(opline->result.var));
44177 				}
44178 			}
44179 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
44180 		}
44181 	}
44182 
44183 	FREE_OP(free_op_data1);
44184 
44185 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44186 }
44187 
44188 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)
44189 {
44190 	USE_OPLINE
44191 
44192 	zval *var_ptr;
44193 	zval *value;
44194 
44195 	SAVE_OPLINE();
44196 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44197 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
44198 
44199 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
44200 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44201 			ZVAL_NULL(EX_VAR(opline->result.var));
44202 		}
44203 	} else {
44204 		ZVAL_DEREF(var_ptr);
44205 		SEPARATE_ZVAL_NOREF(var_ptr);
44206 
44207 		binary_op(var_ptr, var_ptr, value);
44208 
44209 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44210 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
44211 		}
44212 	}
44213 
44214 
44215 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44216 }
44217 
44218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44219 {
44220 #if 0 || (IS_CV != IS_UNUSED)
44221 	USE_OPLINE
44222 
44223 # if 0 || (IS_CV != IS_UNUSED)
44224 	if (EXPECTED(1)) {
44225 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44226 	}
44227 	if (EXPECTED(0)) {
44228 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44229 	}
44230 # endif
44231 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44232 #else
44233 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44234 #endif
44235 }
44236 
44237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44238 {
44239 #if 0 || (IS_CV != IS_UNUSED)
44240 	USE_OPLINE
44241 
44242 # if 0 || (IS_CV != IS_UNUSED)
44243 	if (EXPECTED(0)) {
44244 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44245 	}
44246 	if (EXPECTED(1)) {
44247 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44248 	}
44249 # endif
44250 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44251 #else
44252 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44253 #endif
44254 }
44255 
44256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44257 {
44258 #if 0 || (IS_CV != IS_UNUSED)
44259 	USE_OPLINE
44260 
44261 # if 0 || (IS_CV != IS_UNUSED)
44262 	if (EXPECTED(0)) {
44263 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44264 	}
44265 	if (EXPECTED(0)) {
44266 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44267 	}
44268 # endif
44269 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44270 #else
44271 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44272 #endif
44273 }
44274 
44275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44276 {
44277 #if 0 || (IS_CV != IS_UNUSED)
44278 	USE_OPLINE
44279 
44280 # if 0 || (IS_CV != IS_UNUSED)
44281 	if (EXPECTED(1)) {
44282 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44283 	}
44284 	if (EXPECTED(0)) {
44285 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44286 	}
44287 # endif
44288 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44289 #else
44290 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44291 #endif
44292 }
44293 
44294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44295 {
44296 #if 0 || (IS_CV != IS_UNUSED)
44297 	USE_OPLINE
44298 
44299 # if 0 || (IS_CV != IS_UNUSED)
44300 	if (EXPECTED(0)) {
44301 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44302 	}
44303 	if (EXPECTED(1)) {
44304 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44305 	}
44306 # endif
44307 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44308 #else
44309 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44310 #endif
44311 }
44312 
44313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44314 {
44315 #if 0 || (IS_CV != IS_UNUSED)
44316 	USE_OPLINE
44317 
44318 # if 0 || (IS_CV != IS_UNUSED)
44319 	if (EXPECTED(0)) {
44320 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44321 	}
44322 	if (EXPECTED(0)) {
44323 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44324 	}
44325 # endif
44326 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44327 #else
44328 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44329 #endif
44330 }
44331 
44332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44333 {
44334 #if 0 || (IS_CV != IS_UNUSED)
44335 	USE_OPLINE
44336 
44337 # if 0 || (IS_CV != IS_UNUSED)
44338 	if (EXPECTED(1)) {
44339 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44340 	}
44341 	if (EXPECTED(0)) {
44342 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44343 	}
44344 # endif
44345 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44346 #else
44347 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44348 #endif
44349 }
44350 
44351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44352 {
44353 #if 0 || (IS_CV != IS_UNUSED)
44354 	USE_OPLINE
44355 
44356 # if 0 || (IS_CV != IS_UNUSED)
44357 	if (EXPECTED(0)) {
44358 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44359 	}
44360 	if (EXPECTED(1)) {
44361 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44362 	}
44363 # endif
44364 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44365 #else
44366 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44367 #endif
44368 }
44369 
44370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44371 {
44372 #if 0 || (IS_CV != IS_UNUSED)
44373 	USE_OPLINE
44374 
44375 # if 0 || (IS_CV != IS_UNUSED)
44376 	if (EXPECTED(0)) {
44377 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44378 	}
44379 	if (EXPECTED(0)) {
44380 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44381 	}
44382 # endif
44383 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44384 #else
44385 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44386 #endif
44387 }
44388 
44389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44390 {
44391 #if 0 || (IS_CV != IS_UNUSED)
44392 	USE_OPLINE
44393 
44394 # if 0 || (IS_CV != IS_UNUSED)
44395 	if (EXPECTED(1)) {
44396 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44397 	}
44398 	if (EXPECTED(0)) {
44399 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44400 	}
44401 # endif
44402 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44403 #else
44404 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44405 #endif
44406 }
44407 
44408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44409 {
44410 #if 0 || (IS_CV != IS_UNUSED)
44411 	USE_OPLINE
44412 
44413 # if 0 || (IS_CV != IS_UNUSED)
44414 	if (EXPECTED(0)) {
44415 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44416 	}
44417 	if (EXPECTED(1)) {
44418 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44419 	}
44420 # endif
44421 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44422 #else
44423 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44424 #endif
44425 }
44426 
44427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44428 {
44429 #if 0 || (IS_CV != IS_UNUSED)
44430 	USE_OPLINE
44431 
44432 # if 0 || (IS_CV != IS_UNUSED)
44433 	if (EXPECTED(0)) {
44434 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44435 	}
44436 	if (EXPECTED(0)) {
44437 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44438 	}
44439 # endif
44440 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44441 #else
44442 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44443 #endif
44444 }
44445 
44446 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44447 {
44448 #if 0 || (IS_CV != IS_UNUSED)
44449 	USE_OPLINE
44450 
44451 # if 0 || (IS_CV != IS_UNUSED)
44452 	if (EXPECTED(1)) {
44453 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44454 	}
44455 	if (EXPECTED(0)) {
44456 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44457 	}
44458 # endif
44459 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44460 #else
44461 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44462 #endif
44463 }
44464 
44465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44466 {
44467 #if 0 || (IS_CV != IS_UNUSED)
44468 	USE_OPLINE
44469 
44470 # if 0 || (IS_CV != IS_UNUSED)
44471 	if (EXPECTED(0)) {
44472 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44473 	}
44474 	if (EXPECTED(1)) {
44475 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44476 	}
44477 # endif
44478 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44479 #else
44480 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44481 #endif
44482 }
44483 
44484 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44485 {
44486 #if 0 || (IS_CV != IS_UNUSED)
44487 	USE_OPLINE
44488 
44489 # if 0 || (IS_CV != IS_UNUSED)
44490 	if (EXPECTED(0)) {
44491 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44492 	}
44493 	if (EXPECTED(0)) {
44494 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44495 	}
44496 # endif
44497 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44498 #else
44499 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44500 #endif
44501 }
44502 
44503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44504 {
44505 #if 0 || (IS_CV != IS_UNUSED)
44506 	USE_OPLINE
44507 
44508 # if 0 || (IS_CV != IS_UNUSED)
44509 	if (EXPECTED(1)) {
44510 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44511 	}
44512 	if (EXPECTED(0)) {
44513 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44514 	}
44515 # endif
44516 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44517 #else
44518 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44519 #endif
44520 }
44521 
44522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44523 {
44524 #if 0 || (IS_CV != IS_UNUSED)
44525 	USE_OPLINE
44526 
44527 # if 0 || (IS_CV != IS_UNUSED)
44528 	if (EXPECTED(0)) {
44529 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44530 	}
44531 	if (EXPECTED(1)) {
44532 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44533 	}
44534 # endif
44535 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44536 #else
44537 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44538 #endif
44539 }
44540 
44541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44542 {
44543 #if 0 || (IS_CV != IS_UNUSED)
44544 	USE_OPLINE
44545 
44546 # if 0 || (IS_CV != IS_UNUSED)
44547 	if (EXPECTED(0)) {
44548 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44549 	}
44550 	if (EXPECTED(0)) {
44551 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44552 	}
44553 # endif
44554 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44555 #else
44556 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44557 #endif
44558 }
44559 
44560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44561 {
44562 #if 0 || (IS_CV != IS_UNUSED)
44563 	USE_OPLINE
44564 
44565 # if 0 || (IS_CV != IS_UNUSED)
44566 	if (EXPECTED(1)) {
44567 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44568 	}
44569 	if (EXPECTED(0)) {
44570 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44571 	}
44572 # endif
44573 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44574 #else
44575 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44576 #endif
44577 }
44578 
44579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44580 {
44581 #if 0 || (IS_CV != IS_UNUSED)
44582 	USE_OPLINE
44583 
44584 # if 0 || (IS_CV != IS_UNUSED)
44585 	if (EXPECTED(0)) {
44586 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44587 	}
44588 	if (EXPECTED(1)) {
44589 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44590 	}
44591 # endif
44592 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44593 #else
44594 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44595 #endif
44596 }
44597 
44598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44599 {
44600 #if 0 || (IS_CV != IS_UNUSED)
44601 	USE_OPLINE
44602 
44603 # if 0 || (IS_CV != IS_UNUSED)
44604 	if (EXPECTED(0)) {
44605 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44606 	}
44607 	if (EXPECTED(0)) {
44608 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44609 	}
44610 # endif
44611 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44612 #else
44613 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44614 #endif
44615 }
44616 
44617 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44618 {
44619 #if 0 || (IS_CV != IS_UNUSED)
44620 	USE_OPLINE
44621 
44622 # if 0 || (IS_CV != IS_UNUSED)
44623 	if (EXPECTED(1)) {
44624 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44625 	}
44626 	if (EXPECTED(0)) {
44627 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44628 	}
44629 # endif
44630 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44631 #else
44632 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44633 #endif
44634 }
44635 
44636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44637 {
44638 #if 0 || (IS_CV != IS_UNUSED)
44639 	USE_OPLINE
44640 
44641 # if 0 || (IS_CV != IS_UNUSED)
44642 	if (EXPECTED(0)) {
44643 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44644 	}
44645 	if (EXPECTED(1)) {
44646 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44647 	}
44648 # endif
44649 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44650 #else
44651 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44652 #endif
44653 }
44654 
44655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44656 {
44657 #if 0 || (IS_CV != IS_UNUSED)
44658 	USE_OPLINE
44659 
44660 # if 0 || (IS_CV != IS_UNUSED)
44661 	if (EXPECTED(0)) {
44662 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44663 	}
44664 	if (EXPECTED(0)) {
44665 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44666 	}
44667 # endif
44668 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44669 #else
44670 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44671 #endif
44672 }
44673 
44674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44675 {
44676 #if 0 || (IS_CV != IS_UNUSED)
44677 	USE_OPLINE
44678 
44679 # if 0 || (IS_CV != IS_UNUSED)
44680 	if (EXPECTED(1)) {
44681 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44682 	}
44683 	if (EXPECTED(0)) {
44684 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44685 	}
44686 # endif
44687 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44688 #else
44689 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44690 #endif
44691 }
44692 
44693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44694 {
44695 #if 0 || (IS_CV != IS_UNUSED)
44696 	USE_OPLINE
44697 
44698 # if 0 || (IS_CV != IS_UNUSED)
44699 	if (EXPECTED(0)) {
44700 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44701 	}
44702 	if (EXPECTED(1)) {
44703 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44704 	}
44705 # endif
44706 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44707 #else
44708 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44709 #endif
44710 }
44711 
44712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44713 {
44714 #if 0 || (IS_CV != IS_UNUSED)
44715 	USE_OPLINE
44716 
44717 # if 0 || (IS_CV != IS_UNUSED)
44718 	if (EXPECTED(0)) {
44719 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44720 	}
44721 	if (EXPECTED(0)) {
44722 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44723 	}
44724 # endif
44725 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44726 #else
44727 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44728 #endif
44729 }
44730 
44731 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44732 {
44733 #if 0 || (IS_CV != IS_UNUSED)
44734 	USE_OPLINE
44735 
44736 # if 0 || (IS_CV != IS_UNUSED)
44737 	if (EXPECTED(1)) {
44738 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44739 	}
44740 	if (EXPECTED(0)) {
44741 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44742 	}
44743 # endif
44744 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44745 #else
44746 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44747 #endif
44748 }
44749 
44750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44751 {
44752 #if 0 || (IS_CV != IS_UNUSED)
44753 	USE_OPLINE
44754 
44755 # if 0 || (IS_CV != IS_UNUSED)
44756 	if (EXPECTED(0)) {
44757 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44758 	}
44759 	if (EXPECTED(1)) {
44760 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44761 	}
44762 # endif
44763 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44764 #else
44765 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44766 #endif
44767 }
44768 
44769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44770 {
44771 #if 0 || (IS_CV != IS_UNUSED)
44772 	USE_OPLINE
44773 
44774 # if 0 || (IS_CV != IS_UNUSED)
44775 	if (EXPECTED(0)) {
44776 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44777 	}
44778 	if (EXPECTED(0)) {
44779 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44780 	}
44781 # endif
44782 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44783 #else
44784 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44785 #endif
44786 }
44787 
44788 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44789 {
44790 #if 0 || (IS_CV != IS_UNUSED)
44791 	USE_OPLINE
44792 
44793 # if 0 || (IS_CV != IS_UNUSED)
44794 	if (EXPECTED(1)) {
44795 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44796 	}
44797 	if (EXPECTED(0)) {
44798 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44799 	}
44800 # endif
44801 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44802 #else
44803 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44804 #endif
44805 }
44806 
44807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44808 {
44809 #if 0 || (IS_CV != IS_UNUSED)
44810 	USE_OPLINE
44811 
44812 # if 0 || (IS_CV != IS_UNUSED)
44813 	if (EXPECTED(0)) {
44814 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44815 	}
44816 	if (EXPECTED(1)) {
44817 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44818 	}
44819 # endif
44820 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44821 #else
44822 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44823 #endif
44824 }
44825 
44826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44827 {
44828 #if 0 || (IS_CV != IS_UNUSED)
44829 	USE_OPLINE
44830 
44831 # if 0 || (IS_CV != IS_UNUSED)
44832 	if (EXPECTED(0)) {
44833 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44834 	}
44835 	if (EXPECTED(0)) {
44836 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44837 	}
44838 # endif
44839 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44840 #else
44841 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44842 #endif
44843 }
44844 
44845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44846 {
44847 #if 0 || (IS_CV != IS_UNUSED)
44848 	USE_OPLINE
44849 
44850 # if 0 || (IS_CV != IS_UNUSED)
44851 	if (EXPECTED(1)) {
44852 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44853 	}
44854 	if (EXPECTED(0)) {
44855 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44856 	}
44857 # endif
44858 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44859 #else
44860 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44861 #endif
44862 }
44863 
44864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44865 {
44866 #if 0 || (IS_CV != IS_UNUSED)
44867 	USE_OPLINE
44868 
44869 # if 0 || (IS_CV != IS_UNUSED)
44870 	if (EXPECTED(0)) {
44871 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44872 	}
44873 	if (EXPECTED(1)) {
44874 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44875 	}
44876 # endif
44877 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44878 #else
44879 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44880 #endif
44881 }
44882 
44883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44884 {
44885 #if 0 || (IS_CV != IS_UNUSED)
44886 	USE_OPLINE
44887 
44888 # if 0 || (IS_CV != IS_UNUSED)
44889 	if (EXPECTED(0)) {
44890 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44891 	}
44892 	if (EXPECTED(0)) {
44893 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44894 	}
44895 # endif
44896 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44897 #else
44898 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44899 #endif
44900 }
44901 
44902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
44903 {
44904 	USE_OPLINE
44905 
44906 	zval *object;
44907 	zval *property;
44908 	zval *zptr;
44909 
44910 	SAVE_OPLINE();
44911 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
44912 
44913 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44914 		zend_throw_error(NULL, "Using $this when not in object context");
44915 
44916 		HANDLE_EXCEPTION();
44917 	}
44918 
44919 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44920 
44921 	do {
44922 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44923 			ZVAL_DEREF(object);
44924 			if (UNEXPECTED(!make_real_object(object))) {
44925 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
44926 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44927 					ZVAL_NULL(EX_VAR(opline->result.var));
44928 				}
44929 				break;
44930 			}
44931 		}
44932 
44933 		/* here we are sure we are dealing with an object */
44934 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
44935 			&& 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)) {
44936 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
44937 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44938 					ZVAL_NULL(EX_VAR(opline->result.var));
44939 				}
44940 			} else {
44941 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
44942 					if (inc) {
44943 						fast_long_increment_function(zptr);
44944 					} else {
44945 						fast_long_decrement_function(zptr);
44946 					}
44947 				} else {
44948 					ZVAL_DEREF(zptr);
44949 					SEPARATE_ZVAL_NOREF(zptr);
44950 
44951 					if (inc) {
44952 						increment_function(zptr);
44953 					} else {
44954 						decrement_function(zptr);
44955 					}
44956 				}
44957 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44958 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
44959 				}
44960 			}
44961 		} else {
44962 			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));
44963 		}
44964 	} while (0);
44965 
44966 
44967 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44968 }
44969 
44970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44971 {
44972 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44973 }
44974 
44975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44976 {
44977 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44978 }
44979 
44980 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
44981 {
44982 	USE_OPLINE
44983 
44984 	zval *object;
44985 	zval *property;
44986 	zval *zptr;
44987 
44988 	SAVE_OPLINE();
44989 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
44990 
44991 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44992 		zend_throw_error(NULL, "Using $this when not in object context");
44993 
44994 		HANDLE_EXCEPTION();
44995 	}
44996 
44997 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
44998 
44999 	do {
45000 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45001 			ZVAL_DEREF(object);
45002 			if (UNEXPECTED(!make_real_object(object))) {
45003 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
45004 				ZVAL_NULL(EX_VAR(opline->result.var));
45005 				break;
45006 			}
45007 		}
45008 
45009 		/* here we are sure we are dealing with an object */
45010 
45011 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
45012 			&& 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)) {
45013 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45014 				ZVAL_NULL(EX_VAR(opline->result.var));
45015 			} else {
45016 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
45017 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
45018 					if (inc) {
45019 						fast_long_increment_function(zptr);
45020 					} else {
45021 						fast_long_decrement_function(zptr);
45022 					}
45023 				} else {
45024 					ZVAL_DEREF(zptr);
45025 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
45026 					zval_opt_copy_ctor(zptr);
45027 					if (inc) {
45028 						increment_function(zptr);
45029 					} else {
45030 						decrement_function(zptr);
45031 					}
45032 				}
45033 			}
45034 		} else {
45035 			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));
45036 		}
45037 	} while (0);
45038 
45039 
45040 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45041 }
45042 
45043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45044 {
45045 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45046 }
45047 
45048 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45049 {
45050 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45051 }
45052 
45053 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45054 {
45055 	USE_OPLINE
45056 
45057 	zval *container, *dim, *value, *result;
45058 
45059 	SAVE_OPLINE();
45060 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
45061 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
45062 	if (IS_CV != IS_CONST) {
45063 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45064 fetch_dim_r_array:
45065 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
45066 			result = EX_VAR(opline->result.var);
45067 			ZVAL_COPY_UNREF(result, value);
45068 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
45069 			container = Z_REFVAL_P(container);
45070 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45071 				goto fetch_dim_r_array;
45072 			} else {
45073 				goto fetch_dim_r_slow;
45074 			}
45075 		} else {
45076 fetch_dim_r_slow:
45077 			result = EX_VAR(opline->result.var);
45078 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
45079 		}
45080 	} else {
45081 		result = EX_VAR(opline->result.var);
45082 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
45083 	}
45084 
45085 
45086 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45087 }
45088 
45089 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45090 {
45091 	USE_OPLINE
45092 	zend_free_op free_op1;
45093 	zval *container;
45094 
45095 	SAVE_OPLINE();
45096 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45097 
45098 	zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45099 
45100 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45101 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45102 	}
45103 
45104 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45105 }
45106 
45107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45108 {
45109 	USE_OPLINE
45110 	zend_free_op free_op1;
45111 	zval *container;
45112 
45113 	SAVE_OPLINE();
45114 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
45115 
45116 	zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45117 
45118 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45119 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45120 	}
45121 
45122 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45123 }
45124 
45125 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45126 {
45127 	USE_OPLINE
45128 
45129 	zval *container;
45130 
45131 	SAVE_OPLINE();
45132 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
45133 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45134 
45135 
45136 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45137 }
45138 
45139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45140 {
45141 	USE_OPLINE
45142 	zval *container;
45143 	zend_free_op free_op1;
45144 
45145 	SAVE_OPLINE();
45146 
45147 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
45148         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45149             zend_throw_error(NULL, "Cannot use temporary expression in write context");
45150 
45151 
45152 			HANDLE_EXCEPTION();
45153         }
45154 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45155 		zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45156 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45157 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45158 		}
45159 
45160 
45161 	} else {
45162 		if (IS_CV == IS_UNUSED) {
45163 			zend_throw_error(NULL, "Cannot use [] for reading");
45164 
45165 
45166 			HANDLE_EXCEPTION();
45167 		}
45168 		container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
45169 		zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45170 
45171 
45172 	}
45173 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45174 }
45175 
45176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45177 {
45178 	USE_OPLINE
45179 	zend_free_op free_op1;
45180 	zval *container;
45181 
45182 	SAVE_OPLINE();
45183 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
45184 
45185 	zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
45186 
45187 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45188 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45189 	}
45190 
45191 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45192 }
45193 
45194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45195 {
45196 	USE_OPLINE
45197 
45198 	zval *container;
45199 
45200 	zval *offset;
45201 
45202 	SAVE_OPLINE();
45203 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
45204 
45205 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45206 		zend_throw_error(NULL, "Using $this when not in object context");
45207 
45208 		HANDLE_EXCEPTION();
45209 	}
45210 
45211 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45212 
45213 	if (IS_CV == IS_CONST ||
45214 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45215 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45216 			container = Z_REFVAL_P(container);
45217 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45218 				goto fetch_obj_r_no_object;
45219 			}
45220 		} else {
45221 			goto fetch_obj_r_no_object;
45222 		}
45223 	}
45224 
45225 	/* here we are sure we are dealing with an object */
45226 	do {
45227 		zend_object *zobj = Z_OBJ_P(container);
45228 		zval *retval;
45229 
45230 		if (IS_CV == IS_CONST &&
45231 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
45232 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
45233 
45234 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45235 				retval = OBJ_PROP(zobj, prop_offset);
45236 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
45237 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
45238 					break;
45239 				}
45240 			} else if (EXPECTED(zobj->properties != NULL)) {
45241 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
45242 				if (EXPECTED(retval)) {
45243 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
45244 					break;
45245 				}
45246 			}
45247 		}
45248 
45249 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
45250 fetch_obj_r_no_object:
45251 			zend_error(E_NOTICE, "Trying to get property of non-object");
45252 			ZVAL_NULL(EX_VAR(opline->result.var));
45253 		} else {
45254 			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));
45255 
45256 			if (retval != EX_VAR(opline->result.var)) {
45257 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
45258 			}
45259 		}
45260 	} while (0);
45261 
45262 
45263 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45264 }
45265 
45266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45267 {
45268 	USE_OPLINE
45269 	zend_free_op free_op1;
45270 	zval *property;
45271 	zval *container;
45272 
45273 	SAVE_OPLINE();
45274 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45275 
45276 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45277 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45278 		zend_throw_error(NULL, "Using $this when not in object context");
45279 
45280 		HANDLE_EXCEPTION();
45281 	}
45282 
45283 	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);
45284 
45285 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45286 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45287 	}
45288 
45289 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45290 }
45291 
45292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45293 {
45294 	USE_OPLINE
45295 	zend_free_op free_op1;
45296 	zval *property;
45297 	zval *container;
45298 
45299 	SAVE_OPLINE();
45300 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45301 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
45302 
45303 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45304 		zend_throw_error(NULL, "Using $this when not in object context");
45305 
45306 		HANDLE_EXCEPTION();
45307 	}
45308 	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);
45309 
45310 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45311 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45312 	}
45313 
45314 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45315 }
45316 
45317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45318 {
45319 	USE_OPLINE
45320 
45321 	zval *container;
45322 
45323 	zval *offset;
45324 
45325 	SAVE_OPLINE();
45326 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
45327 
45328 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45329 		zend_throw_error(NULL, "Using $this when not in object context");
45330 
45331 		HANDLE_EXCEPTION();
45332 	}
45333 
45334 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45335 
45336 	if (IS_CV == IS_CONST ||
45337 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45338 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45339 			container = Z_REFVAL_P(container);
45340 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
45341 				goto fetch_obj_is_no_object;
45342 			}
45343 		} else {
45344 			goto fetch_obj_is_no_object;
45345 		}
45346 	}
45347 
45348 	/* here we are sure we are dealing with an object */
45349 	do {
45350 		zend_object *zobj = Z_OBJ_P(container);
45351 		zval *retval;
45352 
45353 		if (IS_CV == IS_CONST &&
45354 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
45355 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
45356 
45357 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45358 				retval = OBJ_PROP(zobj, prop_offset);
45359 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
45360 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
45361 					break;
45362 				}
45363 			} else if (EXPECTED(zobj->properties != NULL)) {
45364 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
45365 				if (EXPECTED(retval)) {
45366 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
45367 					break;
45368 				}
45369 			}
45370 		}
45371 
45372 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
45373 fetch_obj_is_no_object:
45374 			ZVAL_NULL(EX_VAR(opline->result.var));
45375 		} else {
45376 
45377 			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));
45378 
45379 			if (retval != EX_VAR(opline->result.var)) {
45380 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
45381 			}
45382 		}
45383 	} while (0);
45384 
45385 
45386 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45387 }
45388 
45389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45390 {
45391 	USE_OPLINE
45392 	zval *container;
45393 
45394 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
45395 		/* Behave like FETCH_OBJ_W */
45396 		zend_free_op free_op1;
45397 		zval *property;
45398 
45399 		SAVE_OPLINE();
45400 		property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45401 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45402 
45403 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45404 			zend_throw_error(NULL, "Using $this when not in object context");
45405 
45406 			HANDLE_EXCEPTION();
45407 		}
45408 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45409 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
45410 
45411 
45412 			HANDLE_EXCEPTION();
45413 		}
45414 		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);
45415 
45416 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45417 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45418 		}
45419 
45420 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45421 	} else {
45422 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45423 	}
45424 }
45425 
45426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45427 {
45428 	USE_OPLINE
45429 	zend_free_op free_op1;
45430 	zval *container, *property;
45431 
45432 	SAVE_OPLINE();
45433 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
45434 
45435 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45436 		zend_throw_error(NULL, "Using $this when not in object context");
45437 
45438 		HANDLE_EXCEPTION();
45439 	}
45440 
45441 	property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45442 
45443 	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);
45444 
45445 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
45446 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
45447 	}
45448 
45449 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45450 }
45451 
45452 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45453 {
45454 	USE_OPLINE
45455 
45456 	zval *container;
45457 
45458 	SAVE_OPLINE();
45459 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
45460 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
45461 
45462 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45463 }
45464 
45465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45466 {
45467 	USE_OPLINE
45468 
45469 	zval *object, *property_name, *value, tmp;
45470 
45471 	SAVE_OPLINE();
45472 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45473 
45474 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45475 		zend_throw_error(NULL, "Using $this when not in object context");
45476 
45477 
45478 		HANDLE_EXCEPTION();
45479 	}
45480 
45481 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45482 	value = EX_CONSTANT((opline+1)->op1);
45483 
45484 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45485 		do {
45486 			if (Z_ISREF_P(object)) {
45487 				object = Z_REFVAL_P(object);
45488 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45489 					break;
45490 				}
45491 			}
45492 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
45493 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
45494 				zend_object *obj;
45495 
45496 				zval_ptr_dtor(object);
45497 				object_init(object);
45498 				Z_ADDREF_P(object);
45499 				obj = Z_OBJ_P(object);
45500 				zend_error(E_WARNING, "Creating default object from empty value");
45501 				if (GC_REFCOUNT(obj) == 1) {
45502 					/* the enclosing container was deleted, obj is unreferenced */
45503 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45504 						ZVAL_NULL(EX_VAR(opline->result.var));
45505 					}
45506 
45507 					OBJ_RELEASE(obj);
45508 					goto exit_assign_obj;
45509 				}
45510 				Z_DELREF_P(object);
45511 			} else {
45512 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
45513 					zend_error(E_WARNING, "Attempt to assign property of non-object");
45514 				}
45515 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45516 					ZVAL_NULL(EX_VAR(opline->result.var));
45517 				}
45518 
45519 				goto exit_assign_obj;
45520 			}
45521 		} while (0);
45522 	}
45523 
45524 	if (IS_CV == IS_CONST &&
45525 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
45526 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
45527 		zend_object *zobj = Z_OBJ_P(object);
45528 		zval *property;
45529 
45530 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45531 			property = OBJ_PROP(zobj, prop_offset);
45532 			if (Z_TYPE_P(property) != IS_UNDEF) {
45533 fast_assign_obj:
45534 				value = zend_assign_to_variable(property, value, IS_CONST);
45535 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45536 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45537 				}
45538 				goto exit_assign_obj;
45539 			}
45540 		} else {
45541 			if (EXPECTED(zobj->properties != NULL)) {
45542 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
45543 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
45544 						GC_REFCOUNT(zobj->properties)--;
45545 					}
45546 					zobj->properties = zend_array_dup(zobj->properties);
45547 				}
45548 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
45549 				if (property) {
45550 					goto fast_assign_obj;
45551 				}
45552 			}
45553 
45554 			if (!zobj->ce->__set) {
45555 
45556 				if (EXPECTED(zobj->properties == NULL)) {
45557 					rebuild_object_properties(zobj);
45558 				}
45559 				if (IS_CONST == IS_CONST) {
45560 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
45561 						Z_ADDREF_P(value);
45562 					}
45563 				} else if (IS_CONST != IS_TMP_VAR) {
45564 					if (Z_ISREF_P(value)) {
45565 						if (IS_CONST == IS_VAR) {
45566 							zend_reference *ref = Z_REF_P(value);
45567 							if (--GC_REFCOUNT(ref) == 0) {
45568 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
45569 								efree_size(ref, sizeof(zend_reference));
45570 								value = &tmp;
45571 							} else {
45572 								value = Z_REFVAL_P(value);
45573 								if (Z_REFCOUNTED_P(value)) {
45574 									Z_ADDREF_P(value);
45575 								}
45576 							}
45577 						} else {
45578 							value = Z_REFVAL_P(value);
45579 							if (Z_REFCOUNTED_P(value)) {
45580 								Z_ADDREF_P(value);
45581 							}
45582 						}
45583 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
45584 						Z_ADDREF_P(value);
45585 					}
45586 				}
45587 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
45588 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45589 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45590 				}
45591 				goto exit_assign_obj;
45592 			}
45593 		}
45594 	}
45595 
45596 	if (!Z_OBJ_HT_P(object)->write_property) {
45597 		zend_error(E_WARNING, "Attempt to assign property of non-object");
45598 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45599 			ZVAL_NULL(EX_VAR(opline->result.var));
45600 		}
45601 
45602 		goto exit_assign_obj;
45603 	}
45604 
45605 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
45606 		ZVAL_DEREF(value);
45607 	}
45608 
45609 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
45610 
45611 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
45612 		ZVAL_COPY(EX_VAR(opline->result.var), value);
45613 	}
45614 
45615 exit_assign_obj:
45616 
45617 
45618 	/* assign_obj has two opcodes! */
45619 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45620 }
45621 
45622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45623 {
45624 	USE_OPLINE
45625 	zend_free_op free_op_data;
45626 	zval *object, *property_name, *value, tmp;
45627 
45628 	SAVE_OPLINE();
45629 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45630 
45631 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45632 		zend_throw_error(NULL, "Using $this when not in object context");
45633 
45634 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45635 		HANDLE_EXCEPTION();
45636 	}
45637 
45638 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45639 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
45640 
45641 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45642 		do {
45643 			if (Z_ISREF_P(object)) {
45644 				object = Z_REFVAL_P(object);
45645 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45646 					break;
45647 				}
45648 			}
45649 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
45650 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
45651 				zend_object *obj;
45652 
45653 				zval_ptr_dtor(object);
45654 				object_init(object);
45655 				Z_ADDREF_P(object);
45656 				obj = Z_OBJ_P(object);
45657 				zend_error(E_WARNING, "Creating default object from empty value");
45658 				if (GC_REFCOUNT(obj) == 1) {
45659 					/* the enclosing container was deleted, obj is unreferenced */
45660 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45661 						ZVAL_NULL(EX_VAR(opline->result.var));
45662 					}
45663 					zval_ptr_dtor_nogc(free_op_data);
45664 					OBJ_RELEASE(obj);
45665 					goto exit_assign_obj;
45666 				}
45667 				Z_DELREF_P(object);
45668 			} else {
45669 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
45670 					zend_error(E_WARNING, "Attempt to assign property of non-object");
45671 				}
45672 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45673 					ZVAL_NULL(EX_VAR(opline->result.var));
45674 				}
45675 				zval_ptr_dtor_nogc(free_op_data);
45676 				goto exit_assign_obj;
45677 			}
45678 		} while (0);
45679 	}
45680 
45681 	if (IS_CV == IS_CONST &&
45682 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
45683 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
45684 		zend_object *zobj = Z_OBJ_P(object);
45685 		zval *property;
45686 
45687 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45688 			property = OBJ_PROP(zobj, prop_offset);
45689 			if (Z_TYPE_P(property) != IS_UNDEF) {
45690 fast_assign_obj:
45691 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
45692 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45693 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45694 				}
45695 				goto exit_assign_obj;
45696 			}
45697 		} else {
45698 			if (EXPECTED(zobj->properties != NULL)) {
45699 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
45700 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
45701 						GC_REFCOUNT(zobj->properties)--;
45702 					}
45703 					zobj->properties = zend_array_dup(zobj->properties);
45704 				}
45705 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
45706 				if (property) {
45707 					goto fast_assign_obj;
45708 				}
45709 			}
45710 
45711 			if (!zobj->ce->__set) {
45712 
45713 				if (EXPECTED(zobj->properties == NULL)) {
45714 					rebuild_object_properties(zobj);
45715 				}
45716 				if (IS_TMP_VAR == IS_CONST) {
45717 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
45718 						Z_ADDREF_P(value);
45719 					}
45720 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
45721 					if (Z_ISREF_P(value)) {
45722 						if (IS_TMP_VAR == IS_VAR) {
45723 							zend_reference *ref = Z_REF_P(value);
45724 							if (--GC_REFCOUNT(ref) == 0) {
45725 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
45726 								efree_size(ref, sizeof(zend_reference));
45727 								value = &tmp;
45728 							} else {
45729 								value = Z_REFVAL_P(value);
45730 								if (Z_REFCOUNTED_P(value)) {
45731 									Z_ADDREF_P(value);
45732 								}
45733 							}
45734 						} else {
45735 							value = Z_REFVAL_P(value);
45736 							if (Z_REFCOUNTED_P(value)) {
45737 								Z_ADDREF_P(value);
45738 							}
45739 						}
45740 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
45741 						Z_ADDREF_P(value);
45742 					}
45743 				}
45744 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
45745 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45746 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45747 				}
45748 				goto exit_assign_obj;
45749 			}
45750 		}
45751 	}
45752 
45753 	if (!Z_OBJ_HT_P(object)->write_property) {
45754 		zend_error(E_WARNING, "Attempt to assign property of non-object");
45755 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45756 			ZVAL_NULL(EX_VAR(opline->result.var));
45757 		}
45758 		zval_ptr_dtor_nogc(free_op_data);
45759 		goto exit_assign_obj;
45760 	}
45761 
45762 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
45763 		ZVAL_DEREF(value);
45764 	}
45765 
45766 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
45767 
45768 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
45769 		ZVAL_COPY(EX_VAR(opline->result.var), value);
45770 	}
45771 	zval_ptr_dtor_nogc(free_op_data);
45772 exit_assign_obj:
45773 
45774 
45775 	/* assign_obj has two opcodes! */
45776 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45777 }
45778 
45779 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45780 {
45781 	USE_OPLINE
45782 	zend_free_op free_op_data;
45783 	zval *object, *property_name, *value, tmp;
45784 
45785 	SAVE_OPLINE();
45786 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45787 
45788 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45789 		zend_throw_error(NULL, "Using $this when not in object context");
45790 
45791 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45792 		HANDLE_EXCEPTION();
45793 	}
45794 
45795 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45796 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
45797 
45798 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45799 		do {
45800 			if (Z_ISREF_P(object)) {
45801 				object = Z_REFVAL_P(object);
45802 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45803 					break;
45804 				}
45805 			}
45806 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
45807 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
45808 				zend_object *obj;
45809 
45810 				zval_ptr_dtor(object);
45811 				object_init(object);
45812 				Z_ADDREF_P(object);
45813 				obj = Z_OBJ_P(object);
45814 				zend_error(E_WARNING, "Creating default object from empty value");
45815 				if (GC_REFCOUNT(obj) == 1) {
45816 					/* the enclosing container was deleted, obj is unreferenced */
45817 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45818 						ZVAL_NULL(EX_VAR(opline->result.var));
45819 					}
45820 					zval_ptr_dtor_nogc(free_op_data);
45821 					OBJ_RELEASE(obj);
45822 					goto exit_assign_obj;
45823 				}
45824 				Z_DELREF_P(object);
45825 			} else {
45826 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
45827 					zend_error(E_WARNING, "Attempt to assign property of non-object");
45828 				}
45829 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45830 					ZVAL_NULL(EX_VAR(opline->result.var));
45831 				}
45832 				zval_ptr_dtor_nogc(free_op_data);
45833 				goto exit_assign_obj;
45834 			}
45835 		} while (0);
45836 	}
45837 
45838 	if (IS_CV == IS_CONST &&
45839 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
45840 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
45841 		zend_object *zobj = Z_OBJ_P(object);
45842 		zval *property;
45843 
45844 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
45845 			property = OBJ_PROP(zobj, prop_offset);
45846 			if (Z_TYPE_P(property) != IS_UNDEF) {
45847 fast_assign_obj:
45848 				value = zend_assign_to_variable(property, value, IS_VAR);
45849 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45850 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45851 				}
45852 				goto exit_assign_obj;
45853 			}
45854 		} else {
45855 			if (EXPECTED(zobj->properties != NULL)) {
45856 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
45857 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
45858 						GC_REFCOUNT(zobj->properties)--;
45859 					}
45860 					zobj->properties = zend_array_dup(zobj->properties);
45861 				}
45862 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
45863 				if (property) {
45864 					goto fast_assign_obj;
45865 				}
45866 			}
45867 
45868 			if (!zobj->ce->__set) {
45869 
45870 				if (EXPECTED(zobj->properties == NULL)) {
45871 					rebuild_object_properties(zobj);
45872 				}
45873 				if (IS_VAR == IS_CONST) {
45874 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
45875 						Z_ADDREF_P(value);
45876 					}
45877 				} else if (IS_VAR != IS_TMP_VAR) {
45878 					if (Z_ISREF_P(value)) {
45879 						if (IS_VAR == IS_VAR) {
45880 							zend_reference *ref = Z_REF_P(value);
45881 							if (--GC_REFCOUNT(ref) == 0) {
45882 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
45883 								efree_size(ref, sizeof(zend_reference));
45884 								value = &tmp;
45885 							} else {
45886 								value = Z_REFVAL_P(value);
45887 								if (Z_REFCOUNTED_P(value)) {
45888 									Z_ADDREF_P(value);
45889 								}
45890 							}
45891 						} else {
45892 							value = Z_REFVAL_P(value);
45893 							if (Z_REFCOUNTED_P(value)) {
45894 								Z_ADDREF_P(value);
45895 							}
45896 						}
45897 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
45898 						Z_ADDREF_P(value);
45899 					}
45900 				}
45901 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
45902 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45903 					ZVAL_COPY(EX_VAR(opline->result.var), value);
45904 				}
45905 				goto exit_assign_obj;
45906 			}
45907 		}
45908 	}
45909 
45910 	if (!Z_OBJ_HT_P(object)->write_property) {
45911 		zend_error(E_WARNING, "Attempt to assign property of non-object");
45912 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45913 			ZVAL_NULL(EX_VAR(opline->result.var));
45914 		}
45915 		zval_ptr_dtor_nogc(free_op_data);
45916 		goto exit_assign_obj;
45917 	}
45918 
45919 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
45920 		ZVAL_DEREF(value);
45921 	}
45922 
45923 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
45924 
45925 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
45926 		ZVAL_COPY(EX_VAR(opline->result.var), value);
45927 	}
45928 	zval_ptr_dtor_nogc(free_op_data);
45929 exit_assign_obj:
45930 
45931 
45932 	/* assign_obj has two opcodes! */
45933 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45934 }
45935 
45936 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45937 {
45938 	USE_OPLINE
45939 
45940 	zval *object, *property_name, *value, tmp;
45941 
45942 	SAVE_OPLINE();
45943 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
45944 
45945 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45946 		zend_throw_error(NULL, "Using $this when not in object context");
45947 
45948 
45949 		HANDLE_EXCEPTION();
45950 	}
45951 
45952 	property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
45953 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
45954 
45955 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45956 		do {
45957 			if (Z_ISREF_P(object)) {
45958 				object = Z_REFVAL_P(object);
45959 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
45960 					break;
45961 				}
45962 			}
45963 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
45964 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
45965 				zend_object *obj;
45966 
45967 				zval_ptr_dtor(object);
45968 				object_init(object);
45969 				Z_ADDREF_P(object);
45970 				obj = Z_OBJ_P(object);
45971 				zend_error(E_WARNING, "Creating default object from empty value");
45972 				if (GC_REFCOUNT(obj) == 1) {
45973 					/* the enclosing container was deleted, obj is unreferenced */
45974 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45975 						ZVAL_NULL(EX_VAR(opline->result.var));
45976 					}
45977 
45978 					OBJ_RELEASE(obj);
45979 					goto exit_assign_obj;
45980 				}
45981 				Z_DELREF_P(object);
45982 			} else {
45983 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
45984 					zend_error(E_WARNING, "Attempt to assign property of non-object");
45985 				}
45986 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45987 					ZVAL_NULL(EX_VAR(opline->result.var));
45988 				}
45989 
45990 				goto exit_assign_obj;
45991 			}
45992 		} while (0);
45993 	}
45994 
45995 	if (IS_CV == IS_CONST &&
45996 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
45997 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
45998 		zend_object *zobj = Z_OBJ_P(object);
45999 		zval *property;
46000 
46001 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
46002 			property = OBJ_PROP(zobj, prop_offset);
46003 			if (Z_TYPE_P(property) != IS_UNDEF) {
46004 fast_assign_obj:
46005 				value = zend_assign_to_variable(property, value, IS_CV);
46006 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46007 					ZVAL_COPY(EX_VAR(opline->result.var), value);
46008 				}
46009 				goto exit_assign_obj;
46010 			}
46011 		} else {
46012 			if (EXPECTED(zobj->properties != NULL)) {
46013 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46014 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46015 						GC_REFCOUNT(zobj->properties)--;
46016 					}
46017 					zobj->properties = zend_array_dup(zobj->properties);
46018 				}
46019 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
46020 				if (property) {
46021 					goto fast_assign_obj;
46022 				}
46023 			}
46024 
46025 			if (!zobj->ce->__set) {
46026 
46027 				if (EXPECTED(zobj->properties == NULL)) {
46028 					rebuild_object_properties(zobj);
46029 				}
46030 				if (IS_CV == IS_CONST) {
46031 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46032 						Z_ADDREF_P(value);
46033 					}
46034 				} else if (IS_CV != IS_TMP_VAR) {
46035 					if (Z_ISREF_P(value)) {
46036 						if (IS_CV == IS_VAR) {
46037 							zend_reference *ref = Z_REF_P(value);
46038 							if (--GC_REFCOUNT(ref) == 0) {
46039 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46040 								efree_size(ref, sizeof(zend_reference));
46041 								value = &tmp;
46042 							} else {
46043 								value = Z_REFVAL_P(value);
46044 								if (Z_REFCOUNTED_P(value)) {
46045 									Z_ADDREF_P(value);
46046 								}
46047 							}
46048 						} else {
46049 							value = Z_REFVAL_P(value);
46050 							if (Z_REFCOUNTED_P(value)) {
46051 								Z_ADDREF_P(value);
46052 							}
46053 						}
46054 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
46055 						Z_ADDREF_P(value);
46056 					}
46057 				}
46058 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
46059 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46060 					ZVAL_COPY(EX_VAR(opline->result.var), value);
46061 				}
46062 				goto exit_assign_obj;
46063 			}
46064 		}
46065 	}
46066 
46067 	if (!Z_OBJ_HT_P(object)->write_property) {
46068 		zend_error(E_WARNING, "Attempt to assign property of non-object");
46069 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46070 			ZVAL_NULL(EX_VAR(opline->result.var));
46071 		}
46072 
46073 		goto exit_assign_obj;
46074 	}
46075 
46076 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
46077 		ZVAL_DEREF(value);
46078 	}
46079 
46080 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
46081 
46082 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
46083 		ZVAL_COPY(EX_VAR(opline->result.var), value);
46084 	}
46085 
46086 exit_assign_obj:
46087 
46088 
46089 	/* assign_obj has two opcodes! */
46090 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46091 }
46092 
46093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46094 {
46095 	USE_OPLINE
46096 
46097 	zval *object_ptr;
46098 
46099 	zval *value;
46100 	zval *variable_ptr;
46101 	zval *dim;
46102 
46103 	SAVE_OPLINE();
46104 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46105 
46106 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46107 try_assign_dim_array:
46108 		SEPARATE_ARRAY(object_ptr);
46109 		if (IS_CV == IS_UNUSED) {
46110 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
46111 			if (UNEXPECTED(variable_ptr == NULL)) {
46112 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
46113 				goto assign_dim_error;
46114 			}
46115 		} else {
46116 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46117 			if (IS_CV == IS_CONST) {
46118 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
46119 			} else {
46120 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
46121 			}
46122 			if (UNEXPECTED(variable_ptr == NULL)) {
46123 				goto assign_dim_error;
46124 			}
46125 		}
46126 		value = EX_CONSTANT((opline+1)->op1);
46127 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
46128 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46129 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46130 		}
46131 	} else {
46132 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46133 			object_ptr = Z_REFVAL_P(object_ptr);
46134 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46135 				goto try_assign_dim_array;
46136 			}
46137 		}
46138 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46139 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46140 			value = EX_CONSTANT((opline+1)->op1);
46141 
46142 			zend_assign_to_object_dim(object_ptr, dim, value);
46143 
46144 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
46145 				ZVAL_COPY(EX_VAR(opline->result.var), value);
46146 			}
46147 
46148 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46149 			if (IS_CV == IS_UNUSED) {
46150 				zend_throw_error(NULL, "[] operator not supported for strings");
46151 
46152 
46153 				HANDLE_EXCEPTION();
46154 			} else {
46155 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46156 				value = EX_CONSTANT((opline+1)->op1);
46157 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
46158 
46159 			}
46160 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46161 			ZVAL_NEW_ARR(object_ptr);
46162 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
46163 			goto try_assign_dim_array;
46164 		} else {
46165 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
46166 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
46167 			}
46168 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46169 assign_dim_error:
46170 
46171 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46172 				ZVAL_NULL(EX_VAR(opline->result.var));
46173 			}
46174 		}
46175 	}
46176 	if (IS_CV != IS_UNUSED) {
46177 
46178 	}
46179 
46180 	/* assign_dim has two opcodes! */
46181 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46182 }
46183 
46184 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46185 {
46186 	USE_OPLINE
46187 
46188 	zval *object_ptr;
46189 	zend_free_op free_op_data;
46190 	zval *value;
46191 	zval *variable_ptr;
46192 	zval *dim;
46193 
46194 	SAVE_OPLINE();
46195 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46196 
46197 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46198 try_assign_dim_array:
46199 		SEPARATE_ARRAY(object_ptr);
46200 		if (IS_CV == IS_UNUSED) {
46201 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
46202 			if (UNEXPECTED(variable_ptr == NULL)) {
46203 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
46204 				goto assign_dim_error;
46205 			}
46206 		} else {
46207 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46208 			if (IS_CV == IS_CONST) {
46209 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
46210 			} else {
46211 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
46212 			}
46213 			if (UNEXPECTED(variable_ptr == NULL)) {
46214 				goto assign_dim_error;
46215 			}
46216 		}
46217 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
46218 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
46219 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46220 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46221 		}
46222 	} else {
46223 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46224 			object_ptr = Z_REFVAL_P(object_ptr);
46225 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46226 				goto try_assign_dim_array;
46227 			}
46228 		}
46229 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46230 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46231 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
46232 
46233 			zend_assign_to_object_dim(object_ptr, dim, value);
46234 
46235 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
46236 				ZVAL_COPY(EX_VAR(opline->result.var), value);
46237 			}
46238 
46239 			zval_ptr_dtor_nogc(free_op_data);
46240 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46241 			if (IS_CV == IS_UNUSED) {
46242 				zend_throw_error(NULL, "[] operator not supported for strings");
46243 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46244 
46245 				HANDLE_EXCEPTION();
46246 			} else {
46247 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46248 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
46249 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
46250 				zval_ptr_dtor_nogc(free_op_data);
46251 			}
46252 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46253 			ZVAL_NEW_ARR(object_ptr);
46254 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
46255 			goto try_assign_dim_array;
46256 		} else {
46257 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
46258 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
46259 			}
46260 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46261 assign_dim_error:
46262 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46263 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46264 				ZVAL_NULL(EX_VAR(opline->result.var));
46265 			}
46266 		}
46267 	}
46268 	if (IS_CV != IS_UNUSED) {
46269 
46270 	}
46271 
46272 	/* assign_dim has two opcodes! */
46273 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46274 }
46275 
46276 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46277 {
46278 	USE_OPLINE
46279 
46280 	zval *object_ptr;
46281 	zend_free_op free_op_data;
46282 	zval *value;
46283 	zval *variable_ptr;
46284 	zval *dim;
46285 
46286 	SAVE_OPLINE();
46287 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46288 
46289 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46290 try_assign_dim_array:
46291 		SEPARATE_ARRAY(object_ptr);
46292 		if (IS_CV == IS_UNUSED) {
46293 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
46294 			if (UNEXPECTED(variable_ptr == NULL)) {
46295 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
46296 				goto assign_dim_error;
46297 			}
46298 		} else {
46299 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46300 			if (IS_CV == IS_CONST) {
46301 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
46302 			} else {
46303 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
46304 			}
46305 			if (UNEXPECTED(variable_ptr == NULL)) {
46306 				goto assign_dim_error;
46307 			}
46308 		}
46309 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
46310 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
46311 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46312 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46313 		}
46314 	} else {
46315 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46316 			object_ptr = Z_REFVAL_P(object_ptr);
46317 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46318 				goto try_assign_dim_array;
46319 			}
46320 		}
46321 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46322 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46323 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
46324 
46325 			zend_assign_to_object_dim(object_ptr, dim, value);
46326 
46327 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
46328 				ZVAL_COPY(EX_VAR(opline->result.var), value);
46329 			}
46330 
46331 			zval_ptr_dtor_nogc(free_op_data);
46332 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46333 			if (IS_CV == IS_UNUSED) {
46334 				zend_throw_error(NULL, "[] operator not supported for strings");
46335 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46336 
46337 				HANDLE_EXCEPTION();
46338 			} else {
46339 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46340 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
46341 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
46342 				zval_ptr_dtor_nogc(free_op_data);
46343 			}
46344 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46345 			ZVAL_NEW_ARR(object_ptr);
46346 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
46347 			goto try_assign_dim_array;
46348 		} else {
46349 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
46350 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
46351 			}
46352 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46353 assign_dim_error:
46354 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46355 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46356 				ZVAL_NULL(EX_VAR(opline->result.var));
46357 			}
46358 		}
46359 	}
46360 	if (IS_CV != IS_UNUSED) {
46361 
46362 	}
46363 
46364 	/* assign_dim has two opcodes! */
46365 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46366 }
46367 
46368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46369 {
46370 	USE_OPLINE
46371 
46372 	zval *object_ptr;
46373 
46374 	zval *value;
46375 	zval *variable_ptr;
46376 	zval *dim;
46377 
46378 	SAVE_OPLINE();
46379 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46380 
46381 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46382 try_assign_dim_array:
46383 		SEPARATE_ARRAY(object_ptr);
46384 		if (IS_CV == IS_UNUSED) {
46385 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
46386 			if (UNEXPECTED(variable_ptr == NULL)) {
46387 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
46388 				goto assign_dim_error;
46389 			}
46390 		} else {
46391 			dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46392 			if (IS_CV == IS_CONST) {
46393 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
46394 			} else {
46395 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
46396 			}
46397 			if (UNEXPECTED(variable_ptr == NULL)) {
46398 				goto assign_dim_error;
46399 			}
46400 		}
46401 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
46402 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
46403 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46404 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46405 		}
46406 	} else {
46407 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46408 			object_ptr = Z_REFVAL_P(object_ptr);
46409 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46410 				goto try_assign_dim_array;
46411 			}
46412 		}
46413 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46414 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46415 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
46416 
46417 			zend_assign_to_object_dim(object_ptr, dim, value);
46418 
46419 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
46420 				ZVAL_COPY(EX_VAR(opline->result.var), value);
46421 			}
46422 
46423 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46424 			if (IS_CV == IS_UNUSED) {
46425 				zend_throw_error(NULL, "[] operator not supported for strings");
46426 
46427 
46428 				HANDLE_EXCEPTION();
46429 			} else {
46430 				dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46431 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
46432 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
46433 
46434 			}
46435 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46436 			ZVAL_NEW_ARR(object_ptr);
46437 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
46438 			goto try_assign_dim_array;
46439 		} else {
46440 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
46441 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
46442 			}
46443 			dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46444 assign_dim_error:
46445 
46446 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46447 				ZVAL_NULL(EX_VAR(opline->result.var));
46448 			}
46449 		}
46450 	}
46451 	if (IS_CV != IS_UNUSED) {
46452 
46453 	}
46454 
46455 	/* assign_dim has two opcodes! */
46456 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46457 }
46458 
46459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46460 {
46461 	USE_OPLINE
46462 
46463 	zval *value;
46464 	zval *variable_ptr;
46465 
46466 	SAVE_OPLINE();
46467 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46468 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46469 
46470 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
46471 
46472 		if (UNEXPECTED(0)) {
46473 			ZVAL_NULL(EX_VAR(opline->result.var));
46474 		}
46475 	} else {
46476 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
46477 		if (UNEXPECTED(0)) {
46478 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46479 		}
46480 
46481 		/* zend_assign_to_variable() always takes care of op2, never free it! */
46482 	}
46483 
46484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46485 }
46486 
46487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46488 {
46489 	USE_OPLINE
46490 
46491 	zval *value;
46492 	zval *variable_ptr;
46493 
46494 	SAVE_OPLINE();
46495 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
46496 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46497 
46498 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
46499 
46500 		if (UNEXPECTED(1)) {
46501 			ZVAL_NULL(EX_VAR(opline->result.var));
46502 		}
46503 	} else {
46504 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
46505 		if (UNEXPECTED(1)) {
46506 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46507 		}
46508 
46509 		/* zend_assign_to_variable() always takes care of op2, never free it! */
46510 	}
46511 
46512 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46513 }
46514 
46515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46516 {
46517 	USE_OPLINE
46518 
46519 	zval *variable_ptr;
46520 	zval *value_ptr;
46521 
46522 	SAVE_OPLINE();
46523 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
46524 	variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
46525 
46526 	if (IS_CV == IS_VAR &&
46527 	    UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
46528 	    UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var))) &&
46529 	    UNEXPECTED(!Z_ISERROR_P(EX_VAR(opline->op1.var)))) {
46530 
46531 		zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
46532 
46533 
46534 		HANDLE_EXCEPTION();
46535 
46536 	} else if (IS_CV == IS_VAR &&
46537 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
46538 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
46539 		zend_error(E_NOTICE, "Only variables should be assigned by reference");
46540 		if (UNEXPECTED(EG(exception) != NULL)) {
46541 
46542 			HANDLE_EXCEPTION();
46543 		}
46544 
46545 		value_ptr = zend_assign_to_variable(variable_ptr, value_ptr, IS_CV);
46546 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46547 			ZVAL_COPY(EX_VAR(opline->result.var), value_ptr);
46548 		}
46549 		/* zend_assign_to_variable() always takes care of op2, never free it! */
46550 
46551 	} else {
46552 
46553 		if ((IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) ||
46554 		    (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr)))) {
46555 			variable_ptr = &EG(uninitialized_zval);
46556 		} else {
46557 			zend_assign_to_variable_reference(variable_ptr, value_ptr);
46558 		}
46559 
46560 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46561 			ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
46562 		}
46563 
46564 	}
46565 
46566 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46567 }
46568 
46569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46570 {
46571 	USE_OPLINE
46572 
46573 	zval *op1, *op2;
46574 	zend_string *op1_str, *op2_str, *str;
46575 
46576 	SAVE_OPLINE();
46577 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
46578 	if (IS_CV == IS_CONST) {
46579 		op1_str = Z_STR_P(op1);
46580 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
46581 		op1_str = zend_string_copy(Z_STR_P(op1));
46582 	} else {
46583 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46584 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
46585 		}
46586 		op1_str = _zval_get_string_func(op1);
46587 	}
46588 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46589 	if (IS_CV == IS_CONST) {
46590 		op2_str = Z_STR_P(op2);
46591 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
46592 		op2_str = zend_string_copy(Z_STR_P(op2));
46593 	} else {
46594 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
46595 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
46596 		}
46597 		op2_str = _zval_get_string_func(op2);
46598 	}
46599 	do {
46600 		if (IS_CV != IS_CONST) {
46601 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
46602 				if (IS_CV == IS_CONST) {
46603 					zend_string_addref(op2_str);
46604 				}
46605 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
46606 				zend_string_release(op1_str);
46607 				break;
46608 			}
46609 		}
46610 		if (IS_CV != IS_CONST) {
46611 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
46612 				if (IS_CV == IS_CONST) {
46613 					zend_string_addref(op1_str);
46614 				}
46615 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
46616 				zend_string_release(op2_str);
46617 				break;
46618 			}
46619 		}
46620 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
46621 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
46622 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
46623 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
46624 		if (IS_CV != IS_CONST) {
46625 			zend_string_release(op1_str);
46626 		}
46627 		if (IS_CV != IS_CONST) {
46628 			zend_string_release(op2_str);
46629 		}
46630 	} while (0);
46631 
46632 
46633 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46634 }
46635 
46636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46637 {
46638 	USE_OPLINE
46639 	zval *function_name;
46640 
46641 	zval *object;
46642 	zend_function *fbc;
46643 	zend_class_entry *called_scope;
46644 	zend_object *obj;
46645 	zend_execute_data *call;
46646 	uint32_t call_info;
46647 
46648 	SAVE_OPLINE();
46649 
46650 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46651 
46652 	if (IS_CV != IS_CONST &&
46653 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
46654 		do {
46655 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
46656 				function_name = Z_REFVAL_P(function_name);
46657 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
46658 					break;
46659 				}
46660 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
46661 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
46662 				if (UNEXPECTED(EG(exception) != NULL)) {
46663 					HANDLE_EXCEPTION();
46664 				}
46665 			}
46666 			zend_throw_error(NULL, "Method name must be a string");
46667 
46668 
46669 			HANDLE_EXCEPTION();
46670 		} while (0);
46671 	}
46672 
46673 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
46674 
46675 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
46676 		zend_throw_error(NULL, "Using $this when not in object context");
46677 
46678 		HANDLE_EXCEPTION();
46679 	}
46680 
46681 	if (IS_CV != IS_UNUSED) {
46682 		do {
46683 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46684 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
46685 					object = Z_REFVAL_P(object);
46686 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
46687 						break;
46688 					}
46689 				}
46690 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
46691 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
46692 					if (UNEXPECTED(EG(exception) != NULL)) {
46693 
46694 						HANDLE_EXCEPTION();
46695 					}
46696 				}
46697 				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)));
46698 
46699 
46700 				HANDLE_EXCEPTION();
46701 			}
46702 		} while (0);
46703 	}
46704 
46705 	obj = Z_OBJ_P(object);
46706 	called_scope = obj->ce;
46707 
46708 	if (IS_CV != IS_CONST ||
46709 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
46710 	    zend_object *orig_obj = obj;
46711 
46712 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
46713 			zend_throw_error(NULL, "Object does not support method calls");
46714 
46715 
46716 			HANDLE_EXCEPTION();
46717 		}
46718 
46719 		/* First, locate the function. */
46720 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
46721 		if (UNEXPECTED(fbc == NULL)) {
46722 			if (EXPECTED(!EG(exception))) {
46723 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
46724 			}
46725 
46726 
46727 			HANDLE_EXCEPTION();
46728 		}
46729 		if (IS_CV == IS_CONST &&
46730 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
46731 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
46732 		    EXPECTED(obj == orig_obj)) {
46733 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
46734 		}
46735 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
46736 			init_func_run_time_cache(&fbc->op_array);
46737 		}
46738 	}
46739 
46740 	call_info = ZEND_CALL_NESTED_FUNCTION;
46741 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
46742 		obj = NULL;
46743 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
46744 		/* CV may be changed indirectly (e.g. when it's a reference) */
46745 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
46746 		GC_REFCOUNT(obj)++; /* For $this pointer */
46747 	}
46748 
46749 
46750 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
46751 		HANDLE_EXCEPTION();
46752 	}
46753 
46754 	call = zend_vm_stack_push_call_frame(call_info,
46755 		fbc, opline->extended_value, called_scope, obj);
46756 	call->prev_execute_data = EX(call);
46757 	EX(call) = call;
46758 
46759 	ZEND_VM_NEXT_OPCODE();
46760 }
46761 
46762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46763 {
46764 	USE_OPLINE
46765 
46766 	zval *op1, *op2, *result;
46767 
46768 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
46769 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46770 	do {
46771 		int result;
46772 
46773 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
46774 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
46775 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
46776 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
46777 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
46778 			} else {
46779 				break;
46780 			}
46781 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
46782 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
46783 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
46784 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
46785 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
46786 			} else {
46787 				break;
46788 			}
46789 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
46790 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
46791 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
46792 					result = 1;
46793 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
46794 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
46795 						result = 0;
46796 					} else {
46797 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
46798 					}
46799 				} else {
46800 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
46801 				}
46802 
46803 			} else {
46804 				break;
46805 			}
46806 		} else {
46807 			break;
46808 		}
46809 		ZEND_VM_SMART_BRANCH(result, 0);
46810 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
46811 		ZEND_VM_NEXT_OPCODE();
46812 	} while (0);
46813 
46814 	SAVE_OPLINE();
46815 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46816 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
46817 	}
46818 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
46819 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
46820 	}
46821 	result = EX_VAR(opline->result.var);
46822 	compare_function(result, op1, op2);
46823 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
46824 
46825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46826 }
46827 
46828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46829 {
46830 	USE_OPLINE
46831 
46832 	zval *expr_ptr, new_expr;
46833 
46834 	SAVE_OPLINE();
46835 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
46836 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
46837 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
46838 		ZVAL_MAKE_REF(expr_ptr);
46839 		Z_ADDREF_P(expr_ptr);
46840 
46841 	} else {
46842 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
46843 		if (IS_CV == IS_TMP_VAR) {
46844 			/* pass */
46845 		} else if (IS_CV == IS_CONST) {
46846 			if (Z_REFCOUNTED_P(expr_ptr)) {
46847 				Z_ADDREF_P(expr_ptr);
46848 			}
46849 		} else if (IS_CV == IS_CV) {
46850 			ZVAL_DEREF(expr_ptr);
46851 			if (Z_REFCOUNTED_P(expr_ptr)) {
46852 				Z_ADDREF_P(expr_ptr);
46853 			}
46854 		} else /* if (IS_CV == IS_VAR) */ {
46855 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
46856 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
46857 
46858 				expr_ptr = Z_REFVAL_P(expr_ptr);
46859 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
46860 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
46861 					expr_ptr = &new_expr;
46862 					efree_size(ref, sizeof(zend_reference));
46863 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
46864 					Z_ADDREF_P(expr_ptr);
46865 				}
46866 			}
46867 		}
46868 	}
46869 
46870 	if (IS_CV != IS_UNUSED) {
46871 
46872 		zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46873 		zend_string *str;
46874 		zend_ulong hval;
46875 
46876 add_again:
46877 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46878 			str = Z_STR_P(offset);
46879 			if (IS_CV != IS_CONST) {
46880 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
46881 					goto num_index;
46882 				}
46883 			}
46884 str_index:
46885 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
46886 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46887 			hval = Z_LVAL_P(offset);
46888 num_index:
46889 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
46890 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
46891 			offset = Z_REFVAL_P(offset);
46892 			goto add_again;
46893 		} else if (Z_TYPE_P(offset) == IS_NULL) {
46894 			str = ZSTR_EMPTY_ALLOC();
46895 			goto str_index;
46896 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
46897 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
46898 			goto num_index;
46899 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
46900 			hval = 0;
46901 			goto num_index;
46902 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
46903 			hval = 1;
46904 			goto num_index;
46905 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
46906 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
46907 			str = ZSTR_EMPTY_ALLOC();
46908 			goto str_index;
46909 		} else {
46910 			zend_error(E_WARNING, "Illegal offset type");
46911 			zval_ptr_dtor(expr_ptr);
46912 		}
46913 
46914 	} else {
46915 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
46916 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
46917 			zval_ptr_dtor(expr_ptr);
46918 		}
46919 	}
46920 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46921 }
46922 
46923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46924 {
46925 	zval *array;
46926 	uint32_t size;
46927 	USE_OPLINE
46928 
46929 	array = EX_VAR(opline->result.var);
46930 	if (IS_CV != IS_UNUSED) {
46931 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
46932 	} else {
46933 		size = 0;
46934 	}
46935 	ZVAL_NEW_ARR(array);
46936 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
46937 
46938 	if (IS_CV != IS_UNUSED) {
46939 		/* Explicitly initialize array as not-packed if flag is set */
46940 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
46941 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
46942 		}
46943 	}
46944 
46945 	if (IS_CV == IS_UNUSED) {
46946 		ZEND_VM_NEXT_OPCODE();
46947 #if 0 || (IS_CV != IS_UNUSED)
46948 	} else {
46949 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46950 #endif
46951 	}
46952 }
46953 
46954 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46955 {
46956 	USE_OPLINE
46957 
46958 	zval *container;
46959 	zval *offset;
46960 	zend_ulong hval;
46961 	zend_string *key;
46962 
46963 	SAVE_OPLINE();
46964 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
46965 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
46966 
46967 	do {
46968 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
46969 			HashTable *ht;
46970 
46971 unset_dim_array:
46972 			SEPARATE_ARRAY(container);
46973 			ht = Z_ARRVAL_P(container);
46974 offset_again:
46975 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46976 				key = Z_STR_P(offset);
46977 				if (IS_CV != IS_CONST) {
46978 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
46979 						goto num_index_dim;
46980 					}
46981 				}
46982 str_index_dim:
46983 				if (ht == &EG(symbol_table)) {
46984 					zend_delete_global_variable(key);
46985 				} else {
46986 					zend_hash_del(ht, key);
46987 				}
46988 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46989 				hval = Z_LVAL_P(offset);
46990 num_index_dim:
46991 				zend_hash_index_del(ht, hval);
46992 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
46993 				offset = Z_REFVAL_P(offset);
46994 				goto offset_again;
46995 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
46996 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
46997 				goto num_index_dim;
46998 			} else if (Z_TYPE_P(offset) == IS_NULL) {
46999 				key = ZSTR_EMPTY_ALLOC();
47000 				goto str_index_dim;
47001 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
47002 				hval = 0;
47003 				goto num_index_dim;
47004 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
47005 				hval = 1;
47006 				goto num_index_dim;
47007 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47008 				hval = Z_RES_HANDLE_P(offset);
47009 				goto num_index_dim;
47010 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47011 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
47012 				key = ZSTR_EMPTY_ALLOC();
47013 				goto str_index_dim;
47014 			} else {
47015 				zend_error(E_WARNING, "Illegal offset type in unset");
47016 			}
47017 			break;
47018 		} else if (Z_ISREF_P(container)) {
47019 			container = Z_REFVAL_P(container);
47020 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47021 				goto unset_dim_array;
47022 			}
47023 		}
47024 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47025 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
47026 		}
47027 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
47028 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
47029 		}
47030 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47031 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
47032 				zend_throw_error(NULL, "Cannot use object as array");
47033 			} else {
47034 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
47035 			}
47036 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
47037 			zend_throw_error(NULL, "Cannot unset string offsets");
47038 		}
47039 	} while (0);
47040 
47041 
47042 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47043 }
47044 
47045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47046 {
47047 	USE_OPLINE
47048 
47049 	zval *container;
47050 	zval *offset;
47051 
47052 	SAVE_OPLINE();
47053 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
47054 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47055 		zend_throw_error(NULL, "Using $this when not in object context");
47056 
47057 		HANDLE_EXCEPTION();
47058 	}
47059 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
47060 
47061 	do {
47062 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
47063 			if (Z_ISREF_P(container)) {
47064 				container = Z_REFVAL_P(container);
47065 				if (Z_TYPE_P(container) != IS_OBJECT) {
47066 					break;
47067 				}
47068 			} else {
47069 				break;
47070 			}
47071 		}
47072 		if (Z_OBJ_HT_P(container)->unset_property) {
47073 			Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
47074 		} else {
47075 			zend_error(E_NOTICE, "Trying to unset property of non-object");
47076 		}
47077 	} while (0);
47078 
47079 
47080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47081 }
47082 
47083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47084 {
47085 	USE_OPLINE
47086 
47087 	zval *container;
47088 	int result;
47089 	zend_ulong hval;
47090 	zval *offset;
47091 
47092 	SAVE_OPLINE();
47093 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47094 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
47095 
47096 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47097 		HashTable *ht;
47098 		zval *value;
47099 		zend_string *str;
47100 
47101 isset_dim_obj_array:
47102 		ht = Z_ARRVAL_P(container);
47103 isset_again:
47104 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47105 			str = Z_STR_P(offset);
47106 			if (IS_CV != IS_CONST) {
47107 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47108 					goto num_index_prop;
47109 				}
47110 			}
47111 str_index_prop:
47112 			value = zend_hash_find_ind(ht, str);
47113 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47114 			hval = Z_LVAL_P(offset);
47115 num_index_prop:
47116 			value = zend_hash_index_find(ht, hval);
47117 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
47118 			offset = Z_REFVAL_P(offset);
47119 			goto isset_again;
47120 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47121 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
47122 			goto num_index_prop;
47123 		} else if (Z_TYPE_P(offset) == IS_NULL) {
47124 			str = ZSTR_EMPTY_ALLOC();
47125 			goto str_index_prop;
47126 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
47127 			hval = 0;
47128 			goto num_index_prop;
47129 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
47130 			hval = 1;
47131 			goto num_index_prop;
47132 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47133 			hval = Z_RES_HANDLE_P(offset);
47134 			goto num_index_prop;
47135 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47136 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
47137 			str = ZSTR_EMPTY_ALLOC();
47138 			goto str_index_prop;
47139 		} else {
47140 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
47141 			goto isset_not_found;
47142 		}
47143 
47144 		if (opline->extended_value & ZEND_ISSET) {
47145 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
47146 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
47147 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
47148 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
47149 			result = (value == NULL || !i_zend_is_true(value));
47150 		}
47151 		goto isset_dim_obj_exit;
47152 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
47153 		container = Z_REFVAL_P(container);
47154 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47155 			goto isset_dim_obj_array;
47156 		}
47157 	}
47158 
47159 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
47160 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
47161 	}
47162 
47163 	if ((IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
47164 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
47165 			result =
47166 				((opline->extended_value & ZEND_ISSET) == 0) ^
47167 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
47168 		} else {
47169 			zend_error(E_NOTICE, "Trying to check element of non-array");
47170 			goto isset_not_found;
47171 		}
47172 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
47173 		zend_long lval;
47174 
47175 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47176 			lval = Z_LVAL_P(offset);
47177 isset_str_offset:
47178 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
47179 				lval += (zend_long)Z_STRLEN_P(container);
47180 			}
47181 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
47182 				if (opline->extended_value & ZEND_ISSET) {
47183 					result = 1;
47184 				} else {
47185 					result = (Z_STRVAL_P(container)[lval] == '0');
47186 				}
47187 			} else {
47188 				goto isset_not_found;
47189 			}
47190 		} else {
47191 			if (IS_CV & (IS_CV|IS_VAR)) {
47192 				ZVAL_DEREF(offset);
47193 			}
47194 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
47195 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
47196 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
47197 				lval = zval_get_long(offset);
47198 				goto isset_str_offset;
47199 			}
47200 			goto isset_not_found;
47201 		}
47202 	} else {
47203 isset_not_found:
47204 		result = ((opline->extended_value & ZEND_ISSET) == 0);
47205 	}
47206 
47207 isset_dim_obj_exit:
47208 
47209 
47210 	ZEND_VM_SMART_BRANCH(result, 1);
47211 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
47212 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47213 }
47214 
47215 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47216 {
47217 	USE_OPLINE
47218 
47219 	zval *container;
47220 	int result;
47221 	zval *offset;
47222 
47223 	SAVE_OPLINE();
47224 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
47225 
47226 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47227 		zend_throw_error(NULL, "Using $this when not in object context");
47228 
47229 		HANDLE_EXCEPTION();
47230 	}
47231 
47232 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
47233 
47234 	if (IS_CV == IS_CONST ||
47235 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
47236 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
47237 			container = Z_REFVAL_P(container);
47238 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
47239 				goto isset_no_object;
47240 			}
47241 		} else {
47242 			goto isset_no_object;
47243 		}
47244 	}
47245 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
47246 		zend_error(E_NOTICE, "Trying to check property of non-object");
47247 isset_no_object:
47248 		result = ((opline->extended_value & ZEND_ISSET) == 0);
47249 	} else {
47250 		result =
47251 			((opline->extended_value & ZEND_ISSET) == 0) ^
47252 			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));
47253 	}
47254 
47255 
47256 	ZEND_VM_SMART_BRANCH(result, 1);
47257 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
47258 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47259 }
47260 
47261 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47262 {
47263 	USE_OPLINE
47264 
47265 	zend_generator *generator = zend_get_running_generator(execute_data);
47266 
47267 	SAVE_OPLINE();
47268 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
47269 		zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
47270 
47271 
47272 		HANDLE_EXCEPTION();
47273 	}
47274 
47275 	/* Destroy the previously yielded value */
47276 	zval_ptr_dtor(&generator->value);
47277 
47278 	/* Destroy the previously yielded key */
47279 	zval_ptr_dtor(&generator->key);
47280 
47281 	/* Set the new yielded value */
47282 	if (IS_CV != IS_UNUSED) {
47283 
47284 
47285 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
47286 			/* Constants and temporary variables aren't yieldable by reference,
47287 			 * but we still allow them with a notice. */
47288 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
47289 				zval *value;
47290 
47291 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47292 
47293 				value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
47294 				ZVAL_COPY_VALUE(&generator->value, value);
47295 				if (IS_CV == IS_CONST) {
47296 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47297 						Z_ADDREF(generator->value);
47298 					}
47299 				}
47300 			} else {
47301 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
47302 
47303 				/* If a function call result is yielded and the function did
47304 				 * not return by reference we throw a notice. */
47305 				if (IS_CV == IS_VAR &&
47306 				    (value_ptr == &EG(uninitialized_zval) ||
47307 				     (opline->extended_value == ZEND_RETURNS_FUNCTION &&
47308 				      !Z_ISREF_P(value_ptr)))) {
47309 					zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47310 				} else {
47311 					ZVAL_MAKE_REF(value_ptr);
47312 				}
47313 				ZVAL_COPY(&generator->value, value_ptr);
47314 
47315 			}
47316 		} else {
47317 			zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
47318 
47319 			/* Consts, temporary variables and references need copying */
47320 			if (IS_CV == IS_CONST) {
47321 				ZVAL_COPY_VALUE(&generator->value, value);
47322 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47323 					Z_ADDREF(generator->value);
47324 				}
47325 			} else if (IS_CV == IS_TMP_VAR) {
47326 				ZVAL_COPY_VALUE(&generator->value, value);
47327             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
47328 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
47329 
47330 			} else {
47331 				ZVAL_COPY_VALUE(&generator->value, value);
47332 				if (IS_CV == IS_CV) {
47333 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
47334 				}
47335 			}
47336 		}
47337 	} else {
47338 		/* If no value was specified yield null */
47339 		ZVAL_NULL(&generator->value);
47340 	}
47341 
47342 	/* Set the new yielded key */
47343 	if (IS_CV != IS_UNUSED) {
47344 
47345 		zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
47346 
47347 		/* Consts, temporary variables and references need copying */
47348 		if (IS_CV == IS_CONST) {
47349 			ZVAL_COPY_VALUE(&generator->key, key);
47350 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
47351 				Z_ADDREF(generator->key);
47352 			}
47353 		} else if (IS_CV == IS_TMP_VAR) {
47354 			ZVAL_COPY_VALUE(&generator->key, key);
47355 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
47356 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
47357 
47358 		} else {
47359 			ZVAL_COPY_VALUE(&generator->key, key);
47360 			if (IS_CV == IS_CV) {
47361 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
47362 			}
47363 		}
47364 
47365 		if (Z_TYPE(generator->key) == IS_LONG
47366 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
47367 		) {
47368 			generator->largest_used_integer_key = Z_LVAL(generator->key);
47369 		}
47370 	} else {
47371 		/* If no key was specified we use auto-increment keys */
47372 		generator->largest_used_integer_key++;
47373 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
47374 	}
47375 
47376 	if (RETURN_VALUE_USED(opline)) {
47377 		/* If the return value of yield is used set the send
47378 		 * target and initialize it to NULL */
47379 		generator->send_target = EX_VAR(opline->result.var);
47380 		ZVAL_NULL(generator->send_target);
47381 	} else {
47382 		generator->send_target = NULL;
47383 	}
47384 
47385 	/* We increment to the next op, so we are at the correct position when the
47386 	 * generator is resumed. */
47387 	ZEND_VM_INC_OPCODE();
47388 
47389 	/* The GOTO VM uses a local opline variable. We need to set the opline
47390 	 * variable in execute_data so we don't resume at an old position. */
47391 	SAVE_OPLINE();
47392 
47393 	ZEND_VM_RETURN();
47394 }
47395 
47396 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47397 {
47398 	USE_OPLINE
47399 
47400 	zval *container, *dim, *value;
47401 	zend_long offset;
47402 
47403 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47404 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
47405 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47406 fetch_dim_r_index_array:
47407 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
47408 			offset = Z_LVAL_P(dim);
47409 		} else {
47410 			offset = zval_get_long(dim);
47411 		}
47412 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
47413 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
47414 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47415 			SAVE_OPLINE();
47416 
47417 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47418 		} else {
47419 			ZEND_VM_NEXT_OPCODE();
47420 		}
47421 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
47422 		container = Z_REFVAL_P(container);
47423 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47424 			goto fetch_dim_r_index_array;
47425 		} else {
47426 			goto fetch_dim_r_index_slow;
47427 		}
47428 	} else {
47429 fetch_dim_r_index_slow:
47430 		SAVE_OPLINE();
47431 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
47432 
47433 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47434 	}
47435 
47436 fetch_dim_r_index_undef:
47437 	ZVAL_NULL(EX_VAR(opline->result.var));
47438 	SAVE_OPLINE();
47439 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
47440 
47441 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47442 }
47443 
47444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47445 {
47446 	USE_OPLINE
47447 	zend_free_op free_op2;
47448 	zval *op1, *op2, *result;
47449 
47450 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47451 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47452 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47453 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47454 			result = EX_VAR(opline->result.var);
47455 			fast_long_add_function(result, op1, op2);
47456 			ZEND_VM_NEXT_OPCODE();
47457 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47458 			result = EX_VAR(opline->result.var);
47459 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
47460 			ZEND_VM_NEXT_OPCODE();
47461 		}
47462 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
47463 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47464 			result = EX_VAR(opline->result.var);
47465 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
47466 			ZEND_VM_NEXT_OPCODE();
47467 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47468 			result = EX_VAR(opline->result.var);
47469 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
47470 			ZEND_VM_NEXT_OPCODE();
47471 		}
47472 	}
47473 
47474 	SAVE_OPLINE();
47475 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47476 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47477 	}
47478 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47479 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47480 	}
47481 	add_function(EX_VAR(opline->result.var), op1, op2);
47482 
47483 	zval_ptr_dtor_nogc(free_op2);
47484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47485 }
47486 
47487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47488 {
47489 	USE_OPLINE
47490 	zend_free_op free_op2;
47491 	zval *op1, *op2, *result;
47492 
47493 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47494 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47495 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47496 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47497 			result = EX_VAR(opline->result.var);
47498 			fast_long_sub_function(result, op1, op2);
47499 			ZEND_VM_NEXT_OPCODE();
47500 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47501 			result = EX_VAR(opline->result.var);
47502 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
47503 			ZEND_VM_NEXT_OPCODE();
47504 		}
47505 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
47506 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47507 			result = EX_VAR(opline->result.var);
47508 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
47509 			ZEND_VM_NEXT_OPCODE();
47510 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47511 			result = EX_VAR(opline->result.var);
47512 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
47513 			ZEND_VM_NEXT_OPCODE();
47514 		}
47515 	}
47516 
47517 	SAVE_OPLINE();
47518 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47519 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47520 	}
47521 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47522 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47523 	}
47524 	sub_function(EX_VAR(opline->result.var), op1, op2);
47525 
47526 	zval_ptr_dtor_nogc(free_op2);
47527 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47528 }
47529 
47530 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47531 {
47532 	USE_OPLINE
47533 	zend_free_op free_op2;
47534 	zval *op1, *op2, *result;
47535 
47536 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47537 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47538 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47539 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47540 			zend_long overflow;
47541 
47542 			result = EX_VAR(opline->result.var);
47543 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
47544 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
47545 			ZEND_VM_NEXT_OPCODE();
47546 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47547 			result = EX_VAR(opline->result.var);
47548 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
47549 			ZEND_VM_NEXT_OPCODE();
47550 		}
47551 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
47552 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47553 			result = EX_VAR(opline->result.var);
47554 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
47555 			ZEND_VM_NEXT_OPCODE();
47556 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47557 			result = EX_VAR(opline->result.var);
47558 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
47559 			ZEND_VM_NEXT_OPCODE();
47560 		}
47561 	}
47562 
47563 	SAVE_OPLINE();
47564 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47565 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47566 	}
47567 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47568 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47569 	}
47570 	mul_function(EX_VAR(opline->result.var), op1, op2);
47571 
47572 	zval_ptr_dtor_nogc(free_op2);
47573 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47574 }
47575 
47576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47577 {
47578 	USE_OPLINE
47579 	zend_free_op free_op2;
47580 	zval *op1, *op2;
47581 
47582 	SAVE_OPLINE();
47583 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
47584 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47585 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
47586 
47587 	zval_ptr_dtor_nogc(free_op2);
47588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47589 }
47590 
47591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47592 {
47593 	USE_OPLINE
47594 	zend_free_op free_op2;
47595 	zval *op1, *op2, *result;
47596 
47597 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47598 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47599 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47600 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47601 			result = EX_VAR(opline->result.var);
47602 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
47603 				SAVE_OPLINE();
47604 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
47605 				HANDLE_EXCEPTION();
47606 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
47607 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
47608 				ZVAL_LONG(result, 0);
47609 			} else {
47610 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
47611 			}
47612 			ZEND_VM_NEXT_OPCODE();
47613 		}
47614 	}
47615 
47616 	SAVE_OPLINE();
47617 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47618 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47619 	}
47620 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47621 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47622 	}
47623 	mod_function(EX_VAR(opline->result.var), op1, op2);
47624 
47625 	zval_ptr_dtor_nogc(free_op2);
47626 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47627 }
47628 
47629 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47630 {
47631 	USE_OPLINE
47632 	zend_free_op free_op2;
47633 	zval *op1, *op2;
47634 
47635 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47636 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47637 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
47638 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
47639 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
47640 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
47641 		ZEND_VM_NEXT_OPCODE();
47642 	}
47643 
47644 	SAVE_OPLINE();
47645 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47646 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47647 	}
47648 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47649 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47650 	}
47651 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
47652 
47653 	zval_ptr_dtor_nogc(free_op2);
47654 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47655 }
47656 
47657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47658 {
47659 	USE_OPLINE
47660 	zend_free_op free_op2;
47661 	zval *op1, *op2;
47662 
47663 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47664 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47665 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
47666 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
47667 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
47668 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
47669 		ZEND_VM_NEXT_OPCODE();
47670 	}
47671 
47672 	SAVE_OPLINE();
47673 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47674 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47675 	}
47676 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47677 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47678 	}
47679 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
47680 
47681 	zval_ptr_dtor_nogc(free_op2);
47682 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47683 }
47684 
47685 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47686 {
47687 	USE_OPLINE
47688 	zend_free_op free_op2;
47689 	zval *op1, *op2;
47690 
47691 	SAVE_OPLINE();
47692 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
47693 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47694 	pow_function(EX_VAR(opline->result.var), op1, op2);
47695 
47696 	zval_ptr_dtor_nogc(free_op2);
47697 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47698 }
47699 
47700 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47701 {
47702 	USE_OPLINE
47703 	zend_free_op free_op2;
47704 	zval *op1, *op2;
47705 
47706 	SAVE_OPLINE();
47707 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47708 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47709 
47710 	do {
47711 		if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
47712 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
47713 			zend_string *op1_str = Z_STR_P(op1);
47714 			zend_string *op2_str = Z_STR_P(op2);
47715 			zend_string *str;
47716 
47717 			if (IS_CV != IS_CONST) {
47718 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
47719 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
47720 
47721 					break;
47722 				}
47723 			}
47724 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47725 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
47726 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
47727 
47728 					break;
47729 				}
47730 			}
47731 			if (IS_CV != IS_CONST && IS_CV != IS_CV &&
47732 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
47733 			    size_t len = ZSTR_LEN(op1_str);
47734 
47735 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
47736 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47737 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47738 				break;
47739 			} else {
47740 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
47741 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
47742 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47743 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47744 			}
47745 		} else {
47746 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47747 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47748 			}
47749 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
47750 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47751 			}
47752 			concat_function(EX_VAR(opline->result.var), op1, op2);
47753 		}
47754 
47755 	} while (0);
47756 	zval_ptr_dtor_nogc(free_op2);
47757 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47758 }
47759 
47760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47761 {
47762 	USE_OPLINE
47763 	zend_free_op free_op2;
47764 	zval *op1, *op2, *result;
47765 
47766 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47767 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47768 	do {
47769 		int result;
47770 
47771 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47772 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47773 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
47774 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47775 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
47776 			} else {
47777 				break;
47778 			}
47779 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47780 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47781 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
47782 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47783 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
47784 			} else {
47785 				break;
47786 			}
47787 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47788 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47789 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
47790 					result = 1;
47791 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
47792 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
47793 						result = 0;
47794 					} else {
47795 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
47796 					}
47797 				} else {
47798 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
47799 				}
47800 
47801 				zval_ptr_dtor_nogc(free_op2);
47802 			} else {
47803 				break;
47804 			}
47805 		} else {
47806 			break;
47807 		}
47808 		ZEND_VM_SMART_BRANCH(result, 0);
47809 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
47810 		ZEND_VM_NEXT_OPCODE();
47811 	} while (0);
47812 
47813 	SAVE_OPLINE();
47814 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47815 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47816 	}
47817 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
47818 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47819 	}
47820 	result = EX_VAR(opline->result.var);
47821 	compare_function(result, op1, op2);
47822 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
47823 
47824 	zval_ptr_dtor_nogc(free_op2);
47825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47826 }
47827 
47828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47829 {
47830 	USE_OPLINE
47831 	zend_free_op free_op2;
47832 	zval *op1, *op2, *result;
47833 
47834 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47835 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47836 	do {
47837 		int result;
47838 
47839 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47840 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47841 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
47842 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47843 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
47844 			} else {
47845 				break;
47846 			}
47847 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47848 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47849 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
47850 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47851 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
47852 			} else {
47853 				break;
47854 			}
47855 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47856 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47857 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
47858 					result = 0;
47859 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
47860 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
47861 						result = 1;
47862 					} else {
47863 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
47864 					}
47865 				} else {
47866 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
47867 				}
47868 
47869 				zval_ptr_dtor_nogc(free_op2);
47870 			} else {
47871 				break;
47872 			}
47873 		} else {
47874 			break;
47875 		}
47876 		ZEND_VM_SMART_BRANCH(result, 0);
47877 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
47878 		ZEND_VM_NEXT_OPCODE();
47879 	} while (0);
47880 
47881 	SAVE_OPLINE();
47882 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47883 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47884 	}
47885 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
47886 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47887 	}
47888 	result = EX_VAR(opline->result.var);
47889 	compare_function(result, op1, op2);
47890 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
47891 
47892 	zval_ptr_dtor_nogc(free_op2);
47893 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47894 }
47895 
47896 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47897 {
47898 	USE_OPLINE
47899 	zend_free_op free_op2;
47900 	zval *op1, *op2, *result;
47901 
47902 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47903 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47904 	do {
47905 		int result;
47906 
47907 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47908 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47909 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
47910 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47911 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
47912 			} else {
47913 				break;
47914 			}
47915 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
47916 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47917 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
47918 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47919 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
47920 			} else {
47921 				break;
47922 			}
47923 		} else {
47924 			break;
47925 		}
47926 		ZEND_VM_SMART_BRANCH(result, 0);
47927 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
47928 		ZEND_VM_NEXT_OPCODE();
47929 	} while (0);
47930 
47931 	SAVE_OPLINE();
47932 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47933 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47934 	}
47935 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47936 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47937 	}
47938 	result = EX_VAR(opline->result.var);
47939 	compare_function(result, op1, op2);
47940 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
47941 
47942 	zval_ptr_dtor_nogc(free_op2);
47943 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47944 }
47945 
47946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47947 {
47948 	USE_OPLINE
47949 	zend_free_op free_op2;
47950 	zval *op1, *op2, *result;
47951 
47952 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
47953 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
47954 	do {
47955 		int result;
47956 
47957 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
47958 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47959 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
47960 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47961 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
47962 			} else {
47963 				break;
47964 			}
47965 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
47966 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
47967 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
47968 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
47969 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
47970 			} else {
47971 				break;
47972 			}
47973 		} else {
47974 			break;
47975 		}
47976 		ZEND_VM_SMART_BRANCH(result, 0);
47977 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
47978 		ZEND_VM_NEXT_OPCODE();
47979 	} while (0);
47980 
47981 	SAVE_OPLINE();
47982 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
47983 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
47984 	}
47985 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
47986 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
47987 	}
47988 	result = EX_VAR(opline->result.var);
47989 	compare_function(result, op1, op2);
47990 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
47991 
47992 	zval_ptr_dtor_nogc(free_op2);
47993 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47994 }
47995 
47996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47997 {
47998 	USE_OPLINE
47999 	zend_free_op free_op2;
48000 	zval *op1, *op2;
48001 
48002 	SAVE_OPLINE();
48003 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
48004 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48005 	compare_function(EX_VAR(opline->result.var), op1, op2);
48006 
48007 	zval_ptr_dtor_nogc(free_op2);
48008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48009 }
48010 
48011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48012 {
48013 	USE_OPLINE
48014 	zend_free_op free_op2;
48015 	zval *op1, *op2;
48016 
48017 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
48018 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48019 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
48020 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
48021 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
48022 		ZEND_VM_NEXT_OPCODE();
48023 	}
48024 
48025 	SAVE_OPLINE();
48026 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
48027 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
48028 	}
48029 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
48030 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
48031 	}
48032 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
48033 
48034 	zval_ptr_dtor_nogc(free_op2);
48035 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48036 }
48037 
48038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48039 {
48040 	USE_OPLINE
48041 	zend_free_op free_op2;
48042 	zval *op1, *op2;
48043 
48044 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
48045 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48046 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
48047 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
48048 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
48049 		ZEND_VM_NEXT_OPCODE();
48050 	}
48051 
48052 	SAVE_OPLINE();
48053 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
48054 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
48055 	}
48056 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
48057 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
48058 	}
48059 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
48060 
48061 	zval_ptr_dtor_nogc(free_op2);
48062 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48063 }
48064 
48065 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48066 {
48067 	USE_OPLINE
48068 	zend_free_op free_op2;
48069 	zval *op1, *op2;
48070 
48071 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
48072 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48073 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
48074 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
48075 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
48076 		ZEND_VM_NEXT_OPCODE();
48077 	}
48078 
48079 	SAVE_OPLINE();
48080 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
48081 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
48082 	}
48083 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
48084 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
48085 	}
48086 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
48087 
48088 	zval_ptr_dtor_nogc(free_op2);
48089 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48090 }
48091 
48092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48093 {
48094 	USE_OPLINE
48095 	zend_free_op free_op2;
48096 	zval *op1, *op2;
48097 
48098 	SAVE_OPLINE();
48099 	op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
48100 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48101 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
48102 
48103 	zval_ptr_dtor_nogc(free_op2);
48104 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48105 }
48106 
48107 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)
48108 {
48109 	USE_OPLINE
48110 	zend_free_op free_op2, free_op_data1;
48111 	zval *object;
48112 	zval *property;
48113 	zval *value;
48114 	zval *zptr;
48115 
48116 	SAVE_OPLINE();
48117 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
48118 
48119 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48120 		zend_throw_error(NULL, "Using $this when not in object context");
48121 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
48122 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48123 		HANDLE_EXCEPTION();
48124 	}
48125 
48126 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48127 
48128 	do {
48129 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
48130 
48131 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48132 			ZVAL_DEREF(object);
48133 			if (UNEXPECTED(!make_real_object(object))) {
48134 				zend_error(E_WARNING, "Attempt to assign property of non-object");
48135 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48136 					ZVAL_NULL(EX_VAR(opline->result.var));
48137 				}
48138 				break;
48139 			}
48140 		}
48141 
48142 		/* here we are sure we are dealing with an object */
48143 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
48144 			&& 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)) {
48145 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
48146 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48147 					ZVAL_NULL(EX_VAR(opline->result.var));
48148 				}
48149 			} else {
48150 				ZVAL_DEREF(zptr);
48151 				SEPARATE_ZVAL_NOREF(zptr);
48152 
48153 				binary_op(zptr, zptr, value);
48154 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48155 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
48156 				}
48157 			}
48158 		} else {
48159 			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));
48160 		}
48161 	} while (0);
48162 
48163 	FREE_OP(free_op_data1);
48164 	zval_ptr_dtor_nogc(free_op2);
48165 
48166 	/* assign_obj has two opcodes! */
48167 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48168 }
48169 
48170 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)
48171 {
48172 	USE_OPLINE
48173 	zend_free_op free_op2, free_op_data1;
48174 	zval *var_ptr;
48175 	zval *value, *container, *dim;
48176 
48177 	SAVE_OPLINE();
48178 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
48179 
48180 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48181 assign_dim_op_array:
48182 		SEPARATE_ARRAY(container);
48183 assign_dim_op_new_array:
48184 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
48185 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
48186 			if (UNEXPECTED(!var_ptr)) {
48187 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
48188 				goto assign_dim_op_ret_null;
48189 			}
48190 		} else {
48191 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48192 
48193 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
48194 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
48195 			} else {
48196 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
48197 			}
48198 			if (UNEXPECTED(!var_ptr)) {
48199 				goto assign_dim_op_ret_null;
48200 			}
48201 			ZVAL_DEREF(var_ptr);
48202 			SEPARATE_ZVAL_NOREF(var_ptr);
48203 		}
48204 
48205 		value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
48206 
48207 		binary_op(var_ptr, var_ptr, value);
48208 
48209 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48210 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48211 		}
48212 	} else {
48213 		if (EXPECTED(Z_ISREF_P(container))) {
48214 			container = Z_REFVAL_P(container);
48215 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48216 				goto assign_dim_op_array;
48217 			}
48218 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48219 			container = GET_OP1_UNDEF_CV(container, BP_VAR_RW);
48220 assign_dim_op_convert_to_array:
48221 			ZVAL_NEW_ARR(container);
48222 			zend_hash_init(Z_ARRVAL_P(container), 8, NULL, ZVAL_PTR_DTOR, 0);
48223 			goto assign_dim_op_new_array;
48224 		}
48225 
48226 		dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48227 
48228 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
48229 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
48230 			zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
48231 		} else {
48232 			if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
48233 				if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
48234 					zend_throw_error(NULL, "[] operator not supported for strings");
48235 				} else {
48236 					zend_check_string_offset(dim, BP_VAR_RW);
48237 					if (EXPECTED(EG(exception) == NULL)) {
48238 						zend_wrong_string_offset();
48239 					}
48240 				}
48241 			} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
48242 				goto assign_dim_op_convert_to_array;
48243 			} else {
48244 				if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
48245 					zend_error(E_WARNING, "Cannot use a scalar value as an array");
48246 				}
48247 assign_dim_op_ret_null:
48248 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48249 					ZVAL_NULL(EX_VAR(opline->result.var));
48250 				}
48251 			}
48252 			value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
48253 		}
48254 	}
48255 
48256 	zval_ptr_dtor_nogc(free_op2);
48257 	FREE_OP(free_op_data1);
48258 
48259 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48260 }
48261 
48262 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)
48263 {
48264 	USE_OPLINE
48265 	zend_free_op free_op2;
48266 	zval *var_ptr;
48267 	zval *value;
48268 
48269 	SAVE_OPLINE();
48270 	value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48271 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
48272 
48273 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
48274 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48275 			ZVAL_NULL(EX_VAR(opline->result.var));
48276 		}
48277 	} else {
48278 		ZVAL_DEREF(var_ptr);
48279 		SEPARATE_ZVAL_NOREF(var_ptr);
48280 
48281 		binary_op(var_ptr, var_ptr, value);
48282 
48283 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48284 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48285 		}
48286 	}
48287 
48288 	zval_ptr_dtor_nogc(free_op2);
48289 
48290 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48291 }
48292 
48293 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48294 {
48295 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48296 	USE_OPLINE
48297 
48298 # if 0 || (IS_CV != IS_UNUSED)
48299 	if (EXPECTED(1)) {
48300 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48301 	}
48302 	if (EXPECTED(0)) {
48303 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48304 	}
48305 # endif
48306 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48307 #else
48308 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48309 #endif
48310 }
48311 
48312 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48313 {
48314 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48315 	USE_OPLINE
48316 
48317 # if 0 || (IS_CV != IS_UNUSED)
48318 	if (EXPECTED(0)) {
48319 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48320 	}
48321 	if (EXPECTED(1)) {
48322 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48323 	}
48324 # endif
48325 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48326 #else
48327 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48328 #endif
48329 }
48330 
48331 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48332 {
48333 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48334 	USE_OPLINE
48335 
48336 # if 0 || (IS_CV != IS_UNUSED)
48337 	if (EXPECTED(0)) {
48338 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48339 	}
48340 	if (EXPECTED(0)) {
48341 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48342 	}
48343 # endif
48344 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48345 #else
48346 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48347 #endif
48348 }
48349 
48350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48351 {
48352 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48353 	USE_OPLINE
48354 
48355 # if 0 || (IS_CV != IS_UNUSED)
48356 	if (EXPECTED(1)) {
48357 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48358 	}
48359 	if (EXPECTED(0)) {
48360 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48361 	}
48362 # endif
48363 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48364 #else
48365 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48366 #endif
48367 }
48368 
48369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48370 {
48371 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48372 	USE_OPLINE
48373 
48374 # if 0 || (IS_CV != IS_UNUSED)
48375 	if (EXPECTED(0)) {
48376 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48377 	}
48378 	if (EXPECTED(1)) {
48379 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48380 	}
48381 # endif
48382 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48383 #else
48384 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48385 #endif
48386 }
48387 
48388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48389 {
48390 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48391 	USE_OPLINE
48392 
48393 # if 0 || (IS_CV != IS_UNUSED)
48394 	if (EXPECTED(0)) {
48395 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48396 	}
48397 	if (EXPECTED(0)) {
48398 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48399 	}
48400 # endif
48401 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48402 #else
48403 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48404 #endif
48405 }
48406 
48407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48408 {
48409 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48410 	USE_OPLINE
48411 
48412 # if 0 || (IS_CV != IS_UNUSED)
48413 	if (EXPECTED(1)) {
48414 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48415 	}
48416 	if (EXPECTED(0)) {
48417 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48418 	}
48419 # endif
48420 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48421 #else
48422 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48423 #endif
48424 }
48425 
48426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48427 {
48428 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48429 	USE_OPLINE
48430 
48431 # if 0 || (IS_CV != IS_UNUSED)
48432 	if (EXPECTED(0)) {
48433 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48434 	}
48435 	if (EXPECTED(1)) {
48436 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48437 	}
48438 # endif
48439 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48440 #else
48441 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48442 #endif
48443 }
48444 
48445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48446 {
48447 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48448 	USE_OPLINE
48449 
48450 # if 0 || (IS_CV != IS_UNUSED)
48451 	if (EXPECTED(0)) {
48452 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48453 	}
48454 	if (EXPECTED(0)) {
48455 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48456 	}
48457 # endif
48458 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48459 #else
48460 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48461 #endif
48462 }
48463 
48464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48465 {
48466 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48467 	USE_OPLINE
48468 
48469 # if 0 || (IS_CV != IS_UNUSED)
48470 	if (EXPECTED(1)) {
48471 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48472 	}
48473 	if (EXPECTED(0)) {
48474 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48475 	}
48476 # endif
48477 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48478 #else
48479 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48480 #endif
48481 }
48482 
48483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48484 {
48485 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48486 	USE_OPLINE
48487 
48488 # if 0 || (IS_CV != IS_UNUSED)
48489 	if (EXPECTED(0)) {
48490 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48491 	}
48492 	if (EXPECTED(1)) {
48493 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48494 	}
48495 # endif
48496 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48497 #else
48498 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48499 #endif
48500 }
48501 
48502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48503 {
48504 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48505 	USE_OPLINE
48506 
48507 # if 0 || (IS_CV != IS_UNUSED)
48508 	if (EXPECTED(0)) {
48509 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48510 	}
48511 	if (EXPECTED(0)) {
48512 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48513 	}
48514 # endif
48515 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48516 #else
48517 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48518 #endif
48519 }
48520 
48521 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48522 {
48523 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48524 	USE_OPLINE
48525 
48526 # if 0 || (IS_CV != IS_UNUSED)
48527 	if (EXPECTED(1)) {
48528 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48529 	}
48530 	if (EXPECTED(0)) {
48531 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48532 	}
48533 # endif
48534 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48535 #else
48536 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48537 #endif
48538 }
48539 
48540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48541 {
48542 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48543 	USE_OPLINE
48544 
48545 # if 0 || (IS_CV != IS_UNUSED)
48546 	if (EXPECTED(0)) {
48547 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48548 	}
48549 	if (EXPECTED(1)) {
48550 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48551 	}
48552 # endif
48553 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48554 #else
48555 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48556 #endif
48557 }
48558 
48559 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48560 {
48561 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48562 	USE_OPLINE
48563 
48564 # if 0 || (IS_CV != IS_UNUSED)
48565 	if (EXPECTED(0)) {
48566 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48567 	}
48568 	if (EXPECTED(0)) {
48569 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48570 	}
48571 # endif
48572 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48573 #else
48574 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48575 #endif
48576 }
48577 
48578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48579 {
48580 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48581 	USE_OPLINE
48582 
48583 # if 0 || (IS_CV != IS_UNUSED)
48584 	if (EXPECTED(1)) {
48585 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48586 	}
48587 	if (EXPECTED(0)) {
48588 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48589 	}
48590 # endif
48591 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48592 #else
48593 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48594 #endif
48595 }
48596 
48597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48598 {
48599 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48600 	USE_OPLINE
48601 
48602 # if 0 || (IS_CV != IS_UNUSED)
48603 	if (EXPECTED(0)) {
48604 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48605 	}
48606 	if (EXPECTED(1)) {
48607 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48608 	}
48609 # endif
48610 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48611 #else
48612 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48613 #endif
48614 }
48615 
48616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48617 {
48618 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48619 	USE_OPLINE
48620 
48621 # if 0 || (IS_CV != IS_UNUSED)
48622 	if (EXPECTED(0)) {
48623 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48624 	}
48625 	if (EXPECTED(0)) {
48626 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48627 	}
48628 # endif
48629 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48630 #else
48631 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48632 #endif
48633 }
48634 
48635 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48636 {
48637 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48638 	USE_OPLINE
48639 
48640 # if 0 || (IS_CV != IS_UNUSED)
48641 	if (EXPECTED(1)) {
48642 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48643 	}
48644 	if (EXPECTED(0)) {
48645 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48646 	}
48647 # endif
48648 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48649 #else
48650 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48651 #endif
48652 }
48653 
48654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48655 {
48656 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48657 	USE_OPLINE
48658 
48659 # if 0 || (IS_CV != IS_UNUSED)
48660 	if (EXPECTED(0)) {
48661 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48662 	}
48663 	if (EXPECTED(1)) {
48664 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48665 	}
48666 # endif
48667 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48668 #else
48669 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48670 #endif
48671 }
48672 
48673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48674 {
48675 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48676 	USE_OPLINE
48677 
48678 # if 0 || (IS_CV != IS_UNUSED)
48679 	if (EXPECTED(0)) {
48680 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48681 	}
48682 	if (EXPECTED(0)) {
48683 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48684 	}
48685 # endif
48686 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48687 #else
48688 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48689 #endif
48690 }
48691 
48692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48693 {
48694 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48695 	USE_OPLINE
48696 
48697 # if 0 || (IS_CV != IS_UNUSED)
48698 	if (EXPECTED(1)) {
48699 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48700 	}
48701 	if (EXPECTED(0)) {
48702 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48703 	}
48704 # endif
48705 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48706 #else
48707 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48708 #endif
48709 }
48710 
48711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48712 {
48713 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48714 	USE_OPLINE
48715 
48716 # if 0 || (IS_CV != IS_UNUSED)
48717 	if (EXPECTED(0)) {
48718 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48719 	}
48720 	if (EXPECTED(1)) {
48721 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48722 	}
48723 # endif
48724 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48725 #else
48726 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48727 #endif
48728 }
48729 
48730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48731 {
48732 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48733 	USE_OPLINE
48734 
48735 # if 0 || (IS_CV != IS_UNUSED)
48736 	if (EXPECTED(0)) {
48737 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48738 	}
48739 	if (EXPECTED(0)) {
48740 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48741 	}
48742 # endif
48743 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48744 #else
48745 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48746 #endif
48747 }
48748 
48749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48750 {
48751 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48752 	USE_OPLINE
48753 
48754 # if 0 || (IS_CV != IS_UNUSED)
48755 	if (EXPECTED(1)) {
48756 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48757 	}
48758 	if (EXPECTED(0)) {
48759 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48760 	}
48761 # endif
48762 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48763 #else
48764 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48765 #endif
48766 }
48767 
48768 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48769 {
48770 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48771 	USE_OPLINE
48772 
48773 # if 0 || (IS_CV != IS_UNUSED)
48774 	if (EXPECTED(0)) {
48775 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48776 	}
48777 	if (EXPECTED(1)) {
48778 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48779 	}
48780 # endif
48781 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48782 #else
48783 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48784 #endif
48785 }
48786 
48787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48788 {
48789 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48790 	USE_OPLINE
48791 
48792 # if 0 || (IS_CV != IS_UNUSED)
48793 	if (EXPECTED(0)) {
48794 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48795 	}
48796 	if (EXPECTED(0)) {
48797 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48798 	}
48799 # endif
48800 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48801 #else
48802 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48803 #endif
48804 }
48805 
48806 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48807 {
48808 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48809 	USE_OPLINE
48810 
48811 # if 0 || (IS_CV != IS_UNUSED)
48812 	if (EXPECTED(1)) {
48813 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48814 	}
48815 	if (EXPECTED(0)) {
48816 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48817 	}
48818 # endif
48819 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48820 #else
48821 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48822 #endif
48823 }
48824 
48825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48826 {
48827 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48828 	USE_OPLINE
48829 
48830 # if 0 || (IS_CV != IS_UNUSED)
48831 	if (EXPECTED(0)) {
48832 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48833 	}
48834 	if (EXPECTED(1)) {
48835 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48836 	}
48837 # endif
48838 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48839 #else
48840 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48841 #endif
48842 }
48843 
48844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48845 {
48846 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48847 	USE_OPLINE
48848 
48849 # if 0 || (IS_CV != IS_UNUSED)
48850 	if (EXPECTED(0)) {
48851 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48852 	}
48853 	if (EXPECTED(0)) {
48854 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48855 	}
48856 # endif
48857 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48858 #else
48859 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48860 #endif
48861 }
48862 
48863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48864 {
48865 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48866 	USE_OPLINE
48867 
48868 # if 0 || (IS_CV != IS_UNUSED)
48869 	if (EXPECTED(1)) {
48870 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48871 	}
48872 	if (EXPECTED(0)) {
48873 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48874 	}
48875 # endif
48876 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48877 #else
48878 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48879 #endif
48880 }
48881 
48882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48883 {
48884 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48885 	USE_OPLINE
48886 
48887 # if 0 || (IS_CV != IS_UNUSED)
48888 	if (EXPECTED(0)) {
48889 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48890 	}
48891 	if (EXPECTED(1)) {
48892 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48893 	}
48894 # endif
48895 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48896 #else
48897 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48898 #endif
48899 }
48900 
48901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48902 {
48903 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48904 	USE_OPLINE
48905 
48906 # if 0 || (IS_CV != IS_UNUSED)
48907 	if (EXPECTED(0)) {
48908 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48909 	}
48910 	if (EXPECTED(0)) {
48911 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48912 	}
48913 # endif
48914 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48915 #else
48916 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48917 #endif
48918 }
48919 
48920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48921 {
48922 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48923 	USE_OPLINE
48924 
48925 # if 0 || (IS_CV != IS_UNUSED)
48926 	if (EXPECTED(1)) {
48927 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48928 	}
48929 	if (EXPECTED(0)) {
48930 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48931 	}
48932 # endif
48933 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48934 #else
48935 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48936 #endif
48937 }
48938 
48939 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48940 {
48941 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48942 	USE_OPLINE
48943 
48944 # if 0 || (IS_CV != IS_UNUSED)
48945 	if (EXPECTED(0)) {
48946 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48947 	}
48948 	if (EXPECTED(1)) {
48949 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48950 	}
48951 # endif
48952 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48953 #else
48954 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48955 #endif
48956 }
48957 
48958 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48959 {
48960 #if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
48961 	USE_OPLINE
48962 
48963 # if 0 || (IS_CV != IS_UNUSED)
48964 	if (EXPECTED(0)) {
48965 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48966 	}
48967 	if (EXPECTED(0)) {
48968 		ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48969 	}
48970 # endif
48971 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48972 #else
48973 	ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48974 #endif
48975 }
48976 
48977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
48978 {
48979 	USE_OPLINE
48980 	zend_free_op free_op2;
48981 	zval *object;
48982 	zval *property;
48983 	zval *zptr;
48984 
48985 	SAVE_OPLINE();
48986 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
48987 
48988 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48989 		zend_throw_error(NULL, "Using $this when not in object context");
48990 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48991 		HANDLE_EXCEPTION();
48992 	}
48993 
48994 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
48995 
48996 	do {
48997 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48998 			ZVAL_DEREF(object);
48999 			if (UNEXPECTED(!make_real_object(object))) {
49000 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
49001 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49002 					ZVAL_NULL(EX_VAR(opline->result.var));
49003 				}
49004 				break;
49005 			}
49006 		}
49007 
49008 		/* here we are sure we are dealing with an object */
49009 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
49010 			&& 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)) {
49011 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
49012 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49013 					ZVAL_NULL(EX_VAR(opline->result.var));
49014 				}
49015 			} else {
49016 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
49017 					if (inc) {
49018 						fast_long_increment_function(zptr);
49019 					} else {
49020 						fast_long_decrement_function(zptr);
49021 					}
49022 				} else {
49023 					ZVAL_DEREF(zptr);
49024 					SEPARATE_ZVAL_NOREF(zptr);
49025 
49026 					if (inc) {
49027 						increment_function(zptr);
49028 					} else {
49029 						decrement_function(zptr);
49030 					}
49031 				}
49032 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49033 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
49034 				}
49035 			}
49036 		} else {
49037 			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));
49038 		}
49039 	} while (0);
49040 
49041 	zval_ptr_dtor_nogc(free_op2);
49042 
49043 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49044 }
49045 
49046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49047 {
49048 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49049 }
49050 
49051 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49052 {
49053 	ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49054 }
49055 
49056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
49057 {
49058 	USE_OPLINE
49059 	zend_free_op free_op2;
49060 	zval *object;
49061 	zval *property;
49062 	zval *zptr;
49063 
49064 	SAVE_OPLINE();
49065 	object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
49066 
49067 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49068 		zend_throw_error(NULL, "Using $this when not in object context");
49069 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49070 		HANDLE_EXCEPTION();
49071 	}
49072 
49073 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49074 
49075 	do {
49076 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49077 			ZVAL_DEREF(object);
49078 			if (UNEXPECTED(!make_real_object(object))) {
49079 				zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
49080 				ZVAL_NULL(EX_VAR(opline->result.var));
49081 				break;
49082 			}
49083 		}
49084 
49085 		/* here we are sure we are dealing with an object */
49086 
49087 		if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr)
49088 			&& 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)) {
49089 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
49090 				ZVAL_NULL(EX_VAR(opline->result.var));
49091 			} else {
49092 				if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) {
49093 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
49094 					if (inc) {
49095 						fast_long_increment_function(zptr);
49096 					} else {
49097 						fast_long_decrement_function(zptr);
49098 					}
49099 				} else {
49100 					ZVAL_DEREF(zptr);
49101 					ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr);
49102 					zval_opt_copy_ctor(zptr);
49103 					if (inc) {
49104 						increment_function(zptr);
49105 					} else {
49106 						decrement_function(zptr);
49107 					}
49108 				}
49109 			}
49110 		} else {
49111 			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));
49112 		}
49113 	} while (0);
49114 
49115 	zval_ptr_dtor_nogc(free_op2);
49116 
49117 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49118 }
49119 
49120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49121 {
49122 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49123 }
49124 
49125 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49126 {
49127 	ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49128 }
49129 
49130 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49131 {
49132 	USE_OPLINE
49133 	zend_free_op free_op2;
49134 	zval *container, *dim, *value, *result;
49135 
49136 	SAVE_OPLINE();
49137 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
49138 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49139 	if (IS_CV != IS_CONST) {
49140 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49141 fetch_dim_r_array:
49142 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
49143 			result = EX_VAR(opline->result.var);
49144 			ZVAL_COPY_UNREF(result, value);
49145 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
49146 			container = Z_REFVAL_P(container);
49147 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49148 				goto fetch_dim_r_array;
49149 			} else {
49150 				goto fetch_dim_r_slow;
49151 			}
49152 		} else {
49153 fetch_dim_r_slow:
49154 			result = EX_VAR(opline->result.var);
49155 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
49156 		}
49157 	} else {
49158 		result = EX_VAR(opline->result.var);
49159 		zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
49160 	}
49161 	zval_ptr_dtor_nogc(free_op2);
49162 
49163 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49164 }
49165 
49166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49167 {
49168 	USE_OPLINE
49169 	zend_free_op free_op1, free_op2;
49170 	zval *container;
49171 
49172 	SAVE_OPLINE();
49173 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49174 
49175 	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));
49176 	zval_ptr_dtor_nogc(free_op2);
49177 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49178 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49179 	}
49180 
49181 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49182 }
49183 
49184 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49185 {
49186 	USE_OPLINE
49187 	zend_free_op free_op1, free_op2;
49188 	zval *container;
49189 
49190 	SAVE_OPLINE();
49191 	container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
49192 
49193 	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));
49194 	zval_ptr_dtor_nogc(free_op2);
49195 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49196 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49197 	}
49198 
49199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49200 }
49201 
49202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49203 {
49204 	USE_OPLINE
49205 	zend_free_op free_op2;
49206 	zval *container;
49207 
49208 	SAVE_OPLINE();
49209 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
49210 	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));
49211 	zval_ptr_dtor_nogc(free_op2);
49212 
49213 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49214 }
49215 
49216 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49217 {
49218 	USE_OPLINE
49219 	zval *container;
49220 	zend_free_op free_op1, free_op2;
49221 
49222 	SAVE_OPLINE();
49223 
49224 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
49225         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49226             zend_throw_error(NULL, "Cannot use temporary expression in write context");
49227 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49228 
49229 			HANDLE_EXCEPTION();
49230         }
49231 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49232 		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));
49233 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49234 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49235 		}
49236 		zval_ptr_dtor_nogc(free_op2);
49237 
49238 	} else {
49239 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
49240 			zend_throw_error(NULL, "Cannot use [] for reading");
49241 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49242 
49243 			HANDLE_EXCEPTION();
49244 		}
49245 		container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
49246 		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));
49247 		zval_ptr_dtor_nogc(free_op2);
49248 
49249 	}
49250 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49251 }
49252 
49253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49254 {
49255 	USE_OPLINE
49256 	zend_free_op free_op1, free_op2;
49257 	zval *container;
49258 
49259 	SAVE_OPLINE();
49260 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
49261 
49262 	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));
49263 	zval_ptr_dtor_nogc(free_op2);
49264 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49265 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49266 	}
49267 
49268 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49269 }
49270 
49271 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49272 {
49273 	USE_OPLINE
49274 
49275 	zval *container;
49276 	zend_free_op free_op2;
49277 	zval *offset;
49278 
49279 	SAVE_OPLINE();
49280 	container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
49281 
49282 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49283 		zend_throw_error(NULL, "Using $this when not in object context");
49284 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49285 		HANDLE_EXCEPTION();
49286 	}
49287 
49288 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49289 
49290 	if (IS_CV == IS_CONST ||
49291 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49292 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49293 			container = Z_REFVAL_P(container);
49294 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
49295 				goto fetch_obj_r_no_object;
49296 			}
49297 		} else {
49298 			goto fetch_obj_r_no_object;
49299 		}
49300 	}
49301 
49302 	/* here we are sure we are dealing with an object */
49303 	do {
49304 		zend_object *zobj = Z_OBJ_P(container);
49305 		zval *retval;
49306 
49307 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
49308 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
49309 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
49310 
49311 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
49312 				retval = OBJ_PROP(zobj, prop_offset);
49313 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
49314 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
49315 					break;
49316 				}
49317 			} else if (EXPECTED(zobj->properties != NULL)) {
49318 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
49319 				if (EXPECTED(retval)) {
49320 					ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
49321 					break;
49322 				}
49323 			}
49324 		}
49325 
49326 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
49327 fetch_obj_r_no_object:
49328 			zend_error(E_NOTICE, "Trying to get property of non-object");
49329 			ZVAL_NULL(EX_VAR(opline->result.var));
49330 		} else {
49331 			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));
49332 
49333 			if (retval != EX_VAR(opline->result.var)) {
49334 				ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
49335 			}
49336 		}
49337 	} while (0);
49338 
49339 	zval_ptr_dtor_nogc(free_op2);
49340 
49341 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49342 }
49343 
49344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49345 {
49346 	USE_OPLINE
49347 	zend_free_op free_op1, free_op2;
49348 	zval *property;
49349 	zval *container;
49350 
49351 	SAVE_OPLINE();
49352 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49353 
49354 	container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49355 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49356 		zend_throw_error(NULL, "Using $this when not in object context");
49357 		zval_ptr_dtor_nogc(free_op2);
49358 		HANDLE_EXCEPTION();
49359 	}
49360 
49361 	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);
49362 	zval_ptr_dtor_nogc(free_op2);
49363 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49364 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49365 	}
49366 
49367 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49368 }
49369 
49370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49371 {
49372 	USE_OPLINE
49373 	zend_free_op free_op1, free_op2;
49374 	zval *property;
49375 	zval *container;
49376 
49377 	SAVE_OPLINE();
49378 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49379 	container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
49380 
49381 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49382 		zend_throw_error(NULL, "Using $this when not in object context");
49383 		zval_ptr_dtor_nogc(free_op2);
49384 		HANDLE_EXCEPTION();
49385 	}
49386 	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);
49387 	zval_ptr_dtor_nogc(free_op2);
49388 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49389 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49390 	}
49391 
49392 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49393 }
49394 
49395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49396 {
49397 	USE_OPLINE
49398 
49399 	zval *container;
49400 	zend_free_op free_op2;
49401 	zval *offset;
49402 
49403 	SAVE_OPLINE();
49404 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
49405 
49406 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49407 		zend_throw_error(NULL, "Using $this when not in object context");
49408 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49409 		HANDLE_EXCEPTION();
49410 	}
49411 
49412 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49413 
49414 	if (IS_CV == IS_CONST ||
49415 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49416 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49417 			container = Z_REFVAL_P(container);
49418 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
49419 				goto fetch_obj_is_no_object;
49420 			}
49421 		} else {
49422 			goto fetch_obj_is_no_object;
49423 		}
49424 	}
49425 
49426 	/* here we are sure we are dealing with an object */
49427 	do {
49428 		zend_object *zobj = Z_OBJ_P(container);
49429 		zval *retval;
49430 
49431 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
49432 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
49433 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
49434 
49435 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
49436 				retval = OBJ_PROP(zobj, prop_offset);
49437 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
49438 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
49439 					break;
49440 				}
49441 			} else if (EXPECTED(zobj->properties != NULL)) {
49442 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
49443 				if (EXPECTED(retval)) {
49444 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
49445 					break;
49446 				}
49447 			}
49448 		}
49449 
49450 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
49451 fetch_obj_is_no_object:
49452 			ZVAL_NULL(EX_VAR(opline->result.var));
49453 		} else {
49454 
49455 			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));
49456 
49457 			if (retval != EX_VAR(opline->result.var)) {
49458 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
49459 			}
49460 		}
49461 	} while (0);
49462 
49463 	zval_ptr_dtor_nogc(free_op2);
49464 
49465 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49466 }
49467 
49468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49469 {
49470 	USE_OPLINE
49471 	zval *container;
49472 
49473 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
49474 		/* Behave like FETCH_OBJ_W */
49475 		zend_free_op free_op1, free_op2;
49476 		zval *property;
49477 
49478 		SAVE_OPLINE();
49479 		property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49480 		container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49481 
49482 		if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49483 			zend_throw_error(NULL, "Using $this when not in object context");
49484 			zval_ptr_dtor_nogc(free_op2);
49485 			HANDLE_EXCEPTION();
49486 		}
49487 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
49488 			zend_throw_error(NULL, "Cannot use temporary expression in write context");
49489 			zval_ptr_dtor_nogc(free_op2);
49490 
49491 			HANDLE_EXCEPTION();
49492 		}
49493 		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);
49494 		zval_ptr_dtor_nogc(free_op2);
49495 		if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49496 			EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49497 		}
49498 
49499 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49500 	} else {
49501 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49502 	}
49503 }
49504 
49505 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49506 {
49507 	USE_OPLINE
49508 	zend_free_op free_op1, free_op2;
49509 	zval *container, *property;
49510 
49511 	SAVE_OPLINE();
49512 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
49513 
49514 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49515 		zend_throw_error(NULL, "Using $this when not in object context");
49516 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49517 		HANDLE_EXCEPTION();
49518 	}
49519 
49520 	property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49521 
49522 	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);
49523 	zval_ptr_dtor_nogc(free_op2);
49524 	if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
49525 		EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
49526 	}
49527 
49528 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49529 }
49530 
49531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49532 {
49533 	USE_OPLINE
49534 	zend_free_op free_op2;
49535 	zval *container;
49536 
49537 	SAVE_OPLINE();
49538 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
49539 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
49540 	zval_ptr_dtor_nogc(free_op2);
49541 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49542 }
49543 
49544 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49545 {
49546 	USE_OPLINE
49547 	zend_free_op free_op2;
49548 	zval *object, *property_name, *value, tmp;
49549 
49550 	SAVE_OPLINE();
49551 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49552 
49553 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49554 		zend_throw_error(NULL, "Using $this when not in object context");
49555 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49556 
49557 		HANDLE_EXCEPTION();
49558 	}
49559 
49560 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49561 	value = EX_CONSTANT((opline+1)->op1);
49562 
49563 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49564 		do {
49565 			if (Z_ISREF_P(object)) {
49566 				object = Z_REFVAL_P(object);
49567 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
49568 					break;
49569 				}
49570 			}
49571 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
49572 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
49573 				zend_object *obj;
49574 
49575 				zval_ptr_dtor(object);
49576 				object_init(object);
49577 				Z_ADDREF_P(object);
49578 				obj = Z_OBJ_P(object);
49579 				zend_error(E_WARNING, "Creating default object from empty value");
49580 				if (GC_REFCOUNT(obj) == 1) {
49581 					/* the enclosing container was deleted, obj is unreferenced */
49582 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49583 						ZVAL_NULL(EX_VAR(opline->result.var));
49584 					}
49585 
49586 					OBJ_RELEASE(obj);
49587 					goto exit_assign_obj;
49588 				}
49589 				Z_DELREF_P(object);
49590 			} else {
49591 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
49592 					zend_error(E_WARNING, "Attempt to assign property of non-object");
49593 				}
49594 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49595 					ZVAL_NULL(EX_VAR(opline->result.var));
49596 				}
49597 
49598 				goto exit_assign_obj;
49599 			}
49600 		} while (0);
49601 	}
49602 
49603 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
49604 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
49605 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
49606 		zend_object *zobj = Z_OBJ_P(object);
49607 		zval *property;
49608 
49609 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
49610 			property = OBJ_PROP(zobj, prop_offset);
49611 			if (Z_TYPE_P(property) != IS_UNDEF) {
49612 fast_assign_obj:
49613 				value = zend_assign_to_variable(property, value, IS_CONST);
49614 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49615 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49616 				}
49617 				goto exit_assign_obj;
49618 			}
49619 		} else {
49620 			if (EXPECTED(zobj->properties != NULL)) {
49621 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49622 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49623 						GC_REFCOUNT(zobj->properties)--;
49624 					}
49625 					zobj->properties = zend_array_dup(zobj->properties);
49626 				}
49627 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
49628 				if (property) {
49629 					goto fast_assign_obj;
49630 				}
49631 			}
49632 
49633 			if (!zobj->ce->__set) {
49634 
49635 				if (EXPECTED(zobj->properties == NULL)) {
49636 					rebuild_object_properties(zobj);
49637 				}
49638 				if (IS_CONST == IS_CONST) {
49639 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49640 						Z_ADDREF_P(value);
49641 					}
49642 				} else if (IS_CONST != IS_TMP_VAR) {
49643 					if (Z_ISREF_P(value)) {
49644 						if (IS_CONST == IS_VAR) {
49645 							zend_reference *ref = Z_REF_P(value);
49646 							if (--GC_REFCOUNT(ref) == 0) {
49647 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49648 								efree_size(ref, sizeof(zend_reference));
49649 								value = &tmp;
49650 							} else {
49651 								value = Z_REFVAL_P(value);
49652 								if (Z_REFCOUNTED_P(value)) {
49653 									Z_ADDREF_P(value);
49654 								}
49655 							}
49656 						} else {
49657 							value = Z_REFVAL_P(value);
49658 							if (Z_REFCOUNTED_P(value)) {
49659 								Z_ADDREF_P(value);
49660 							}
49661 						}
49662 					} else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
49663 						Z_ADDREF_P(value);
49664 					}
49665 				}
49666 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
49667 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49668 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49669 				}
49670 				goto exit_assign_obj;
49671 			}
49672 		}
49673 	}
49674 
49675 	if (!Z_OBJ_HT_P(object)->write_property) {
49676 		zend_error(E_WARNING, "Attempt to assign property of non-object");
49677 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49678 			ZVAL_NULL(EX_VAR(opline->result.var));
49679 		}
49680 
49681 		goto exit_assign_obj;
49682 	}
49683 
49684 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
49685 		ZVAL_DEREF(value);
49686 	}
49687 
49688 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
49689 
49690 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
49691 		ZVAL_COPY(EX_VAR(opline->result.var), value);
49692 	}
49693 
49694 exit_assign_obj:
49695 	zval_ptr_dtor_nogc(free_op2);
49696 
49697 	/* assign_obj has two opcodes! */
49698 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49699 }
49700 
49701 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49702 {
49703 	USE_OPLINE
49704 	zend_free_op free_op2, free_op_data;
49705 	zval *object, *property_name, *value, tmp;
49706 
49707 	SAVE_OPLINE();
49708 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49709 
49710 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49711 		zend_throw_error(NULL, "Using $this when not in object context");
49712 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49713 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49714 		HANDLE_EXCEPTION();
49715 	}
49716 
49717 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49718 	value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
49719 
49720 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49721 		do {
49722 			if (Z_ISREF_P(object)) {
49723 				object = Z_REFVAL_P(object);
49724 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
49725 					break;
49726 				}
49727 			}
49728 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
49729 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
49730 				zend_object *obj;
49731 
49732 				zval_ptr_dtor(object);
49733 				object_init(object);
49734 				Z_ADDREF_P(object);
49735 				obj = Z_OBJ_P(object);
49736 				zend_error(E_WARNING, "Creating default object from empty value");
49737 				if (GC_REFCOUNT(obj) == 1) {
49738 					/* the enclosing container was deleted, obj is unreferenced */
49739 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49740 						ZVAL_NULL(EX_VAR(opline->result.var));
49741 					}
49742 					zval_ptr_dtor_nogc(free_op_data);
49743 					OBJ_RELEASE(obj);
49744 					goto exit_assign_obj;
49745 				}
49746 				Z_DELREF_P(object);
49747 			} else {
49748 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
49749 					zend_error(E_WARNING, "Attempt to assign property of non-object");
49750 				}
49751 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49752 					ZVAL_NULL(EX_VAR(opline->result.var));
49753 				}
49754 				zval_ptr_dtor_nogc(free_op_data);
49755 				goto exit_assign_obj;
49756 			}
49757 		} while (0);
49758 	}
49759 
49760 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
49761 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
49762 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
49763 		zend_object *zobj = Z_OBJ_P(object);
49764 		zval *property;
49765 
49766 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
49767 			property = OBJ_PROP(zobj, prop_offset);
49768 			if (Z_TYPE_P(property) != IS_UNDEF) {
49769 fast_assign_obj:
49770 				value = zend_assign_to_variable(property, value, IS_TMP_VAR);
49771 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49772 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49773 				}
49774 				goto exit_assign_obj;
49775 			}
49776 		} else {
49777 			if (EXPECTED(zobj->properties != NULL)) {
49778 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49779 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49780 						GC_REFCOUNT(zobj->properties)--;
49781 					}
49782 					zobj->properties = zend_array_dup(zobj->properties);
49783 				}
49784 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
49785 				if (property) {
49786 					goto fast_assign_obj;
49787 				}
49788 			}
49789 
49790 			if (!zobj->ce->__set) {
49791 
49792 				if (EXPECTED(zobj->properties == NULL)) {
49793 					rebuild_object_properties(zobj);
49794 				}
49795 				if (IS_TMP_VAR == IS_CONST) {
49796 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49797 						Z_ADDREF_P(value);
49798 					}
49799 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
49800 					if (Z_ISREF_P(value)) {
49801 						if (IS_TMP_VAR == IS_VAR) {
49802 							zend_reference *ref = Z_REF_P(value);
49803 							if (--GC_REFCOUNT(ref) == 0) {
49804 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49805 								efree_size(ref, sizeof(zend_reference));
49806 								value = &tmp;
49807 							} else {
49808 								value = Z_REFVAL_P(value);
49809 								if (Z_REFCOUNTED_P(value)) {
49810 									Z_ADDREF_P(value);
49811 								}
49812 							}
49813 						} else {
49814 							value = Z_REFVAL_P(value);
49815 							if (Z_REFCOUNTED_P(value)) {
49816 								Z_ADDREF_P(value);
49817 							}
49818 						}
49819 					} else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
49820 						Z_ADDREF_P(value);
49821 					}
49822 				}
49823 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
49824 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49825 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49826 				}
49827 				goto exit_assign_obj;
49828 			}
49829 		}
49830 	}
49831 
49832 	if (!Z_OBJ_HT_P(object)->write_property) {
49833 		zend_error(E_WARNING, "Attempt to assign property of non-object");
49834 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49835 			ZVAL_NULL(EX_VAR(opline->result.var));
49836 		}
49837 		zval_ptr_dtor_nogc(free_op_data);
49838 		goto exit_assign_obj;
49839 	}
49840 
49841 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
49842 		ZVAL_DEREF(value);
49843 	}
49844 
49845 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
49846 
49847 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
49848 		ZVAL_COPY(EX_VAR(opline->result.var), value);
49849 	}
49850 	zval_ptr_dtor_nogc(free_op_data);
49851 exit_assign_obj:
49852 	zval_ptr_dtor_nogc(free_op2);
49853 
49854 	/* assign_obj has two opcodes! */
49855 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49856 }
49857 
49858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49859 {
49860 	USE_OPLINE
49861 	zend_free_op free_op2, free_op_data;
49862 	zval *object, *property_name, *value, tmp;
49863 
49864 	SAVE_OPLINE();
49865 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
49866 
49867 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49868 		zend_throw_error(NULL, "Using $this when not in object context");
49869 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
49870 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
49871 		HANDLE_EXCEPTION();
49872 	}
49873 
49874 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
49875 	value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
49876 
49877 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49878 		do {
49879 			if (Z_ISREF_P(object)) {
49880 				object = Z_REFVAL_P(object);
49881 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
49882 					break;
49883 				}
49884 			}
49885 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
49886 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
49887 				zend_object *obj;
49888 
49889 				zval_ptr_dtor(object);
49890 				object_init(object);
49891 				Z_ADDREF_P(object);
49892 				obj = Z_OBJ_P(object);
49893 				zend_error(E_WARNING, "Creating default object from empty value");
49894 				if (GC_REFCOUNT(obj) == 1) {
49895 					/* the enclosing container was deleted, obj is unreferenced */
49896 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49897 						ZVAL_NULL(EX_VAR(opline->result.var));
49898 					}
49899 					zval_ptr_dtor_nogc(free_op_data);
49900 					OBJ_RELEASE(obj);
49901 					goto exit_assign_obj;
49902 				}
49903 				Z_DELREF_P(object);
49904 			} else {
49905 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
49906 					zend_error(E_WARNING, "Attempt to assign property of non-object");
49907 				}
49908 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49909 					ZVAL_NULL(EX_VAR(opline->result.var));
49910 				}
49911 				zval_ptr_dtor_nogc(free_op_data);
49912 				goto exit_assign_obj;
49913 			}
49914 		} while (0);
49915 	}
49916 
49917 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
49918 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
49919 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
49920 		zend_object *zobj = Z_OBJ_P(object);
49921 		zval *property;
49922 
49923 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
49924 			property = OBJ_PROP(zobj, prop_offset);
49925 			if (Z_TYPE_P(property) != IS_UNDEF) {
49926 fast_assign_obj:
49927 				value = zend_assign_to_variable(property, value, IS_VAR);
49928 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49929 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49930 				}
49931 				goto exit_assign_obj;
49932 			}
49933 		} else {
49934 			if (EXPECTED(zobj->properties != NULL)) {
49935 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
49936 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
49937 						GC_REFCOUNT(zobj->properties)--;
49938 					}
49939 					zobj->properties = zend_array_dup(zobj->properties);
49940 				}
49941 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
49942 				if (property) {
49943 					goto fast_assign_obj;
49944 				}
49945 			}
49946 
49947 			if (!zobj->ce->__set) {
49948 
49949 				if (EXPECTED(zobj->properties == NULL)) {
49950 					rebuild_object_properties(zobj);
49951 				}
49952 				if (IS_VAR == IS_CONST) {
49953 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
49954 						Z_ADDREF_P(value);
49955 					}
49956 				} else if (IS_VAR != IS_TMP_VAR) {
49957 					if (Z_ISREF_P(value)) {
49958 						if (IS_VAR == IS_VAR) {
49959 							zend_reference *ref = Z_REF_P(value);
49960 							if (--GC_REFCOUNT(ref) == 0) {
49961 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
49962 								efree_size(ref, sizeof(zend_reference));
49963 								value = &tmp;
49964 							} else {
49965 								value = Z_REFVAL_P(value);
49966 								if (Z_REFCOUNTED_P(value)) {
49967 									Z_ADDREF_P(value);
49968 								}
49969 							}
49970 						} else {
49971 							value = Z_REFVAL_P(value);
49972 							if (Z_REFCOUNTED_P(value)) {
49973 								Z_ADDREF_P(value);
49974 							}
49975 						}
49976 					} else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
49977 						Z_ADDREF_P(value);
49978 					}
49979 				}
49980 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
49981 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49982 					ZVAL_COPY(EX_VAR(opline->result.var), value);
49983 				}
49984 				goto exit_assign_obj;
49985 			}
49986 		}
49987 	}
49988 
49989 	if (!Z_OBJ_HT_P(object)->write_property) {
49990 		zend_error(E_WARNING, "Attempt to assign property of non-object");
49991 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49992 			ZVAL_NULL(EX_VAR(opline->result.var));
49993 		}
49994 		zval_ptr_dtor_nogc(free_op_data);
49995 		goto exit_assign_obj;
49996 	}
49997 
49998 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
49999 		ZVAL_DEREF(value);
50000 	}
50001 
50002 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
50003 
50004 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50005 		ZVAL_COPY(EX_VAR(opline->result.var), value);
50006 	}
50007 	zval_ptr_dtor_nogc(free_op_data);
50008 exit_assign_obj:
50009 	zval_ptr_dtor_nogc(free_op2);
50010 
50011 	/* assign_obj has two opcodes! */
50012 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50013 }
50014 
50015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50016 {
50017 	USE_OPLINE
50018 	zend_free_op free_op2;
50019 	zval *object, *property_name, *value, tmp;
50020 
50021 	SAVE_OPLINE();
50022 	object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
50023 
50024 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50025 		zend_throw_error(NULL, "Using $this when not in object context");
50026 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
50027 
50028 		HANDLE_EXCEPTION();
50029 	}
50030 
50031 	property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50032 	value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
50033 
50034 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50035 		do {
50036 			if (Z_ISREF_P(object)) {
50037 				object = Z_REFVAL_P(object);
50038 				if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
50039 					break;
50040 				}
50041 			}
50042 			if (EXPECTED(Z_TYPE_P(object) <= IS_FALSE ||
50043 			    (Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0))) {
50044 				zend_object *obj;
50045 
50046 				zval_ptr_dtor(object);
50047 				object_init(object);
50048 				Z_ADDREF_P(object);
50049 				obj = Z_OBJ_P(object);
50050 				zend_error(E_WARNING, "Creating default object from empty value");
50051 				if (GC_REFCOUNT(obj) == 1) {
50052 					/* the enclosing container was deleted, obj is unreferenced */
50053 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50054 						ZVAL_NULL(EX_VAR(opline->result.var));
50055 					}
50056 
50057 					OBJ_RELEASE(obj);
50058 					goto exit_assign_obj;
50059 				}
50060 				Z_DELREF_P(object);
50061 			} else {
50062 				if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
50063 					zend_error(E_WARNING, "Attempt to assign property of non-object");
50064 				}
50065 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50066 					ZVAL_NULL(EX_VAR(opline->result.var));
50067 				}
50068 
50069 				goto exit_assign_obj;
50070 			}
50071 		} while (0);
50072 	}
50073 
50074 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
50075 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
50076 		uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
50077 		zend_object *zobj = Z_OBJ_P(object);
50078 		zval *property;
50079 
50080 		if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
50081 			property = OBJ_PROP(zobj, prop_offset);
50082 			if (Z_TYPE_P(property) != IS_UNDEF) {
50083 fast_assign_obj:
50084 				value = zend_assign_to_variable(property, value, IS_CV);
50085 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50086 					ZVAL_COPY(EX_VAR(opline->result.var), value);
50087 				}
50088 				goto exit_assign_obj;
50089 			}
50090 		} else {
50091 			if (EXPECTED(zobj->properties != NULL)) {
50092 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
50093 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
50094 						GC_REFCOUNT(zobj->properties)--;
50095 					}
50096 					zobj->properties = zend_array_dup(zobj->properties);
50097 				}
50098 				property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
50099 				if (property) {
50100 					goto fast_assign_obj;
50101 				}
50102 			}
50103 
50104 			if (!zobj->ce->__set) {
50105 
50106 				if (EXPECTED(zobj->properties == NULL)) {
50107 					rebuild_object_properties(zobj);
50108 				}
50109 				if (IS_CV == IS_CONST) {
50110 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
50111 						Z_ADDREF_P(value);
50112 					}
50113 				} else if (IS_CV != IS_TMP_VAR) {
50114 					if (Z_ISREF_P(value)) {
50115 						if (IS_CV == IS_VAR) {
50116 							zend_reference *ref = Z_REF_P(value);
50117 							if (--GC_REFCOUNT(ref) == 0) {
50118 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
50119 								efree_size(ref, sizeof(zend_reference));
50120 								value = &tmp;
50121 							} else {
50122 								value = Z_REFVAL_P(value);
50123 								if (Z_REFCOUNTED_P(value)) {
50124 									Z_ADDREF_P(value);
50125 								}
50126 							}
50127 						} else {
50128 							value = Z_REFVAL_P(value);
50129 							if (Z_REFCOUNTED_P(value)) {
50130 								Z_ADDREF_P(value);
50131 							}
50132 						}
50133 					} else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
50134 						Z_ADDREF_P(value);
50135 					}
50136 				}
50137 				zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
50138 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50139 					ZVAL_COPY(EX_VAR(opline->result.var), value);
50140 				}
50141 				goto exit_assign_obj;
50142 			}
50143 		}
50144 	}
50145 
50146 	if (!Z_OBJ_HT_P(object)->write_property) {
50147 		zend_error(E_WARNING, "Attempt to assign property of non-object");
50148 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50149 			ZVAL_NULL(EX_VAR(opline->result.var));
50150 		}
50151 
50152 		goto exit_assign_obj;
50153 	}
50154 
50155 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
50156 		ZVAL_DEREF(value);
50157 	}
50158 
50159 	Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
50160 
50161 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50162 		ZVAL_COPY(EX_VAR(opline->result.var), value);
50163 	}
50164 
50165 exit_assign_obj:
50166 	zval_ptr_dtor_nogc(free_op2);
50167 
50168 	/* assign_obj has two opcodes! */
50169 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50170 }
50171 
50172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50173 {
50174 	USE_OPLINE
50175 
50176 	zval *object_ptr;
50177 	zend_free_op free_op2;
50178 	zval *value;
50179 	zval *variable_ptr;
50180 	zval *dim;
50181 
50182 	SAVE_OPLINE();
50183 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
50184 
50185 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50186 try_assign_dim_array:
50187 		SEPARATE_ARRAY(object_ptr);
50188 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50189 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
50190 			if (UNEXPECTED(variable_ptr == NULL)) {
50191 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
50192 				goto assign_dim_error;
50193 			}
50194 		} else {
50195 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50196 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50197 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
50198 			} else {
50199 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
50200 			}
50201 			if (UNEXPECTED(variable_ptr == NULL)) {
50202 				goto assign_dim_error;
50203 			}
50204 		}
50205 		value = EX_CONSTANT((opline+1)->op1);
50206 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST);
50207 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50208 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50209 		}
50210 	} else {
50211 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50212 			object_ptr = Z_REFVAL_P(object_ptr);
50213 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50214 				goto try_assign_dim_array;
50215 			}
50216 		}
50217 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50218 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50219 			value = EX_CONSTANT((opline+1)->op1);
50220 
50221 			zend_assign_to_object_dim(object_ptr, dim, value);
50222 
50223 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50224 				ZVAL_COPY(EX_VAR(opline->result.var), value);
50225 			}
50226 
50227 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50228 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50229 				zend_throw_error(NULL, "[] operator not supported for strings");
50230 
50231 
50232 				HANDLE_EXCEPTION();
50233 			} else {
50234 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50235 				value = EX_CONSTANT((opline+1)->op1);
50236 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
50237 
50238 			}
50239 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50240 			ZVAL_NEW_ARR(object_ptr);
50241 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
50242 			goto try_assign_dim_array;
50243 		} else {
50244 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
50245 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
50246 			}
50247 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50248 assign_dim_error:
50249 
50250 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50251 				ZVAL_NULL(EX_VAR(opline->result.var));
50252 			}
50253 		}
50254 	}
50255 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
50256 		zval_ptr_dtor_nogc(free_op2);
50257 	}
50258 
50259 	/* assign_dim has two opcodes! */
50260 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50261 }
50262 
50263 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50264 {
50265 	USE_OPLINE
50266 
50267 	zval *object_ptr;
50268 	zend_free_op free_op2, free_op_data;
50269 	zval *value;
50270 	zval *variable_ptr;
50271 	zval *dim;
50272 
50273 	SAVE_OPLINE();
50274 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
50275 
50276 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50277 try_assign_dim_array:
50278 		SEPARATE_ARRAY(object_ptr);
50279 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50280 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
50281 			if (UNEXPECTED(variable_ptr == NULL)) {
50282 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
50283 				goto assign_dim_error;
50284 			}
50285 		} else {
50286 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50287 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50288 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
50289 			} else {
50290 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
50291 			}
50292 			if (UNEXPECTED(variable_ptr == NULL)) {
50293 				goto assign_dim_error;
50294 			}
50295 		}
50296 		value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
50297 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
50298 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50299 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50300 		}
50301 	} else {
50302 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50303 			object_ptr = Z_REFVAL_P(object_ptr);
50304 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50305 				goto try_assign_dim_array;
50306 			}
50307 		}
50308 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50309 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50310 			value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
50311 
50312 			zend_assign_to_object_dim(object_ptr, dim, value);
50313 
50314 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50315 				ZVAL_COPY(EX_VAR(opline->result.var), value);
50316 			}
50317 
50318 			zval_ptr_dtor_nogc(free_op_data);
50319 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50320 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50321 				zend_throw_error(NULL, "[] operator not supported for strings");
50322 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50323 
50324 				HANDLE_EXCEPTION();
50325 			} else {
50326 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50327 				value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
50328 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
50329 				zval_ptr_dtor_nogc(free_op_data);
50330 			}
50331 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50332 			ZVAL_NEW_ARR(object_ptr);
50333 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
50334 			goto try_assign_dim_array;
50335 		} else {
50336 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
50337 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
50338 			}
50339 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50340 assign_dim_error:
50341 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50342 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50343 				ZVAL_NULL(EX_VAR(opline->result.var));
50344 			}
50345 		}
50346 	}
50347 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
50348 		zval_ptr_dtor_nogc(free_op2);
50349 	}
50350 
50351 	/* assign_dim has two opcodes! */
50352 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50353 }
50354 
50355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50356 {
50357 	USE_OPLINE
50358 
50359 	zval *object_ptr;
50360 	zend_free_op free_op2, free_op_data;
50361 	zval *value;
50362 	zval *variable_ptr;
50363 	zval *dim;
50364 
50365 	SAVE_OPLINE();
50366 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
50367 
50368 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50369 try_assign_dim_array:
50370 		SEPARATE_ARRAY(object_ptr);
50371 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50372 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
50373 			if (UNEXPECTED(variable_ptr == NULL)) {
50374 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
50375 				goto assign_dim_error;
50376 			}
50377 		} else {
50378 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50379 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50380 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
50381 			} else {
50382 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
50383 			}
50384 			if (UNEXPECTED(variable_ptr == NULL)) {
50385 				goto assign_dim_error;
50386 			}
50387 		}
50388 		value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
50389 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
50390 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50391 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50392 		}
50393 	} else {
50394 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50395 			object_ptr = Z_REFVAL_P(object_ptr);
50396 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50397 				goto try_assign_dim_array;
50398 			}
50399 		}
50400 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50401 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50402 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
50403 
50404 			zend_assign_to_object_dim(object_ptr, dim, value);
50405 
50406 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50407 				ZVAL_COPY(EX_VAR(opline->result.var), value);
50408 			}
50409 
50410 			zval_ptr_dtor_nogc(free_op_data);
50411 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50412 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50413 				zend_throw_error(NULL, "[] operator not supported for strings");
50414 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50415 
50416 				HANDLE_EXCEPTION();
50417 			} else {
50418 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50419 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
50420 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
50421 				zval_ptr_dtor_nogc(free_op_data);
50422 			}
50423 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50424 			ZVAL_NEW_ARR(object_ptr);
50425 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
50426 			goto try_assign_dim_array;
50427 		} else {
50428 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
50429 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
50430 			}
50431 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50432 assign_dim_error:
50433 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
50434 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50435 				ZVAL_NULL(EX_VAR(opline->result.var));
50436 			}
50437 		}
50438 	}
50439 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
50440 		zval_ptr_dtor_nogc(free_op2);
50441 	}
50442 
50443 	/* assign_dim has two opcodes! */
50444 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50445 }
50446 
50447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50448 {
50449 	USE_OPLINE
50450 
50451 	zval *object_ptr;
50452 	zend_free_op free_op2;
50453 	zval *value;
50454 	zval *variable_ptr;
50455 	zval *dim;
50456 
50457 	SAVE_OPLINE();
50458 	object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
50459 
50460 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50461 try_assign_dim_array:
50462 		SEPARATE_ARRAY(object_ptr);
50463 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50464 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), &EG(uninitialized_zval));
50465 			if (UNEXPECTED(variable_ptr == NULL)) {
50466 				zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
50467 				goto assign_dim_error;
50468 			}
50469 		} else {
50470 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50471 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50472 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
50473 			} else {
50474 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
50475 			}
50476 			if (UNEXPECTED(variable_ptr == NULL)) {
50477 				goto assign_dim_error;
50478 			}
50479 		}
50480 		value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
50481 		value = zend_assign_to_variable(variable_ptr, value, IS_CV);
50482 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50483 			ZVAL_COPY(EX_VAR(opline->result.var), value);
50484 		}
50485 	} else {
50486 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
50487 			object_ptr = Z_REFVAL_P(object_ptr);
50488 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
50489 				goto try_assign_dim_array;
50490 			}
50491 		}
50492 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
50493 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50494 			value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
50495 
50496 			zend_assign_to_object_dim(object_ptr, dim, value);
50497 
50498 			if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
50499 				ZVAL_COPY(EX_VAR(opline->result.var), value);
50500 			}
50501 
50502 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
50503 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
50504 				zend_throw_error(NULL, "[] operator not supported for strings");
50505 
50506 
50507 				HANDLE_EXCEPTION();
50508 			} else {
50509 				dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50510 				value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
50511 				zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
50512 
50513 			}
50514 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
50515 			ZVAL_NEW_ARR(object_ptr);
50516 			zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
50517 			goto try_assign_dim_array;
50518 		} else {
50519 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
50520 				zend_error(E_WARNING, "Cannot use a scalar value as an array");
50521 			}
50522 			dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50523 assign_dim_error:
50524 
50525 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50526 				ZVAL_NULL(EX_VAR(opline->result.var));
50527 			}
50528 		}
50529 	}
50530 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
50531 		zval_ptr_dtor_nogc(free_op2);
50532 	}
50533 
50534 	/* assign_dim has two opcodes! */
50535 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50536 }
50537 
50538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50539 {
50540 	USE_OPLINE
50541 	zend_free_op free_op2;
50542 	zval *op1, *op2;
50543 	zend_string *op1_str, *op2_str, *str;
50544 
50545 	SAVE_OPLINE();
50546 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
50547 	if (IS_CV == IS_CONST) {
50548 		op1_str = Z_STR_P(op1);
50549 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50550 		op1_str = zend_string_copy(Z_STR_P(op1));
50551 	} else {
50552 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50553 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
50554 		}
50555 		op1_str = _zval_get_string_func(op1);
50556 	}
50557 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50558 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50559 		op2_str = Z_STR_P(op2);
50560 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50561 		op2_str = zend_string_copy(Z_STR_P(op2));
50562 	} else {
50563 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
50564 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
50565 		}
50566 		op2_str = _zval_get_string_func(op2);
50567 	}
50568 	do {
50569 		if (IS_CV != IS_CONST) {
50570 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
50571 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
50572 					zend_string_addref(op2_str);
50573 				}
50574 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
50575 				zend_string_release(op1_str);
50576 				break;
50577 			}
50578 		}
50579 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
50580 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
50581 				if (IS_CV == IS_CONST) {
50582 					zend_string_addref(op1_str);
50583 				}
50584 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
50585 				zend_string_release(op2_str);
50586 				break;
50587 			}
50588 		}
50589 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
50590 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
50591 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50592 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50593 		if (IS_CV != IS_CONST) {
50594 			zend_string_release(op1_str);
50595 		}
50596 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
50597 			zend_string_release(op2_str);
50598 		}
50599 	} while (0);
50600 
50601 	zval_ptr_dtor_nogc(free_op2);
50602 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50603 }
50604 
50605 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50606 {
50607 	USE_OPLINE
50608 	zval *function_name;
50609 	zend_free_op free_op2;
50610 	zval *object;
50611 	zend_function *fbc;
50612 	zend_class_entry *called_scope;
50613 	zend_object *obj;
50614 	zend_execute_data *call;
50615 	uint32_t call_info;
50616 
50617 	SAVE_OPLINE();
50618 
50619 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50620 
50621 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
50622 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
50623 		do {
50624 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
50625 				function_name = Z_REFVAL_P(function_name);
50626 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
50627 					break;
50628 				}
50629 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
50630 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
50631 				if (UNEXPECTED(EG(exception) != NULL)) {
50632 					HANDLE_EXCEPTION();
50633 				}
50634 			}
50635 			zend_throw_error(NULL, "Method name must be a string");
50636 			zval_ptr_dtor_nogc(free_op2);
50637 
50638 			HANDLE_EXCEPTION();
50639 		} while (0);
50640 	}
50641 
50642 	object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
50643 
50644 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50645 		zend_throw_error(NULL, "Using $this when not in object context");
50646 		zval_ptr_dtor_nogc(free_op2);
50647 		HANDLE_EXCEPTION();
50648 	}
50649 
50650 	if (IS_CV != IS_UNUSED) {
50651 		do {
50652 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50653 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
50654 					object = Z_REFVAL_P(object);
50655 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
50656 						break;
50657 					}
50658 				}
50659 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50660 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
50661 					if (UNEXPECTED(EG(exception) != NULL)) {
50662 						zval_ptr_dtor_nogc(free_op2);
50663 						HANDLE_EXCEPTION();
50664 					}
50665 				}
50666 				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)));
50667 				zval_ptr_dtor_nogc(free_op2);
50668 
50669 				HANDLE_EXCEPTION();
50670 			}
50671 		} while (0);
50672 	}
50673 
50674 	obj = Z_OBJ_P(object);
50675 	called_scope = obj->ce;
50676 
50677 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
50678 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
50679 	    zend_object *orig_obj = obj;
50680 
50681 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
50682 			zend_throw_error(NULL, "Object does not support method calls");
50683 			zval_ptr_dtor_nogc(free_op2);
50684 
50685 			HANDLE_EXCEPTION();
50686 		}
50687 
50688 		/* First, locate the function. */
50689 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
50690 		if (UNEXPECTED(fbc == NULL)) {
50691 			if (EXPECTED(!EG(exception))) {
50692 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
50693 			}
50694 			zval_ptr_dtor_nogc(free_op2);
50695 
50696 			HANDLE_EXCEPTION();
50697 		}
50698 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
50699 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
50700 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
50701 		    EXPECTED(obj == orig_obj)) {
50702 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
50703 		}
50704 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
50705 			init_func_run_time_cache(&fbc->op_array);
50706 		}
50707 	}
50708 
50709 	call_info = ZEND_CALL_NESTED_FUNCTION;
50710 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
50711 		obj = NULL;
50712 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
50713 		/* CV may be changed indirectly (e.g. when it's a reference) */
50714 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
50715 		GC_REFCOUNT(obj)++; /* For $this pointer */
50716 	}
50717 
50718 	zval_ptr_dtor_nogc(free_op2);
50719 
50720 	if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
50721 		HANDLE_EXCEPTION();
50722 	}
50723 
50724 	call = zend_vm_stack_push_call_frame(call_info,
50725 		fbc, opline->extended_value, called_scope, obj);
50726 	call->prev_execute_data = EX(call);
50727 	EX(call) = call;
50728 
50729 	ZEND_VM_NEXT_OPCODE();
50730 }
50731 
50732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50733 {
50734 	USE_OPLINE
50735 	zend_free_op free_op2;
50736 	zval *op1, *op2, *result;
50737 
50738 	op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
50739 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50740 	do {
50741 		int result;
50742 
50743 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50744 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50745 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
50746 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50747 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
50748 			} else {
50749 				break;
50750 			}
50751 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50752 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50753 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
50754 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50755 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
50756 			} else {
50757 				break;
50758 			}
50759 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50760 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50761 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
50762 					result = 1;
50763 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
50764 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
50765 						result = 0;
50766 					} else {
50767 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
50768 					}
50769 				} else {
50770 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
50771 				}
50772 				zval_ptr_dtor_nogc(free_op2);
50773 			} else {
50774 				break;
50775 			}
50776 		} else {
50777 			break;
50778 		}
50779 		ZEND_VM_SMART_BRANCH(result, 0);
50780 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
50781 		ZEND_VM_NEXT_OPCODE();
50782 	} while (0);
50783 
50784 	SAVE_OPLINE();
50785 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50786 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
50787 	}
50788 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
50789 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
50790 	}
50791 	result = EX_VAR(opline->result.var);
50792 	compare_function(result, op1, op2);
50793 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
50794 	zval_ptr_dtor_nogc(free_op2);
50795 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50796 }
50797 
50798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50799 {
50800 	USE_OPLINE
50801 
50802 	zval *expr_ptr, new_expr;
50803 
50804 	SAVE_OPLINE();
50805 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
50806 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
50807 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
50808 		ZVAL_MAKE_REF(expr_ptr);
50809 		Z_ADDREF_P(expr_ptr);
50810 
50811 	} else {
50812 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
50813 		if (IS_CV == IS_TMP_VAR) {
50814 			/* pass */
50815 		} else if (IS_CV == IS_CONST) {
50816 			if (Z_REFCOUNTED_P(expr_ptr)) {
50817 				Z_ADDREF_P(expr_ptr);
50818 			}
50819 		} else if (IS_CV == IS_CV) {
50820 			ZVAL_DEREF(expr_ptr);
50821 			if (Z_REFCOUNTED_P(expr_ptr)) {
50822 				Z_ADDREF_P(expr_ptr);
50823 			}
50824 		} else /* if (IS_CV == IS_VAR) */ {
50825 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
50826 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
50827 
50828 				expr_ptr = Z_REFVAL_P(expr_ptr);
50829 				if (UNEXPECTED(--GC_REFCOUNT(ref) == 0)) {
50830 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
50831 					expr_ptr = &new_expr;
50832 					efree_size(ref, sizeof(zend_reference));
50833 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
50834 					Z_ADDREF_P(expr_ptr);
50835 				}
50836 			}
50837 		}
50838 	}
50839 
50840 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
50841 		zend_free_op free_op2;
50842 		zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50843 		zend_string *str;
50844 		zend_ulong hval;
50845 
50846 add_again:
50847 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
50848 			str = Z_STR_P(offset);
50849 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
50850 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
50851 					goto num_index;
50852 				}
50853 			}
50854 str_index:
50855 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
50856 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
50857 			hval = Z_LVAL_P(offset);
50858 num_index:
50859 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
50860 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
50861 			offset = Z_REFVAL_P(offset);
50862 			goto add_again;
50863 		} else if (Z_TYPE_P(offset) == IS_NULL) {
50864 			str = ZSTR_EMPTY_ALLOC();
50865 			goto str_index;
50866 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
50867 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
50868 			goto num_index;
50869 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
50870 			hval = 0;
50871 			goto num_index;
50872 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
50873 			hval = 1;
50874 			goto num_index;
50875 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
50876 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
50877 			str = ZSTR_EMPTY_ALLOC();
50878 			goto str_index;
50879 		} else {
50880 			zend_error(E_WARNING, "Illegal offset type");
50881 			zval_ptr_dtor(expr_ptr);
50882 		}
50883 		zval_ptr_dtor_nogc(free_op2);
50884 	} else {
50885 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
50886 			zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
50887 			zval_ptr_dtor(expr_ptr);
50888 		}
50889 	}
50890 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50891 }
50892 
50893 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50894 {
50895 	zval *array;
50896 	uint32_t size;
50897 	USE_OPLINE
50898 
50899 	array = EX_VAR(opline->result.var);
50900 	if (IS_CV != IS_UNUSED) {
50901 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
50902 	} else {
50903 		size = 0;
50904 	}
50905 	ZVAL_NEW_ARR(array);
50906 	zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
50907 
50908 	if (IS_CV != IS_UNUSED) {
50909 		/* Explicitly initialize array as not-packed if flag is set */
50910 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
50911 			zend_hash_real_init(Z_ARRVAL_P(array), 0);
50912 		}
50913 	}
50914 
50915 	if (IS_CV == IS_UNUSED) {
50916 		ZEND_VM_NEXT_OPCODE();
50917 #if 0 || (IS_CV != IS_UNUSED)
50918 	} else {
50919 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50920 #endif
50921 	}
50922 }
50923 
50924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50925 {
50926 	USE_OPLINE
50927 	zend_free_op free_op2;
50928 	zval *container;
50929 	zval *offset;
50930 	zend_ulong hval;
50931 	zend_string *key;
50932 
50933 	SAVE_OPLINE();
50934 	container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
50935 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
50936 
50937 	do {
50938 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50939 			HashTable *ht;
50940 
50941 unset_dim_array:
50942 			SEPARATE_ARRAY(container);
50943 			ht = Z_ARRVAL_P(container);
50944 offset_again:
50945 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
50946 				key = Z_STR_P(offset);
50947 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
50948 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
50949 						goto num_index_dim;
50950 					}
50951 				}
50952 str_index_dim:
50953 				if (ht == &EG(symbol_table)) {
50954 					zend_delete_global_variable(key);
50955 				} else {
50956 					zend_hash_del(ht, key);
50957 				}
50958 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
50959 				hval = Z_LVAL_P(offset);
50960 num_index_dim:
50961 				zend_hash_index_del(ht, hval);
50962 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
50963 				offset = Z_REFVAL_P(offset);
50964 				goto offset_again;
50965 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
50966 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
50967 				goto num_index_dim;
50968 			} else if (Z_TYPE_P(offset) == IS_NULL) {
50969 				key = ZSTR_EMPTY_ALLOC();
50970 				goto str_index_dim;
50971 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
50972 				hval = 0;
50973 				goto num_index_dim;
50974 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
50975 				hval = 1;
50976 				goto num_index_dim;
50977 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
50978 				hval = Z_RES_HANDLE_P(offset);
50979 				goto num_index_dim;
50980 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
50981 				GET_OP2_UNDEF_CV(offset, BP_VAR_R);
50982 				key = ZSTR_EMPTY_ALLOC();
50983 				goto str_index_dim;
50984 			} else {
50985 				zend_error(E_WARNING, "Illegal offset type in unset");
50986 			}
50987 			break;
50988 		} else if (Z_ISREF_P(container)) {
50989 			container = Z_REFVAL_P(container);
50990 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50991 				goto unset_dim_array;
50992 			}
50993 		}
50994 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
50995 			container = GET_OP1_UNDEF_CV(container, BP_VAR_R);
50996 		}
50997 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
50998 			offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
50999 		}
51000 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51001 			if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
51002 				zend_throw_error(NULL, "Cannot use object as array");
51003 			} else {
51004 				Z_OBJ_HT_P(container)->unset_dimension(container, offset);
51005 			}
51006 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
51007 			zend_throw_error(NULL, "Cannot unset string offsets");
51008 		}
51009 	} while (0);
51010 
51011 	zval_ptr_dtor_nogc(free_op2);
51012 
51013 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51014 }
51015 
51016 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51017 {
51018 	USE_OPLINE
51019 	zend_free_op free_op2;
51020 	zval *container;
51021 	zval *offset;
51022 
51023 	SAVE_OPLINE();
51024 	container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
51025 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51026 		zend_throw_error(NULL, "Using $this when not in object context");
51027 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
51028 		HANDLE_EXCEPTION();
51029 	}
51030 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
51031 
51032 	do {
51033 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51034 			if (Z_ISREF_P(container)) {
51035 				container = Z_REFVAL_P(container);
51036 				if (Z_TYPE_P(container) != IS_OBJECT) {
51037 					break;
51038 				}
51039 			} else {
51040 				break;
51041 			}
51042 		}
51043 		if (Z_OBJ_HT_P(container)->unset_property) {
51044 			Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
51045 		} else {
51046 			zend_error(E_NOTICE, "Trying to unset property of non-object");
51047 		}
51048 	} while (0);
51049 
51050 	zval_ptr_dtor_nogc(free_op2);
51051 
51052 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51053 }
51054 
51055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51056 {
51057 	USE_OPLINE
51058 	zend_free_op free_op2;
51059 	zval *container;
51060 	int result;
51061 	zend_ulong hval;
51062 	zval *offset;
51063 
51064 	SAVE_OPLINE();
51065 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
51066 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
51067 
51068 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51069 		HashTable *ht;
51070 		zval *value;
51071 		zend_string *str;
51072 
51073 isset_dim_obj_array:
51074 		ht = Z_ARRVAL_P(container);
51075 isset_again:
51076 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
51077 			str = Z_STR_P(offset);
51078 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
51079 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
51080 					goto num_index_prop;
51081 				}
51082 			}
51083 str_index_prop:
51084 			value = zend_hash_find_ind(ht, str);
51085 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51086 			hval = Z_LVAL_P(offset);
51087 num_index_prop:
51088 			value = zend_hash_index_find(ht, hval);
51089 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
51090 			offset = Z_REFVAL_P(offset);
51091 			goto isset_again;
51092 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
51093 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
51094 			goto num_index_prop;
51095 		} else if (Z_TYPE_P(offset) == IS_NULL) {
51096 			str = ZSTR_EMPTY_ALLOC();
51097 			goto str_index_prop;
51098 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
51099 			hval = 0;
51100 			goto num_index_prop;
51101 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
51102 			hval = 1;
51103 			goto num_index_prop;
51104 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
51105 			hval = Z_RES_HANDLE_P(offset);
51106 			goto num_index_prop;
51107 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
51108 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
51109 			str = ZSTR_EMPTY_ALLOC();
51110 			goto str_index_prop;
51111 		} else {
51112 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
51113 			goto isset_not_found;
51114 		}
51115 
51116 		if (opline->extended_value & ZEND_ISSET) {
51117 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
51118 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
51119 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
51120 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
51121 			result = (value == NULL || !i_zend_is_true(value));
51122 		}
51123 		goto isset_dim_obj_exit;
51124 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51125 		container = Z_REFVAL_P(container);
51126 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51127 			goto isset_dim_obj_array;
51128 		}
51129 	}
51130 
51131 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
51132 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
51133 	}
51134 
51135 	if ((IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
51136 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
51137 			result =
51138 				((opline->extended_value & ZEND_ISSET) == 0) ^
51139 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
51140 		} else {
51141 			zend_error(E_NOTICE, "Trying to check element of non-array");
51142 			goto isset_not_found;
51143 		}
51144 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
51145 		zend_long lval;
51146 
51147 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
51148 			lval = Z_LVAL_P(offset);
51149 isset_str_offset:
51150 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
51151 				lval += (zend_long)Z_STRLEN_P(container);
51152 			}
51153 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
51154 				if (opline->extended_value & ZEND_ISSET) {
51155 					result = 1;
51156 				} else {
51157 					result = (Z_STRVAL_P(container)[lval] == '0');
51158 				}
51159 			} else {
51160 				goto isset_not_found;
51161 			}
51162 		} else {
51163 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
51164 				ZVAL_DEREF(offset);
51165 			}
51166 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
51167 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
51168 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
51169 				lval = zval_get_long(offset);
51170 				goto isset_str_offset;
51171 			}
51172 			goto isset_not_found;
51173 		}
51174 	} else {
51175 isset_not_found:
51176 		result = ((opline->extended_value & ZEND_ISSET) == 0);
51177 	}
51178 
51179 isset_dim_obj_exit:
51180 	zval_ptr_dtor_nogc(free_op2);
51181 
51182 	ZEND_VM_SMART_BRANCH(result, 1);
51183 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
51184 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51185 }
51186 
51187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51188 {
51189 	USE_OPLINE
51190 	zend_free_op free_op2;
51191 	zval *container;
51192 	int result;
51193 	zval *offset;
51194 
51195 	SAVE_OPLINE();
51196 	container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
51197 
51198 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
51199 		zend_throw_error(NULL, "Using $this when not in object context");
51200 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
51201 		HANDLE_EXCEPTION();
51202 	}
51203 
51204 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
51205 
51206 	if (IS_CV == IS_CONST ||
51207 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51208 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51209 			container = Z_REFVAL_P(container);
51210 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
51211 				goto isset_no_object;
51212 			}
51213 		} else {
51214 			goto isset_no_object;
51215 		}
51216 	}
51217 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
51218 		zend_error(E_NOTICE, "Trying to check property of non-object");
51219 isset_no_object:
51220 		result = ((opline->extended_value & ZEND_ISSET) == 0);
51221 	} else {
51222 		result =
51223 			((opline->extended_value & ZEND_ISSET) == 0) ^
51224 			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));
51225 	}
51226 
51227 	zval_ptr_dtor_nogc(free_op2);
51228 
51229 	ZEND_VM_SMART_BRANCH(result, 1);
51230 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
51231 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51232 }
51233 
51234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51235 {
51236 	USE_OPLINE
51237 	zend_free_op free_op2;
51238 	zval *container, *dim, *value;
51239 	zend_long offset;
51240 
51241 	container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
51242 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
51243 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51244 fetch_dim_r_index_array:
51245 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
51246 			offset = Z_LVAL_P(dim);
51247 		} else {
51248 			offset = zval_get_long(dim);
51249 		}
51250 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
51251 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
51252 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
51253 			SAVE_OPLINE();
51254 
51255 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51256 		} else {
51257 			ZEND_VM_NEXT_OPCODE();
51258 		}
51259 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
51260 		container = Z_REFVAL_P(container);
51261 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
51262 			goto fetch_dim_r_index_array;
51263 		} else {
51264 			goto fetch_dim_r_index_slow;
51265 		}
51266 	} else {
51267 fetch_dim_r_index_slow:
51268 		SAVE_OPLINE();
51269 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
51270 
51271 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51272 	}
51273 
51274 fetch_dim_r_index_undef:
51275 	ZVAL_NULL(EX_VAR(opline->result.var));
51276 	SAVE_OPLINE();
51277 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
51278 
51279 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51280 }
51281 
51282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51283 {
51284 	USE_OPLINE
51285 	zend_free_op free_op1;
51286 
51287 	SAVE_OPLINE();
51288 	bitwise_not_function(EX_VAR(opline->result.var),
51289 		_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1));
51290 	zval_ptr_dtor_nogc(free_op1);
51291 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51292 }
51293 
51294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51295 {
51296 	USE_OPLINE
51297 	zval *val;
51298 	zend_free_op free_op1;
51299 
51300 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51301 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51302 		ZVAL_FALSE(EX_VAR(opline->result.var));
51303 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51304 		ZVAL_TRUE(EX_VAR(opline->result.var));
51305 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51306 			SAVE_OPLINE();
51307 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51308 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51309 		}
51310 	} else {
51311 		SAVE_OPLINE();
51312 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
51313 		zval_ptr_dtor_nogc(free_op1);
51314 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51315 	}
51316 	ZEND_VM_NEXT_OPCODE();
51317 }
51318 
51319 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51320 {
51321 	USE_OPLINE
51322 	zend_free_op free_op1;
51323 	zval *z;
51324 
51325 	SAVE_OPLINE();
51326 	z = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51327 
51328 	if (Z_TYPE_P(z) == IS_STRING) {
51329 		zend_string *str = Z_STR_P(z);
51330 
51331 		if (ZSTR_LEN(str) != 0) {
51332 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
51333 		}
51334 	} else {
51335 		zend_string *str = _zval_get_string_func(z);
51336 
51337 		if (ZSTR_LEN(str) != 0) {
51338 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
51339 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
51340 			GET_OP1_UNDEF_CV(z, BP_VAR_R);
51341 		}
51342 		zend_string_release(str);
51343 	}
51344 
51345 	zval_ptr_dtor_nogc(free_op1);
51346 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51347 }
51348 
51349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51350 {
51351 	USE_OPLINE
51352 	zend_free_op free_op1;
51353 	zval *val;
51354 
51355 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51356 
51357 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51358 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
51359 		ZEND_VM_CONTINUE();
51360 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51361 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51362 			SAVE_OPLINE();
51363 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51364 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
51365 		} else {
51366 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
51367 			ZEND_VM_CONTINUE();
51368 		}
51369 	}
51370 
51371 	SAVE_OPLINE();
51372 	if (i_zend_is_true(val)) {
51373 		opline++;
51374 	} else {
51375 		opline = OP_JMP_ADDR(opline, opline->op2);
51376 	}
51377 	zval_ptr_dtor_nogc(free_op1);
51378 	ZEND_VM_JMP(opline);
51379 }
51380 
51381 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51382 {
51383 	USE_OPLINE
51384 	zend_free_op free_op1;
51385 	zval *val;
51386 
51387 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51388 
51389 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51390 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
51391 		ZEND_VM_CONTINUE();
51392 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51393 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51394 			SAVE_OPLINE();
51395 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51396 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51397 		} else {
51398 			ZEND_VM_NEXT_OPCODE();
51399 		}
51400 	}
51401 
51402 	SAVE_OPLINE();
51403 	if (i_zend_is_true(val)) {
51404 		opline = OP_JMP_ADDR(opline, opline->op2);
51405 	} else {
51406 		opline++;
51407 	}
51408 	zval_ptr_dtor_nogc(free_op1);
51409 	ZEND_VM_JMP(opline);
51410 }
51411 
51412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51413 {
51414 	USE_OPLINE
51415 	zend_free_op free_op1;
51416 	zval *val;
51417 
51418 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51419 
51420 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
51421 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
51422 		ZEND_VM_CONTINUE();
51423 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51424 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51425 			SAVE_OPLINE();
51426 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51427 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
51428 		} else {
51429 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
51430 			ZEND_VM_CONTINUE();
51431 		}
51432 	}
51433 
51434 	SAVE_OPLINE();
51435 	if (i_zend_is_true(val)) {
51436 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
51437 	} else {
51438 		opline = OP_JMP_ADDR(opline, opline->op2);
51439 	}
51440 	zval_ptr_dtor_nogc(free_op1);
51441 	ZEND_VM_JMP(opline);
51442 }
51443 
51444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51445 {
51446 	USE_OPLINE
51447 	zend_free_op free_op1;
51448 	zval *val;
51449 	int ret;
51450 
51451 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51452 
51453 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51454 		ZVAL_TRUE(EX_VAR(opline->result.var));
51455 		ZEND_VM_NEXT_OPCODE();
51456 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51457 		ZVAL_FALSE(EX_VAR(opline->result.var));
51458 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51459 			SAVE_OPLINE();
51460 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51461 			ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
51462 		} else {
51463 			ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
51464 			ZEND_VM_CONTINUE();
51465 		}
51466 	}
51467 
51468 	SAVE_OPLINE();
51469 	ret = i_zend_is_true(val);
51470 	zval_ptr_dtor_nogc(free_op1);
51471 	if (ret) {
51472 		ZVAL_TRUE(EX_VAR(opline->result.var));
51473 		opline++;
51474 	} else {
51475 		ZVAL_FALSE(EX_VAR(opline->result.var));
51476 		opline = OP_JMP_ADDR(opline, opline->op2);
51477 	}
51478 	ZEND_VM_JMP(opline);
51479 }
51480 
51481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51482 {
51483 	USE_OPLINE
51484 	zend_free_op free_op1;
51485 	zval *val;
51486 	int ret;
51487 
51488 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51489 
51490 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51491 		ZVAL_TRUE(EX_VAR(opline->result.var));
51492 		ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
51493 		ZEND_VM_CONTINUE();
51494 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51495 		ZVAL_FALSE(EX_VAR(opline->result.var));
51496 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51497 			SAVE_OPLINE();
51498 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51499 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51500 		} else {
51501 			ZEND_VM_NEXT_OPCODE();
51502 		}
51503 	}
51504 
51505 	SAVE_OPLINE();
51506 	ret = i_zend_is_true(val);
51507 	zval_ptr_dtor_nogc(free_op1);
51508 	if (ret) {
51509 		ZVAL_TRUE(EX_VAR(opline->result.var));
51510 		opline = OP_JMP_ADDR(opline, opline->op2);
51511 	} else {
51512 		ZVAL_FALSE(EX_VAR(opline->result.var));
51513 		opline++;
51514 	}
51515 	ZEND_VM_JMP(opline);
51516 }
51517 
51518 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51519 {
51520 	USE_OPLINE
51521 
51522 	SAVE_OPLINE();
51523 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
51524 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51525 }
51526 
51527 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51528 {
51529 	zval *var;
51530 	USE_OPLINE
51531 
51532 	SAVE_OPLINE();
51533 	var = EX_VAR(opline->op1.var);
51534 	if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
51535 		zend_hash_iterator_del(Z_FE_ITER_P(var));
51536 	}
51537 	zval_ptr_dtor_nogc(var);
51538 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51539 }
51540 
51541 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51542 {
51543 	USE_OPLINE
51544 	zval *value, *arg;
51545 	zend_free_op free_op1;
51546 
51547 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51548 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
51549 	ZVAL_COPY_VALUE(arg, value);
51550 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
51551 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
51552 			Z_ADDREF_P(arg);
51553 		}
51554 	}
51555 	ZEND_VM_NEXT_OPCODE();
51556 }
51557 
51558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51559 {
51560 	USE_OPLINE
51561 	zval *val;
51562 	zend_free_op free_op1;
51563 
51564 	val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51565 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
51566 		ZVAL_TRUE(EX_VAR(opline->result.var));
51567 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
51568 		ZVAL_FALSE(EX_VAR(opline->result.var));
51569 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
51570 			SAVE_OPLINE();
51571 			GET_OP1_UNDEF_CV(val, BP_VAR_R);
51572 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51573 		}
51574 	} else {
51575 		SAVE_OPLINE();
51576 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
51577 		zval_ptr_dtor_nogc(free_op1);
51578 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51579 	}
51580 	ZEND_VM_NEXT_OPCODE();
51581 }
51582 
51583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51584 {
51585 	USE_OPLINE
51586 	zend_free_op free_op1;
51587 	zval *obj;
51588 	zend_object *clone_obj;
51589 	zend_class_entry *ce, *scope;
51590 	zend_function *clone;
51591 	zend_object_clone_obj_t clone_call;
51592 
51593 	SAVE_OPLINE();
51594 	obj = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51595 
51596 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
51597 		zend_throw_error(NULL, "Using $this when not in object context");
51598 		HANDLE_EXCEPTION();
51599 	}
51600 
51601 	do {
51602 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
51603 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
51604 		    if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
51605 		    	obj = Z_REFVAL_P(obj);
51606 		    	if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
51607 		    		break;
51608 				}
51609 			}
51610 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
51611 				GET_OP1_UNDEF_CV(obj, BP_VAR_R);
51612 				if (UNEXPECTED(EG(exception) != NULL)) {
51613 					HANDLE_EXCEPTION();
51614 				}
51615 			}
51616 			zend_throw_error(NULL, "__clone method called on non-object");
51617 			zval_ptr_dtor_nogc(free_op1);
51618 			HANDLE_EXCEPTION();
51619 		}
51620 	} while (0);
51621 
51622 	ce = Z_OBJCE_P(obj);
51623 	clone = ce->clone;
51624 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
51625 	if (UNEXPECTED(clone_call == NULL)) {
51626 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
51627 		zval_ptr_dtor_nogc(free_op1);
51628 		HANDLE_EXCEPTION();
51629 	}
51630 
51631 	if (clone) {
51632 		if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
51633 			/* Ensure that if we're calling a private function, we're allowed to do so.
51634 			 */
51635 			scope = EX(func)->op_array.scope;
51636 			if (!zend_check_private(clone, scope, clone->common.function_name)) {
51637 				zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
51638 				zval_ptr_dtor_nogc(free_op1);
51639 				HANDLE_EXCEPTION();
51640 			}
51641 		} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
51642 			/* Ensure that if we're calling a protected function, we're allowed to do so.
51643 			 */
51644 			scope = EX(func)->op_array.scope;
51645 			if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
51646 				zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
51647 				zval_ptr_dtor_nogc(free_op1);
51648 				HANDLE_EXCEPTION();
51649 			}
51650 		}
51651 	}
51652 
51653 	clone_obj = clone_call(obj);
51654 	if (EXPECTED(EG(exception) == NULL)) {
51655 		ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
51656 	} else {
51657 		OBJ_RELEASE(clone_obj);
51658 	}
51659 
51660 	zval_ptr_dtor_nogc(free_op1);
51661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51662 }
51663 
51664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51665 {
51666 	USE_OPLINE
51667 	zend_op_array *new_op_array;
51668 	zend_free_op free_op1;
51669 	zval *inc_filename;
51670 
51671 	SAVE_OPLINE();
51672 	inc_filename = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51673 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
51674 	zval_ptr_dtor_nogc(free_op1);
51675 	if (UNEXPECTED(EG(exception) != NULL)) {
51676 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
51677 			destroy_op_array(new_op_array);
51678 			efree_size(new_op_array, sizeof(zend_op_array));
51679 		}
51680 		HANDLE_EXCEPTION();
51681 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
51682 		if (RETURN_VALUE_USED(opline)) {
51683 			ZVAL_TRUE(EX_VAR(opline->result.var));
51684 		}
51685 	} else if (EXPECTED(new_op_array != NULL)) {
51686 		zval *return_value = NULL;
51687 		zend_execute_data *call;
51688 
51689 		if (RETURN_VALUE_USED(opline)) {
51690 			return_value = EX_VAR(opline->result.var);
51691 		}
51692 
51693 		new_op_array->scope = EX(func)->op_array.scope;
51694 
51695 		call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
51696 			(zend_function*)new_op_array, 0,
51697 			Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL,
51698 			Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL);
51699 
51700 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
51701 			call->symbol_table = EX(symbol_table);
51702 		} else {
51703 			call->symbol_table = zend_rebuild_symbol_table();
51704 		}
51705 
51706 		call->prev_execute_data = execute_data;
51707 		i_init_code_execute_data(call, new_op_array, return_value);
51708 		if (EXPECTED(zend_execute_ex == execute_ex)) {
51709 			ZEND_VM_ENTER();
51710 		} else {
51711 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
51712 			zend_execute_ex(call);
51713 			zend_vm_stack_free_call_frame(call);
51714 		}
51715 
51716 		destroy_op_array(new_op_array);
51717 		efree_size(new_op_array, sizeof(zend_op_array));
51718 		if (UNEXPECTED(EG(exception) != NULL)) {
51719 			zend_throw_exception_internal(NULL);
51720 			HANDLE_EXCEPTION();
51721 		}
51722 	} else if (RETURN_VALUE_USED(opline)) {
51723 		ZVAL_FALSE(EX_VAR(opline->result.var));
51724 	}
51725 	ZEND_VM_SET_OPCODE(opline + 1);
51726 	ZEND_VM_CONTINUE();
51727 }
51728 
51729 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51730 {
51731 	USE_OPLINE
51732 
51733 	SAVE_OPLINE();
51734 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
51735 		zend_free_op free_op1;
51736 		zval *ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51737 
51738 		do {
51739 			if (Z_TYPE_P(ptr) == IS_LONG) {
51740 				EG(exit_status) = Z_LVAL_P(ptr);
51741 			} else {
51742 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
51743 					ptr = Z_REFVAL_P(ptr);
51744 					if (Z_TYPE_P(ptr) == IS_LONG) {
51745 						EG(exit_status) = Z_LVAL_P(ptr);
51746 						break;
51747 					}
51748 				}
51749 				zend_print_variable(ptr);
51750 			}
51751 		} while (0);
51752 		zval_ptr_dtor_nogc(free_op1);
51753 	}
51754 	zend_bailout();
51755 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
51756 }
51757 
51758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51759 {
51760 	USE_OPLINE
51761 	zval *value;
51762 	zend_free_op free_op1;
51763 
51764 	SAVE_OPLINE();
51765 	value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51766 try_strlen:
51767 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
51768 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
51769 	} else {
51770 		zend_bool strict;
51771 
51772 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
51773 			value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
51774 		}
51775 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
51776 			value = Z_REFVAL_P(value);
51777 			goto try_strlen;
51778 		}
51779 		strict = EX_USES_STRICT_TYPES();
51780 		do {
51781 			if (EXPECTED(!strict)) {
51782 				zend_string *str;
51783 				zval tmp;
51784 
51785 				ZVAL_COPY(&tmp, value);
51786 				if (zend_parse_arg_str_weak(&tmp, &str)) {
51787 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
51788 					zval_ptr_dtor(&tmp);
51789 					break;
51790 				}
51791 				zval_ptr_dtor(&tmp);
51792 			}
51793 			zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
51794 			ZVAL_NULL(EX_VAR(opline->result.var));
51795 		} while (0);
51796 	}
51797 	zval_ptr_dtor_nogc(free_op1);
51798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51799 }
51800 
51801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51802 {
51803 	USE_OPLINE
51804 	zend_free_op free_op1;
51805 	zval *op1, *op2, *result;
51806 
51807 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51808 	op2 = EX_CONSTANT(opline->op2);
51809 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
51810 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51811 			result = EX_VAR(opline->result.var);
51812 			fast_long_add_function(result, op1, op2);
51813 			ZEND_VM_NEXT_OPCODE();
51814 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51815 			result = EX_VAR(opline->result.var);
51816 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
51817 			ZEND_VM_NEXT_OPCODE();
51818 		}
51819 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
51820 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51821 			result = EX_VAR(opline->result.var);
51822 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
51823 			ZEND_VM_NEXT_OPCODE();
51824 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51825 			result = EX_VAR(opline->result.var);
51826 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
51827 			ZEND_VM_NEXT_OPCODE();
51828 		}
51829 	}
51830 
51831 	SAVE_OPLINE();
51832 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
51833 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
51834 	}
51835 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
51836 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
51837 	}
51838 	add_function(EX_VAR(opline->result.var), op1, op2);
51839 	zval_ptr_dtor_nogc(free_op1);
51840 
51841 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51842 }
51843 
51844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51845 {
51846 	USE_OPLINE
51847 	zend_free_op free_op1;
51848 	zval *op1, *op2, *result;
51849 
51850 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51851 	op2 = EX_CONSTANT(opline->op2);
51852 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
51853 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51854 			result = EX_VAR(opline->result.var);
51855 			fast_long_sub_function(result, op1, op2);
51856 			ZEND_VM_NEXT_OPCODE();
51857 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51858 			result = EX_VAR(opline->result.var);
51859 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
51860 			ZEND_VM_NEXT_OPCODE();
51861 		}
51862 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
51863 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51864 			result = EX_VAR(opline->result.var);
51865 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
51866 			ZEND_VM_NEXT_OPCODE();
51867 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51868 			result = EX_VAR(opline->result.var);
51869 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
51870 			ZEND_VM_NEXT_OPCODE();
51871 		}
51872 	}
51873 
51874 	SAVE_OPLINE();
51875 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
51876 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
51877 	}
51878 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
51879 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
51880 	}
51881 	sub_function(EX_VAR(opline->result.var), op1, op2);
51882 	zval_ptr_dtor_nogc(free_op1);
51883 
51884 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51885 }
51886 
51887 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51888 {
51889 	USE_OPLINE
51890 	zend_free_op free_op1;
51891 	zval *op1, *op2, *result;
51892 
51893 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51894 	op2 = EX_CONSTANT(opline->op2);
51895 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
51896 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51897 			zend_long overflow;
51898 
51899 			result = EX_VAR(opline->result.var);
51900 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
51901 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
51902 			ZEND_VM_NEXT_OPCODE();
51903 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51904 			result = EX_VAR(opline->result.var);
51905 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
51906 			ZEND_VM_NEXT_OPCODE();
51907 		}
51908 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
51909 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
51910 			result = EX_VAR(opline->result.var);
51911 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
51912 			ZEND_VM_NEXT_OPCODE();
51913 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51914 			result = EX_VAR(opline->result.var);
51915 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
51916 			ZEND_VM_NEXT_OPCODE();
51917 		}
51918 	}
51919 
51920 	SAVE_OPLINE();
51921 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
51922 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
51923 	}
51924 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
51925 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
51926 	}
51927 	mul_function(EX_VAR(opline->result.var), op1, op2);
51928 	zval_ptr_dtor_nogc(free_op1);
51929 
51930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51931 }
51932 
51933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51934 {
51935 	USE_OPLINE
51936 	zend_free_op free_op1;
51937 	zval *op1, *op2;
51938 
51939 	SAVE_OPLINE();
51940 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51941 	op2 = EX_CONSTANT(opline->op2);
51942 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
51943 	zval_ptr_dtor_nogc(free_op1);
51944 
51945 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51946 }
51947 
51948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51949 {
51950 	USE_OPLINE
51951 	zend_free_op free_op1;
51952 	zval *op1, *op2, *result;
51953 
51954 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51955 	op2 = EX_CONSTANT(opline->op2);
51956 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
51957 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
51958 			result = EX_VAR(opline->result.var);
51959 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
51960 				SAVE_OPLINE();
51961 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
51962 				HANDLE_EXCEPTION();
51963 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
51964 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
51965 				ZVAL_LONG(result, 0);
51966 			} else {
51967 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
51968 			}
51969 			ZEND_VM_NEXT_OPCODE();
51970 		}
51971 	}
51972 
51973 	SAVE_OPLINE();
51974 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
51975 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
51976 	}
51977 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
51978 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
51979 	}
51980 	mod_function(EX_VAR(opline->result.var), op1, op2);
51981 	zval_ptr_dtor_nogc(free_op1);
51982 
51983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51984 }
51985 
51986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51987 {
51988 	USE_OPLINE
51989 	zend_free_op free_op1;
51990 	zval *op1, *op2;
51991 
51992 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
51993 	op2 = EX_CONSTANT(opline->op2);
51994 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
51995 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
51996 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
51997 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
51998 		ZEND_VM_NEXT_OPCODE();
51999 	}
52000 
52001 	SAVE_OPLINE();
52002 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52003 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52004 	}
52005 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52006 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52007 	}
52008 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
52009 	zval_ptr_dtor_nogc(free_op1);
52010 
52011 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52012 }
52013 
52014 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52015 {
52016 	USE_OPLINE
52017 	zend_free_op free_op1;
52018 	zval *op1, *op2;
52019 
52020 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52021 	op2 = EX_CONSTANT(opline->op2);
52022 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
52023 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
52024 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
52025 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
52026 		ZEND_VM_NEXT_OPCODE();
52027 	}
52028 
52029 	SAVE_OPLINE();
52030 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52031 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52032 	}
52033 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52034 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52035 	}
52036 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
52037 	zval_ptr_dtor_nogc(free_op1);
52038 
52039 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52040 }
52041 
52042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52043 {
52044 	USE_OPLINE
52045 	zend_free_op free_op1;
52046 	zval *op1, *op2;
52047 
52048 	SAVE_OPLINE();
52049 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52050 	op2 = EX_CONSTANT(opline->op2);
52051 	pow_function(EX_VAR(opline->result.var), op1, op2);
52052 	zval_ptr_dtor_nogc(free_op1);
52053 
52054 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52055 }
52056 
52057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52058 {
52059 	USE_OPLINE
52060 	zend_free_op free_op1;
52061 	zval *op1, *op2;
52062 
52063 	SAVE_OPLINE();
52064 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52065 	op2 = EX_CONSTANT(opline->op2);
52066 
52067 	do {
52068 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
52069 		    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
52070 			zend_string *op1_str = Z_STR_P(op1);
52071 			zend_string *op2_str = Z_STR_P(op2);
52072 			zend_string *str;
52073 
52074 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52075 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52076 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
52077 					zval_ptr_dtor_nogc(free_op1);
52078 					break;
52079 				}
52080 			}
52081 			if (IS_CONST != IS_CONST) {
52082 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52083 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
52084 					zval_ptr_dtor_nogc(free_op1);
52085 					break;
52086 				}
52087 			}
52088 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
52089 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
52090 			    size_t len = ZSTR_LEN(op1_str);
52091 
52092 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
52093 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52094 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52095 				break;
52096 			} else {
52097 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52098 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52099 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52100 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52101 			}
52102 		} else {
52103 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52104 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52105 			}
52106 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52107 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52108 			}
52109 			concat_function(EX_VAR(opline->result.var), op1, op2);
52110 		}
52111 		zval_ptr_dtor_nogc(free_op1);
52112 	} while (0);
52113 
52114 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52115 }
52116 
52117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52118 {
52119 	USE_OPLINE
52120 	zend_free_op free_op1;
52121 	zval *op1, *op2, *result;
52122 
52123 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52124 	op2 = EX_CONSTANT(opline->op2);
52125 	do {
52126 		int result;
52127 
52128 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
52129 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52130 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
52131 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52132 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
52133 			} else {
52134 				break;
52135 			}
52136 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
52137 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52138 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
52139 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52140 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
52141 			} else {
52142 				break;
52143 			}
52144 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52145 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52146 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
52147 					result = 1;
52148 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
52149 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
52150 						result = 0;
52151 					} else {
52152 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
52153 					}
52154 				} else {
52155 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
52156 				}
52157 				zval_ptr_dtor_nogc(free_op1);
52158 
52159 			} else {
52160 				break;
52161 			}
52162 		} else {
52163 			break;
52164 		}
52165 		ZEND_VM_SMART_BRANCH(result, 0);
52166 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
52167 		ZEND_VM_NEXT_OPCODE();
52168 	} while (0);
52169 
52170 	SAVE_OPLINE();
52171 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52172 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52173 	}
52174 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52175 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52176 	}
52177 	result = EX_VAR(opline->result.var);
52178 	compare_function(result, op1, op2);
52179 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
52180 	zval_ptr_dtor_nogc(free_op1);
52181 
52182 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52183 }
52184 
52185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52186 {
52187 	USE_OPLINE
52188 	zend_free_op free_op1;
52189 	zval *op1, *op2, *result;
52190 
52191 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52192 	op2 = EX_CONSTANT(opline->op2);
52193 	do {
52194 		int result;
52195 
52196 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
52197 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52198 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
52199 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52200 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
52201 			} else {
52202 				break;
52203 			}
52204 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
52205 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52206 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
52207 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52208 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
52209 			} else {
52210 				break;
52211 			}
52212 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52213 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52214 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
52215 					result = 0;
52216 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
52217 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
52218 						result = 1;
52219 					} else {
52220 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
52221 					}
52222 				} else {
52223 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
52224 				}
52225 				zval_ptr_dtor_nogc(free_op1);
52226 
52227 			} else {
52228 				break;
52229 			}
52230 		} else {
52231 			break;
52232 		}
52233 		ZEND_VM_SMART_BRANCH(result, 0);
52234 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
52235 		ZEND_VM_NEXT_OPCODE();
52236 	} while (0);
52237 
52238 	SAVE_OPLINE();
52239 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52240 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52241 	}
52242 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52243 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52244 	}
52245 	result = EX_VAR(opline->result.var);
52246 	compare_function(result, op1, op2);
52247 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
52248 	zval_ptr_dtor_nogc(free_op1);
52249 
52250 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52251 }
52252 
52253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52254 {
52255 	USE_OPLINE
52256 	zend_free_op free_op1;
52257 	zval *op1, *op2, *result;
52258 
52259 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52260 	op2 = EX_CONSTANT(opline->op2);
52261 	do {
52262 		int result;
52263 
52264 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
52265 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52266 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
52267 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
52268 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
52269 			} else {
52270 				break;
52271 			}
52272 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
52273 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
52274 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
52275 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52276 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
52277 			} else {
52278 				break;
52279 			}
52280 		} else {
52281 			break;
52282 		}
52283 		ZEND_VM_SMART_BRANCH(result, 0);
52284 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
52285 		ZEND_VM_NEXT_OPCODE();
52286 	} while (0);
52287 
52288 	SAVE_OPLINE();
52289 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52290 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52291 	}
52292 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52293 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52294 	}
52295 	result = EX_VAR(opline->result.var);
52296 	compare_function(result, op1, op2);
52297 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
52298 	zval_ptr_dtor_nogc(free_op1);
52299 
52300 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52301 }
52302 
52303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52304 {
52305 	USE_OPLINE
52306 	zend_free_op free_op1;
52307 	zval *op1, *op2, *result;
52308 
52309 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52310 	op2 = EX_CONSTANT(opline->op2);
52311 	do {
52312 		int result;
52313 
52314 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
52315 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52316 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
52317 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
52318 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
52319 			} else {
52320 				break;
52321 			}
52322 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
52323 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
52324 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
52325 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52326 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
52327 			} else {
52328 				break;
52329 			}
52330 		} else {
52331 			break;
52332 		}
52333 		ZEND_VM_SMART_BRANCH(result, 0);
52334 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
52335 		ZEND_VM_NEXT_OPCODE();
52336 	} while (0);
52337 
52338 	SAVE_OPLINE();
52339 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52340 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52341 	}
52342 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52343 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52344 	}
52345 	result = EX_VAR(opline->result.var);
52346 	compare_function(result, op1, op2);
52347 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
52348 	zval_ptr_dtor_nogc(free_op1);
52349 
52350 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52351 }
52352 
52353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52354 {
52355 	USE_OPLINE
52356 	zend_free_op free_op1;
52357 	zval *op1, *op2;
52358 
52359 	SAVE_OPLINE();
52360 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52361 	op2 = EX_CONSTANT(opline->op2);
52362 	compare_function(EX_VAR(opline->result.var), op1, op2);
52363 	zval_ptr_dtor_nogc(free_op1);
52364 
52365 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52366 }
52367 
52368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52369 {
52370 	USE_OPLINE
52371 	zend_free_op free_op1;
52372 	zval *op1, *op2;
52373 
52374 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52375 	op2 = EX_CONSTANT(opline->op2);
52376 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
52377 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52378 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
52379 		ZEND_VM_NEXT_OPCODE();
52380 	}
52381 
52382 	SAVE_OPLINE();
52383 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52384 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52385 	}
52386 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52387 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52388 	}
52389 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
52390 	zval_ptr_dtor_nogc(free_op1);
52391 
52392 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52393 }
52394 
52395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52396 {
52397 	USE_OPLINE
52398 	zend_free_op free_op1;
52399 	zval *op1, *op2;
52400 
52401 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52402 	op2 = EX_CONSTANT(opline->op2);
52403 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
52404 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52405 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
52406 		ZEND_VM_NEXT_OPCODE();
52407 	}
52408 
52409 	SAVE_OPLINE();
52410 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52411 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52412 	}
52413 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52414 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52415 	}
52416 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
52417 	zval_ptr_dtor_nogc(free_op1);
52418 
52419 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52420 }
52421 
52422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52423 {
52424 	USE_OPLINE
52425 	zend_free_op free_op1;
52426 	zval *op1, *op2;
52427 
52428 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52429 	op2 = EX_CONSTANT(opline->op2);
52430 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
52431 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
52432 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
52433 		ZEND_VM_NEXT_OPCODE();
52434 	}
52435 
52436 	SAVE_OPLINE();
52437 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
52438 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52439 	}
52440 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
52441 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52442 	}
52443 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
52444 	zval_ptr_dtor_nogc(free_op1);
52445 
52446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52447 }
52448 
52449 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52450 {
52451 	USE_OPLINE
52452 	zend_free_op free_op1;
52453 	zval *op1, *op2;
52454 
52455 	SAVE_OPLINE();
52456 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52457 	op2 = EX_CONSTANT(opline->op2);
52458 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
52459 	zval_ptr_dtor_nogc(free_op1);
52460 
52461 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52462 }
52463 
52464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC)
52465 {
52466 	USE_OPLINE
52467 	zend_free_op free_op1;
52468 	zval *varname;
52469 	zval *retval;
52470 	zend_string *name;
52471 	zend_class_entry *ce;
52472 
52473 	SAVE_OPLINE();
52474 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52475 
52476  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
52477 		name = Z_STR_P(varname);
52478 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
52479 		name = Z_STR_P(varname);
52480 		zend_string_addref(name);
52481 	} else {
52482 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
52483 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
52484 		}
52485 		name = zval_get_string(varname);
52486 	}
52487 
52488 	if (IS_CONST == IS_CONST) {
52489 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
52490 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
52491 
52492 			/* check if static properties were destoyed */
52493 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
52494 				if (type == BP_VAR_IS) {
52495 					retval = &EG(uninitialized_zval);
52496 				} else {
52497 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
52498 					zval_ptr_dtor_nogc(free_op1);
52499 					HANDLE_EXCEPTION();
52500 				}
52501 			}
52502 
52503 			goto fetch_static_prop_return;
52504 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
52505 			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);
52506 			if (UNEXPECTED(ce == NULL)) {
52507 				ZEND_ASSERT(EG(exception));
52508 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52509 					zend_string_release(name);
52510 				}
52511 				zval_ptr_dtor_nogc(free_op1);
52512 				HANDLE_EXCEPTION();
52513 			}
52514 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
52515 		}
52516 	} else {
52517 		if (IS_CONST == IS_UNUSED) {
52518 			ce = zend_fetch_class(NULL, opline->op2.num);
52519 			if (UNEXPECTED(ce == NULL)) {
52520 				ZEND_ASSERT(EG(exception));
52521 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52522 					zend_string_release(name);
52523 				}
52524 				zval_ptr_dtor_nogc(free_op1);
52525 				HANDLE_EXCEPTION();
52526 			}
52527 		} else {
52528 			ce = Z_CE_P(EX_VAR(opline->op2.var));
52529 		}
52530 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
52531 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
52532 
52533 			/* check if static properties were destoyed */
52534 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
52535 				if (type == BP_VAR_IS) {
52536 					retval = &EG(uninitialized_zval);
52537 				} else {
52538 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
52539 					zval_ptr_dtor_nogc(free_op1);
52540 					HANDLE_EXCEPTION();
52541 				}
52542 			}
52543 
52544 			goto fetch_static_prop_return;
52545 		}
52546 	}
52547 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
52548 	if (UNEXPECTED(retval == NULL)) {
52549 		if (type == BP_VAR_IS) {
52550 			retval = &EG(uninitialized_zval);
52551 		} else {
52552 			ZEND_ASSERT(EG(exception));
52553 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52554 				zend_string_release(name);
52555 			}
52556 			zval_ptr_dtor_nogc(free_op1);
52557 			HANDLE_EXCEPTION();
52558 		}
52559 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
52560 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
52561 	}
52562 
52563 	zval_ptr_dtor_nogc(free_op1);
52564 
52565 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52566 		zend_string_release(name);
52567 	}
52568 
52569 fetch_static_prop_return:
52570 	if (type == BP_VAR_R || type == BP_VAR_IS) {
52571 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
52572 	} else {
52573 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
52574 	}
52575 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52576 }
52577 
52578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52579 {
52580 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52581 }
52582 
52583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52584 {
52585 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52586 }
52587 
52588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52589 {
52590 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52591 }
52592 
52593 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52594 {
52595 	USE_OPLINE
52596 
52597 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
52598 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52599 	} else {
52600 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52601 	}
52602 }
52603 
52604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52605 {
52606 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52607 }
52608 
52609 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52610 {
52611 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
52612 }
52613 
52614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52615 {
52616 	USE_OPLINE
52617 	zend_free_op free_op1;
52618 	zval *container, *dim, *value, *result;
52619 
52620 	SAVE_OPLINE();
52621 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52622 	dim = EX_CONSTANT(opline->op2);
52623 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52624 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
52625 fetch_dim_r_array:
52626 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
52627 			result = EX_VAR(opline->result.var);
52628 			ZVAL_COPY_UNREF(result, value);
52629 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
52630 			container = Z_REFVAL_P(container);
52631 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
52632 				goto fetch_dim_r_array;
52633 			} else {
52634 				goto fetch_dim_r_slow;
52635 			}
52636 		} else {
52637 fetch_dim_r_slow:
52638 			result = EX_VAR(opline->result.var);
52639 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
52640 		}
52641 	} else {
52642 		result = EX_VAR(opline->result.var);
52643 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
52644 	}
52645 
52646 	zval_ptr_dtor_nogc(free_op1);
52647 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52648 }
52649 
52650 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52651 {
52652 	USE_OPLINE
52653 	zend_free_op free_op1;
52654 	zval *container;
52655 
52656 	SAVE_OPLINE();
52657 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52658 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
52659 
52660 	zval_ptr_dtor_nogc(free_op1);
52661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52662 }
52663 
52664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52665 {
52666 	USE_OPLINE
52667 	zend_free_op free_op1;
52668 	zval *container;
52669 
52670 	zval *offset;
52671 
52672 	SAVE_OPLINE();
52673 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52674 
52675 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
52676 		zend_throw_error(NULL, "Using $this when not in object context");
52677 
52678 		HANDLE_EXCEPTION();
52679 	}
52680 
52681 	offset  = EX_CONSTANT(opline->op2);
52682 
52683 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
52684 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
52685 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
52686 			container = Z_REFVAL_P(container);
52687 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
52688 				goto fetch_obj_is_no_object;
52689 			}
52690 		} else {
52691 			goto fetch_obj_is_no_object;
52692 		}
52693 	}
52694 
52695 	/* here we are sure we are dealing with an object */
52696 	do {
52697 		zend_object *zobj = Z_OBJ_P(container);
52698 		zval *retval;
52699 
52700 		if (IS_CONST == IS_CONST &&
52701 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
52702 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
52703 
52704 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
52705 				retval = OBJ_PROP(zobj, prop_offset);
52706 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
52707 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
52708 					break;
52709 				}
52710 			} else if (EXPECTED(zobj->properties != NULL)) {
52711 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
52712 				if (EXPECTED(retval)) {
52713 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
52714 					break;
52715 				}
52716 			}
52717 		}
52718 
52719 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
52720 fetch_obj_is_no_object:
52721 			ZVAL_NULL(EX_VAR(opline->result.var));
52722 		} else {
52723 
52724 			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));
52725 
52726 			if (retval != EX_VAR(opline->result.var)) {
52727 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
52728 			}
52729 		}
52730 	} while (0);
52731 
52732 	zval_ptr_dtor_nogc(free_op1);
52733 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52734 }
52735 
52736 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52737 {
52738 	USE_OPLINE
52739 	zend_free_op free_op1;
52740 	zval *container;
52741 
52742 	SAVE_OPLINE();
52743 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52744 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
52745 
52746 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52747 }
52748 
52749 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52750 {
52751 	USE_OPLINE
52752 	zend_free_op free_op1;
52753 	zval *op1, *op2;
52754 	zend_string *op1_str, *op2_str, *str;
52755 
52756 	SAVE_OPLINE();
52757 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52758 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
52759 		op1_str = Z_STR_P(op1);
52760 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52761 		op1_str = zend_string_copy(Z_STR_P(op1));
52762 	} else {
52763 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52764 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52765 		}
52766 		op1_str = _zval_get_string_func(op1);
52767 	}
52768 	op2 = EX_CONSTANT(opline->op2);
52769 	if (IS_CONST == IS_CONST) {
52770 		op2_str = Z_STR_P(op2);
52771 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52772 		op2_str = zend_string_copy(Z_STR_P(op2));
52773 	} else {
52774 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52775 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
52776 		}
52777 		op2_str = _zval_get_string_func(op2);
52778 	}
52779 	do {
52780 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52781 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52782 				if (IS_CONST == IS_CONST) {
52783 					zend_string_addref(op2_str);
52784 				}
52785 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
52786 				zend_string_release(op1_str);
52787 				break;
52788 			}
52789 		}
52790 		if (IS_CONST != IS_CONST) {
52791 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52792 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
52793 					zend_string_addref(op1_str);
52794 				}
52795 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
52796 				zend_string_release(op2_str);
52797 				break;
52798 			}
52799 		}
52800 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52801 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52802 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52803 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52804 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
52805 			zend_string_release(op1_str);
52806 		}
52807 		if (IS_CONST != IS_CONST) {
52808 			zend_string_release(op2_str);
52809 		}
52810 	} while (0);
52811 	zval_ptr_dtor_nogc(free_op1);
52812 
52813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52814 }
52815 
52816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52817 {
52818 	USE_OPLINE
52819 	zval *function_name;
52820 	zend_free_op free_op1;
52821 	zval *object;
52822 	zend_function *fbc;
52823 	zend_class_entry *called_scope;
52824 	zend_object *obj;
52825 	zend_execute_data *call;
52826 	uint32_t call_info;
52827 
52828 	SAVE_OPLINE();
52829 
52830 	function_name = EX_CONSTANT(opline->op2);
52831 
52832 	if (IS_CONST != IS_CONST &&
52833 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
52834 		do {
52835 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
52836 				function_name = Z_REFVAL_P(function_name);
52837 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
52838 					break;
52839 				}
52840 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
52841 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
52842 				if (UNEXPECTED(EG(exception) != NULL)) {
52843 					HANDLE_EXCEPTION();
52844 				}
52845 			}
52846 			zend_throw_error(NULL, "Method name must be a string");
52847 
52848 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
52849 			HANDLE_EXCEPTION();
52850 		} while (0);
52851 	}
52852 
52853 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52854 
52855 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
52856 		zend_throw_error(NULL, "Using $this when not in object context");
52857 
52858 		HANDLE_EXCEPTION();
52859 	}
52860 
52861 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
52862 		do {
52863 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
52864 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
52865 					object = Z_REFVAL_P(object);
52866 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
52867 						break;
52868 					}
52869 				}
52870 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
52871 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
52872 					if (UNEXPECTED(EG(exception) != NULL)) {
52873 
52874 						HANDLE_EXCEPTION();
52875 					}
52876 				}
52877 				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)));
52878 
52879 				zval_ptr_dtor_nogc(free_op1);
52880 				HANDLE_EXCEPTION();
52881 			}
52882 		} while (0);
52883 	}
52884 
52885 	obj = Z_OBJ_P(object);
52886 	called_scope = obj->ce;
52887 
52888 	if (IS_CONST != IS_CONST ||
52889 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
52890 	    zend_object *orig_obj = obj;
52891 
52892 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
52893 			zend_throw_error(NULL, "Object does not support method calls");
52894 
52895 			zval_ptr_dtor_nogc(free_op1);
52896 			HANDLE_EXCEPTION();
52897 		}
52898 
52899 		/* First, locate the function. */
52900 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
52901 		if (UNEXPECTED(fbc == NULL)) {
52902 			if (EXPECTED(!EG(exception))) {
52903 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
52904 			}
52905 
52906 			zval_ptr_dtor_nogc(free_op1);
52907 			HANDLE_EXCEPTION();
52908 		}
52909 		if (IS_CONST == IS_CONST &&
52910 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
52911 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
52912 		    EXPECTED(obj == orig_obj)) {
52913 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
52914 		}
52915 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
52916 			init_func_run_time_cache(&fbc->op_array);
52917 		}
52918 	}
52919 
52920 	call_info = ZEND_CALL_NESTED_FUNCTION;
52921 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
52922 		obj = NULL;
52923 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
52924 		/* CV may be changed indirectly (e.g. when it's a reference) */
52925 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
52926 		GC_REFCOUNT(obj)++; /* For $this pointer */
52927 	}
52928 
52929 	zval_ptr_dtor_nogc(free_op1);
52930 
52931 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
52932 		HANDLE_EXCEPTION();
52933 	}
52934 
52935 	call = zend_vm_stack_push_call_frame(call_info,
52936 		fbc, opline->extended_value, called_scope, obj);
52937 	call->prev_execute_data = EX(call);
52938 	EX(call) = call;
52939 
52940 	ZEND_VM_NEXT_OPCODE();
52941 }
52942 
52943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52944 {
52945 	USE_OPLINE
52946 	zend_free_op free_op1;
52947 	zval *op1, *op2, *result;
52948 
52949 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
52950 	op2 = EX_CONSTANT(opline->op2);
52951 	do {
52952 		int result;
52953 
52954 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
52955 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52956 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
52957 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52958 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
52959 			} else {
52960 				break;
52961 			}
52962 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
52963 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
52964 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
52965 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
52966 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
52967 			} else {
52968 				break;
52969 			}
52970 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52971 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52972 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
52973 					result = 1;
52974 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
52975 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
52976 						result = 0;
52977 					} else {
52978 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
52979 					}
52980 				} else {
52981 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
52982 				}
52983 
52984 			} else {
52985 				break;
52986 			}
52987 		} else {
52988 			break;
52989 		}
52990 		ZEND_VM_SMART_BRANCH(result, 0);
52991 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
52992 		ZEND_VM_NEXT_OPCODE();
52993 	} while (0);
52994 
52995 	SAVE_OPLINE();
52996 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52997 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
52998 	}
52999 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
53000 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
53001 	}
53002 	result = EX_VAR(opline->result.var);
53003 	compare_function(result, op1, op2);
53004 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
53005 
53006 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53007 }
53008 
53009 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53010 {
53011 	USE_OPLINE
53012 	zval tmp, *varname;
53013 	zend_class_entry *ce;
53014 	zend_free_op free_op1;
53015 
53016 	SAVE_OPLINE();
53017 
53018 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53019 
53020 	ZVAL_UNDEF(&tmp);
53021 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
53022 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
53023 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
53024 		}
53025 		ZVAL_STR(&tmp, zval_get_string(varname));
53026 		varname = &tmp;
53027 	}
53028 
53029 	if (IS_CONST == IS_CONST) {
53030 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
53031 		if (UNEXPECTED(ce == NULL)) {
53032 			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);
53033 			if (UNEXPECTED(ce == NULL)) {
53034 				ZEND_ASSERT(EG(exception));
53035 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53036 					zend_string_release(Z_STR(tmp));
53037 				}
53038 				zval_ptr_dtor_nogc(free_op1);
53039 				HANDLE_EXCEPTION();
53040 			}
53041 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53042 		}
53043 	} else if (IS_CONST == IS_UNUSED) {
53044 		ce = zend_fetch_class(NULL, opline->op2.num);
53045 		if (UNEXPECTED(ce == NULL)) {
53046 			ZEND_ASSERT(EG(exception));
53047 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53048 				zend_string_release(Z_STR(tmp));
53049 			}
53050 			zval_ptr_dtor_nogc(free_op1);
53051 			HANDLE_EXCEPTION();
53052 		}
53053 	} else {
53054 		ce = Z_CE_P(EX_VAR(opline->op2.var));
53055 	}
53056 	zend_std_unset_static_property(ce, Z_STR_P(varname));
53057 
53058 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53059 		zend_string_release(Z_STR(tmp));
53060 	}
53061 	zval_ptr_dtor_nogc(free_op1);
53062 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53063 }
53064 
53065 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53066 {
53067 	USE_OPLINE
53068 	zval *value;
53069 	int result;
53070 	zend_free_op free_op1;
53071 	zval tmp, *varname;
53072 	zend_class_entry *ce;
53073 
53074 	SAVE_OPLINE();
53075 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53076 	ZVAL_UNDEF(&tmp);
53077 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
53078 		ZVAL_STR(&tmp, zval_get_string(varname));
53079 		varname = &tmp;
53080 	}
53081 
53082 	if (IS_CONST == IS_CONST) {
53083 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
53084 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
53085 
53086 			/* check if static properties were destoyed */
53087 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53088 				value = NULL;
53089 			}
53090 
53091 			goto is_static_prop_return;
53092 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
53093 			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);
53094 			if (UNEXPECTED(ce == NULL)) {
53095 				ZEND_ASSERT(EG(exception));
53096 				HANDLE_EXCEPTION();
53097 			}
53098 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53099 		}
53100 	} else {
53101 		if (IS_CONST == IS_UNUSED) {
53102 			ce = zend_fetch_class(NULL, opline->op2.num);
53103 			if (UNEXPECTED(ce == NULL)) {
53104 				ZEND_ASSERT(EG(exception));
53105 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53106 					zend_string_release(Z_STR(tmp));
53107 				}
53108 				zval_ptr_dtor_nogc(free_op1);
53109 				HANDLE_EXCEPTION();
53110 			}
53111 		} else {
53112 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53113 		}
53114 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
53115 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
53116 
53117 			/* check if static properties were destoyed */
53118 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53119 				value = NULL;
53120 			}
53121 
53122 			goto is_static_prop_return;
53123 		}
53124 	}
53125 
53126 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
53127 
53128 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
53129 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
53130 	}
53131 
53132 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53133 		zend_string_release(Z_STR(tmp));
53134 	}
53135 	zval_ptr_dtor_nogc(free_op1);
53136 
53137 is_static_prop_return:
53138 	if (opline->extended_value & ZEND_ISSET) {
53139 		result = value && Z_TYPE_P(value) > IS_NULL &&
53140 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
53141 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
53142 		result = !value || !i_zend_is_true(value);
53143 	}
53144 
53145 	ZEND_VM_SMART_BRANCH(result, 1);
53146 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53147 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53148 }
53149 
53150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53151 {
53152 	USE_OPLINE
53153 	zend_free_op free_op1;
53154 	zval *container;
53155 	int result;
53156 	zend_ulong hval;
53157 	zval *offset;
53158 
53159 	SAVE_OPLINE();
53160 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53161 	offset = EX_CONSTANT(opline->op2);
53162 
53163 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53164 		HashTable *ht;
53165 		zval *value;
53166 		zend_string *str;
53167 
53168 isset_dim_obj_array:
53169 		ht = Z_ARRVAL_P(container);
53170 isset_again:
53171 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53172 			str = Z_STR_P(offset);
53173 			if (IS_CONST != IS_CONST) {
53174 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
53175 					goto num_index_prop;
53176 				}
53177 			}
53178 str_index_prop:
53179 			value = zend_hash_find_ind(ht, str);
53180 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53181 			hval = Z_LVAL_P(offset);
53182 num_index_prop:
53183 			value = zend_hash_index_find(ht, hval);
53184 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
53185 			offset = Z_REFVAL_P(offset);
53186 			goto isset_again;
53187 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
53188 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
53189 			goto num_index_prop;
53190 		} else if (Z_TYPE_P(offset) == IS_NULL) {
53191 			str = ZSTR_EMPTY_ALLOC();
53192 			goto str_index_prop;
53193 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
53194 			hval = 0;
53195 			goto num_index_prop;
53196 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
53197 			hval = 1;
53198 			goto num_index_prop;
53199 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
53200 			hval = Z_RES_HANDLE_P(offset);
53201 			goto num_index_prop;
53202 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
53203 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
53204 			str = ZSTR_EMPTY_ALLOC();
53205 			goto str_index_prop;
53206 		} else {
53207 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
53208 			goto isset_not_found;
53209 		}
53210 
53211 		if (opline->extended_value & ZEND_ISSET) {
53212 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
53213 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
53214 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
53215 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
53216 			result = (value == NULL || !i_zend_is_true(value));
53217 		}
53218 		goto isset_dim_obj_exit;
53219 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
53220 		container = Z_REFVAL_P(container);
53221 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53222 			goto isset_dim_obj_array;
53223 		}
53224 	}
53225 
53226 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
53227 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
53228 	}
53229 
53230 	if (((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
53231 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
53232 			result =
53233 				((opline->extended_value & ZEND_ISSET) == 0) ^
53234 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
53235 		} else {
53236 			zend_error(E_NOTICE, "Trying to check element of non-array");
53237 			goto isset_not_found;
53238 		}
53239 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
53240 		zend_long lval;
53241 
53242 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53243 			lval = Z_LVAL_P(offset);
53244 isset_str_offset:
53245 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
53246 				lval += (zend_long)Z_STRLEN_P(container);
53247 			}
53248 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
53249 				if (opline->extended_value & ZEND_ISSET) {
53250 					result = 1;
53251 				} else {
53252 					result = (Z_STRVAL_P(container)[lval] == '0');
53253 				}
53254 			} else {
53255 				goto isset_not_found;
53256 			}
53257 		} else {
53258 			if (IS_CONST & (IS_CV|IS_VAR)) {
53259 				ZVAL_DEREF(offset);
53260 			}
53261 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
53262 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
53263 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
53264 				lval = zval_get_long(offset);
53265 				goto isset_str_offset;
53266 			}
53267 			goto isset_not_found;
53268 		}
53269 	} else {
53270 isset_not_found:
53271 		result = ((opline->extended_value & ZEND_ISSET) == 0);
53272 	}
53273 
53274 isset_dim_obj_exit:
53275 
53276 	zval_ptr_dtor_nogc(free_op1);
53277 	ZEND_VM_SMART_BRANCH(result, 1);
53278 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53279 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53280 }
53281 
53282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53283 {
53284 	USE_OPLINE
53285 	zend_free_op free_op1;
53286 	zval *container;
53287 	int result;
53288 	zval *offset;
53289 
53290 	SAVE_OPLINE();
53291 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53292 
53293 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
53294 		zend_throw_error(NULL, "Using $this when not in object context");
53295 
53296 		HANDLE_EXCEPTION();
53297 	}
53298 
53299 	offset = EX_CONSTANT(opline->op2);
53300 
53301 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
53302 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
53303 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
53304 			container = Z_REFVAL_P(container);
53305 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
53306 				goto isset_no_object;
53307 			}
53308 		} else {
53309 			goto isset_no_object;
53310 		}
53311 	}
53312 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
53313 		zend_error(E_NOTICE, "Trying to check property of non-object");
53314 isset_no_object:
53315 		result = ((opline->extended_value & ZEND_ISSET) == 0);
53316 	} else {
53317 		result =
53318 			((opline->extended_value & ZEND_ISSET) == 0) ^
53319 			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));
53320 	}
53321 
53322 	zval_ptr_dtor_nogc(free_op1);
53323 	ZEND_VM_SMART_BRANCH(result, 1);
53324 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53325 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53326 }
53327 
53328 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53329 {
53330 	USE_OPLINE
53331 	zend_free_op free_op1;
53332 	zval *expr;
53333 	zend_bool result;
53334 
53335 	SAVE_OPLINE();
53336 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53337 
53338 try_instanceof:
53339 	if (Z_TYPE_P(expr) == IS_OBJECT) {
53340 		zend_class_entry *ce;
53341 
53342 		if (IS_CONST == IS_CONST) {
53343 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
53344 			if (UNEXPECTED(ce == NULL)) {
53345 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
53346 				if (EXPECTED(ce)) {
53347 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53348 				}
53349 			}
53350 		} else if (IS_CONST == IS_UNUSED) {
53351 			ce = zend_fetch_class(NULL, opline->op2.num);
53352 			if (UNEXPECTED(ce == NULL)) {
53353 				ZEND_ASSERT(EG(exception));
53354 				zval_ptr_dtor_nogc(free_op1);
53355 				HANDLE_EXCEPTION();
53356 			}
53357 		} else {
53358 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53359 		}
53360 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
53361 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
53362 		expr = Z_REFVAL_P(expr);
53363 		goto try_instanceof;
53364 	} else {
53365 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
53366 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
53367 		}
53368 		result = 0;
53369 	}
53370 	zval_ptr_dtor_nogc(free_op1);
53371 	ZEND_VM_SMART_BRANCH(result, 1);
53372 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53373 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53374 }
53375 
53376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53377 {
53378 	USE_OPLINE
53379 	zend_free_op free_op1;
53380 	zval *container, *dim, *value;
53381 	zend_long offset;
53382 
53383 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53384 	dim = EX_CONSTANT(opline->op2);
53385 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53386 fetch_dim_r_index_array:
53387 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
53388 			offset = Z_LVAL_P(dim);
53389 		} else {
53390 			offset = zval_get_long(dim);
53391 		}
53392 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
53393 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
53394 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
53395 			SAVE_OPLINE();
53396 			zval_ptr_dtor_nogc(free_op1);
53397 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53398 		} else {
53399 			ZEND_VM_NEXT_OPCODE();
53400 		}
53401 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
53402 		container = Z_REFVAL_P(container);
53403 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53404 			goto fetch_dim_r_index_array;
53405 		} else {
53406 			goto fetch_dim_r_index_slow;
53407 		}
53408 	} else {
53409 fetch_dim_r_index_slow:
53410 		SAVE_OPLINE();
53411 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
53412 		zval_ptr_dtor_nogc(free_op1);
53413 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53414 	}
53415 
53416 fetch_dim_r_index_undef:
53417 	ZVAL_NULL(EX_VAR(opline->result.var));
53418 	SAVE_OPLINE();
53419 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
53420 	zval_ptr_dtor_nogc(free_op1);
53421 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53422 }
53423 
53424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
53425 {
53426 	USE_OPLINE
53427 	zend_free_op free_op1;
53428 	zval *varname;
53429 	zval *retval;
53430 	zend_string *name;
53431 	zend_class_entry *ce;
53432 
53433 	SAVE_OPLINE();
53434 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53435 
53436  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
53437 		name = Z_STR_P(varname);
53438 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
53439 		name = Z_STR_P(varname);
53440 		zend_string_addref(name);
53441 	} else {
53442 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
53443 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
53444 		}
53445 		name = zval_get_string(varname);
53446 	}
53447 
53448 	if (IS_VAR == IS_CONST) {
53449 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
53450 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
53451 
53452 			/* check if static properties were destoyed */
53453 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53454 				if (type == BP_VAR_IS) {
53455 					retval = &EG(uninitialized_zval);
53456 				} else {
53457 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
53458 					zval_ptr_dtor_nogc(free_op1);
53459 					HANDLE_EXCEPTION();
53460 				}
53461 			}
53462 
53463 			goto fetch_static_prop_return;
53464 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
53465 			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);
53466 			if (UNEXPECTED(ce == NULL)) {
53467 				ZEND_ASSERT(EG(exception));
53468 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53469 					zend_string_release(name);
53470 				}
53471 				zval_ptr_dtor_nogc(free_op1);
53472 				HANDLE_EXCEPTION();
53473 			}
53474 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53475 		}
53476 	} else {
53477 		if (IS_VAR == IS_UNUSED) {
53478 			ce = zend_fetch_class(NULL, opline->op2.num);
53479 			if (UNEXPECTED(ce == NULL)) {
53480 				ZEND_ASSERT(EG(exception));
53481 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53482 					zend_string_release(name);
53483 				}
53484 				zval_ptr_dtor_nogc(free_op1);
53485 				HANDLE_EXCEPTION();
53486 			}
53487 		} else {
53488 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53489 		}
53490 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
53491 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
53492 
53493 			/* check if static properties were destoyed */
53494 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53495 				if (type == BP_VAR_IS) {
53496 					retval = &EG(uninitialized_zval);
53497 				} else {
53498 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
53499 					zval_ptr_dtor_nogc(free_op1);
53500 					HANDLE_EXCEPTION();
53501 				}
53502 			}
53503 
53504 			goto fetch_static_prop_return;
53505 		}
53506 	}
53507 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
53508 	if (UNEXPECTED(retval == NULL)) {
53509 		if (type == BP_VAR_IS) {
53510 			retval = &EG(uninitialized_zval);
53511 		} else {
53512 			ZEND_ASSERT(EG(exception));
53513 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53514 				zend_string_release(name);
53515 			}
53516 			zval_ptr_dtor_nogc(free_op1);
53517 			HANDLE_EXCEPTION();
53518 		}
53519 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
53520 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
53521 	}
53522 
53523 	zval_ptr_dtor_nogc(free_op1);
53524 
53525 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53526 		zend_string_release(name);
53527 	}
53528 
53529 fetch_static_prop_return:
53530 	if (type == BP_VAR_R || type == BP_VAR_IS) {
53531 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
53532 	} else {
53533 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
53534 	}
53535 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53536 }
53537 
53538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53539 {
53540 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53541 }
53542 
53543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53544 {
53545 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53546 }
53547 
53548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53549 {
53550 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53551 }
53552 
53553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53554 {
53555 	USE_OPLINE
53556 
53557 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
53558 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53559 	} else {
53560 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53561 	}
53562 }
53563 
53564 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53565 {
53566 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53567 }
53568 
53569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53570 {
53571 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53572 }
53573 
53574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53575 {
53576 	USE_OPLINE
53577 	zval tmp, *varname;
53578 	zend_class_entry *ce;
53579 	zend_free_op free_op1;
53580 
53581 	SAVE_OPLINE();
53582 
53583 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53584 
53585 	ZVAL_UNDEF(&tmp);
53586 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
53587 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
53588 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
53589 		}
53590 		ZVAL_STR(&tmp, zval_get_string(varname));
53591 		varname = &tmp;
53592 	}
53593 
53594 	if (IS_VAR == IS_CONST) {
53595 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
53596 		if (UNEXPECTED(ce == NULL)) {
53597 			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);
53598 			if (UNEXPECTED(ce == NULL)) {
53599 				ZEND_ASSERT(EG(exception));
53600 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53601 					zend_string_release(Z_STR(tmp));
53602 				}
53603 				zval_ptr_dtor_nogc(free_op1);
53604 				HANDLE_EXCEPTION();
53605 			}
53606 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53607 		}
53608 	} else if (IS_VAR == IS_UNUSED) {
53609 		ce = zend_fetch_class(NULL, opline->op2.num);
53610 		if (UNEXPECTED(ce == NULL)) {
53611 			ZEND_ASSERT(EG(exception));
53612 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53613 				zend_string_release(Z_STR(tmp));
53614 			}
53615 			zval_ptr_dtor_nogc(free_op1);
53616 			HANDLE_EXCEPTION();
53617 		}
53618 	} else {
53619 		ce = Z_CE_P(EX_VAR(opline->op2.var));
53620 	}
53621 	zend_std_unset_static_property(ce, Z_STR_P(varname));
53622 
53623 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53624 		zend_string_release(Z_STR(tmp));
53625 	}
53626 	zval_ptr_dtor_nogc(free_op1);
53627 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53628 }
53629 
53630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53631 {
53632 	USE_OPLINE
53633 	zval *value;
53634 	int result;
53635 	zend_free_op free_op1;
53636 	zval tmp, *varname;
53637 	zend_class_entry *ce;
53638 
53639 	SAVE_OPLINE();
53640 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53641 	ZVAL_UNDEF(&tmp);
53642 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
53643 		ZVAL_STR(&tmp, zval_get_string(varname));
53644 		varname = &tmp;
53645 	}
53646 
53647 	if (IS_VAR == IS_CONST) {
53648 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
53649 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
53650 
53651 			/* check if static properties were destoyed */
53652 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53653 				value = NULL;
53654 			}
53655 
53656 			goto is_static_prop_return;
53657 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
53658 			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);
53659 			if (UNEXPECTED(ce == NULL)) {
53660 				ZEND_ASSERT(EG(exception));
53661 				HANDLE_EXCEPTION();
53662 			}
53663 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53664 		}
53665 	} else {
53666 		if (IS_VAR == IS_UNUSED) {
53667 			ce = zend_fetch_class(NULL, opline->op2.num);
53668 			if (UNEXPECTED(ce == NULL)) {
53669 				ZEND_ASSERT(EG(exception));
53670 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53671 					zend_string_release(Z_STR(tmp));
53672 				}
53673 				zval_ptr_dtor_nogc(free_op1);
53674 				HANDLE_EXCEPTION();
53675 			}
53676 		} else {
53677 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53678 		}
53679 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
53680 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
53681 
53682 			/* check if static properties were destoyed */
53683 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53684 				value = NULL;
53685 			}
53686 
53687 			goto is_static_prop_return;
53688 		}
53689 	}
53690 
53691 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
53692 
53693 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
53694 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
53695 	}
53696 
53697 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
53698 		zend_string_release(Z_STR(tmp));
53699 	}
53700 	zval_ptr_dtor_nogc(free_op1);
53701 
53702 is_static_prop_return:
53703 	if (opline->extended_value & ZEND_ISSET) {
53704 		result = value && Z_TYPE_P(value) > IS_NULL &&
53705 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
53706 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
53707 		result = !value || !i_zend_is_true(value);
53708 	}
53709 
53710 	ZEND_VM_SMART_BRANCH(result, 1);
53711 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53712 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53713 }
53714 
53715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53716 {
53717 	USE_OPLINE
53718 	zend_free_op free_op1;
53719 	zval *expr;
53720 	zend_bool result;
53721 
53722 	SAVE_OPLINE();
53723 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53724 
53725 try_instanceof:
53726 	if (Z_TYPE_P(expr) == IS_OBJECT) {
53727 		zend_class_entry *ce;
53728 
53729 		if (IS_VAR == IS_CONST) {
53730 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
53731 			if (UNEXPECTED(ce == NULL)) {
53732 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
53733 				if (EXPECTED(ce)) {
53734 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53735 				}
53736 			}
53737 		} else if (IS_VAR == IS_UNUSED) {
53738 			ce = zend_fetch_class(NULL, opline->op2.num);
53739 			if (UNEXPECTED(ce == NULL)) {
53740 				ZEND_ASSERT(EG(exception));
53741 				zval_ptr_dtor_nogc(free_op1);
53742 				HANDLE_EXCEPTION();
53743 			}
53744 		} else {
53745 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53746 		}
53747 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
53748 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
53749 		expr = Z_REFVAL_P(expr);
53750 		goto try_instanceof;
53751 	} else {
53752 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
53753 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
53754 		}
53755 		result = 0;
53756 	}
53757 	zval_ptr_dtor_nogc(free_op1);
53758 	ZEND_VM_SMART_BRANCH(result, 1);
53759 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
53760 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53761 }
53762 
53763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
53764 {
53765 	USE_OPLINE
53766 	zend_free_op free_op1;
53767 	zval *varname;
53768 	zval *retval;
53769 	zend_string *name;
53770 	HashTable *target_symbol_table;
53771 
53772 	SAVE_OPLINE();
53773 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53774 
53775  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
53776 		name = Z_STR_P(varname);
53777 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
53778 		name = Z_STR_P(varname);
53779 		zend_string_addref(name);
53780 	} else {
53781 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
53782 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
53783 		}
53784 		name = zval_get_string(varname);
53785 	}
53786 
53787 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
53788 	retval = zend_hash_find(target_symbol_table, name);
53789 	if (retval == NULL) {
53790 		if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
53791 			zval *result;
53792 
53793 fetch_this:
53794 			result = EX_VAR(opline->result.var);
53795 			switch (type) {
53796 				case BP_VAR_R:
53797 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
53798 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
53799 						Z_ADDREF_P(result);
53800 					} else {
53801 						ZVAL_NULL(result);
53802 						zend_error(E_NOTICE,"Undefined variable: this");
53803 					}
53804 					break;
53805 				case BP_VAR_IS:
53806 					if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
53807 						ZVAL_OBJ(result, Z_OBJ(EX(This)));
53808 						Z_ADDREF_P(result);
53809 					} else {
53810 						ZVAL_NULL(result);
53811 					}
53812 					break;
53813 				case BP_VAR_RW:
53814 				case BP_VAR_W:
53815 					zend_throw_error(NULL, "Cannot re-assign $this");
53816 					break;
53817 				case BP_VAR_UNSET:
53818 					zend_throw_error(NULL, "Cannot unset $this");
53819 					break;
53820 				EMPTY_SWITCH_DEFAULT_CASE()
53821 			}
53822 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53823 				zend_string_release(name);
53824 			}
53825 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53826 		}
53827 		switch (type) {
53828 			case BP_VAR_R:
53829 			case BP_VAR_UNSET:
53830 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
53831 				/* break missing intentionally */
53832 			case BP_VAR_IS:
53833 				retval = &EG(uninitialized_zval);
53834 				break;
53835 			case BP_VAR_RW:
53836 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
53837 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
53838 				break;
53839 			case BP_VAR_W:
53840 				retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
53841 				break;
53842 			EMPTY_SWITCH_DEFAULT_CASE()
53843 		}
53844 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
53845 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
53846 		retval = Z_INDIRECT_P(retval);
53847 		if (Z_TYPE_P(retval) == IS_UNDEF) {
53848 			if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
53849 				goto fetch_this;
53850 			}
53851 			switch (type) {
53852 				case BP_VAR_R:
53853 				case BP_VAR_UNSET:
53854 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
53855 					/* break missing intentionally */
53856 				case BP_VAR_IS:
53857 					retval = &EG(uninitialized_zval);
53858 					break;
53859 				case BP_VAR_RW:
53860 					zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
53861 					/* break missing intentionally */
53862 				case BP_VAR_W:
53863 					ZVAL_NULL(retval);
53864 					break;
53865 				EMPTY_SWITCH_DEFAULT_CASE()
53866 			}
53867 		}
53868 	}
53869 
53870 	if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
53871 		zval_ptr_dtor_nogc(free_op1);
53872 	}
53873 
53874 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53875 		zend_string_release(name);
53876 	}
53877 
53878 	ZEND_ASSERT(retval != NULL);
53879 	if (type == BP_VAR_R || type == BP_VAR_IS) {
53880 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
53881 	} else {
53882 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
53883 	}
53884 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53885 }
53886 
53887 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53888 {
53889 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53890 }
53891 
53892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53893 {
53894 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53895 }
53896 
53897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53898 {
53899 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53900 }
53901 
53902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53903 {
53904 	USE_OPLINE
53905 
53906 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
53907 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53908 	} else {
53909 		ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53910 	}
53911 }
53912 
53913 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53914 {
53915 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53916 }
53917 
53918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53919 {
53920 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
53921 }
53922 
53923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
53924 {
53925 	USE_OPLINE
53926 	zend_free_op free_op1;
53927 	zval *varname;
53928 	zval *retval;
53929 	zend_string *name;
53930 	zend_class_entry *ce;
53931 
53932 	SAVE_OPLINE();
53933 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
53934 
53935  	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
53936 		name = Z_STR_P(varname);
53937 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
53938 		name = Z_STR_P(varname);
53939 		zend_string_addref(name);
53940 	} else {
53941 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
53942 			GET_OP1_UNDEF_CV(varname, BP_VAR_R);
53943 		}
53944 		name = zval_get_string(varname);
53945 	}
53946 
53947 	if (IS_UNUSED == IS_CONST) {
53948 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
53949 			retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
53950 
53951 			/* check if static properties were destoyed */
53952 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53953 				if (type == BP_VAR_IS) {
53954 					retval = &EG(uninitialized_zval);
53955 				} else {
53956 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
53957 					zval_ptr_dtor_nogc(free_op1);
53958 					HANDLE_EXCEPTION();
53959 				}
53960 			}
53961 
53962 			goto fetch_static_prop_return;
53963 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
53964 			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);
53965 			if (UNEXPECTED(ce == NULL)) {
53966 				ZEND_ASSERT(EG(exception));
53967 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53968 					zend_string_release(name);
53969 				}
53970 				zval_ptr_dtor_nogc(free_op1);
53971 				HANDLE_EXCEPTION();
53972 			}
53973 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
53974 		}
53975 	} else {
53976 		if (IS_UNUSED == IS_UNUSED) {
53977 			ce = zend_fetch_class(NULL, opline->op2.num);
53978 			if (UNEXPECTED(ce == NULL)) {
53979 				ZEND_ASSERT(EG(exception));
53980 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
53981 					zend_string_release(name);
53982 				}
53983 				zval_ptr_dtor_nogc(free_op1);
53984 				HANDLE_EXCEPTION();
53985 			}
53986 		} else {
53987 			ce = Z_CE_P(EX_VAR(opline->op2.var));
53988 		}
53989 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
53990 		    (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
53991 
53992 			/* check if static properties were destoyed */
53993 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
53994 				if (type == BP_VAR_IS) {
53995 					retval = &EG(uninitialized_zval);
53996 				} else {
53997 					zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
53998 					zval_ptr_dtor_nogc(free_op1);
53999 					HANDLE_EXCEPTION();
54000 				}
54001 			}
54002 
54003 			goto fetch_static_prop_return;
54004 		}
54005 	}
54006 	retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
54007 	if (UNEXPECTED(retval == NULL)) {
54008 		if (type == BP_VAR_IS) {
54009 			retval = &EG(uninitialized_zval);
54010 		} else {
54011 			ZEND_ASSERT(EG(exception));
54012 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
54013 				zend_string_release(name);
54014 			}
54015 			zval_ptr_dtor_nogc(free_op1);
54016 			HANDLE_EXCEPTION();
54017 		}
54018 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
54019 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
54020 	}
54021 
54022 	zval_ptr_dtor_nogc(free_op1);
54023 
54024 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
54025 		zend_string_release(name);
54026 	}
54027 
54028 fetch_static_prop_return:
54029 	if (type == BP_VAR_R || type == BP_VAR_IS) {
54030 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
54031 	} else {
54032 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
54033 	}
54034 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54035 }
54036 
54037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54038 {
54039 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54040 }
54041 
54042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54043 {
54044 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54045 }
54046 
54047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54048 {
54049 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54050 }
54051 
54052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54053 {
54054 	USE_OPLINE
54055 
54056 	if (zend_is_by_ref_func_arg_fetch(opline, EX(call))) {
54057 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54058 	} else {
54059 		ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54060 	}
54061 }
54062 
54063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54064 {
54065 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54066 }
54067 
54068 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54069 {
54070 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
54071 }
54072 
54073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54074 {
54075 	USE_OPLINE
54076 	zval tmp, *varname;
54077 	HashTable *target_symbol_table;
54078 	zend_free_op free_op1;
54079 
54080 	SAVE_OPLINE();
54081 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
54082 	    (opline->extended_value & ZEND_QUICK_SET)) {
54083 		zval *var = EX_VAR(opline->op1.var);
54084 
54085 		if (Z_REFCOUNTED_P(var)) {
54086 			zend_refcounted *garbage = Z_COUNTED_P(var);
54087 
54088 			if (!--GC_REFCOUNT(garbage)) {
54089 				ZVAL_UNDEF(var);
54090 				zval_dtor_func(garbage);
54091 			} else {
54092 				zval *z = var;
54093 				ZVAL_DEREF(z);
54094 				if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
54095 					ZVAL_UNDEF(var);
54096 					gc_possible_root(Z_COUNTED_P(z));
54097 				} else {
54098 					ZVAL_UNDEF(var);
54099 				}
54100 			}
54101 		} else {
54102 			ZVAL_UNDEF(var);
54103 		}
54104 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54105 	}
54106 
54107 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54108 
54109 	ZVAL_UNDEF(&tmp);
54110 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
54111 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
54112 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
54113 		}
54114 		ZVAL_STR(&tmp, zval_get_string(varname));
54115 		varname = &tmp;
54116 	}
54117 
54118 	target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
54119 	zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
54120 
54121 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54122 		zend_string_release(Z_STR(tmp));
54123 	}
54124 	zval_ptr_dtor_nogc(free_op1);
54125 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54126 }
54127 
54128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54129 {
54130 	USE_OPLINE
54131 	zval tmp, *varname;
54132 	zend_class_entry *ce;
54133 	zend_free_op free_op1;
54134 
54135 	SAVE_OPLINE();
54136 
54137 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54138 
54139 	ZVAL_UNDEF(&tmp);
54140 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
54141 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
54142 			varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
54143 		}
54144 		ZVAL_STR(&tmp, zval_get_string(varname));
54145 		varname = &tmp;
54146 	}
54147 
54148 	if (IS_UNUSED == IS_CONST) {
54149 		ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
54150 		if (UNEXPECTED(ce == NULL)) {
54151 			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);
54152 			if (UNEXPECTED(ce == NULL)) {
54153 				ZEND_ASSERT(EG(exception));
54154 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54155 					zend_string_release(Z_STR(tmp));
54156 				}
54157 				zval_ptr_dtor_nogc(free_op1);
54158 				HANDLE_EXCEPTION();
54159 			}
54160 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
54161 		}
54162 	} else if (IS_UNUSED == IS_UNUSED) {
54163 		ce = zend_fetch_class(NULL, opline->op2.num);
54164 		if (UNEXPECTED(ce == NULL)) {
54165 			ZEND_ASSERT(EG(exception));
54166 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54167 				zend_string_release(Z_STR(tmp));
54168 			}
54169 			zval_ptr_dtor_nogc(free_op1);
54170 			HANDLE_EXCEPTION();
54171 		}
54172 	} else {
54173 		ce = Z_CE_P(EX_VAR(opline->op2.var));
54174 	}
54175 	zend_std_unset_static_property(ce, Z_STR_P(varname));
54176 
54177 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54178 		zend_string_release(Z_STR(tmp));
54179 	}
54180 	zval_ptr_dtor_nogc(free_op1);
54181 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54182 }
54183 
54184 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54185 {
54186 	USE_OPLINE
54187 	zval *value;
54188 	int result;
54189 
54190 	if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
54191 	    (opline->extended_value & ZEND_QUICK_SET)) {
54192 		value = EX_VAR(opline->op1.var);
54193 		if (opline->extended_value & ZEND_ISSET) {
54194 			result =
54195 				Z_TYPE_P(value) > IS_NULL &&
54196 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
54197 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
54198 			SAVE_OPLINE();
54199 			result = !i_zend_is_true(value);
54200 			if (UNEXPECTED(EG(exception))) {
54201 				HANDLE_EXCEPTION();
54202 			}
54203 		}
54204 		ZEND_VM_SMART_BRANCH(result, 0);
54205 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54206 		ZEND_VM_SET_NEXT_OPCODE(opline + 1);
54207 		ZEND_VM_CONTINUE();
54208 	} else {
54209 		zend_free_op free_op1;
54210 		zval tmp, *varname;
54211 		HashTable *target_symbol_table;
54212 
54213 		SAVE_OPLINE();
54214 		varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54215 		ZVAL_UNDEF(&tmp);
54216 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
54217 			ZVAL_STR(&tmp, zval_get_string(varname));
54218 			varname = &tmp;
54219 		}
54220 
54221 		target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
54222 		value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
54223 
54224 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54225 			zend_string_release(Z_STR(tmp));
54226 		}
54227 		zval_ptr_dtor_nogc(free_op1);
54228 
54229 		if (opline->extended_value & ZEND_ISSET) {
54230 			result = value && Z_TYPE_P(value) > IS_NULL &&
54231 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
54232 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
54233 			result = !value || !i_zend_is_true(value);
54234 		}
54235 
54236 		ZEND_VM_SMART_BRANCH(result, 1);
54237 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54238 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54239 	}
54240 }
54241 
54242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54243 {
54244 	USE_OPLINE
54245 	zval *value;
54246 	int result;
54247 	zend_free_op free_op1;
54248 	zval tmp, *varname;
54249 	zend_class_entry *ce;
54250 
54251 	SAVE_OPLINE();
54252 	varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54253 	ZVAL_UNDEF(&tmp);
54254 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
54255 		ZVAL_STR(&tmp, zval_get_string(varname));
54256 		varname = &tmp;
54257 	}
54258 
54259 	if (IS_UNUSED == IS_CONST) {
54260 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
54261 			value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
54262 
54263 			/* check if static properties were destoyed */
54264 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
54265 				value = NULL;
54266 			}
54267 
54268 			goto is_static_prop_return;
54269 		} else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
54270 			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);
54271 			if (UNEXPECTED(ce == NULL)) {
54272 				ZEND_ASSERT(EG(exception));
54273 				HANDLE_EXCEPTION();
54274 			}
54275 			CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
54276 		}
54277 	} else {
54278 		if (IS_UNUSED == IS_UNUSED) {
54279 			ce = zend_fetch_class(NULL, opline->op2.num);
54280 			if (UNEXPECTED(ce == NULL)) {
54281 				ZEND_ASSERT(EG(exception));
54282 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54283 					zend_string_release(Z_STR(tmp));
54284 				}
54285 				zval_ptr_dtor_nogc(free_op1);
54286 				HANDLE_EXCEPTION();
54287 			}
54288 		} else {
54289 			ce = Z_CE_P(EX_VAR(opline->op2.var));
54290 		}
54291 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
54292 		    (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
54293 
54294 			/* check if static properties were destoyed */
54295 			if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
54296 				value = NULL;
54297 			}
54298 
54299 			goto is_static_prop_return;
54300 		}
54301 	}
54302 
54303 	value = zend_std_get_static_property(ce, Z_STR_P(varname), 1);
54304 
54305 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) {
54306 		CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, value);
54307 	}
54308 
54309 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
54310 		zend_string_release(Z_STR(tmp));
54311 	}
54312 	zval_ptr_dtor_nogc(free_op1);
54313 
54314 is_static_prop_return:
54315 	if (opline->extended_value & ZEND_ISSET) {
54316 		result = value && Z_TYPE_P(value) > IS_NULL &&
54317 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
54318 	} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
54319 		result = !value || !i_zend_is_true(value);
54320 	}
54321 
54322 	ZEND_VM_SMART_BRANCH(result, 1);
54323 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
54324 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54325 }
54326 
54327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54328 {
54329 	USE_OPLINE
54330 	zend_free_op free_op1;
54331 	zval *expr;
54332 	zend_bool result;
54333 
54334 	SAVE_OPLINE();
54335 	expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54336 
54337 try_instanceof:
54338 	if (Z_TYPE_P(expr) == IS_OBJECT) {
54339 		zend_class_entry *ce;
54340 
54341 		if (IS_UNUSED == IS_CONST) {
54342 			ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
54343 			if (UNEXPECTED(ce == NULL)) {
54344 				ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD);
54345 				if (EXPECTED(ce)) {
54346 					CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
54347 				}
54348 			}
54349 		} else if (IS_UNUSED == IS_UNUSED) {
54350 			ce = zend_fetch_class(NULL, opline->op2.num);
54351 			if (UNEXPECTED(ce == NULL)) {
54352 				ZEND_ASSERT(EG(exception));
54353 				zval_ptr_dtor_nogc(free_op1);
54354 				HANDLE_EXCEPTION();
54355 			}
54356 		} else {
54357 			ce = Z_CE_P(EX_VAR(opline->op2.var));
54358 		}
54359 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
54360 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
54361 		expr = Z_REFVAL_P(expr);
54362 		goto try_instanceof;
54363 	} else {
54364 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
54365 			GET_OP1_UNDEF_CV(expr, BP_VAR_R);
54366 		}
54367 		result = 0;
54368 	}
54369 	zval_ptr_dtor_nogc(free_op1);
54370 	ZEND_VM_SMART_BRANCH(result, 1);
54371 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
54372 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54373 }
54374 
54375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54376 {
54377 	USE_OPLINE
54378 	zend_free_op free_op1;
54379 	zval *op1, *op2, *result;
54380 
54381 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54382 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54383 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54384 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54385 			result = EX_VAR(opline->result.var);
54386 			fast_long_add_function(result, op1, op2);
54387 			ZEND_VM_NEXT_OPCODE();
54388 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54389 			result = EX_VAR(opline->result.var);
54390 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
54391 			ZEND_VM_NEXT_OPCODE();
54392 		}
54393 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
54394 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54395 			result = EX_VAR(opline->result.var);
54396 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
54397 			ZEND_VM_NEXT_OPCODE();
54398 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54399 			result = EX_VAR(opline->result.var);
54400 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
54401 			ZEND_VM_NEXT_OPCODE();
54402 		}
54403 	}
54404 
54405 	SAVE_OPLINE();
54406 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54407 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54408 	}
54409 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54410 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54411 	}
54412 	add_function(EX_VAR(opline->result.var), op1, op2);
54413 	zval_ptr_dtor_nogc(free_op1);
54414 
54415 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54416 }
54417 
54418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54419 {
54420 	USE_OPLINE
54421 	zend_free_op free_op1;
54422 	zval *op1, *op2, *result;
54423 
54424 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54425 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54426 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54427 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54428 			result = EX_VAR(opline->result.var);
54429 			fast_long_sub_function(result, op1, op2);
54430 			ZEND_VM_NEXT_OPCODE();
54431 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54432 			result = EX_VAR(opline->result.var);
54433 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
54434 			ZEND_VM_NEXT_OPCODE();
54435 		}
54436 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
54437 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54438 			result = EX_VAR(opline->result.var);
54439 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
54440 			ZEND_VM_NEXT_OPCODE();
54441 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54442 			result = EX_VAR(opline->result.var);
54443 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
54444 			ZEND_VM_NEXT_OPCODE();
54445 		}
54446 	}
54447 
54448 	SAVE_OPLINE();
54449 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54450 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54451 	}
54452 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54453 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54454 	}
54455 	sub_function(EX_VAR(opline->result.var), op1, op2);
54456 	zval_ptr_dtor_nogc(free_op1);
54457 
54458 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54459 }
54460 
54461 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54462 {
54463 	USE_OPLINE
54464 	zend_free_op free_op1;
54465 	zval *op1, *op2, *result;
54466 
54467 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54468 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54469 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54470 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54471 			zend_long overflow;
54472 
54473 			result = EX_VAR(opline->result.var);
54474 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
54475 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
54476 			ZEND_VM_NEXT_OPCODE();
54477 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54478 			result = EX_VAR(opline->result.var);
54479 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
54480 			ZEND_VM_NEXT_OPCODE();
54481 		}
54482 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
54483 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54484 			result = EX_VAR(opline->result.var);
54485 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
54486 			ZEND_VM_NEXT_OPCODE();
54487 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54488 			result = EX_VAR(opline->result.var);
54489 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
54490 			ZEND_VM_NEXT_OPCODE();
54491 		}
54492 	}
54493 
54494 	SAVE_OPLINE();
54495 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54496 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54497 	}
54498 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54499 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54500 	}
54501 	mul_function(EX_VAR(opline->result.var), op1, op2);
54502 	zval_ptr_dtor_nogc(free_op1);
54503 
54504 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54505 }
54506 
54507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54508 {
54509 	USE_OPLINE
54510 	zend_free_op free_op1;
54511 	zval *op1, *op2;
54512 
54513 	SAVE_OPLINE();
54514 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54515 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
54516 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
54517 	zval_ptr_dtor_nogc(free_op1);
54518 
54519 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54520 }
54521 
54522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54523 {
54524 	USE_OPLINE
54525 	zend_free_op free_op1;
54526 	zval *op1, *op2, *result;
54527 
54528 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54529 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54530 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54531 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54532 			result = EX_VAR(opline->result.var);
54533 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
54534 				SAVE_OPLINE();
54535 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
54536 				HANDLE_EXCEPTION();
54537 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
54538 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
54539 				ZVAL_LONG(result, 0);
54540 			} else {
54541 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
54542 			}
54543 			ZEND_VM_NEXT_OPCODE();
54544 		}
54545 	}
54546 
54547 	SAVE_OPLINE();
54548 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54549 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54550 	}
54551 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54552 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54553 	}
54554 	mod_function(EX_VAR(opline->result.var), op1, op2);
54555 	zval_ptr_dtor_nogc(free_op1);
54556 
54557 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54558 }
54559 
54560 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54561 {
54562 	USE_OPLINE
54563 	zend_free_op free_op1;
54564 	zval *op1, *op2;
54565 
54566 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54567 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54568 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
54569 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
54570 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
54571 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
54572 		ZEND_VM_NEXT_OPCODE();
54573 	}
54574 
54575 	SAVE_OPLINE();
54576 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54577 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54578 	}
54579 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54580 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54581 	}
54582 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
54583 	zval_ptr_dtor_nogc(free_op1);
54584 
54585 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54586 }
54587 
54588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54589 {
54590 	USE_OPLINE
54591 	zend_free_op free_op1;
54592 	zval *op1, *op2;
54593 
54594 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54595 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54596 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
54597 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
54598 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
54599 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
54600 		ZEND_VM_NEXT_OPCODE();
54601 	}
54602 
54603 	SAVE_OPLINE();
54604 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54605 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54606 	}
54607 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54608 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54609 	}
54610 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
54611 	zval_ptr_dtor_nogc(free_op1);
54612 
54613 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54614 }
54615 
54616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54617 {
54618 	USE_OPLINE
54619 	zend_free_op free_op1;
54620 	zval *op1, *op2;
54621 
54622 	SAVE_OPLINE();
54623 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54624 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
54625 	pow_function(EX_VAR(opline->result.var), op1, op2);
54626 	zval_ptr_dtor_nogc(free_op1);
54627 
54628 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54629 }
54630 
54631 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54632 {
54633 	USE_OPLINE
54634 	zend_free_op free_op1;
54635 	zval *op1, *op2;
54636 
54637 	SAVE_OPLINE();
54638 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54639 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54640 
54641 	do {
54642 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
54643 		    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
54644 			zend_string *op1_str = Z_STR_P(op1);
54645 			zend_string *op2_str = Z_STR_P(op2);
54646 			zend_string *str;
54647 
54648 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
54649 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
54650 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
54651 					zval_ptr_dtor_nogc(free_op1);
54652 					break;
54653 				}
54654 			}
54655 			if (IS_CV != IS_CONST) {
54656 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
54657 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
54658 					zval_ptr_dtor_nogc(free_op1);
54659 					break;
54660 				}
54661 			}
54662 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
54663 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
54664 			    size_t len = ZSTR_LEN(op1_str);
54665 
54666 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
54667 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
54668 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
54669 				break;
54670 			} else {
54671 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
54672 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
54673 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
54674 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
54675 			}
54676 		} else {
54677 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
54678 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54679 			}
54680 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
54681 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54682 			}
54683 			concat_function(EX_VAR(opline->result.var), op1, op2);
54684 		}
54685 		zval_ptr_dtor_nogc(free_op1);
54686 	} while (0);
54687 
54688 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54689 }
54690 
54691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54692 {
54693 	USE_OPLINE
54694 	zend_free_op free_op1;
54695 	zval *op1, *op2, *result;
54696 
54697 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54698 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54699 	do {
54700 		int result;
54701 
54702 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
54703 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
54704 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
54705 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
54706 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
54707 			} else {
54708 				break;
54709 			}
54710 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
54711 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
54712 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
54713 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
54714 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
54715 			} else {
54716 				break;
54717 			}
54718 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
54719 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
54720 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
54721 					result = 1;
54722 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
54723 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
54724 						result = 0;
54725 					} else {
54726 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
54727 					}
54728 				} else {
54729 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
54730 				}
54731 				zval_ptr_dtor_nogc(free_op1);
54732 
54733 			} else {
54734 				break;
54735 			}
54736 		} else {
54737 			break;
54738 		}
54739 		ZEND_VM_SMART_BRANCH(result, 0);
54740 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54741 		ZEND_VM_NEXT_OPCODE();
54742 	} while (0);
54743 
54744 	SAVE_OPLINE();
54745 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
54746 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54747 	}
54748 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
54749 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54750 	}
54751 	result = EX_VAR(opline->result.var);
54752 	compare_function(result, op1, op2);
54753 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
54754 	zval_ptr_dtor_nogc(free_op1);
54755 
54756 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54757 }
54758 
54759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54760 {
54761 	USE_OPLINE
54762 	zend_free_op free_op1;
54763 	zval *op1, *op2, *result;
54764 
54765 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54766 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54767 	do {
54768 		int result;
54769 
54770 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
54771 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
54772 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
54773 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
54774 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
54775 			} else {
54776 				break;
54777 			}
54778 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
54779 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
54780 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
54781 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
54782 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
54783 			} else {
54784 				break;
54785 			}
54786 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
54787 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
54788 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
54789 					result = 0;
54790 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
54791 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
54792 						result = 1;
54793 					} else {
54794 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
54795 					}
54796 				} else {
54797 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
54798 				}
54799 				zval_ptr_dtor_nogc(free_op1);
54800 
54801 			} else {
54802 				break;
54803 			}
54804 		} else {
54805 			break;
54806 		}
54807 		ZEND_VM_SMART_BRANCH(result, 0);
54808 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54809 		ZEND_VM_NEXT_OPCODE();
54810 	} while (0);
54811 
54812 	SAVE_OPLINE();
54813 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
54814 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54815 	}
54816 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
54817 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54818 	}
54819 	result = EX_VAR(opline->result.var);
54820 	compare_function(result, op1, op2);
54821 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
54822 	zval_ptr_dtor_nogc(free_op1);
54823 
54824 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54825 }
54826 
54827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54828 {
54829 	USE_OPLINE
54830 	zend_free_op free_op1;
54831 	zval *op1, *op2, *result;
54832 
54833 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54834 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54835 	do {
54836 		int result;
54837 
54838 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54839 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54840 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
54841 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54842 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
54843 			} else {
54844 				break;
54845 			}
54846 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
54847 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54848 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
54849 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54850 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
54851 			} else {
54852 				break;
54853 			}
54854 		} else {
54855 			break;
54856 		}
54857 		ZEND_VM_SMART_BRANCH(result, 0);
54858 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54859 		ZEND_VM_NEXT_OPCODE();
54860 	} while (0);
54861 
54862 	SAVE_OPLINE();
54863 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54864 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54865 	}
54866 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54867 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54868 	}
54869 	result = EX_VAR(opline->result.var);
54870 	compare_function(result, op1, op2);
54871 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
54872 	zval_ptr_dtor_nogc(free_op1);
54873 
54874 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54875 }
54876 
54877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54878 {
54879 	USE_OPLINE
54880 	zend_free_op free_op1;
54881 	zval *op1, *op2, *result;
54882 
54883 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54884 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54885 	do {
54886 		int result;
54887 
54888 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
54889 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54890 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
54891 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54892 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
54893 			} else {
54894 				break;
54895 			}
54896 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
54897 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
54898 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
54899 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54900 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
54901 			} else {
54902 				break;
54903 			}
54904 		} else {
54905 			break;
54906 		}
54907 		ZEND_VM_SMART_BRANCH(result, 0);
54908 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
54909 		ZEND_VM_NEXT_OPCODE();
54910 	} while (0);
54911 
54912 	SAVE_OPLINE();
54913 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54914 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54915 	}
54916 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54917 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54918 	}
54919 	result = EX_VAR(opline->result.var);
54920 	compare_function(result, op1, op2);
54921 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
54922 	zval_ptr_dtor_nogc(free_op1);
54923 
54924 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54925 }
54926 
54927 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54928 {
54929 	USE_OPLINE
54930 	zend_free_op free_op1;
54931 	zval *op1, *op2;
54932 
54933 	SAVE_OPLINE();
54934 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54935 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
54936 	compare_function(EX_VAR(opline->result.var), op1, op2);
54937 	zval_ptr_dtor_nogc(free_op1);
54938 
54939 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54940 }
54941 
54942 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54943 {
54944 	USE_OPLINE
54945 	zend_free_op free_op1;
54946 	zval *op1, *op2;
54947 
54948 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54949 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54950 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
54951 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54952 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
54953 		ZEND_VM_NEXT_OPCODE();
54954 	}
54955 
54956 	SAVE_OPLINE();
54957 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54958 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54959 	}
54960 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54961 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54962 	}
54963 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
54964 	zval_ptr_dtor_nogc(free_op1);
54965 
54966 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54967 }
54968 
54969 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54970 {
54971 	USE_OPLINE
54972 	zend_free_op free_op1;
54973 	zval *op1, *op2;
54974 
54975 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
54976 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
54977 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
54978 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
54979 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
54980 		ZEND_VM_NEXT_OPCODE();
54981 	}
54982 
54983 	SAVE_OPLINE();
54984 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
54985 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
54986 	}
54987 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
54988 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
54989 	}
54990 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
54991 	zval_ptr_dtor_nogc(free_op1);
54992 
54993 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
54994 }
54995 
54996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
54997 {
54998 	USE_OPLINE
54999 	zend_free_op free_op1;
55000 	zval *op1, *op2;
55001 
55002 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55003 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55004 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
55005 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55006 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
55007 		ZEND_VM_NEXT_OPCODE();
55008 	}
55009 
55010 	SAVE_OPLINE();
55011 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55012 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55013 	}
55014 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55015 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55016 	}
55017 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
55018 	zval_ptr_dtor_nogc(free_op1);
55019 
55020 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55021 }
55022 
55023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55024 {
55025 	USE_OPLINE
55026 	zend_free_op free_op1;
55027 	zval *op1, *op2;
55028 
55029 	SAVE_OPLINE();
55030 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55031 	op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
55032 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
55033 	zval_ptr_dtor_nogc(free_op1);
55034 
55035 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55036 }
55037 
55038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55039 {
55040 	USE_OPLINE
55041 	zend_free_op free_op1;
55042 	zval *container, *dim, *value, *result;
55043 
55044 	SAVE_OPLINE();
55045 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55046 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55047 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
55048 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55049 fetch_dim_r_array:
55050 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
55051 			result = EX_VAR(opline->result.var);
55052 			ZVAL_COPY_UNREF(result, value);
55053 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
55054 			container = Z_REFVAL_P(container);
55055 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55056 				goto fetch_dim_r_array;
55057 			} else {
55058 				goto fetch_dim_r_slow;
55059 			}
55060 		} else {
55061 fetch_dim_r_slow:
55062 			result = EX_VAR(opline->result.var);
55063 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
55064 		}
55065 	} else {
55066 		result = EX_VAR(opline->result.var);
55067 		zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
55068 	}
55069 
55070 	zval_ptr_dtor_nogc(free_op1);
55071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55072 }
55073 
55074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55075 {
55076 	USE_OPLINE
55077 	zend_free_op free_op1;
55078 	zval *container;
55079 
55080 	SAVE_OPLINE();
55081 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55082 	zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
55083 
55084 	zval_ptr_dtor_nogc(free_op1);
55085 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55086 }
55087 
55088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55089 {
55090 	USE_OPLINE
55091 	zend_free_op free_op1;
55092 	zval *container;
55093 
55094 	zval *offset;
55095 
55096 	SAVE_OPLINE();
55097 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55098 
55099 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
55100 		zend_throw_error(NULL, "Using $this when not in object context");
55101 
55102 		HANDLE_EXCEPTION();
55103 	}
55104 
55105 	offset  = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
55106 
55107 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
55108 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
55109 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
55110 			container = Z_REFVAL_P(container);
55111 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
55112 				goto fetch_obj_is_no_object;
55113 			}
55114 		} else {
55115 			goto fetch_obj_is_no_object;
55116 		}
55117 	}
55118 
55119 	/* here we are sure we are dealing with an object */
55120 	do {
55121 		zend_object *zobj = Z_OBJ_P(container);
55122 		zval *retval;
55123 
55124 		if (IS_CV == IS_CONST &&
55125 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
55126 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
55127 
55128 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
55129 				retval = OBJ_PROP(zobj, prop_offset);
55130 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
55131 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
55132 					break;
55133 				}
55134 			} else if (EXPECTED(zobj->properties != NULL)) {
55135 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
55136 				if (EXPECTED(retval)) {
55137 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
55138 					break;
55139 				}
55140 			}
55141 		}
55142 
55143 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
55144 fetch_obj_is_no_object:
55145 			ZVAL_NULL(EX_VAR(opline->result.var));
55146 		} else {
55147 
55148 			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));
55149 
55150 			if (retval != EX_VAR(opline->result.var)) {
55151 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
55152 			}
55153 		}
55154 	} while (0);
55155 
55156 	zval_ptr_dtor_nogc(free_op1);
55157 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55158 }
55159 
55160 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55161 {
55162 	USE_OPLINE
55163 	zend_free_op free_op1;
55164 	zval *container;
55165 
55166 	SAVE_OPLINE();
55167 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55168 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
55169 
55170 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55171 }
55172 
55173 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55174 {
55175 	USE_OPLINE
55176 	zend_free_op free_op1;
55177 	zval *op1, *op2;
55178 	zend_string *op1_str, *op2_str, *str;
55179 
55180 	SAVE_OPLINE();
55181 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55182 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
55183 		op1_str = Z_STR_P(op1);
55184 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
55185 		op1_str = zend_string_copy(Z_STR_P(op1));
55186 	} else {
55187 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
55188 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55189 		}
55190 		op1_str = _zval_get_string_func(op1);
55191 	}
55192 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55193 	if (IS_CV == IS_CONST) {
55194 		op2_str = Z_STR_P(op2);
55195 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
55196 		op2_str = zend_string_copy(Z_STR_P(op2));
55197 	} else {
55198 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
55199 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55200 		}
55201 		op2_str = _zval_get_string_func(op2);
55202 	}
55203 	do {
55204 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
55205 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
55206 				if (IS_CV == IS_CONST) {
55207 					zend_string_addref(op2_str);
55208 				}
55209 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
55210 				zend_string_release(op1_str);
55211 				break;
55212 			}
55213 		}
55214 		if (IS_CV != IS_CONST) {
55215 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
55216 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
55217 					zend_string_addref(op1_str);
55218 				}
55219 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
55220 				zend_string_release(op2_str);
55221 				break;
55222 			}
55223 		}
55224 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
55225 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
55226 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
55227 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
55228 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
55229 			zend_string_release(op1_str);
55230 		}
55231 		if (IS_CV != IS_CONST) {
55232 			zend_string_release(op2_str);
55233 		}
55234 	} while (0);
55235 	zval_ptr_dtor_nogc(free_op1);
55236 
55237 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55238 }
55239 
55240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55241 {
55242 	USE_OPLINE
55243 	zval *function_name;
55244 	zend_free_op free_op1;
55245 	zval *object;
55246 	zend_function *fbc;
55247 	zend_class_entry *called_scope;
55248 	zend_object *obj;
55249 	zend_execute_data *call;
55250 	uint32_t call_info;
55251 
55252 	SAVE_OPLINE();
55253 
55254 	function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55255 
55256 	if (IS_CV != IS_CONST &&
55257 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
55258 		do {
55259 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
55260 				function_name = Z_REFVAL_P(function_name);
55261 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
55262 					break;
55263 				}
55264 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
55265 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
55266 				if (UNEXPECTED(EG(exception) != NULL)) {
55267 					HANDLE_EXCEPTION();
55268 				}
55269 			}
55270 			zend_throw_error(NULL, "Method name must be a string");
55271 
55272 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
55273 			HANDLE_EXCEPTION();
55274 		} while (0);
55275 	}
55276 
55277 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55278 
55279 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
55280 		zend_throw_error(NULL, "Using $this when not in object context");
55281 
55282 		HANDLE_EXCEPTION();
55283 	}
55284 
55285 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
55286 		do {
55287 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
55288 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
55289 					object = Z_REFVAL_P(object);
55290 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
55291 						break;
55292 					}
55293 				}
55294 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
55295 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
55296 					if (UNEXPECTED(EG(exception) != NULL)) {
55297 
55298 						HANDLE_EXCEPTION();
55299 					}
55300 				}
55301 				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)));
55302 
55303 				zval_ptr_dtor_nogc(free_op1);
55304 				HANDLE_EXCEPTION();
55305 			}
55306 		} while (0);
55307 	}
55308 
55309 	obj = Z_OBJ_P(object);
55310 	called_scope = obj->ce;
55311 
55312 	if (IS_CV != IS_CONST ||
55313 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
55314 	    zend_object *orig_obj = obj;
55315 
55316 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
55317 			zend_throw_error(NULL, "Object does not support method calls");
55318 
55319 			zval_ptr_dtor_nogc(free_op1);
55320 			HANDLE_EXCEPTION();
55321 		}
55322 
55323 		/* First, locate the function. */
55324 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
55325 		if (UNEXPECTED(fbc == NULL)) {
55326 			if (EXPECTED(!EG(exception))) {
55327 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
55328 			}
55329 
55330 			zval_ptr_dtor_nogc(free_op1);
55331 			HANDLE_EXCEPTION();
55332 		}
55333 		if (IS_CV == IS_CONST &&
55334 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
55335 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
55336 		    EXPECTED(obj == orig_obj)) {
55337 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
55338 		}
55339 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
55340 			init_func_run_time_cache(&fbc->op_array);
55341 		}
55342 	}
55343 
55344 	call_info = ZEND_CALL_NESTED_FUNCTION;
55345 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
55346 		obj = NULL;
55347 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
55348 		/* CV may be changed indirectly (e.g. when it's a reference) */
55349 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
55350 		GC_REFCOUNT(obj)++; /* For $this pointer */
55351 	}
55352 
55353 	zval_ptr_dtor_nogc(free_op1);
55354 
55355 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
55356 		HANDLE_EXCEPTION();
55357 	}
55358 
55359 	call = zend_vm_stack_push_call_frame(call_info,
55360 		fbc, opline->extended_value, called_scope, obj);
55361 	call->prev_execute_data = EX(call);
55362 	EX(call) = call;
55363 
55364 	ZEND_VM_NEXT_OPCODE();
55365 }
55366 
55367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55368 {
55369 	USE_OPLINE
55370 	zend_free_op free_op1;
55371 	zval *op1, *op2, *result;
55372 
55373 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55374 	op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55375 	do {
55376 		int result;
55377 
55378 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
55379 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
55380 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
55381 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
55382 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
55383 			} else {
55384 				break;
55385 			}
55386 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
55387 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
55388 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
55389 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
55390 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
55391 			} else {
55392 				break;
55393 			}
55394 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
55395 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
55396 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
55397 					result = 1;
55398 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
55399 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
55400 						result = 0;
55401 					} else {
55402 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
55403 					}
55404 				} else {
55405 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
55406 				}
55407 
55408 			} else {
55409 				break;
55410 			}
55411 		} else {
55412 			break;
55413 		}
55414 		ZEND_VM_SMART_BRANCH(result, 0);
55415 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
55416 		ZEND_VM_NEXT_OPCODE();
55417 	} while (0);
55418 
55419 	SAVE_OPLINE();
55420 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
55421 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55422 	}
55423 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
55424 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55425 	}
55426 	result = EX_VAR(opline->result.var);
55427 	compare_function(result, op1, op2);
55428 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
55429 
55430 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55431 }
55432 
55433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55434 {
55435 	USE_OPLINE
55436 	zend_free_op free_op1;
55437 	zval *container;
55438 	int result;
55439 	zend_ulong hval;
55440 	zval *offset;
55441 
55442 	SAVE_OPLINE();
55443 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55444 	offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55445 
55446 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55447 		HashTable *ht;
55448 		zval *value;
55449 		zend_string *str;
55450 
55451 isset_dim_obj_array:
55452 		ht = Z_ARRVAL_P(container);
55453 isset_again:
55454 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
55455 			str = Z_STR_P(offset);
55456 			if (IS_CV != IS_CONST) {
55457 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
55458 					goto num_index_prop;
55459 				}
55460 			}
55461 str_index_prop:
55462 			value = zend_hash_find_ind(ht, str);
55463 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
55464 			hval = Z_LVAL_P(offset);
55465 num_index_prop:
55466 			value = zend_hash_index_find(ht, hval);
55467 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
55468 			offset = Z_REFVAL_P(offset);
55469 			goto isset_again;
55470 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
55471 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
55472 			goto num_index_prop;
55473 		} else if (Z_TYPE_P(offset) == IS_NULL) {
55474 			str = ZSTR_EMPTY_ALLOC();
55475 			goto str_index_prop;
55476 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
55477 			hval = 0;
55478 			goto num_index_prop;
55479 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
55480 			hval = 1;
55481 			goto num_index_prop;
55482 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
55483 			hval = Z_RES_HANDLE_P(offset);
55484 			goto num_index_prop;
55485 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
55486 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
55487 			str = ZSTR_EMPTY_ALLOC();
55488 			goto str_index_prop;
55489 		} else {
55490 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
55491 			goto isset_not_found;
55492 		}
55493 
55494 		if (opline->extended_value & ZEND_ISSET) {
55495 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
55496 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
55497 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
55498 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
55499 			result = (value == NULL || !i_zend_is_true(value));
55500 		}
55501 		goto isset_dim_obj_exit;
55502 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
55503 		container = Z_REFVAL_P(container);
55504 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55505 			goto isset_dim_obj_array;
55506 		}
55507 	}
55508 
55509 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
55510 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
55511 	}
55512 
55513 	if (((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
55514 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
55515 			result =
55516 				((opline->extended_value & ZEND_ISSET) == 0) ^
55517 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
55518 		} else {
55519 			zend_error(E_NOTICE, "Trying to check element of non-array");
55520 			goto isset_not_found;
55521 		}
55522 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
55523 		zend_long lval;
55524 
55525 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
55526 			lval = Z_LVAL_P(offset);
55527 isset_str_offset:
55528 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
55529 				lval += (zend_long)Z_STRLEN_P(container);
55530 			}
55531 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
55532 				if (opline->extended_value & ZEND_ISSET) {
55533 					result = 1;
55534 				} else {
55535 					result = (Z_STRVAL_P(container)[lval] == '0');
55536 				}
55537 			} else {
55538 				goto isset_not_found;
55539 			}
55540 		} else {
55541 			if (IS_CV & (IS_CV|IS_VAR)) {
55542 				ZVAL_DEREF(offset);
55543 			}
55544 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
55545 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
55546 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
55547 				lval = zval_get_long(offset);
55548 				goto isset_str_offset;
55549 			}
55550 			goto isset_not_found;
55551 		}
55552 	} else {
55553 isset_not_found:
55554 		result = ((opline->extended_value & ZEND_ISSET) == 0);
55555 	}
55556 
55557 isset_dim_obj_exit:
55558 
55559 	zval_ptr_dtor_nogc(free_op1);
55560 	ZEND_VM_SMART_BRANCH(result, 1);
55561 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
55562 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55563 }
55564 
55565 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55566 {
55567 	USE_OPLINE
55568 	zend_free_op free_op1;
55569 	zval *container;
55570 	int result;
55571 	zval *offset;
55572 
55573 	SAVE_OPLINE();
55574 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55575 
55576 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
55577 		zend_throw_error(NULL, "Using $this when not in object context");
55578 
55579 		HANDLE_EXCEPTION();
55580 	}
55581 
55582 	offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
55583 
55584 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
55585 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
55586 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
55587 			container = Z_REFVAL_P(container);
55588 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
55589 				goto isset_no_object;
55590 			}
55591 		} else {
55592 			goto isset_no_object;
55593 		}
55594 	}
55595 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
55596 		zend_error(E_NOTICE, "Trying to check property of non-object");
55597 isset_no_object:
55598 		result = ((opline->extended_value & ZEND_ISSET) == 0);
55599 	} else {
55600 		result =
55601 			((opline->extended_value & ZEND_ISSET) == 0) ^
55602 			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));
55603 	}
55604 
55605 	zval_ptr_dtor_nogc(free_op1);
55606 	ZEND_VM_SMART_BRANCH(result, 1);
55607 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
55608 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55609 }
55610 
55611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55612 {
55613 	USE_OPLINE
55614 	zend_free_op free_op1;
55615 	zval *container, *dim, *value;
55616 	zend_long offset;
55617 
55618 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55619 	dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
55620 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55621 fetch_dim_r_index_array:
55622 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
55623 			offset = Z_LVAL_P(dim);
55624 		} else {
55625 			offset = zval_get_long(dim);
55626 		}
55627 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
55628 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
55629 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
55630 			SAVE_OPLINE();
55631 			zval_ptr_dtor_nogc(free_op1);
55632 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55633 		} else {
55634 			ZEND_VM_NEXT_OPCODE();
55635 		}
55636 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
55637 		container = Z_REFVAL_P(container);
55638 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
55639 			goto fetch_dim_r_index_array;
55640 		} else {
55641 			goto fetch_dim_r_index_slow;
55642 		}
55643 	} else {
55644 fetch_dim_r_index_slow:
55645 		SAVE_OPLINE();
55646 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
55647 		zval_ptr_dtor_nogc(free_op1);
55648 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55649 	}
55650 
55651 fetch_dim_r_index_undef:
55652 	ZVAL_NULL(EX_VAR(opline->result.var));
55653 	SAVE_OPLINE();
55654 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
55655 	zval_ptr_dtor_nogc(free_op1);
55656 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55657 }
55658 
55659 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55660 {
55661 	USE_OPLINE
55662 	zend_free_op free_op1, free_op2;
55663 	zval *op1, *op2, *result;
55664 
55665 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55666 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55667 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
55668 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55669 			result = EX_VAR(opline->result.var);
55670 			fast_long_add_function(result, op1, op2);
55671 			ZEND_VM_NEXT_OPCODE();
55672 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55673 			result = EX_VAR(opline->result.var);
55674 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2));
55675 			ZEND_VM_NEXT_OPCODE();
55676 		}
55677 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
55678 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55679 			result = EX_VAR(opline->result.var);
55680 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
55681 			ZEND_VM_NEXT_OPCODE();
55682 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55683 			result = EX_VAR(opline->result.var);
55684 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2)));
55685 			ZEND_VM_NEXT_OPCODE();
55686 		}
55687 	}
55688 
55689 	SAVE_OPLINE();
55690 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55691 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55692 	}
55693 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55694 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55695 	}
55696 	add_function(EX_VAR(opline->result.var), op1, op2);
55697 	zval_ptr_dtor_nogc(free_op1);
55698 	zval_ptr_dtor_nogc(free_op2);
55699 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55700 }
55701 
55702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55703 {
55704 	USE_OPLINE
55705 	zend_free_op free_op1, free_op2;
55706 	zval *op1, *op2, *result;
55707 
55708 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55709 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55710 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
55711 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55712 			result = EX_VAR(opline->result.var);
55713 			fast_long_sub_function(result, op1, op2);
55714 			ZEND_VM_NEXT_OPCODE();
55715 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55716 			result = EX_VAR(opline->result.var);
55717 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2));
55718 			ZEND_VM_NEXT_OPCODE();
55719 		}
55720 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
55721 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55722 			result = EX_VAR(opline->result.var);
55723 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
55724 			ZEND_VM_NEXT_OPCODE();
55725 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55726 			result = EX_VAR(opline->result.var);
55727 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2)));
55728 			ZEND_VM_NEXT_OPCODE();
55729 		}
55730 	}
55731 
55732 	SAVE_OPLINE();
55733 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55734 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55735 	}
55736 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55737 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55738 	}
55739 	sub_function(EX_VAR(opline->result.var), op1, op2);
55740 	zval_ptr_dtor_nogc(free_op1);
55741 	zval_ptr_dtor_nogc(free_op2);
55742 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55743 }
55744 
55745 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55746 {
55747 	USE_OPLINE
55748 	zend_free_op free_op1, free_op2;
55749 	zval *op1, *op2, *result;
55750 
55751 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55752 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55753 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
55754 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55755 			zend_long overflow;
55756 
55757 			result = EX_VAR(opline->result.var);
55758 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
55759 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
55760 			ZEND_VM_NEXT_OPCODE();
55761 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55762 			result = EX_VAR(opline->result.var);
55763 			ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2));
55764 			ZEND_VM_NEXT_OPCODE();
55765 		}
55766 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
55767 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
55768 			result = EX_VAR(opline->result.var);
55769 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
55770 			ZEND_VM_NEXT_OPCODE();
55771 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55772 			result = EX_VAR(opline->result.var);
55773 			ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2)));
55774 			ZEND_VM_NEXT_OPCODE();
55775 		}
55776 	}
55777 
55778 	SAVE_OPLINE();
55779 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55780 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55781 	}
55782 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55783 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55784 	}
55785 	mul_function(EX_VAR(opline->result.var), op1, op2);
55786 	zval_ptr_dtor_nogc(free_op1);
55787 	zval_ptr_dtor_nogc(free_op2);
55788 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55789 }
55790 
55791 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55792 {
55793 	USE_OPLINE
55794 	zend_free_op free_op1, free_op2;
55795 	zval *op1, *op2;
55796 
55797 	SAVE_OPLINE();
55798 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55799 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55800 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
55801 	zval_ptr_dtor_nogc(free_op1);
55802 	zval_ptr_dtor_nogc(free_op2);
55803 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55804 }
55805 
55806 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55807 {
55808 	USE_OPLINE
55809 	zend_free_op free_op1, free_op2;
55810 	zval *op1, *op2, *result;
55811 
55812 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55813 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55814 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
55815 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
55816 			result = EX_VAR(opline->result.var);
55817 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
55818 				SAVE_OPLINE();
55819 				zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
55820 				HANDLE_EXCEPTION();
55821 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
55822 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
55823 				ZVAL_LONG(result, 0);
55824 			} else {
55825 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
55826 			}
55827 			ZEND_VM_NEXT_OPCODE();
55828 		}
55829 	}
55830 
55831 	SAVE_OPLINE();
55832 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55833 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55834 	}
55835 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55836 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55837 	}
55838 	mod_function(EX_VAR(opline->result.var), op1, op2);
55839 	zval_ptr_dtor_nogc(free_op1);
55840 	zval_ptr_dtor_nogc(free_op2);
55841 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55842 }
55843 
55844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55845 {
55846 	USE_OPLINE
55847 	zend_free_op free_op1, free_op2;
55848 	zval *op1, *op2;
55849 
55850 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55851 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55852 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
55853 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
55854 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
55855 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
55856 		ZEND_VM_NEXT_OPCODE();
55857 	}
55858 
55859 	SAVE_OPLINE();
55860 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55861 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55862 	}
55863 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55864 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55865 	}
55866 	shift_left_function(EX_VAR(opline->result.var), op1, op2);
55867 	zval_ptr_dtor_nogc(free_op1);
55868 	zval_ptr_dtor_nogc(free_op2);
55869 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55870 }
55871 
55872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55873 {
55874 	USE_OPLINE
55875 	zend_free_op free_op1, free_op2;
55876 	zval *op1, *op2;
55877 
55878 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55879 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55880 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
55881 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
55882 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
55883 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
55884 		ZEND_VM_NEXT_OPCODE();
55885 	}
55886 
55887 	SAVE_OPLINE();
55888 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
55889 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55890 	}
55891 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
55892 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55893 	}
55894 	shift_right_function(EX_VAR(opline->result.var), op1, op2);
55895 	zval_ptr_dtor_nogc(free_op1);
55896 	zval_ptr_dtor_nogc(free_op2);
55897 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55898 }
55899 
55900 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55901 {
55902 	USE_OPLINE
55903 	zend_free_op free_op1, free_op2;
55904 	zval *op1, *op2;
55905 
55906 	SAVE_OPLINE();
55907 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55908 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55909 	pow_function(EX_VAR(opline->result.var), op1, op2);
55910 	zval_ptr_dtor_nogc(free_op1);
55911 	zval_ptr_dtor_nogc(free_op2);
55912 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55913 }
55914 
55915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55916 {
55917 	USE_OPLINE
55918 	zend_free_op free_op1, free_op2;
55919 	zval *op1, *op2;
55920 
55921 	SAVE_OPLINE();
55922 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55923 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55924 
55925 	do {
55926 		if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
55927 		    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
55928 			zend_string *op1_str = Z_STR_P(op1);
55929 			zend_string *op2_str = Z_STR_P(op2);
55930 			zend_string *str;
55931 
55932 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
55933 				if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
55934 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
55935 					zval_ptr_dtor_nogc(free_op1);
55936 					break;
55937 				}
55938 			}
55939 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
55940 				if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
55941 					ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
55942 					zval_ptr_dtor_nogc(free_op1);
55943 					break;
55944 				}
55945 			}
55946 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
55947 			    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
55948 			    size_t len = ZSTR_LEN(op1_str);
55949 
55950 				str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
55951 				memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
55952 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
55953 				break;
55954 			} else {
55955 				str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
55956 				memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
55957 				memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
55958 				ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
55959 			}
55960 		} else {
55961 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
55962 				op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
55963 			}
55964 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
55965 				op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
55966 			}
55967 			concat_function(EX_VAR(opline->result.var), op1, op2);
55968 		}
55969 		zval_ptr_dtor_nogc(free_op1);
55970 	} while (0);
55971 	zval_ptr_dtor_nogc(free_op2);
55972 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
55973 }
55974 
55975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
55976 {
55977 	USE_OPLINE
55978 	zend_free_op free_op1, free_op2;
55979 	zval *op1, *op2, *result;
55980 
55981 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
55982 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
55983 	do {
55984 		int result;
55985 
55986 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
55987 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
55988 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
55989 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
55990 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
55991 			} else {
55992 				break;
55993 			}
55994 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
55995 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
55996 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
55997 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
55998 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
55999 			} else {
56000 				break;
56001 			}
56002 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
56003 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
56004 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
56005 					result = 1;
56006 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
56007 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
56008 						result = 0;
56009 					} else {
56010 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
56011 					}
56012 				} else {
56013 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
56014 				}
56015 				zval_ptr_dtor_nogc(free_op1);
56016 				zval_ptr_dtor_nogc(free_op2);
56017 			} else {
56018 				break;
56019 			}
56020 		} else {
56021 			break;
56022 		}
56023 		ZEND_VM_SMART_BRANCH(result, 0);
56024 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
56025 		ZEND_VM_NEXT_OPCODE();
56026 	} while (0);
56027 
56028 	SAVE_OPLINE();
56029 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
56030 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56031 	}
56032 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
56033 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56034 	}
56035 	result = EX_VAR(opline->result.var);
56036 	compare_function(result, op1, op2);
56037 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
56038 	zval_ptr_dtor_nogc(free_op1);
56039 	zval_ptr_dtor_nogc(free_op2);
56040 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56041 }
56042 
56043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56044 {
56045 	USE_OPLINE
56046 	zend_free_op free_op1, free_op2;
56047 	zval *op1, *op2, *result;
56048 
56049 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56050 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56051 	do {
56052 		int result;
56053 
56054 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
56055 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
56056 				result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
56057 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
56058 				result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
56059 			} else {
56060 				break;
56061 			}
56062 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
56063 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
56064 				result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
56065 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
56066 				result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
56067 			} else {
56068 				break;
56069 			}
56070 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
56071 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
56072 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
56073 					result = 0;
56074 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
56075 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
56076 						result = 1;
56077 					} else {
56078 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
56079 					}
56080 				} else {
56081 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
56082 				}
56083 				zval_ptr_dtor_nogc(free_op1);
56084 				zval_ptr_dtor_nogc(free_op2);
56085 			} else {
56086 				break;
56087 			}
56088 		} else {
56089 			break;
56090 		}
56091 		ZEND_VM_SMART_BRANCH(result, 0);
56092 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
56093 		ZEND_VM_NEXT_OPCODE();
56094 	} while (0);
56095 
56096 	SAVE_OPLINE();
56097 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
56098 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56099 	}
56100 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
56101 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56102 	}
56103 	result = EX_VAR(opline->result.var);
56104 	compare_function(result, op1, op2);
56105 	ZVAL_BOOL(result, Z_LVAL_P(result) != 0);
56106 	zval_ptr_dtor_nogc(free_op1);
56107 	zval_ptr_dtor_nogc(free_op2);
56108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56109 }
56110 
56111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56112 {
56113 	USE_OPLINE
56114 	zend_free_op free_op1, free_op2;
56115 	zval *op1, *op2, *result;
56116 
56117 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56118 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56119 	do {
56120 		int result;
56121 
56122 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
56123 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56124 				result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
56125 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
56126 				result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2));
56127 			} else {
56128 				break;
56129 			}
56130 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
56131 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
56132 				result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
56133 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56134 				result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2)));
56135 			} else {
56136 				break;
56137 			}
56138 		} else {
56139 			break;
56140 		}
56141 		ZEND_VM_SMART_BRANCH(result, 0);
56142 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
56143 		ZEND_VM_NEXT_OPCODE();
56144 	} while (0);
56145 
56146 	SAVE_OPLINE();
56147 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
56148 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56149 	}
56150 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
56151 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56152 	}
56153 	result = EX_VAR(opline->result.var);
56154 	compare_function(result, op1, op2);
56155 	ZVAL_BOOL(result, Z_LVAL_P(result) < 0);
56156 	zval_ptr_dtor_nogc(free_op1);
56157 	zval_ptr_dtor_nogc(free_op2);
56158 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56159 }
56160 
56161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56162 {
56163 	USE_OPLINE
56164 	zend_free_op free_op1, free_op2;
56165 	zval *op1, *op2, *result;
56166 
56167 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56168 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56169 	do {
56170 		int result;
56171 
56172 		if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
56173 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56174 				result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
56175 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
56176 				result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2));
56177 			} else {
56178 				break;
56179 			}
56180 		} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
56181 			if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
56182 				result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
56183 			} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56184 				result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2)));
56185 			} else {
56186 				break;
56187 			}
56188 		} else {
56189 			break;
56190 		}
56191 		ZEND_VM_SMART_BRANCH(result, 0);
56192 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
56193 		ZEND_VM_NEXT_OPCODE();
56194 	} while (0);
56195 
56196 	SAVE_OPLINE();
56197 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
56198 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56199 	}
56200 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
56201 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56202 	}
56203 	result = EX_VAR(opline->result.var);
56204 	compare_function(result, op1, op2);
56205 	ZVAL_BOOL(result, Z_LVAL_P(result) <= 0);
56206 	zval_ptr_dtor_nogc(free_op1);
56207 	zval_ptr_dtor_nogc(free_op2);
56208 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56209 }
56210 
56211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56212 {
56213 	USE_OPLINE
56214 	zend_free_op free_op1, free_op2;
56215 	zval *op1, *op2;
56216 
56217 	SAVE_OPLINE();
56218 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56219 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56220 	compare_function(EX_VAR(opline->result.var), op1, op2);
56221 	zval_ptr_dtor_nogc(free_op1);
56222 	zval_ptr_dtor_nogc(free_op2);
56223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56224 }
56225 
56226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56227 {
56228 	USE_OPLINE
56229 	zend_free_op free_op1, free_op2;
56230 	zval *op1, *op2;
56231 
56232 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56233 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56234 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
56235 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56236 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
56237 		ZEND_VM_NEXT_OPCODE();
56238 	}
56239 
56240 	SAVE_OPLINE();
56241 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
56242 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56243 	}
56244 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
56245 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56246 	}
56247 	bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
56248 	zval_ptr_dtor_nogc(free_op1);
56249 	zval_ptr_dtor_nogc(free_op2);
56250 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56251 }
56252 
56253 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56254 {
56255 	USE_OPLINE
56256 	zend_free_op free_op1, free_op2;
56257 	zval *op1, *op2;
56258 
56259 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56260 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56261 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
56262 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56263 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
56264 		ZEND_VM_NEXT_OPCODE();
56265 	}
56266 
56267 	SAVE_OPLINE();
56268 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
56269 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56270 	}
56271 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
56272 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56273 	}
56274 	bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
56275 	zval_ptr_dtor_nogc(free_op1);
56276 	zval_ptr_dtor_nogc(free_op2);
56277 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56278 }
56279 
56280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56281 {
56282 	USE_OPLINE
56283 	zend_free_op free_op1, free_op2;
56284 	zval *op1, *op2;
56285 
56286 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56287 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56288 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
56289 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
56290 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
56291 		ZEND_VM_NEXT_OPCODE();
56292 	}
56293 
56294 	SAVE_OPLINE();
56295 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
56296 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56297 	}
56298 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
56299 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56300 	}
56301 	bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
56302 	zval_ptr_dtor_nogc(free_op1);
56303 	zval_ptr_dtor_nogc(free_op2);
56304 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56305 }
56306 
56307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56308 {
56309 	USE_OPLINE
56310 	zend_free_op free_op1, free_op2;
56311 	zval *op1, *op2;
56312 
56313 	SAVE_OPLINE();
56314 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56315 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56316 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
56317 	zval_ptr_dtor_nogc(free_op1);
56318 	zval_ptr_dtor_nogc(free_op2);
56319 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56320 }
56321 
56322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56323 {
56324 	USE_OPLINE
56325 	zend_free_op free_op1, free_op2;
56326 	zval *container, *dim, *value, *result;
56327 
56328 	SAVE_OPLINE();
56329 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56330 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56331 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56332 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56333 fetch_dim_r_array:
56334 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
56335 			result = EX_VAR(opline->result.var);
56336 			ZVAL_COPY_UNREF(result, value);
56337 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
56338 			container = Z_REFVAL_P(container);
56339 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56340 				goto fetch_dim_r_array;
56341 			} else {
56342 				goto fetch_dim_r_slow;
56343 			}
56344 		} else {
56345 fetch_dim_r_slow:
56346 			result = EX_VAR(opline->result.var);
56347 			zend_fetch_dimension_address_read_R_slow(result, container, dim);
56348 		}
56349 	} else {
56350 		result = EX_VAR(opline->result.var);
56351 		zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
56352 	}
56353 	zval_ptr_dtor_nogc(free_op2);
56354 	zval_ptr_dtor_nogc(free_op1);
56355 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56356 }
56357 
56358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56359 {
56360 	USE_OPLINE
56361 	zend_free_op free_op1, free_op2;
56362 	zval *container;
56363 
56364 	SAVE_OPLINE();
56365 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56366 	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));
56367 	zval_ptr_dtor_nogc(free_op2);
56368 	zval_ptr_dtor_nogc(free_op1);
56369 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56370 }
56371 
56372 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56373 {
56374 	USE_OPLINE
56375 	zend_free_op free_op1;
56376 	zval *container;
56377 	zend_free_op free_op2;
56378 	zval *offset;
56379 
56380 	SAVE_OPLINE();
56381 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56382 
56383 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
56384 		zend_throw_error(NULL, "Using $this when not in object context");
56385 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
56386 		HANDLE_EXCEPTION();
56387 	}
56388 
56389 	offset  = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56390 
56391 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
56392 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
56393 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
56394 			container = Z_REFVAL_P(container);
56395 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
56396 				goto fetch_obj_is_no_object;
56397 			}
56398 		} else {
56399 			goto fetch_obj_is_no_object;
56400 		}
56401 	}
56402 
56403 	/* here we are sure we are dealing with an object */
56404 	do {
56405 		zend_object *zobj = Z_OBJ_P(container);
56406 		zval *retval;
56407 
56408 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
56409 			EXPECTED(zobj->ce == CACHED_PTR(Z_CACHE_SLOT_P(offset)))) {
56410 			uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(offset) + sizeof(void*));
56411 
56412 			if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
56413 				retval = OBJ_PROP(zobj, prop_offset);
56414 				if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
56415 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
56416 					break;
56417 				}
56418 			} else if (EXPECTED(zobj->properties != NULL)) {
56419 				retval = zend_hash_find(zobj->properties, Z_STR_P(offset));
56420 				if (EXPECTED(retval)) {
56421 					ZVAL_COPY(EX_VAR(opline->result.var), retval);
56422 					break;
56423 				}
56424 			}
56425 		}
56426 
56427 		if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
56428 fetch_obj_is_no_object:
56429 			ZVAL_NULL(EX_VAR(opline->result.var));
56430 		} else {
56431 
56432 			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));
56433 
56434 			if (retval != EX_VAR(opline->result.var)) {
56435 				ZVAL_COPY(EX_VAR(opline->result.var), retval);
56436 			}
56437 		}
56438 	} while (0);
56439 
56440 	zval_ptr_dtor_nogc(free_op2);
56441 	zval_ptr_dtor_nogc(free_op1);
56442 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56443 }
56444 
56445 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56446 {
56447 	USE_OPLINE
56448 	zend_free_op free_op1, free_op2;
56449 	zval *container;
56450 
56451 	SAVE_OPLINE();
56452 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56453 	zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
56454 	zval_ptr_dtor_nogc(free_op2);
56455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56456 }
56457 
56458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56459 {
56460 	USE_OPLINE
56461 	zend_free_op free_op1, free_op2;
56462 	zval *op1, *op2;
56463 	zend_string *op1_str, *op2_str, *str;
56464 
56465 	SAVE_OPLINE();
56466 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56467 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
56468 		op1_str = Z_STR_P(op1);
56469 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
56470 		op1_str = zend_string_copy(Z_STR_P(op1));
56471 	} else {
56472 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
56473 			GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56474 		}
56475 		op1_str = _zval_get_string_func(op1);
56476 	}
56477 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56478 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
56479 		op2_str = Z_STR_P(op2);
56480 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
56481 		op2_str = zend_string_copy(Z_STR_P(op2));
56482 	} else {
56483 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
56484 			GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56485 		}
56486 		op2_str = _zval_get_string_func(op2);
56487 	}
56488 	do {
56489 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56490 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
56491 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
56492 					zend_string_addref(op2_str);
56493 				}
56494 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
56495 				zend_string_release(op1_str);
56496 				break;
56497 			}
56498 		}
56499 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56500 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
56501 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
56502 					zend_string_addref(op1_str);
56503 				}
56504 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
56505 				zend_string_release(op2_str);
56506 				break;
56507 			}
56508 		}
56509 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
56510 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
56511 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
56512 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
56513 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56514 			zend_string_release(op1_str);
56515 		}
56516 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56517 			zend_string_release(op2_str);
56518 		}
56519 	} while (0);
56520 	zval_ptr_dtor_nogc(free_op1);
56521 	zval_ptr_dtor_nogc(free_op2);
56522 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56523 }
56524 
56525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56526 {
56527 	USE_OPLINE
56528 	zval *function_name;
56529 	zend_free_op free_op1, free_op2;
56530 	zval *object;
56531 	zend_function *fbc;
56532 	zend_class_entry *called_scope;
56533 	zend_object *obj;
56534 	zend_execute_data *call;
56535 	uint32_t call_info;
56536 
56537 	SAVE_OPLINE();
56538 
56539 	function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56540 
56541 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
56542 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
56543 		do {
56544 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
56545 				function_name = Z_REFVAL_P(function_name);
56546 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
56547 					break;
56548 				}
56549 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
56550 				GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
56551 				if (UNEXPECTED(EG(exception) != NULL)) {
56552 					HANDLE_EXCEPTION();
56553 				}
56554 			}
56555 			zend_throw_error(NULL, "Method name must be a string");
56556 			zval_ptr_dtor_nogc(free_op2);
56557 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
56558 			HANDLE_EXCEPTION();
56559 		} while (0);
56560 	}
56561 
56562 	object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56563 
56564 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
56565 		zend_throw_error(NULL, "Using $this when not in object context");
56566 		zval_ptr_dtor_nogc(free_op2);
56567 		HANDLE_EXCEPTION();
56568 	}
56569 
56570 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
56571 		do {
56572 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
56573 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
56574 					object = Z_REFVAL_P(object);
56575 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
56576 						break;
56577 					}
56578 				}
56579 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
56580 					object = GET_OP1_UNDEF_CV(object, BP_VAR_R);
56581 					if (UNEXPECTED(EG(exception) != NULL)) {
56582 						zval_ptr_dtor_nogc(free_op2);
56583 						HANDLE_EXCEPTION();
56584 					}
56585 				}
56586 				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)));
56587 				zval_ptr_dtor_nogc(free_op2);
56588 				zval_ptr_dtor_nogc(free_op1);
56589 				HANDLE_EXCEPTION();
56590 			}
56591 		} while (0);
56592 	}
56593 
56594 	obj = Z_OBJ_P(object);
56595 	called_scope = obj->ce;
56596 
56597 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
56598 	    UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
56599 	    zend_object *orig_obj = obj;
56600 
56601 		if (UNEXPECTED(obj->handlers->get_method == NULL)) {
56602 			zend_throw_error(NULL, "Object does not support method calls");
56603 			zval_ptr_dtor_nogc(free_op2);
56604 			zval_ptr_dtor_nogc(free_op1);
56605 			HANDLE_EXCEPTION();
56606 		}
56607 
56608 		/* First, locate the function. */
56609 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (EX_CONSTANT(opline->op2) + 1) : NULL));
56610 		if (UNEXPECTED(fbc == NULL)) {
56611 			if (EXPECTED(!EG(exception))) {
56612 				zend_throw_error(NULL, "Call to undefined method %s::%s()", ZSTR_VAL(obj->ce->name), Z_STRVAL_P(function_name));
56613 			}
56614 			zval_ptr_dtor_nogc(free_op2);
56615 			zval_ptr_dtor_nogc(free_op1);
56616 			HANDLE_EXCEPTION();
56617 		}
56618 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
56619 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
56620 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
56621 		    EXPECTED(obj == orig_obj)) {
56622 			CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
56623 		}
56624 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) {
56625 			init_func_run_time_cache(&fbc->op_array);
56626 		}
56627 	}
56628 
56629 	call_info = ZEND_CALL_NESTED_FUNCTION;
56630 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
56631 		obj = NULL;
56632 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
56633 		/* CV may be changed indirectly (e.g. when it's a reference) */
56634 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
56635 		GC_REFCOUNT(obj)++; /* For $this pointer */
56636 	}
56637 
56638 	zval_ptr_dtor_nogc(free_op2);
56639 	zval_ptr_dtor_nogc(free_op1);
56640 
56641 	if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
56642 		HANDLE_EXCEPTION();
56643 	}
56644 
56645 	call = zend_vm_stack_push_call_frame(call_info,
56646 		fbc, opline->extended_value, called_scope, obj);
56647 	call->prev_execute_data = EX(call);
56648 	EX(call) = call;
56649 
56650 	ZEND_VM_NEXT_OPCODE();
56651 }
56652 
56653 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56654 {
56655 	USE_OPLINE
56656 	zend_free_op free_op1, free_op2;
56657 	zval *op1, *op2, *result;
56658 
56659 	op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56660 	op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56661 	do {
56662 		int result;
56663 
56664 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
56665 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
56666 				result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
56667 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
56668 				result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
56669 			} else {
56670 				break;
56671 			}
56672 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
56673 			if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
56674 				result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
56675 			} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
56676 				result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
56677 			} else {
56678 				break;
56679 			}
56680 		} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
56681 			if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
56682 				if (Z_STR_P(op1) == Z_STR_P(op2)) {
56683 					result = 1;
56684 				} else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
56685 					if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
56686 						result = 0;
56687 					} else {
56688 						result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
56689 					}
56690 				} else {
56691 					result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
56692 				}
56693 				zval_ptr_dtor_nogc(free_op2);
56694 			} else {
56695 				break;
56696 			}
56697 		} else {
56698 			break;
56699 		}
56700 		ZEND_VM_SMART_BRANCH(result, 0);
56701 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
56702 		ZEND_VM_NEXT_OPCODE();
56703 	} while (0);
56704 
56705 	SAVE_OPLINE();
56706 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
56707 		op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
56708 	}
56709 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
56710 		op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
56711 	}
56712 	result = EX_VAR(opline->result.var);
56713 	compare_function(result, op1, op2);
56714 	ZVAL_BOOL(result, Z_LVAL_P(result) == 0);
56715 	zval_ptr_dtor_nogc(free_op2);
56716 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56717 }
56718 
56719 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56720 {
56721 	USE_OPLINE
56722 	zend_free_op free_op1, free_op2;
56723 	zval *container;
56724 	int result;
56725 	zend_ulong hval;
56726 	zval *offset;
56727 
56728 	SAVE_OPLINE();
56729 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56730 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56731 
56732 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56733 		HashTable *ht;
56734 		zval *value;
56735 		zend_string *str;
56736 
56737 isset_dim_obj_array:
56738 		ht = Z_ARRVAL_P(container);
56739 isset_again:
56740 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
56741 			str = Z_STR_P(offset);
56742 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
56743 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
56744 					goto num_index_prop;
56745 				}
56746 			}
56747 str_index_prop:
56748 			value = zend_hash_find_ind(ht, str);
56749 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
56750 			hval = Z_LVAL_P(offset);
56751 num_index_prop:
56752 			value = zend_hash_index_find(ht, hval);
56753 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
56754 			offset = Z_REFVAL_P(offset);
56755 			goto isset_again;
56756 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
56757 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
56758 			goto num_index_prop;
56759 		} else if (Z_TYPE_P(offset) == IS_NULL) {
56760 			str = ZSTR_EMPTY_ALLOC();
56761 			goto str_index_prop;
56762 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
56763 			hval = 0;
56764 			goto num_index_prop;
56765 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
56766 			hval = 1;
56767 			goto num_index_prop;
56768 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
56769 			hval = Z_RES_HANDLE_P(offset);
56770 			goto num_index_prop;
56771 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
56772 			GET_OP2_UNDEF_CV(offset, BP_VAR_R);
56773 			str = ZSTR_EMPTY_ALLOC();
56774 			goto str_index_prop;
56775 		} else {
56776 			zend_error(E_WARNING, "Illegal offset type in isset or empty");
56777 			goto isset_not_found;
56778 		}
56779 
56780 		if (opline->extended_value & ZEND_ISSET) {
56781 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
56782 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
56783 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
56784 		} else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
56785 			result = (value == NULL || !i_zend_is_true(value));
56786 		}
56787 		goto isset_dim_obj_exit;
56788 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
56789 		container = Z_REFVAL_P(container);
56790 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56791 			goto isset_dim_obj_array;
56792 		}
56793 	}
56794 
56795 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
56796 		offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
56797 	}
56798 
56799 	if (((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
56800 		if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
56801 			result =
56802 				((opline->extended_value & ZEND_ISSET) == 0) ^
56803 				Z_OBJ_HT_P(container)->has_dimension(container, offset, (opline->extended_value & ZEND_ISSET) == 0);
56804 		} else {
56805 			zend_error(E_NOTICE, "Trying to check element of non-array");
56806 			goto isset_not_found;
56807 		}
56808 	} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) { /* string offsets */
56809 		zend_long lval;
56810 
56811 		if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
56812 			lval = Z_LVAL_P(offset);
56813 isset_str_offset:
56814 			if (UNEXPECTED(lval < 0)) { /* Handle negative offset */
56815 				lval += (zend_long)Z_STRLEN_P(container);
56816 			}
56817 			if (EXPECTED(lval >= 0) && (size_t)lval < Z_STRLEN_P(container)) {
56818 				if (opline->extended_value & ZEND_ISSET) {
56819 					result = 1;
56820 				} else {
56821 					result = (Z_STRVAL_P(container)[lval] == '0');
56822 				}
56823 			} else {
56824 				goto isset_not_found;
56825 			}
56826 		} else {
56827 			if ((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) {
56828 				ZVAL_DEREF(offset);
56829 			}
56830 			if (Z_TYPE_P(offset) < IS_STRING /* simple scalar types */
56831 					|| (Z_TYPE_P(offset) == IS_STRING /* or numeric string */
56832 						&& IS_LONG == is_numeric_string(Z_STRVAL_P(offset), Z_STRLEN_P(offset), NULL, NULL, 0))) {
56833 				lval = zval_get_long(offset);
56834 				goto isset_str_offset;
56835 			}
56836 			goto isset_not_found;
56837 		}
56838 	} else {
56839 isset_not_found:
56840 		result = ((opline->extended_value & ZEND_ISSET) == 0);
56841 	}
56842 
56843 isset_dim_obj_exit:
56844 	zval_ptr_dtor_nogc(free_op2);
56845 	zval_ptr_dtor_nogc(free_op1);
56846 	ZEND_VM_SMART_BRANCH(result, 1);
56847 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
56848 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56849 }
56850 
56851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56852 {
56853 	USE_OPLINE
56854 	zend_free_op free_op1, free_op2;
56855 	zval *container;
56856 	int result;
56857 	zval *offset;
56858 
56859 	SAVE_OPLINE();
56860 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56861 
56862 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
56863 		zend_throw_error(NULL, "Using $this when not in object context");
56864 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
56865 		HANDLE_EXCEPTION();
56866 	}
56867 
56868 	offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56869 
56870 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
56871 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
56872 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
56873 			container = Z_REFVAL_P(container);
56874 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
56875 				goto isset_no_object;
56876 			}
56877 		} else {
56878 			goto isset_no_object;
56879 		}
56880 	}
56881 	if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
56882 		zend_error(E_NOTICE, "Trying to check property of non-object");
56883 isset_no_object:
56884 		result = ((opline->extended_value & ZEND_ISSET) == 0);
56885 	} else {
56886 		result =
56887 			((opline->extended_value & ZEND_ISSET) == 0) ^
56888 			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));
56889 	}
56890 
56891 	zval_ptr_dtor_nogc(free_op2);
56892 	zval_ptr_dtor_nogc(free_op1);
56893 	ZEND_VM_SMART_BRANCH(result, 1);
56894 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
56895 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56896 }
56897 
56898 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56899 {
56900 	USE_OPLINE
56901 	zend_free_op free_op1, free_op2;
56902 	zval *container, *dim, *value;
56903 	zend_long offset;
56904 
56905 	container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
56906 	dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
56907 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56908 fetch_dim_r_index_array:
56909 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
56910 			offset = Z_LVAL_P(dim);
56911 		} else {
56912 			offset = zval_get_long(dim);
56913 		}
56914 		ZEND_HASH_INDEX_FIND(Z_ARRVAL_P(container), offset, value, fetch_dim_r_index_undef);
56915 		ZVAL_COPY_UNREF(EX_VAR(opline->result.var), value);
56916 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
56917 			SAVE_OPLINE();
56918 			zval_ptr_dtor_nogc(free_op1);
56919 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56920 		} else {
56921 			ZEND_VM_NEXT_OPCODE();
56922 		}
56923 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
56924 		container = Z_REFVAL_P(container);
56925 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
56926 			goto fetch_dim_r_index_array;
56927 		} else {
56928 			goto fetch_dim_r_index_slow;
56929 		}
56930 	} else {
56931 fetch_dim_r_index_slow:
56932 		SAVE_OPLINE();
56933 		zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
56934 		zval_ptr_dtor_nogc(free_op1);
56935 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56936 	}
56937 
56938 fetch_dim_r_index_undef:
56939 	ZVAL_NULL(EX_VAR(opline->result.var));
56940 	SAVE_OPLINE();
56941 	zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, offset);
56942 	zval_ptr_dtor_nogc(free_op1);
56943 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56944 }
56945 
56946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56947 {
56948 	USE_OPLINE
56949 	zval *var_ptr;
56950 
56951 	var_ptr = EX_VAR(opline->op1.var);
56952 	Z_LVAL_P(var_ptr)++;
56953 	if (UNEXPECTED(0)) {
56954 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
56955 	}
56956 	ZEND_VM_NEXT_OPCODE();
56957 }
56958 
56959 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56960 {
56961 	USE_OPLINE
56962 	zval *var_ptr;
56963 
56964 	var_ptr = EX_VAR(opline->op1.var);
56965 	Z_LVAL_P(var_ptr)++;
56966 	if (UNEXPECTED(1)) {
56967 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
56968 	}
56969 	ZEND_VM_NEXT_OPCODE();
56970 }
56971 
56972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56973 {
56974 	USE_OPLINE
56975 	zval *var_ptr;
56976 
56977 	var_ptr = EX_VAR(opline->op1.var);
56978 	fast_long_increment_function(var_ptr);
56979 	if (UNEXPECTED(0)) {
56980 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
56981 	}
56982 	ZEND_VM_NEXT_OPCODE();
56983 }
56984 
56985 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56986 {
56987 	USE_OPLINE
56988 	zval *var_ptr;
56989 
56990 	var_ptr = EX_VAR(opline->op1.var);
56991 	fast_long_increment_function(var_ptr);
56992 	if (UNEXPECTED(1)) {
56993 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
56994 	}
56995 	ZEND_VM_NEXT_OPCODE();
56996 }
56997 
56998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
56999 {
57000 	USE_OPLINE
57001 	zval *var_ptr;
57002 
57003 	var_ptr = EX_VAR(opline->op1.var);
57004 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57005 		fast_long_increment_function(var_ptr);
57006 	} else {
57007 		Z_DVAL_P(var_ptr)++;
57008 	}
57009 	if (UNEXPECTED(0)) {
57010 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57011 	}
57012 	ZEND_VM_NEXT_OPCODE();
57013 }
57014 
57015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57016 {
57017 	USE_OPLINE
57018 	zval *var_ptr;
57019 
57020 	var_ptr = EX_VAR(opline->op1.var);
57021 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57022 		fast_long_increment_function(var_ptr);
57023 	} else {
57024 		Z_DVAL_P(var_ptr)++;
57025 	}
57026 	if (UNEXPECTED(1)) {
57027 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57028 	}
57029 	ZEND_VM_NEXT_OPCODE();
57030 }
57031 
57032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57033 {
57034 	USE_OPLINE
57035 	zval *var_ptr;
57036 
57037 	var_ptr = EX_VAR(opline->op1.var);
57038 	Z_LVAL_P(var_ptr)--;
57039 	if (UNEXPECTED(0)) {
57040 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57041 	}
57042 	ZEND_VM_NEXT_OPCODE();
57043 }
57044 
57045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57046 {
57047 	USE_OPLINE
57048 	zval *var_ptr;
57049 
57050 	var_ptr = EX_VAR(opline->op1.var);
57051 	Z_LVAL_P(var_ptr)--;
57052 	if (UNEXPECTED(1)) {
57053 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57054 	}
57055 	ZEND_VM_NEXT_OPCODE();
57056 }
57057 
57058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57059 {
57060 	USE_OPLINE
57061 	zval *var_ptr;
57062 
57063 	var_ptr = EX_VAR(opline->op1.var);
57064 	fast_long_decrement_function(var_ptr);
57065 	if (UNEXPECTED(0)) {
57066 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57067 	}
57068 	ZEND_VM_NEXT_OPCODE();
57069 }
57070 
57071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57072 {
57073 	USE_OPLINE
57074 	zval *var_ptr;
57075 
57076 	var_ptr = EX_VAR(opline->op1.var);
57077 	fast_long_decrement_function(var_ptr);
57078 	if (UNEXPECTED(1)) {
57079 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57080 	}
57081 	ZEND_VM_NEXT_OPCODE();
57082 }
57083 
57084 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57085 {
57086 	USE_OPLINE
57087 	zval *var_ptr;
57088 
57089 	var_ptr = EX_VAR(opline->op1.var);
57090 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57091 		fast_long_decrement_function(var_ptr);
57092 	} else {
57093 		Z_DVAL_P(var_ptr)--;
57094 	}
57095 	if (UNEXPECTED(0)) {
57096 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57097 	}
57098 	ZEND_VM_NEXT_OPCODE();
57099 }
57100 
57101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57102 {
57103 	USE_OPLINE
57104 	zval *var_ptr;
57105 
57106 	var_ptr = EX_VAR(opline->op1.var);
57107 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57108 		fast_long_decrement_function(var_ptr);
57109 	} else {
57110 		Z_DVAL_P(var_ptr)--;
57111 	}
57112 	if (UNEXPECTED(1)) {
57113 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57114 	}
57115 	ZEND_VM_NEXT_OPCODE();
57116 }
57117 
57118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57119 {
57120 	USE_OPLINE
57121 	zval *var_ptr;
57122 
57123 	var_ptr = EX_VAR(opline->op1.var);
57124 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57125 	Z_LVAL_P(var_ptr)++;
57126 	ZEND_VM_NEXT_OPCODE();
57127 }
57128 
57129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57130 {
57131 	USE_OPLINE
57132 	zval *var_ptr;
57133 
57134 	var_ptr = EX_VAR(opline->op1.var);
57135 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57136 	fast_long_increment_function(var_ptr);
57137 	ZEND_VM_NEXT_OPCODE();
57138 }
57139 
57140 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57141 {
57142 	USE_OPLINE
57143 	zval *var_ptr;
57144 
57145 	var_ptr = EX_VAR(opline->op1.var);
57146 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57147 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57148 		fast_long_increment_function(var_ptr);
57149 	} else {
57150 		Z_DVAL_P(var_ptr)++;
57151 	}
57152 	ZEND_VM_NEXT_OPCODE();
57153 }
57154 
57155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57156 {
57157 	USE_OPLINE
57158 	zval *var_ptr;
57159 
57160 	var_ptr = EX_VAR(opline->op1.var);
57161 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57162 	Z_LVAL_P(var_ptr)--;
57163 	ZEND_VM_NEXT_OPCODE();
57164 }
57165 
57166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57167 {
57168 	USE_OPLINE
57169 	zval *var_ptr;
57170 
57171 	var_ptr = EX_VAR(opline->op1.var);
57172 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
57173 	fast_long_decrement_function(var_ptr);
57174 	ZEND_VM_NEXT_OPCODE();
57175 }
57176 
57177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57178 {
57179 	USE_OPLINE
57180 	zval *var_ptr;
57181 
57182 	var_ptr = EX_VAR(opline->op1.var);
57183 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
57184 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
57185 		fast_long_decrement_function(var_ptr);
57186 	} else {
57187 		Z_DVAL_P(var_ptr)--;
57188 	}
57189 	ZEND_VM_NEXT_OPCODE();
57190 }
57191 
57192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57193 {
57194 	USE_OPLINE
57195 
57196 	zval *value;
57197 
57198 	value = EX_VAR(opline->op1.var);
57199 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
57200 	ZEND_VM_NEXT_OPCODE();
57201 }
57202 
57203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57204 {
57205 	USE_OPLINE
57206 
57207 	zval *value;
57208 
57209 	value = EX_VAR(opline->op1.var);
57210 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
57211 	ZEND_VM_NEXT_OPCODE();
57212 }
57213 
57214 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57215 {
57216 	USE_OPLINE
57217 	zval *op1, *op2, *result;
57218 
57219 	op1 = EX_VAR(opline->op1.var);
57220 	op2 = EX_CONSTANT(opline->op2);
57221 	result = EX_VAR(opline->result.var);
57222 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
57223 	ZEND_VM_NEXT_OPCODE();
57224 }
57225 
57226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57227 {
57228 	USE_OPLINE
57229 	zval *op1, *op2, *result;
57230 
57231 	op1 = EX_VAR(opline->op1.var);
57232 	op2 = EX_CONSTANT(opline->op2);
57233 	result = EX_VAR(opline->result.var);
57234 	fast_long_sub_function(result, op1, op2);
57235 	ZEND_VM_NEXT_OPCODE();
57236 }
57237 
57238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57239 {
57240 	USE_OPLINE
57241 	zval *op1, *op2, *result;
57242 
57243 	op1 = EX_VAR(opline->op1.var);
57244 	op2 = EX_CONSTANT(opline->op2);
57245 	result = EX_VAR(opline->result.var);
57246 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
57247 	ZEND_VM_NEXT_OPCODE();
57248 }
57249 
57250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57251 {
57252 	USE_OPLINE
57253 	zval *op1, *op2;
57254 	int result;
57255 
57256 	op1 = EX_VAR(opline->op1.var);
57257 	op2 = EX_CONSTANT(opline->op2);
57258 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57259 
57260 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57261 	ZEND_VM_NEXT_OPCODE();
57262 }
57263 
57264 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57265 {
57266 	USE_OPLINE
57267 	zval *op1, *op2;
57268 	int result;
57269 
57270 	op1 = EX_VAR(opline->op1.var);
57271 	op2 = EX_CONSTANT(opline->op2);
57272 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57273 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57274 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57275 	ZEND_VM_NEXT_OPCODE();
57276 }
57277 
57278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57279 {
57280 	USE_OPLINE
57281 	zval *op1, *op2;
57282 	int result;
57283 
57284 	op1 = EX_VAR(opline->op1.var);
57285 	op2 = EX_CONSTANT(opline->op2);
57286 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57287 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57288 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57289 	ZEND_VM_NEXT_OPCODE();
57290 }
57291 
57292 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57293 {
57294 	USE_OPLINE
57295 	zval *op1, *op2;
57296 	int result;
57297 
57298 	op1 = EX_VAR(opline->op1.var);
57299 	op2 = EX_CONSTANT(opline->op2);
57300 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57301 
57302 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57303 	ZEND_VM_NEXT_OPCODE();
57304 }
57305 
57306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57307 {
57308 	USE_OPLINE
57309 	zval *op1, *op2;
57310 	int result;
57311 
57312 	op1 = EX_VAR(opline->op1.var);
57313 	op2 = EX_CONSTANT(opline->op2);
57314 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57315 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57316 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57317 	ZEND_VM_NEXT_OPCODE();
57318 }
57319 
57320 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57321 {
57322 	USE_OPLINE
57323 	zval *op1, *op2;
57324 	int result;
57325 
57326 	op1 = EX_VAR(opline->op1.var);
57327 	op2 = EX_CONSTANT(opline->op2);
57328 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57329 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57330 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57331 	ZEND_VM_NEXT_OPCODE();
57332 }
57333 
57334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57335 {
57336 	USE_OPLINE
57337 	zval *op1, *op2;
57338 	int result;
57339 
57340 	op1 = EX_VAR(opline->op1.var);
57341 	op2 = EX_CONSTANT(opline->op2);
57342 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57343 
57344 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57345 	ZEND_VM_NEXT_OPCODE();
57346 }
57347 
57348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57349 {
57350 	USE_OPLINE
57351 	zval *op1, *op2;
57352 	int result;
57353 
57354 	op1 = EX_VAR(opline->op1.var);
57355 	op2 = EX_CONSTANT(opline->op2);
57356 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57357 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57358 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57359 	ZEND_VM_NEXT_OPCODE();
57360 }
57361 
57362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57363 {
57364 	USE_OPLINE
57365 	zval *op1, *op2;
57366 	int result;
57367 
57368 	op1 = EX_VAR(opline->op1.var);
57369 	op2 = EX_CONSTANT(opline->op2);
57370 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57371 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57372 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57373 	ZEND_VM_NEXT_OPCODE();
57374 }
57375 
57376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57377 {
57378 	USE_OPLINE
57379 	zval *op1, *op2;
57380 	int result;
57381 
57382 	op1 = EX_VAR(opline->op1.var);
57383 	op2 = EX_CONSTANT(opline->op2);
57384 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57385 
57386 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57387 	ZEND_VM_NEXT_OPCODE();
57388 }
57389 
57390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57391 {
57392 	USE_OPLINE
57393 	zval *op1, *op2;
57394 	int result;
57395 
57396 	op1 = EX_VAR(opline->op1.var);
57397 	op2 = EX_CONSTANT(opline->op2);
57398 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57399 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57400 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57401 	ZEND_VM_NEXT_OPCODE();
57402 }
57403 
57404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57405 {
57406 	USE_OPLINE
57407 	zval *op1, *op2;
57408 	int result;
57409 
57410 	op1 = EX_VAR(opline->op1.var);
57411 	op2 = EX_CONSTANT(opline->op2);
57412 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57413 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57414 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57415 	ZEND_VM_NEXT_OPCODE();
57416 }
57417 
57418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57419 {
57420 	USE_OPLINE
57421 	zval *op1, *op2, *result;
57422 
57423 	op1 = EX_VAR(opline->op1.var);
57424 	op2 = EX_VAR(opline->op2.var);
57425 	result = EX_VAR(opline->result.var);
57426 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
57427 	ZEND_VM_NEXT_OPCODE();
57428 }
57429 
57430 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57431 {
57432 	USE_OPLINE
57433 	zval *op1, *op2, *result;
57434 
57435 	op1 = EX_VAR(opline->op1.var);
57436 	op2 = EX_VAR(opline->op2.var);
57437 	result = EX_VAR(opline->result.var);
57438 	fast_long_add_function(result, op1, op2);
57439 	ZEND_VM_NEXT_OPCODE();
57440 }
57441 
57442 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57443 {
57444 	USE_OPLINE
57445 	zval *op1, *op2, *result;
57446 
57447 	op1 = EX_VAR(opline->op1.var);
57448 	op2 = EX_VAR(opline->op2.var);
57449 	result = EX_VAR(opline->result.var);
57450 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
57451 	ZEND_VM_NEXT_OPCODE();
57452 }
57453 
57454 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57455 {
57456 	USE_OPLINE
57457 	zval *op1, *op2, *result;
57458 
57459 	op1 = EX_VAR(opline->op1.var);
57460 	op2 = EX_VAR(opline->op2.var);
57461 	result = EX_VAR(opline->result.var);
57462 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
57463 	ZEND_VM_NEXT_OPCODE();
57464 }
57465 
57466 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57467 {
57468 	USE_OPLINE
57469 	zval *op1, *op2, *result;
57470 
57471 	op1 = EX_VAR(opline->op1.var);
57472 	op2 = EX_VAR(opline->op2.var);
57473 	result = EX_VAR(opline->result.var);
57474 	fast_long_sub_function(result, op1, op2);
57475 	ZEND_VM_NEXT_OPCODE();
57476 }
57477 
57478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57479 {
57480 	USE_OPLINE
57481 	zval *op1, *op2, *result;
57482 
57483 	op1 = EX_VAR(opline->op1.var);
57484 	op2 = EX_VAR(opline->op2.var);
57485 	result = EX_VAR(opline->result.var);
57486 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
57487 	ZEND_VM_NEXT_OPCODE();
57488 }
57489 
57490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57491 {
57492 	USE_OPLINE
57493 	zval *op1, *op2, *result;
57494 
57495 	op1 = EX_VAR(opline->op1.var);
57496 	op2 = EX_VAR(opline->op2.var);
57497 	result = EX_VAR(opline->result.var);
57498 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
57499 	ZEND_VM_NEXT_OPCODE();
57500 }
57501 
57502 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57503 {
57504 	USE_OPLINE
57505 	zval *op1, *op2, *result;
57506 	zend_long overflow;
57507 
57508 	op1 = EX_VAR(opline->op1.var);
57509 	op2 = EX_VAR(opline->op2.var);
57510 	result = EX_VAR(opline->result.var);
57511 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
57512 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
57513 	ZEND_VM_NEXT_OPCODE();
57514 }
57515 
57516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57517 {
57518 	USE_OPLINE
57519 	zval *op1, *op2, *result;
57520 
57521 	op1 = EX_VAR(opline->op1.var);
57522 	op2 = EX_VAR(opline->op2.var);
57523 	result = EX_VAR(opline->result.var);
57524 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
57525 	ZEND_VM_NEXT_OPCODE();
57526 }
57527 
57528 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57529 {
57530 	USE_OPLINE
57531 	zval *op1, *op2;
57532 	int result;
57533 
57534 	op1 = EX_VAR(opline->op1.var);
57535 	op2 = EX_VAR(opline->op2.var);
57536 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
57537 
57538 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57539 	ZEND_VM_NEXT_OPCODE();
57540 }
57541 
57542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57543 {
57544 	USE_OPLINE
57545 	zval *op1, *op2;
57546 	int result;
57547 
57548 	op1 = EX_VAR(opline->op1.var);
57549 	op2 = EX_VAR(opline->op2.var);
57550 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
57551 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57552 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57553 	ZEND_VM_NEXT_OPCODE();
57554 }
57555 
57556 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57557 {
57558 	USE_OPLINE
57559 	zval *op1, *op2;
57560 	int result;
57561 
57562 	op1 = EX_VAR(opline->op1.var);
57563 	op2 = EX_VAR(opline->op2.var);
57564 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
57565 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57566 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57567 	ZEND_VM_NEXT_OPCODE();
57568 }
57569 
57570 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57571 {
57572 	USE_OPLINE
57573 	zval *op1, *op2;
57574 	int result;
57575 
57576 	op1 = EX_VAR(opline->op1.var);
57577 	op2 = EX_VAR(opline->op2.var);
57578 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
57579 
57580 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57581 	ZEND_VM_NEXT_OPCODE();
57582 }
57583 
57584 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57585 {
57586 	USE_OPLINE
57587 	zval *op1, *op2;
57588 	int result;
57589 
57590 	op1 = EX_VAR(opline->op1.var);
57591 	op2 = EX_VAR(opline->op2.var);
57592 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
57593 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57594 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57595 	ZEND_VM_NEXT_OPCODE();
57596 }
57597 
57598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57599 {
57600 	USE_OPLINE
57601 	zval *op1, *op2;
57602 	int result;
57603 
57604 	op1 = EX_VAR(opline->op1.var);
57605 	op2 = EX_VAR(opline->op2.var);
57606 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
57607 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57608 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57609 	ZEND_VM_NEXT_OPCODE();
57610 }
57611 
57612 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57613 {
57614 	USE_OPLINE
57615 	zval *op1, *op2;
57616 	int result;
57617 
57618 	op1 = EX_VAR(opline->op1.var);
57619 	op2 = EX_VAR(opline->op2.var);
57620 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
57621 
57622 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57623 	ZEND_VM_NEXT_OPCODE();
57624 }
57625 
57626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57627 {
57628 	USE_OPLINE
57629 	zval *op1, *op2;
57630 	int result;
57631 
57632 	op1 = EX_VAR(opline->op1.var);
57633 	op2 = EX_VAR(opline->op2.var);
57634 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
57635 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57636 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57637 	ZEND_VM_NEXT_OPCODE();
57638 }
57639 
57640 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57641 {
57642 	USE_OPLINE
57643 	zval *op1, *op2;
57644 	int result;
57645 
57646 	op1 = EX_VAR(opline->op1.var);
57647 	op2 = EX_VAR(opline->op2.var);
57648 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
57649 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57650 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57651 	ZEND_VM_NEXT_OPCODE();
57652 }
57653 
57654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57655 {
57656 	USE_OPLINE
57657 	zval *op1, *op2;
57658 	int result;
57659 
57660 	op1 = EX_VAR(opline->op1.var);
57661 	op2 = EX_VAR(opline->op2.var);
57662 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
57663 
57664 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57665 	ZEND_VM_NEXT_OPCODE();
57666 }
57667 
57668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57669 {
57670 	USE_OPLINE
57671 	zval *op1, *op2;
57672 	int result;
57673 
57674 	op1 = EX_VAR(opline->op1.var);
57675 	op2 = EX_VAR(opline->op2.var);
57676 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
57677 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57678 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57679 	ZEND_VM_NEXT_OPCODE();
57680 }
57681 
57682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57683 {
57684 	USE_OPLINE
57685 	zval *op1, *op2;
57686 	int result;
57687 
57688 	op1 = EX_VAR(opline->op1.var);
57689 	op2 = EX_VAR(opline->op2.var);
57690 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
57691 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57692 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57693 	ZEND_VM_NEXT_OPCODE();
57694 }
57695 
57696 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57697 {
57698 	USE_OPLINE
57699 	zval *op1, *op2;
57700 	int result;
57701 
57702 	op1 = EX_VAR(opline->op1.var);
57703 	op2 = EX_VAR(opline->op2.var);
57704 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57705 
57706 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57707 	ZEND_VM_NEXT_OPCODE();
57708 }
57709 
57710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57711 {
57712 	USE_OPLINE
57713 	zval *op1, *op2;
57714 	int result;
57715 
57716 	op1 = EX_VAR(opline->op1.var);
57717 	op2 = EX_VAR(opline->op2.var);
57718 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57719 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57720 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57721 	ZEND_VM_NEXT_OPCODE();
57722 }
57723 
57724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57725 {
57726 	USE_OPLINE
57727 	zval *op1, *op2;
57728 	int result;
57729 
57730 	op1 = EX_VAR(opline->op1.var);
57731 	op2 = EX_VAR(opline->op2.var);
57732 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
57733 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57734 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57735 	ZEND_VM_NEXT_OPCODE();
57736 }
57737 
57738 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57739 {
57740 	USE_OPLINE
57741 	zval *op1, *op2;
57742 	int result;
57743 
57744 	op1 = EX_VAR(opline->op1.var);
57745 	op2 = EX_VAR(opline->op2.var);
57746 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57747 
57748 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57749 	ZEND_VM_NEXT_OPCODE();
57750 }
57751 
57752 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57753 {
57754 	USE_OPLINE
57755 	zval *op1, *op2;
57756 	int result;
57757 
57758 	op1 = EX_VAR(opline->op1.var);
57759 	op2 = EX_VAR(opline->op2.var);
57760 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57761 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57762 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57763 	ZEND_VM_NEXT_OPCODE();
57764 }
57765 
57766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57767 {
57768 	USE_OPLINE
57769 	zval *op1, *op2;
57770 	int result;
57771 
57772 	op1 = EX_VAR(opline->op1.var);
57773 	op2 = EX_VAR(opline->op2.var);
57774 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
57775 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57776 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57777 	ZEND_VM_NEXT_OPCODE();
57778 }
57779 
57780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57781 {
57782 	USE_OPLINE
57783 	zval *op1, *op2;
57784 	int result;
57785 
57786 	op1 = EX_VAR(opline->op1.var);
57787 	op2 = EX_VAR(opline->op2.var);
57788 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57789 
57790 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57791 	ZEND_VM_NEXT_OPCODE();
57792 }
57793 
57794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57795 {
57796 	USE_OPLINE
57797 	zval *op1, *op2;
57798 	int result;
57799 
57800 	op1 = EX_VAR(opline->op1.var);
57801 	op2 = EX_VAR(opline->op2.var);
57802 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57803 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57804 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57805 	ZEND_VM_NEXT_OPCODE();
57806 }
57807 
57808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57809 {
57810 	USE_OPLINE
57811 	zval *op1, *op2;
57812 	int result;
57813 
57814 	op1 = EX_VAR(opline->op1.var);
57815 	op2 = EX_VAR(opline->op2.var);
57816 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
57817 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57818 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57819 	ZEND_VM_NEXT_OPCODE();
57820 }
57821 
57822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57823 {
57824 	USE_OPLINE
57825 	zval *op1, *op2;
57826 	int result;
57827 
57828 	op1 = EX_VAR(opline->op1.var);
57829 	op2 = EX_VAR(opline->op2.var);
57830 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57831 
57832 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57833 	ZEND_VM_NEXT_OPCODE();
57834 }
57835 
57836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57837 {
57838 	USE_OPLINE
57839 	zval *op1, *op2;
57840 	int result;
57841 
57842 	op1 = EX_VAR(opline->op1.var);
57843 	op2 = EX_VAR(opline->op2.var);
57844 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57845 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
57846 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57847 	ZEND_VM_NEXT_OPCODE();
57848 }
57849 
57850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57851 {
57852 	USE_OPLINE
57853 	zval *op1, *op2;
57854 	int result;
57855 
57856 	op1 = EX_VAR(opline->op1.var);
57857 	op2 = EX_VAR(opline->op2.var);
57858 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
57859 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
57860 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
57861 	ZEND_VM_NEXT_OPCODE();
57862 }
57863 
57864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
57865 {
57866 	USE_OPLINE
57867 
57868 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
57869 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
57870 }
57871 
57872 
57873 void zend_init_opcodes_handlers(void)
57874 {
57875 	static const void *labels[] = {
57876 		ZEND_NOP_SPEC_HANDLER,
57877 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
57878 		ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
57879 		ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER,
57880 		ZEND_NULL_HANDLER,
57881 		ZEND_ADD_SPEC_CONST_CV_HANDLER,
57882 		ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
57883 		ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
57884 		ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
57885 		ZEND_NULL_HANDLER,
57886 		ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
57887 		ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER,
57888 		ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
57889 		ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER,
57890 		ZEND_NULL_HANDLER,
57891 		ZEND_ADD_SPEC_TMPVAR_CV_HANDLER,
57892 		ZEND_NULL_HANDLER,
57893 		ZEND_NULL_HANDLER,
57894 		ZEND_NULL_HANDLER,
57895 		ZEND_NULL_HANDLER,
57896 		ZEND_NULL_HANDLER,
57897 		ZEND_ADD_SPEC_CV_CONST_HANDLER,
57898 		ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
57899 		ZEND_ADD_SPEC_CV_TMPVAR_HANDLER,
57900 		ZEND_NULL_HANDLER,
57901 		ZEND_ADD_SPEC_CV_CV_HANDLER,
57902 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
57903 		ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
57904 		ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER,
57905 		ZEND_NULL_HANDLER,
57906 		ZEND_SUB_SPEC_CONST_CV_HANDLER,
57907 		ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
57908 		ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
57909 		ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
57910 		ZEND_NULL_HANDLER,
57911 		ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
57912 		ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER,
57913 		ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
57914 		ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER,
57915 		ZEND_NULL_HANDLER,
57916 		ZEND_SUB_SPEC_TMPVAR_CV_HANDLER,
57917 		ZEND_NULL_HANDLER,
57918 		ZEND_NULL_HANDLER,
57919 		ZEND_NULL_HANDLER,
57920 		ZEND_NULL_HANDLER,
57921 		ZEND_NULL_HANDLER,
57922 		ZEND_SUB_SPEC_CV_CONST_HANDLER,
57923 		ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
57924 		ZEND_SUB_SPEC_CV_TMPVAR_HANDLER,
57925 		ZEND_NULL_HANDLER,
57926 		ZEND_SUB_SPEC_CV_CV_HANDLER,
57927 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
57928 		ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER,
57929 		ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER,
57930 		ZEND_NULL_HANDLER,
57931 		ZEND_MUL_SPEC_CONST_CV_HANDLER,
57932 		ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
57933 		ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
57934 		ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
57935 		ZEND_NULL_HANDLER,
57936 		ZEND_MUL_SPEC_TMPVAR_CV_HANDLER,
57937 		ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER,
57938 		ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
57939 		ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER,
57940 		ZEND_NULL_HANDLER,
57941 		ZEND_MUL_SPEC_TMPVAR_CV_HANDLER,
57942 		ZEND_NULL_HANDLER,
57943 		ZEND_NULL_HANDLER,
57944 		ZEND_NULL_HANDLER,
57945 		ZEND_NULL_HANDLER,
57946 		ZEND_NULL_HANDLER,
57947 		ZEND_MUL_SPEC_CV_CONST_HANDLER,
57948 		ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
57949 		ZEND_MUL_SPEC_CV_TMPVAR_HANDLER,
57950 		ZEND_NULL_HANDLER,
57951 		ZEND_MUL_SPEC_CV_CV_HANDLER,
57952 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
57953 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
57954 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
57955 		ZEND_NULL_HANDLER,
57956 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
57957 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
57958 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57959 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57960 		ZEND_NULL_HANDLER,
57961 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
57962 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
57963 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57964 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57965 		ZEND_NULL_HANDLER,
57966 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
57967 		ZEND_NULL_HANDLER,
57968 		ZEND_NULL_HANDLER,
57969 		ZEND_NULL_HANDLER,
57970 		ZEND_NULL_HANDLER,
57971 		ZEND_NULL_HANDLER,
57972 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
57973 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
57974 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
57975 		ZEND_NULL_HANDLER,
57976 		ZEND_DIV_SPEC_CV_CV_HANDLER,
57977 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
57978 		ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
57979 		ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER,
57980 		ZEND_NULL_HANDLER,
57981 		ZEND_MOD_SPEC_CONST_CV_HANDLER,
57982 		ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
57983 		ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
57984 		ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
57985 		ZEND_NULL_HANDLER,
57986 		ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
57987 		ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER,
57988 		ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
57989 		ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER,
57990 		ZEND_NULL_HANDLER,
57991 		ZEND_MOD_SPEC_TMPVAR_CV_HANDLER,
57992 		ZEND_NULL_HANDLER,
57993 		ZEND_NULL_HANDLER,
57994 		ZEND_NULL_HANDLER,
57995 		ZEND_NULL_HANDLER,
57996 		ZEND_NULL_HANDLER,
57997 		ZEND_MOD_SPEC_CV_CONST_HANDLER,
57998 		ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
57999 		ZEND_MOD_SPEC_CV_TMPVAR_HANDLER,
58000 		ZEND_NULL_HANDLER,
58001 		ZEND_MOD_SPEC_CV_CV_HANDLER,
58002 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
58003 		ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
58004 		ZEND_SL_SPEC_CONST_TMPVAR_HANDLER,
58005 		ZEND_NULL_HANDLER,
58006 		ZEND_SL_SPEC_CONST_CV_HANDLER,
58007 		ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
58008 		ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
58009 		ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
58010 		ZEND_NULL_HANDLER,
58011 		ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
58012 		ZEND_SL_SPEC_TMPVAR_CONST_HANDLER,
58013 		ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
58014 		ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER,
58015 		ZEND_NULL_HANDLER,
58016 		ZEND_SL_SPEC_TMPVAR_CV_HANDLER,
58017 		ZEND_NULL_HANDLER,
58018 		ZEND_NULL_HANDLER,
58019 		ZEND_NULL_HANDLER,
58020 		ZEND_NULL_HANDLER,
58021 		ZEND_NULL_HANDLER,
58022 		ZEND_SL_SPEC_CV_CONST_HANDLER,
58023 		ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
58024 		ZEND_SL_SPEC_CV_TMPVAR_HANDLER,
58025 		ZEND_NULL_HANDLER,
58026 		ZEND_SL_SPEC_CV_CV_HANDLER,
58027 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
58028 		ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
58029 		ZEND_SR_SPEC_CONST_TMPVAR_HANDLER,
58030 		ZEND_NULL_HANDLER,
58031 		ZEND_SR_SPEC_CONST_CV_HANDLER,
58032 		ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
58033 		ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
58034 		ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
58035 		ZEND_NULL_HANDLER,
58036 		ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
58037 		ZEND_SR_SPEC_TMPVAR_CONST_HANDLER,
58038 		ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
58039 		ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER,
58040 		ZEND_NULL_HANDLER,
58041 		ZEND_SR_SPEC_TMPVAR_CV_HANDLER,
58042 		ZEND_NULL_HANDLER,
58043 		ZEND_NULL_HANDLER,
58044 		ZEND_NULL_HANDLER,
58045 		ZEND_NULL_HANDLER,
58046 		ZEND_NULL_HANDLER,
58047 		ZEND_SR_SPEC_CV_CONST_HANDLER,
58048 		ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
58049 		ZEND_SR_SPEC_CV_TMPVAR_HANDLER,
58050 		ZEND_NULL_HANDLER,
58051 		ZEND_SR_SPEC_CV_CV_HANDLER,
58052 		ZEND_CONCAT_SPEC_CONST_CONST_HANDLER,
58053 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
58054 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
58055 		ZEND_NULL_HANDLER,
58056 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
58057 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
58058 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58059 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58060 		ZEND_NULL_HANDLER,
58061 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
58062 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
58063 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58064 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58065 		ZEND_NULL_HANDLER,
58066 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
58067 		ZEND_NULL_HANDLER,
58068 		ZEND_NULL_HANDLER,
58069 		ZEND_NULL_HANDLER,
58070 		ZEND_NULL_HANDLER,
58071 		ZEND_NULL_HANDLER,
58072 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
58073 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58074 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58075 		ZEND_NULL_HANDLER,
58076 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
58077 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
58078 		ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER,
58079 		ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER,
58080 		ZEND_NULL_HANDLER,
58081 		ZEND_BW_OR_SPEC_CONST_CV_HANDLER,
58082 		ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
58083 		ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
58084 		ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
58085 		ZEND_NULL_HANDLER,
58086 		ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER,
58087 		ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER,
58088 		ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
58089 		ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER,
58090 		ZEND_NULL_HANDLER,
58091 		ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER,
58092 		ZEND_NULL_HANDLER,
58093 		ZEND_NULL_HANDLER,
58094 		ZEND_NULL_HANDLER,
58095 		ZEND_NULL_HANDLER,
58096 		ZEND_NULL_HANDLER,
58097 		ZEND_BW_OR_SPEC_CV_CONST_HANDLER,
58098 		ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
58099 		ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER,
58100 		ZEND_NULL_HANDLER,
58101 		ZEND_BW_OR_SPEC_CV_CV_HANDLER,
58102 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
58103 		ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER,
58104 		ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER,
58105 		ZEND_NULL_HANDLER,
58106 		ZEND_BW_AND_SPEC_CONST_CV_HANDLER,
58107 		ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
58108 		ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
58109 		ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
58110 		ZEND_NULL_HANDLER,
58111 		ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER,
58112 		ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER,
58113 		ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
58114 		ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER,
58115 		ZEND_NULL_HANDLER,
58116 		ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER,
58117 		ZEND_NULL_HANDLER,
58118 		ZEND_NULL_HANDLER,
58119 		ZEND_NULL_HANDLER,
58120 		ZEND_NULL_HANDLER,
58121 		ZEND_NULL_HANDLER,
58122 		ZEND_BW_AND_SPEC_CV_CONST_HANDLER,
58123 		ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
58124 		ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER,
58125 		ZEND_NULL_HANDLER,
58126 		ZEND_BW_AND_SPEC_CV_CV_HANDLER,
58127 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
58128 		ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER,
58129 		ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER,
58130 		ZEND_NULL_HANDLER,
58131 		ZEND_BW_XOR_SPEC_CONST_CV_HANDLER,
58132 		ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
58133 		ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58134 		ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58135 		ZEND_NULL_HANDLER,
58136 		ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER,
58137 		ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER,
58138 		ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58139 		ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58140 		ZEND_NULL_HANDLER,
58141 		ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER,
58142 		ZEND_NULL_HANDLER,
58143 		ZEND_NULL_HANDLER,
58144 		ZEND_NULL_HANDLER,
58145 		ZEND_NULL_HANDLER,
58146 		ZEND_NULL_HANDLER,
58147 		ZEND_BW_XOR_SPEC_CV_CONST_HANDLER,
58148 		ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
58149 		ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
58150 		ZEND_NULL_HANDLER,
58151 		ZEND_BW_XOR_SPEC_CV_CV_HANDLER,
58152 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
58153 		ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
58154 		ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
58155 		ZEND_NULL_HANDLER,
58156 		ZEND_BW_NOT_SPEC_CV_HANDLER,
58157 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
58158 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
58159 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
58160 		ZEND_NULL_HANDLER,
58161 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
58162 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
58163 		ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER,
58164 		ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER,
58165 		ZEND_NULL_HANDLER,
58166 		ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER,
58167 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
58168 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58169 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58170 		ZEND_NULL_HANDLER,
58171 		ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER,
58172 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
58173 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58174 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
58175 		ZEND_NULL_HANDLER,
58176 		ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER,
58177 		ZEND_NULL_HANDLER,
58178 		ZEND_NULL_HANDLER,
58179 		ZEND_NULL_HANDLER,
58180 		ZEND_NULL_HANDLER,
58181 		ZEND_NULL_HANDLER,
58182 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
58183 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
58184 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
58185 		ZEND_NULL_HANDLER,
58186 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
58187 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
58188 		ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER,
58189 		ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER,
58190 		ZEND_NULL_HANDLER,
58191 		ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER,
58192 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
58193 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
58194 		ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER,
58195 		ZEND_NULL_HANDLER,
58196 		ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER,
58197 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
58198 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
58199 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
58200 		ZEND_NULL_HANDLER,
58201 		ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER,
58202 		ZEND_NULL_HANDLER,
58203 		ZEND_NULL_HANDLER,
58204 		ZEND_NULL_HANDLER,
58205 		ZEND_NULL_HANDLER,
58206 		ZEND_NULL_HANDLER,
58207 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
58208 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
58209 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
58210 		ZEND_NULL_HANDLER,
58211 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
58212 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
58213 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER,
58214 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER,
58215 		ZEND_NULL_HANDLER,
58216 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER,
58217 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
58218 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
58219 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER,
58220 		ZEND_NULL_HANDLER,
58221 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER,
58222 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
58223 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
58224 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
58225 		ZEND_NULL_HANDLER,
58226 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER,
58227 		ZEND_NULL_HANDLER,
58228 		ZEND_NULL_HANDLER,
58229 		ZEND_NULL_HANDLER,
58230 		ZEND_NULL_HANDLER,
58231 		ZEND_NULL_HANDLER,
58232 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
58233 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
58234 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
58235 		ZEND_NULL_HANDLER,
58236 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
58237 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
58238 		ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58239 		ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58240 		ZEND_NULL_HANDLER,
58241 		ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER,
58242 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58243 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58244 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58245 		ZEND_NULL_HANDLER,
58246 		ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58247 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58248 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58249 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58250 		ZEND_NULL_HANDLER,
58251 		ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58252 		ZEND_NULL_HANDLER,
58253 		ZEND_NULL_HANDLER,
58254 		ZEND_NULL_HANDLER,
58255 		ZEND_NULL_HANDLER,
58256 		ZEND_NULL_HANDLER,
58257 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
58258 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58259 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58260 		ZEND_NULL_HANDLER,
58261 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
58262 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
58263 		ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58264 		ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58265 		ZEND_NULL_HANDLER,
58266 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER,
58267 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58268 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58269 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58270 		ZEND_NULL_HANDLER,
58271 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58272 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58273 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58274 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58275 		ZEND_NULL_HANDLER,
58276 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58277 		ZEND_NULL_HANDLER,
58278 		ZEND_NULL_HANDLER,
58279 		ZEND_NULL_HANDLER,
58280 		ZEND_NULL_HANDLER,
58281 		ZEND_NULL_HANDLER,
58282 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
58283 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58284 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58285 		ZEND_NULL_HANDLER,
58286 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
58287 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
58288 		ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
58289 		ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER,
58290 		ZEND_NULL_HANDLER,
58291 		ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER,
58292 		ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
58293 		ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
58294 		ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
58295 		ZEND_NULL_HANDLER,
58296 		ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
58297 		ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER,
58298 		ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
58299 		ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER,
58300 		ZEND_NULL_HANDLER,
58301 		ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER,
58302 		ZEND_NULL_HANDLER,
58303 		ZEND_NULL_HANDLER,
58304 		ZEND_NULL_HANDLER,
58305 		ZEND_NULL_HANDLER,
58306 		ZEND_NULL_HANDLER,
58307 		ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER,
58308 		ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
58309 		ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER,
58310 		ZEND_NULL_HANDLER,
58311 		ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER,
58312 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
58313 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58314 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER,
58315 		ZEND_NULL_HANDLER,
58316 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER,
58317 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58318 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58319 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58320 		ZEND_NULL_HANDLER,
58321 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58322 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58323 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58324 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58325 		ZEND_NULL_HANDLER,
58326 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER,
58327 		ZEND_NULL_HANDLER,
58328 		ZEND_NULL_HANDLER,
58329 		ZEND_NULL_HANDLER,
58330 		ZEND_NULL_HANDLER,
58331 		ZEND_NULL_HANDLER,
58332 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER,
58333 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58334 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58335 		ZEND_NULL_HANDLER,
58336 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER,
58337 		ZEND_CAST_SPEC_CONST_HANDLER,
58338 		ZEND_CAST_SPEC_TMP_HANDLER,
58339 		ZEND_CAST_SPEC_VAR_HANDLER,
58340 		ZEND_NULL_HANDLER,
58341 		ZEND_CAST_SPEC_CV_HANDLER,
58342 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
58343 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
58344 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
58345 		ZEND_NULL_HANDLER,
58346 		ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
58347 		ZEND_NULL_HANDLER,
58348 		ZEND_NULL_HANDLER,
58349 		ZEND_NULL_HANDLER,
58350 		ZEND_NULL_HANDLER,
58351 		ZEND_NULL_HANDLER,
58352 		ZEND_NULL_HANDLER,
58353 		ZEND_NULL_HANDLER,
58354 		ZEND_NULL_HANDLER,
58355 		ZEND_NULL_HANDLER,
58356 		ZEND_NULL_HANDLER,
58357 		ZEND_NULL_HANDLER,
58358 		ZEND_NULL_HANDLER,
58359 		ZEND_NULL_HANDLER,
58360 		ZEND_NULL_HANDLER,
58361 		ZEND_NULL_HANDLER,
58362 		ZEND_NULL_HANDLER,
58363 		ZEND_NULL_HANDLER,
58364 		ZEND_NULL_HANDLER,
58365 		ZEND_NULL_HANDLER,
58366 		ZEND_NULL_HANDLER,
58367 		ZEND_NULL_HANDLER,
58368 		ZEND_NULL_HANDLER,
58369 		ZEND_NULL_HANDLER,
58370 		ZEND_NULL_HANDLER,
58371 		ZEND_NULL_HANDLER,
58372 		ZEND_NULL_HANDLER,
58373 		ZEND_NULL_HANDLER,
58374 		ZEND_NULL_HANDLER,
58375 		ZEND_NULL_HANDLER,
58376 		ZEND_NULL_HANDLER,
58377 		ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER,
58378 		ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER,
58379 		ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER,
58380 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
58381 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER,
58382 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58383 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER,
58384 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER,
58385 		ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58386 		ZEND_NULL_HANDLER,
58387 		ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER,
58388 		ZEND_NULL_HANDLER,
58389 		ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER,
58390 		ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER,
58391 		ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER,
58392 		ZEND_NULL_HANDLER,
58393 		ZEND_NULL_HANDLER,
58394 		ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER,
58395 		ZEND_NULL_HANDLER,
58396 		ZEND_NULL_HANDLER,
58397 		ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58398 		ZEND_NULL_HANDLER,
58399 		ZEND_NULL_HANDLER,
58400 		ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58401 		ZEND_NULL_HANDLER,
58402 		ZEND_NULL_HANDLER,
58403 		ZEND_NULL_HANDLER,
58404 		ZEND_NULL_HANDLER,
58405 		ZEND_NULL_HANDLER,
58406 		ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER,
58407 		ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER,
58408 		ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER,
58409 		ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER,
58410 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
58411 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER,
58412 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER,
58413 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER,
58414 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER,
58415 		ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER,
58416 		ZEND_NULL_HANDLER,
58417 		ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER,
58418 		ZEND_NULL_HANDLER,
58419 		ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER,
58420 		ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER,
58421 		ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER,
58422 		ZEND_NULL_HANDLER,
58423 		ZEND_NULL_HANDLER,
58424 		ZEND_NULL_HANDLER,
58425 		ZEND_NULL_HANDLER,
58426 		ZEND_NULL_HANDLER,
58427 		ZEND_NULL_HANDLER,
58428 		ZEND_NULL_HANDLER,
58429 		ZEND_NULL_HANDLER,
58430 		ZEND_NULL_HANDLER,
58431 		ZEND_NULL_HANDLER,
58432 		ZEND_NULL_HANDLER,
58433 		ZEND_NULL_HANDLER,
58434 		ZEND_NULL_HANDLER,
58435 		ZEND_NULL_HANDLER,
58436 		ZEND_NULL_HANDLER,
58437 		ZEND_NULL_HANDLER,
58438 		ZEND_NULL_HANDLER,
58439 		ZEND_NULL_HANDLER,
58440 		ZEND_NULL_HANDLER,
58441 		ZEND_NULL_HANDLER,
58442 		ZEND_NULL_HANDLER,
58443 		ZEND_NULL_HANDLER,
58444 		ZEND_NULL_HANDLER,
58445 		ZEND_NULL_HANDLER,
58446 		ZEND_NULL_HANDLER,
58447 		ZEND_NULL_HANDLER,
58448 		ZEND_NULL_HANDLER,
58449 		ZEND_NULL_HANDLER,
58450 		ZEND_NULL_HANDLER,
58451 		ZEND_NULL_HANDLER,
58452 		ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER,
58453 		ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER,
58454 		ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER,
58455 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
58456 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER,
58457 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58458 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER,
58459 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER,
58460 		ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58461 		ZEND_NULL_HANDLER,
58462 		ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER,
58463 		ZEND_NULL_HANDLER,
58464 		ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER,
58465 		ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER,
58466 		ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER,
58467 		ZEND_NULL_HANDLER,
58468 		ZEND_NULL_HANDLER,
58469 		ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER,
58470 		ZEND_NULL_HANDLER,
58471 		ZEND_NULL_HANDLER,
58472 		ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58473 		ZEND_NULL_HANDLER,
58474 		ZEND_NULL_HANDLER,
58475 		ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58476 		ZEND_NULL_HANDLER,
58477 		ZEND_NULL_HANDLER,
58478 		ZEND_NULL_HANDLER,
58479 		ZEND_NULL_HANDLER,
58480 		ZEND_NULL_HANDLER,
58481 		ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER,
58482 		ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER,
58483 		ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER,
58484 		ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER,
58485 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
58486 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER,
58487 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER,
58488 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER,
58489 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER,
58490 		ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER,
58491 		ZEND_NULL_HANDLER,
58492 		ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER,
58493 		ZEND_NULL_HANDLER,
58494 		ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER,
58495 		ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER,
58496 		ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER,
58497 		ZEND_NULL_HANDLER,
58498 		ZEND_NULL_HANDLER,
58499 		ZEND_NULL_HANDLER,
58500 		ZEND_NULL_HANDLER,
58501 		ZEND_NULL_HANDLER,
58502 		ZEND_NULL_HANDLER,
58503 		ZEND_NULL_HANDLER,
58504 		ZEND_NULL_HANDLER,
58505 		ZEND_NULL_HANDLER,
58506 		ZEND_NULL_HANDLER,
58507 		ZEND_NULL_HANDLER,
58508 		ZEND_NULL_HANDLER,
58509 		ZEND_NULL_HANDLER,
58510 		ZEND_NULL_HANDLER,
58511 		ZEND_NULL_HANDLER,
58512 		ZEND_NULL_HANDLER,
58513 		ZEND_NULL_HANDLER,
58514 		ZEND_NULL_HANDLER,
58515 		ZEND_NULL_HANDLER,
58516 		ZEND_NULL_HANDLER,
58517 		ZEND_NULL_HANDLER,
58518 		ZEND_NULL_HANDLER,
58519 		ZEND_NULL_HANDLER,
58520 		ZEND_NULL_HANDLER,
58521 		ZEND_NULL_HANDLER,
58522 		ZEND_NULL_HANDLER,
58523 		ZEND_NULL_HANDLER,
58524 		ZEND_NULL_HANDLER,
58525 		ZEND_NULL_HANDLER,
58526 		ZEND_NULL_HANDLER,
58527 		ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER,
58528 		ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER,
58529 		ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER,
58530 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
58531 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER,
58532 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58533 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER,
58534 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER,
58535 		ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58536 		ZEND_NULL_HANDLER,
58537 		ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER,
58538 		ZEND_NULL_HANDLER,
58539 		ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER,
58540 		ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER,
58541 		ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER,
58542 		ZEND_NULL_HANDLER,
58543 		ZEND_NULL_HANDLER,
58544 		ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER,
58545 		ZEND_NULL_HANDLER,
58546 		ZEND_NULL_HANDLER,
58547 		ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58548 		ZEND_NULL_HANDLER,
58549 		ZEND_NULL_HANDLER,
58550 		ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58551 		ZEND_NULL_HANDLER,
58552 		ZEND_NULL_HANDLER,
58553 		ZEND_NULL_HANDLER,
58554 		ZEND_NULL_HANDLER,
58555 		ZEND_NULL_HANDLER,
58556 		ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER,
58557 		ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER,
58558 		ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER,
58559 		ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER,
58560 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
58561 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER,
58562 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER,
58563 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER,
58564 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER,
58565 		ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER,
58566 		ZEND_NULL_HANDLER,
58567 		ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER,
58568 		ZEND_NULL_HANDLER,
58569 		ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER,
58570 		ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER,
58571 		ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER,
58572 		ZEND_NULL_HANDLER,
58573 		ZEND_NULL_HANDLER,
58574 		ZEND_NULL_HANDLER,
58575 		ZEND_NULL_HANDLER,
58576 		ZEND_NULL_HANDLER,
58577 		ZEND_NULL_HANDLER,
58578 		ZEND_NULL_HANDLER,
58579 		ZEND_NULL_HANDLER,
58580 		ZEND_NULL_HANDLER,
58581 		ZEND_NULL_HANDLER,
58582 		ZEND_NULL_HANDLER,
58583 		ZEND_NULL_HANDLER,
58584 		ZEND_NULL_HANDLER,
58585 		ZEND_NULL_HANDLER,
58586 		ZEND_NULL_HANDLER,
58587 		ZEND_NULL_HANDLER,
58588 		ZEND_NULL_HANDLER,
58589 		ZEND_NULL_HANDLER,
58590 		ZEND_NULL_HANDLER,
58591 		ZEND_NULL_HANDLER,
58592 		ZEND_NULL_HANDLER,
58593 		ZEND_NULL_HANDLER,
58594 		ZEND_NULL_HANDLER,
58595 		ZEND_NULL_HANDLER,
58596 		ZEND_NULL_HANDLER,
58597 		ZEND_NULL_HANDLER,
58598 		ZEND_NULL_HANDLER,
58599 		ZEND_NULL_HANDLER,
58600 		ZEND_NULL_HANDLER,
58601 		ZEND_NULL_HANDLER,
58602 		ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER,
58603 		ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER,
58604 		ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER,
58605 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
58606 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER,
58607 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58608 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER,
58609 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER,
58610 		ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58611 		ZEND_NULL_HANDLER,
58612 		ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER,
58613 		ZEND_NULL_HANDLER,
58614 		ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER,
58615 		ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER,
58616 		ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER,
58617 		ZEND_NULL_HANDLER,
58618 		ZEND_NULL_HANDLER,
58619 		ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER,
58620 		ZEND_NULL_HANDLER,
58621 		ZEND_NULL_HANDLER,
58622 		ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58623 		ZEND_NULL_HANDLER,
58624 		ZEND_NULL_HANDLER,
58625 		ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58626 		ZEND_NULL_HANDLER,
58627 		ZEND_NULL_HANDLER,
58628 		ZEND_NULL_HANDLER,
58629 		ZEND_NULL_HANDLER,
58630 		ZEND_NULL_HANDLER,
58631 		ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER,
58632 		ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER,
58633 		ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER,
58634 		ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER,
58635 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
58636 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER,
58637 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER,
58638 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER,
58639 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER,
58640 		ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER,
58641 		ZEND_NULL_HANDLER,
58642 		ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER,
58643 		ZEND_NULL_HANDLER,
58644 		ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER,
58645 		ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER,
58646 		ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER,
58647 		ZEND_NULL_HANDLER,
58648 		ZEND_NULL_HANDLER,
58649 		ZEND_NULL_HANDLER,
58650 		ZEND_NULL_HANDLER,
58651 		ZEND_NULL_HANDLER,
58652 		ZEND_NULL_HANDLER,
58653 		ZEND_NULL_HANDLER,
58654 		ZEND_NULL_HANDLER,
58655 		ZEND_NULL_HANDLER,
58656 		ZEND_NULL_HANDLER,
58657 		ZEND_NULL_HANDLER,
58658 		ZEND_NULL_HANDLER,
58659 		ZEND_NULL_HANDLER,
58660 		ZEND_NULL_HANDLER,
58661 		ZEND_NULL_HANDLER,
58662 		ZEND_NULL_HANDLER,
58663 		ZEND_NULL_HANDLER,
58664 		ZEND_NULL_HANDLER,
58665 		ZEND_NULL_HANDLER,
58666 		ZEND_NULL_HANDLER,
58667 		ZEND_NULL_HANDLER,
58668 		ZEND_NULL_HANDLER,
58669 		ZEND_NULL_HANDLER,
58670 		ZEND_NULL_HANDLER,
58671 		ZEND_NULL_HANDLER,
58672 		ZEND_NULL_HANDLER,
58673 		ZEND_NULL_HANDLER,
58674 		ZEND_NULL_HANDLER,
58675 		ZEND_NULL_HANDLER,
58676 		ZEND_NULL_HANDLER,
58677 		ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER,
58678 		ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER,
58679 		ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER,
58680 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
58681 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER,
58682 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58683 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER,
58684 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER,
58685 		ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58686 		ZEND_NULL_HANDLER,
58687 		ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER,
58688 		ZEND_NULL_HANDLER,
58689 		ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER,
58690 		ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER,
58691 		ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER,
58692 		ZEND_NULL_HANDLER,
58693 		ZEND_NULL_HANDLER,
58694 		ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER,
58695 		ZEND_NULL_HANDLER,
58696 		ZEND_NULL_HANDLER,
58697 		ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58698 		ZEND_NULL_HANDLER,
58699 		ZEND_NULL_HANDLER,
58700 		ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58701 		ZEND_NULL_HANDLER,
58702 		ZEND_NULL_HANDLER,
58703 		ZEND_NULL_HANDLER,
58704 		ZEND_NULL_HANDLER,
58705 		ZEND_NULL_HANDLER,
58706 		ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER,
58707 		ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER,
58708 		ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER,
58709 		ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER,
58710 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
58711 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER,
58712 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER,
58713 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER,
58714 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER,
58715 		ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER,
58716 		ZEND_NULL_HANDLER,
58717 		ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER,
58718 		ZEND_NULL_HANDLER,
58719 		ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER,
58720 		ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER,
58721 		ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER,
58722 		ZEND_NULL_HANDLER,
58723 		ZEND_NULL_HANDLER,
58724 		ZEND_NULL_HANDLER,
58725 		ZEND_NULL_HANDLER,
58726 		ZEND_NULL_HANDLER,
58727 		ZEND_NULL_HANDLER,
58728 		ZEND_NULL_HANDLER,
58729 		ZEND_NULL_HANDLER,
58730 		ZEND_NULL_HANDLER,
58731 		ZEND_NULL_HANDLER,
58732 		ZEND_NULL_HANDLER,
58733 		ZEND_NULL_HANDLER,
58734 		ZEND_NULL_HANDLER,
58735 		ZEND_NULL_HANDLER,
58736 		ZEND_NULL_HANDLER,
58737 		ZEND_NULL_HANDLER,
58738 		ZEND_NULL_HANDLER,
58739 		ZEND_NULL_HANDLER,
58740 		ZEND_NULL_HANDLER,
58741 		ZEND_NULL_HANDLER,
58742 		ZEND_NULL_HANDLER,
58743 		ZEND_NULL_HANDLER,
58744 		ZEND_NULL_HANDLER,
58745 		ZEND_NULL_HANDLER,
58746 		ZEND_NULL_HANDLER,
58747 		ZEND_NULL_HANDLER,
58748 		ZEND_NULL_HANDLER,
58749 		ZEND_NULL_HANDLER,
58750 		ZEND_NULL_HANDLER,
58751 		ZEND_NULL_HANDLER,
58752 		ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER,
58753 		ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER,
58754 		ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER,
58755 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
58756 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER,
58757 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58758 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER,
58759 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER,
58760 		ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58761 		ZEND_NULL_HANDLER,
58762 		ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER,
58763 		ZEND_NULL_HANDLER,
58764 		ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER,
58765 		ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER,
58766 		ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER,
58767 		ZEND_NULL_HANDLER,
58768 		ZEND_NULL_HANDLER,
58769 		ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER,
58770 		ZEND_NULL_HANDLER,
58771 		ZEND_NULL_HANDLER,
58772 		ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58773 		ZEND_NULL_HANDLER,
58774 		ZEND_NULL_HANDLER,
58775 		ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58776 		ZEND_NULL_HANDLER,
58777 		ZEND_NULL_HANDLER,
58778 		ZEND_NULL_HANDLER,
58779 		ZEND_NULL_HANDLER,
58780 		ZEND_NULL_HANDLER,
58781 		ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER,
58782 		ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER,
58783 		ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER,
58784 		ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER,
58785 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
58786 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER,
58787 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER,
58788 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER,
58789 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER,
58790 		ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER,
58791 		ZEND_NULL_HANDLER,
58792 		ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER,
58793 		ZEND_NULL_HANDLER,
58794 		ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER,
58795 		ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER,
58796 		ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER,
58797 		ZEND_NULL_HANDLER,
58798 		ZEND_NULL_HANDLER,
58799 		ZEND_NULL_HANDLER,
58800 		ZEND_NULL_HANDLER,
58801 		ZEND_NULL_HANDLER,
58802 		ZEND_NULL_HANDLER,
58803 		ZEND_NULL_HANDLER,
58804 		ZEND_NULL_HANDLER,
58805 		ZEND_NULL_HANDLER,
58806 		ZEND_NULL_HANDLER,
58807 		ZEND_NULL_HANDLER,
58808 		ZEND_NULL_HANDLER,
58809 		ZEND_NULL_HANDLER,
58810 		ZEND_NULL_HANDLER,
58811 		ZEND_NULL_HANDLER,
58812 		ZEND_NULL_HANDLER,
58813 		ZEND_NULL_HANDLER,
58814 		ZEND_NULL_HANDLER,
58815 		ZEND_NULL_HANDLER,
58816 		ZEND_NULL_HANDLER,
58817 		ZEND_NULL_HANDLER,
58818 		ZEND_NULL_HANDLER,
58819 		ZEND_NULL_HANDLER,
58820 		ZEND_NULL_HANDLER,
58821 		ZEND_NULL_HANDLER,
58822 		ZEND_NULL_HANDLER,
58823 		ZEND_NULL_HANDLER,
58824 		ZEND_NULL_HANDLER,
58825 		ZEND_NULL_HANDLER,
58826 		ZEND_NULL_HANDLER,
58827 		ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER,
58828 		ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER,
58829 		ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER,
58830 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
58831 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER,
58832 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58833 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER,
58834 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER,
58835 		ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58836 		ZEND_NULL_HANDLER,
58837 		ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER,
58838 		ZEND_NULL_HANDLER,
58839 		ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER,
58840 		ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER,
58841 		ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER,
58842 		ZEND_NULL_HANDLER,
58843 		ZEND_NULL_HANDLER,
58844 		ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER,
58845 		ZEND_NULL_HANDLER,
58846 		ZEND_NULL_HANDLER,
58847 		ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58848 		ZEND_NULL_HANDLER,
58849 		ZEND_NULL_HANDLER,
58850 		ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58851 		ZEND_NULL_HANDLER,
58852 		ZEND_NULL_HANDLER,
58853 		ZEND_NULL_HANDLER,
58854 		ZEND_NULL_HANDLER,
58855 		ZEND_NULL_HANDLER,
58856 		ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER,
58857 		ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER,
58858 		ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER,
58859 		ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER,
58860 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
58861 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER,
58862 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER,
58863 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER,
58864 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER,
58865 		ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER,
58866 		ZEND_NULL_HANDLER,
58867 		ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER,
58868 		ZEND_NULL_HANDLER,
58869 		ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER,
58870 		ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER,
58871 		ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER,
58872 		ZEND_NULL_HANDLER,
58873 		ZEND_NULL_HANDLER,
58874 		ZEND_NULL_HANDLER,
58875 		ZEND_NULL_HANDLER,
58876 		ZEND_NULL_HANDLER,
58877 		ZEND_NULL_HANDLER,
58878 		ZEND_NULL_HANDLER,
58879 		ZEND_NULL_HANDLER,
58880 		ZEND_NULL_HANDLER,
58881 		ZEND_NULL_HANDLER,
58882 		ZEND_NULL_HANDLER,
58883 		ZEND_NULL_HANDLER,
58884 		ZEND_NULL_HANDLER,
58885 		ZEND_NULL_HANDLER,
58886 		ZEND_NULL_HANDLER,
58887 		ZEND_NULL_HANDLER,
58888 		ZEND_NULL_HANDLER,
58889 		ZEND_NULL_HANDLER,
58890 		ZEND_NULL_HANDLER,
58891 		ZEND_NULL_HANDLER,
58892 		ZEND_NULL_HANDLER,
58893 		ZEND_NULL_HANDLER,
58894 		ZEND_NULL_HANDLER,
58895 		ZEND_NULL_HANDLER,
58896 		ZEND_NULL_HANDLER,
58897 		ZEND_NULL_HANDLER,
58898 		ZEND_NULL_HANDLER,
58899 		ZEND_NULL_HANDLER,
58900 		ZEND_NULL_HANDLER,
58901 		ZEND_NULL_HANDLER,
58902 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER,
58903 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER,
58904 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER,
58905 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
58906 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER,
58907 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58908 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER,
58909 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER,
58910 		ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58911 		ZEND_NULL_HANDLER,
58912 		ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER,
58913 		ZEND_NULL_HANDLER,
58914 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER,
58915 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER,
58916 		ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER,
58917 		ZEND_NULL_HANDLER,
58918 		ZEND_NULL_HANDLER,
58919 		ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER,
58920 		ZEND_NULL_HANDLER,
58921 		ZEND_NULL_HANDLER,
58922 		ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58923 		ZEND_NULL_HANDLER,
58924 		ZEND_NULL_HANDLER,
58925 		ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58926 		ZEND_NULL_HANDLER,
58927 		ZEND_NULL_HANDLER,
58928 		ZEND_NULL_HANDLER,
58929 		ZEND_NULL_HANDLER,
58930 		ZEND_NULL_HANDLER,
58931 		ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER,
58932 		ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER,
58933 		ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER,
58934 		ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER,
58935 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58936 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER,
58937 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER,
58938 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58939 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER,
58940 		ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER,
58941 		ZEND_NULL_HANDLER,
58942 		ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER,
58943 		ZEND_NULL_HANDLER,
58944 		ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER,
58945 		ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER,
58946 		ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER,
58947 		ZEND_NULL_HANDLER,
58948 		ZEND_NULL_HANDLER,
58949 		ZEND_NULL_HANDLER,
58950 		ZEND_NULL_HANDLER,
58951 		ZEND_NULL_HANDLER,
58952 		ZEND_NULL_HANDLER,
58953 		ZEND_NULL_HANDLER,
58954 		ZEND_NULL_HANDLER,
58955 		ZEND_NULL_HANDLER,
58956 		ZEND_NULL_HANDLER,
58957 		ZEND_NULL_HANDLER,
58958 		ZEND_NULL_HANDLER,
58959 		ZEND_NULL_HANDLER,
58960 		ZEND_NULL_HANDLER,
58961 		ZEND_NULL_HANDLER,
58962 		ZEND_NULL_HANDLER,
58963 		ZEND_NULL_HANDLER,
58964 		ZEND_NULL_HANDLER,
58965 		ZEND_NULL_HANDLER,
58966 		ZEND_NULL_HANDLER,
58967 		ZEND_NULL_HANDLER,
58968 		ZEND_NULL_HANDLER,
58969 		ZEND_NULL_HANDLER,
58970 		ZEND_NULL_HANDLER,
58971 		ZEND_NULL_HANDLER,
58972 		ZEND_NULL_HANDLER,
58973 		ZEND_NULL_HANDLER,
58974 		ZEND_NULL_HANDLER,
58975 		ZEND_NULL_HANDLER,
58976 		ZEND_NULL_HANDLER,
58977 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER,
58978 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER,
58979 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER,
58980 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
58981 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER,
58982 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58983 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER,
58984 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER,
58985 		ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
58986 		ZEND_NULL_HANDLER,
58987 		ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER,
58988 		ZEND_NULL_HANDLER,
58989 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER,
58990 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER,
58991 		ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER,
58992 		ZEND_NULL_HANDLER,
58993 		ZEND_NULL_HANDLER,
58994 		ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER,
58995 		ZEND_NULL_HANDLER,
58996 		ZEND_NULL_HANDLER,
58997 		ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
58998 		ZEND_NULL_HANDLER,
58999 		ZEND_NULL_HANDLER,
59000 		ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
59001 		ZEND_NULL_HANDLER,
59002 		ZEND_NULL_HANDLER,
59003 		ZEND_NULL_HANDLER,
59004 		ZEND_NULL_HANDLER,
59005 		ZEND_NULL_HANDLER,
59006 		ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER,
59007 		ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER,
59008 		ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER,
59009 		ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER,
59010 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
59011 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER,
59012 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER,
59013 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER,
59014 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER,
59015 		ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER,
59016 		ZEND_NULL_HANDLER,
59017 		ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER,
59018 		ZEND_NULL_HANDLER,
59019 		ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER,
59020 		ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER,
59021 		ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER,
59022 		ZEND_NULL_HANDLER,
59023 		ZEND_NULL_HANDLER,
59024 		ZEND_NULL_HANDLER,
59025 		ZEND_NULL_HANDLER,
59026 		ZEND_NULL_HANDLER,
59027 		ZEND_NULL_HANDLER,
59028 		ZEND_NULL_HANDLER,
59029 		ZEND_NULL_HANDLER,
59030 		ZEND_NULL_HANDLER,
59031 		ZEND_NULL_HANDLER,
59032 		ZEND_NULL_HANDLER,
59033 		ZEND_NULL_HANDLER,
59034 		ZEND_NULL_HANDLER,
59035 		ZEND_NULL_HANDLER,
59036 		ZEND_NULL_HANDLER,
59037 		ZEND_NULL_HANDLER,
59038 		ZEND_NULL_HANDLER,
59039 		ZEND_NULL_HANDLER,
59040 		ZEND_NULL_HANDLER,
59041 		ZEND_NULL_HANDLER,
59042 		ZEND_NULL_HANDLER,
59043 		ZEND_NULL_HANDLER,
59044 		ZEND_NULL_HANDLER,
59045 		ZEND_NULL_HANDLER,
59046 		ZEND_NULL_HANDLER,
59047 		ZEND_NULL_HANDLER,
59048 		ZEND_NULL_HANDLER,
59049 		ZEND_NULL_HANDLER,
59050 		ZEND_NULL_HANDLER,
59051 		ZEND_NULL_HANDLER,
59052 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER,
59053 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER,
59054 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER,
59055 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
59056 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER,
59057 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER,
59058 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER,
59059 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER,
59060 		ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER,
59061 		ZEND_NULL_HANDLER,
59062 		ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER,
59063 		ZEND_NULL_HANDLER,
59064 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER,
59065 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER,
59066 		ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER,
59067 		ZEND_NULL_HANDLER,
59068 		ZEND_NULL_HANDLER,
59069 		ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER,
59070 		ZEND_NULL_HANDLER,
59071 		ZEND_NULL_HANDLER,
59072 		ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
59073 		ZEND_NULL_HANDLER,
59074 		ZEND_NULL_HANDLER,
59075 		ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
59076 		ZEND_NULL_HANDLER,
59077 		ZEND_NULL_HANDLER,
59078 		ZEND_NULL_HANDLER,
59079 		ZEND_NULL_HANDLER,
59080 		ZEND_NULL_HANDLER,
59081 		ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER,
59082 		ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER,
59083 		ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER,
59084 		ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER,
59085 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
59086 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER,
59087 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER,
59088 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER,
59089 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER,
59090 		ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER,
59091 		ZEND_NULL_HANDLER,
59092 		ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER,
59093 		ZEND_NULL_HANDLER,
59094 		ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER,
59095 		ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER,
59096 		ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER,
59097 		ZEND_NULL_HANDLER,
59098 		ZEND_NULL_HANDLER,
59099 		ZEND_NULL_HANDLER,
59100 		ZEND_NULL_HANDLER,
59101 		ZEND_NULL_HANDLER,
59102 		ZEND_NULL_HANDLER,
59103 		ZEND_NULL_HANDLER,
59104 		ZEND_NULL_HANDLER,
59105 		ZEND_NULL_HANDLER,
59106 		ZEND_NULL_HANDLER,
59107 		ZEND_NULL_HANDLER,
59108 		ZEND_NULL_HANDLER,
59109 		ZEND_NULL_HANDLER,
59110 		ZEND_NULL_HANDLER,
59111 		ZEND_NULL_HANDLER,
59112 		ZEND_NULL_HANDLER,
59113 		ZEND_NULL_HANDLER,
59114 		ZEND_NULL_HANDLER,
59115 		ZEND_NULL_HANDLER,
59116 		ZEND_NULL_HANDLER,
59117 		ZEND_NULL_HANDLER,
59118 		ZEND_NULL_HANDLER,
59119 		ZEND_NULL_HANDLER,
59120 		ZEND_NULL_HANDLER,
59121 		ZEND_NULL_HANDLER,
59122 		ZEND_NULL_HANDLER,
59123 		ZEND_NULL_HANDLER,
59124 		ZEND_NULL_HANDLER,
59125 		ZEND_NULL_HANDLER,
59126 		ZEND_NULL_HANDLER,
59127 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER,
59128 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER,
59129 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER,
59130 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
59131 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER,
59132 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
59133 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER,
59134 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER,
59135 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER,
59136 		ZEND_NULL_HANDLER,
59137 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER,
59138 		ZEND_NULL_HANDLER,
59139 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER,
59140 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER,
59141 		ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER,
59142 		ZEND_NULL_HANDLER,
59143 		ZEND_NULL_HANDLER,
59144 		ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER,
59145 		ZEND_NULL_HANDLER,
59146 		ZEND_NULL_HANDLER,
59147 		ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
59148 		ZEND_NULL_HANDLER,
59149 		ZEND_NULL_HANDLER,
59150 		ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
59151 		ZEND_NULL_HANDLER,
59152 		ZEND_NULL_HANDLER,
59153 		ZEND_NULL_HANDLER,
59154 		ZEND_NULL_HANDLER,
59155 		ZEND_NULL_HANDLER,
59156 		ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER,
59157 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER,
59158 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER,
59159 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER,
59160 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
59161 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER,
59162 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER,
59163 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER,
59164 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER,
59165 		ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER,
59166 		ZEND_NULL_HANDLER,
59167 		ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER,
59168 		ZEND_NULL_HANDLER,
59169 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER,
59170 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER,
59171 		ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER,
59172 		ZEND_NULL_HANDLER,
59173 		ZEND_NULL_HANDLER,
59174 		ZEND_NULL_HANDLER,
59175 		ZEND_NULL_HANDLER,
59176 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
59177 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
59178 		ZEND_NULL_HANDLER,
59179 		ZEND_NULL_HANDLER,
59180 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
59181 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
59182 		ZEND_NULL_HANDLER,
59183 		ZEND_NULL_HANDLER,
59184 		ZEND_NULL_HANDLER,
59185 		ZEND_NULL_HANDLER,
59186 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
59187 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
59188 		ZEND_NULL_HANDLER,
59189 		ZEND_NULL_HANDLER,
59190 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
59191 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
59192 		ZEND_NULL_HANDLER,
59193 		ZEND_NULL_HANDLER,
59194 		ZEND_POST_INC_SPEC_VAR_HANDLER,
59195 		ZEND_NULL_HANDLER,
59196 		ZEND_POST_INC_SPEC_CV_HANDLER,
59197 		ZEND_NULL_HANDLER,
59198 		ZEND_NULL_HANDLER,
59199 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
59200 		ZEND_NULL_HANDLER,
59201 		ZEND_POST_DEC_SPEC_CV_HANDLER,
59202 		ZEND_NULL_HANDLER,
59203 		ZEND_NULL_HANDLER,
59204 		ZEND_NULL_HANDLER,
59205 		ZEND_NULL_HANDLER,
59206 		ZEND_NULL_HANDLER,
59207 		ZEND_NULL_HANDLER,
59208 		ZEND_NULL_HANDLER,
59209 		ZEND_NULL_HANDLER,
59210 		ZEND_NULL_HANDLER,
59211 		ZEND_NULL_HANDLER,
59212 		ZEND_NULL_HANDLER,
59213 		ZEND_NULL_HANDLER,
59214 		ZEND_NULL_HANDLER,
59215 		ZEND_NULL_HANDLER,
59216 		ZEND_NULL_HANDLER,
59217 		ZEND_NULL_HANDLER,
59218 		ZEND_NULL_HANDLER,
59219 		ZEND_NULL_HANDLER,
59220 		ZEND_NULL_HANDLER,
59221 		ZEND_NULL_HANDLER,
59222 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
59223 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
59224 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
59225 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
59226 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
59227 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
59228 		ZEND_NULL_HANDLER,
59229 		ZEND_NULL_HANDLER,
59230 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
59231 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
59232 		ZEND_NULL_HANDLER,
59233 		ZEND_NULL_HANDLER,
59234 		ZEND_NULL_HANDLER,
59235 		ZEND_NULL_HANDLER,
59236 		ZEND_NULL_HANDLER,
59237 		ZEND_NULL_HANDLER,
59238 		ZEND_NULL_HANDLER,
59239 		ZEND_NULL_HANDLER,
59240 		ZEND_NULL_HANDLER,
59241 		ZEND_NULL_HANDLER,
59242 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
59243 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
59244 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
59245 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
59246 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
59247 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
59248 		ZEND_NULL_HANDLER,
59249 		ZEND_NULL_HANDLER,
59250 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
59251 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
59252 		ZEND_NULL_HANDLER,
59253 		ZEND_NULL_HANDLER,
59254 		ZEND_NULL_HANDLER,
59255 		ZEND_NULL_HANDLER,
59256 		ZEND_NULL_HANDLER,
59257 		ZEND_NULL_HANDLER,
59258 		ZEND_NULL_HANDLER,
59259 		ZEND_NULL_HANDLER,
59260 		ZEND_NULL_HANDLER,
59261 		ZEND_NULL_HANDLER,
59262 		ZEND_NULL_HANDLER,
59263 		ZEND_NULL_HANDLER,
59264 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
59265 		ZEND_NULL_HANDLER,
59266 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
59267 		ZEND_NULL_HANDLER,
59268 		ZEND_NULL_HANDLER,
59269 		ZEND_NULL_HANDLER,
59270 		ZEND_NULL_HANDLER,
59271 		ZEND_NULL_HANDLER,
59272 		ZEND_NULL_HANDLER,
59273 		ZEND_NULL_HANDLER,
59274 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
59275 		ZEND_NULL_HANDLER,
59276 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
59277 		ZEND_ECHO_SPEC_CONST_HANDLER,
59278 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
59279 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
59280 		ZEND_NULL_HANDLER,
59281 		ZEND_ECHO_SPEC_CV_HANDLER,
59282 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
59283 		ZEND_JMP_SPEC_HANDLER,
59284 		ZEND_JMPZ_SPEC_CONST_HANDLER,
59285 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
59286 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
59287 		ZEND_NULL_HANDLER,
59288 		ZEND_JMPZ_SPEC_CV_HANDLER,
59289 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
59290 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
59291 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
59292 		ZEND_NULL_HANDLER,
59293 		ZEND_JMPNZ_SPEC_CV_HANDLER,
59294 		ZEND_JMPZNZ_SPEC_CONST_HANDLER,
59295 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
59296 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
59297 		ZEND_NULL_HANDLER,
59298 		ZEND_JMPZNZ_SPEC_CV_HANDLER,
59299 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
59300 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
59301 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
59302 		ZEND_NULL_HANDLER,
59303 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
59304 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
59305 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
59306 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
59307 		ZEND_NULL_HANDLER,
59308 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
59309 		ZEND_CASE_SPEC_CONST_CONST_HANDLER,
59310 		ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER,
59311 		ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER,
59312 		ZEND_NULL_HANDLER,
59313 		ZEND_CASE_SPEC_CONST_CV_HANDLER,
59314 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
59315 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
59316 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
59317 		ZEND_NULL_HANDLER,
59318 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
59319 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
59320 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
59321 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
59322 		ZEND_NULL_HANDLER,
59323 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
59324 		ZEND_NULL_HANDLER,
59325 		ZEND_NULL_HANDLER,
59326 		ZEND_NULL_HANDLER,
59327 		ZEND_NULL_HANDLER,
59328 		ZEND_NULL_HANDLER,
59329 		ZEND_CASE_SPEC_CV_CONST_HANDLER,
59330 		ZEND_CASE_SPEC_CV_TMPVAR_HANDLER,
59331 		ZEND_CASE_SPEC_CV_TMPVAR_HANDLER,
59332 		ZEND_NULL_HANDLER,
59333 		ZEND_CASE_SPEC_CV_CV_HANDLER,
59334 		ZEND_NULL_HANDLER,
59335 		ZEND_NULL_HANDLER,
59336 		ZEND_NULL_HANDLER,
59337 		ZEND_NULL_HANDLER,
59338 		ZEND_NULL_HANDLER,
59339 		ZEND_NULL_HANDLER,
59340 		ZEND_NULL_HANDLER,
59341 		ZEND_NULL_HANDLER,
59342 		ZEND_NULL_HANDLER,
59343 		ZEND_NULL_HANDLER,
59344 		ZEND_NULL_HANDLER,
59345 		ZEND_NULL_HANDLER,
59346 		ZEND_NULL_HANDLER,
59347 		ZEND_NULL_HANDLER,
59348 		ZEND_NULL_HANDLER,
59349 		ZEND_NULL_HANDLER,
59350 		ZEND_NULL_HANDLER,
59351 		ZEND_NULL_HANDLER,
59352 		ZEND_NULL_HANDLER,
59353 		ZEND_NULL_HANDLER,
59354 		ZEND_NULL_HANDLER,
59355 		ZEND_NULL_HANDLER,
59356 		ZEND_NULL_HANDLER,
59357 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
59358 		ZEND_NULL_HANDLER,
59359 		ZEND_NULL_HANDLER,
59360 		ZEND_NULL_HANDLER,
59361 		ZEND_NULL_HANDLER,
59362 		ZEND_NULL_HANDLER,
59363 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER,
59364 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER,
59365 		ZEND_NULL_HANDLER,
59366 		ZEND_NULL_HANDLER,
59367 		ZEND_NULL_HANDLER,
59368 		ZEND_NULL_HANDLER,
59369 		ZEND_NULL_HANDLER,
59370 		ZEND_NULL_HANDLER,
59371 		ZEND_NULL_HANDLER,
59372 		ZEND_NULL_HANDLER,
59373 		ZEND_NULL_HANDLER,
59374 		ZEND_NULL_HANDLER,
59375 		ZEND_NULL_HANDLER,
59376 		ZEND_NULL_HANDLER,
59377 		ZEND_NULL_HANDLER,
59378 		ZEND_NULL_HANDLER,
59379 		ZEND_NULL_HANDLER,
59380 		ZEND_NULL_HANDLER,
59381 		ZEND_NULL_HANDLER,
59382 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
59383 		ZEND_NULL_HANDLER,
59384 		ZEND_NULL_HANDLER,
59385 		ZEND_NULL_HANDLER,
59386 		ZEND_NULL_HANDLER,
59387 		ZEND_NULL_HANDLER,
59388 		ZEND_NULL_HANDLER,
59389 		ZEND_NULL_HANDLER,
59390 		ZEND_NULL_HANDLER,
59391 		ZEND_NULL_HANDLER,
59392 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
59393 		ZEND_NULL_HANDLER,
59394 		ZEND_BOOL_SPEC_CONST_HANDLER,
59395 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
59396 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
59397 		ZEND_NULL_HANDLER,
59398 		ZEND_BOOL_SPEC_CV_HANDLER,
59399 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
59400 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
59401 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
59402 		ZEND_NULL_HANDLER,
59403 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
59404 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
59405 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59406 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59407 		ZEND_NULL_HANDLER,
59408 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
59409 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
59410 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59411 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
59412 		ZEND_NULL_HANDLER,
59413 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
59414 		ZEND_NULL_HANDLER,
59415 		ZEND_NULL_HANDLER,
59416 		ZEND_NULL_HANDLER,
59417 		ZEND_NULL_HANDLER,
59418 		ZEND_NULL_HANDLER,
59419 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
59420 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
59421 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
59422 		ZEND_NULL_HANDLER,
59423 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
59424 		ZEND_NULL_HANDLER,
59425 		ZEND_NULL_HANDLER,
59426 		ZEND_NULL_HANDLER,
59427 		ZEND_NULL_HANDLER,
59428 		ZEND_NULL_HANDLER,
59429 		ZEND_NULL_HANDLER,
59430 		ZEND_NULL_HANDLER,
59431 		ZEND_NULL_HANDLER,
59432 		ZEND_NULL_HANDLER,
59433 		ZEND_NULL_HANDLER,
59434 		ZEND_NULL_HANDLER,
59435 		ZEND_NULL_HANDLER,
59436 		ZEND_NULL_HANDLER,
59437 		ZEND_NULL_HANDLER,
59438 		ZEND_NULL_HANDLER,
59439 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
59440 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
59441 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
59442 		ZEND_NULL_HANDLER,
59443 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
59444 		ZEND_NULL_HANDLER,
59445 		ZEND_NULL_HANDLER,
59446 		ZEND_NULL_HANDLER,
59447 		ZEND_NULL_HANDLER,
59448 		ZEND_NULL_HANDLER,
59449 		ZEND_NULL_HANDLER,
59450 		ZEND_NULL_HANDLER,
59451 		ZEND_NULL_HANDLER,
59452 		ZEND_NULL_HANDLER,
59453 		ZEND_NULL_HANDLER,
59454 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
59455 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
59456 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
59457 		ZEND_NULL_HANDLER,
59458 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
59459 		ZEND_NULL_HANDLER,
59460 		ZEND_NULL_HANDLER,
59461 		ZEND_NULL_HANDLER,
59462 		ZEND_NULL_HANDLER,
59463 		ZEND_NULL_HANDLER,
59464 		ZEND_NULL_HANDLER,
59465 		ZEND_NULL_HANDLER,
59466 		ZEND_NULL_HANDLER,
59467 		ZEND_NULL_HANDLER,
59468 		ZEND_NULL_HANDLER,
59469 		ZEND_NULL_HANDLER,
59470 		ZEND_NULL_HANDLER,
59471 		ZEND_NULL_HANDLER,
59472 		ZEND_NULL_HANDLER,
59473 		ZEND_NULL_HANDLER,
59474 		ZEND_NULL_HANDLER,
59475 		ZEND_NULL_HANDLER,
59476 		ZEND_NULL_HANDLER,
59477 		ZEND_NULL_HANDLER,
59478 		ZEND_NULL_HANDLER,
59479 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
59480 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
59481 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
59482 		ZEND_NULL_HANDLER,
59483 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
59484 		ZEND_NULL_HANDLER,
59485 		ZEND_NULL_HANDLER,
59486 		ZEND_NULL_HANDLER,
59487 		ZEND_NULL_HANDLER,
59488 		ZEND_NULL_HANDLER,
59489 		ZEND_NULL_HANDLER,
59490 		ZEND_NULL_HANDLER,
59491 		ZEND_NULL_HANDLER,
59492 		ZEND_NULL_HANDLER,
59493 		ZEND_NULL_HANDLER,
59494 		ZEND_NULL_HANDLER,
59495 		ZEND_NULL_HANDLER,
59496 		ZEND_NULL_HANDLER,
59497 		ZEND_NULL_HANDLER,
59498 		ZEND_NULL_HANDLER,
59499 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
59500 		ZEND_NULL_HANDLER,
59501 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
59502 		ZEND_NULL_HANDLER,
59503 		ZEND_NULL_HANDLER,
59504 		ZEND_NULL_HANDLER,
59505 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
59506 		ZEND_NULL_HANDLER,
59507 		ZEND_NULL_HANDLER,
59508 		ZEND_NULL_HANDLER,
59509 		ZEND_NULL_HANDLER,
59510 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
59511 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
59512 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
59513 		ZEND_NULL_HANDLER,
59514 		ZEND_NULL_HANDLER,
59515 		ZEND_NULL_HANDLER,
59516 		ZEND_NULL_HANDLER,
59517 		ZEND_RETURN_SPEC_CONST_HANDLER,
59518 		ZEND_RETURN_SPEC_TMP_HANDLER,
59519 		ZEND_RETURN_SPEC_VAR_HANDLER,
59520 		ZEND_NULL_HANDLER,
59521 		ZEND_RETURN_SPEC_CV_HANDLER,
59522 		ZEND_RECV_SPEC_HANDLER,
59523 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
59524 		ZEND_NULL_HANDLER,
59525 		ZEND_NULL_HANDLER,
59526 		ZEND_NULL_HANDLER,
59527 		ZEND_NULL_HANDLER,
59528 		ZEND_SEND_VAL_SPEC_CONST_HANDLER,
59529 		ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
59530 		ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
59531 		ZEND_NULL_HANDLER,
59532 		ZEND_NULL_HANDLER,
59533 		ZEND_NULL_HANDLER,
59534 		ZEND_NULL_HANDLER,
59535 		ZEND_NULL_HANDLER,
59536 		ZEND_NULL_HANDLER,
59537 		ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
59538 		ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER,
59539 		ZEND_NULL_HANDLER,
59540 		ZEND_NULL_HANDLER,
59541 		ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
59542 		ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER,
59543 		ZEND_NULL_HANDLER,
59544 		ZEND_NULL_HANDLER,
59545 		ZEND_SEND_REF_SPEC_VAR_HANDLER,
59546 		ZEND_NULL_HANDLER,
59547 		ZEND_SEND_REF_SPEC_CV_HANDLER,
59548 		ZEND_NEW_SPEC_CONST_HANDLER,
59549 		ZEND_NULL_HANDLER,
59550 		ZEND_NEW_SPEC_VAR_HANDLER,
59551 		ZEND_NEW_SPEC_UNUSED_HANDLER,
59552 		ZEND_NULL_HANDLER,
59553 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
59554 		ZEND_NULL_HANDLER,
59555 		ZEND_NULL_HANDLER,
59556 		ZEND_NULL_HANDLER,
59557 		ZEND_NULL_HANDLER,
59558 		ZEND_NULL_HANDLER,
59559 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
59560 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
59561 		ZEND_NULL_HANDLER,
59562 		ZEND_NULL_HANDLER,
59563 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
59564 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
59565 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
59566 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
59567 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
59568 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
59569 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
59570 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
59571 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
59572 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
59573 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
59574 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
59575 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
59576 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
59577 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
59578 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
59579 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
59580 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
59581 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
59582 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
59583 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
59584 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
59585 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
59586 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
59587 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
59588 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
59589 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
59590 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
59591 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
59592 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
59593 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
59594 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
59595 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
59596 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
59597 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
59598 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
59599 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
59600 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
59601 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
59602 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
59603 		ZEND_NULL_HANDLER,
59604 		ZEND_NULL_HANDLER,
59605 		ZEND_NULL_HANDLER,
59606 		ZEND_NULL_HANDLER,
59607 		ZEND_NULL_HANDLER,
59608 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
59609 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
59610 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
59611 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
59612 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
59613 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
59614 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
59615 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
59616 		ZEND_NULL_HANDLER,
59617 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
59618 		ZEND_NULL_HANDLER,
59619 		ZEND_NULL_HANDLER,
59620 		ZEND_NULL_HANDLER,
59621 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
59622 		ZEND_NULL_HANDLER,
59623 		ZEND_NULL_HANDLER,
59624 		ZEND_NULL_HANDLER,
59625 		ZEND_NULL_HANDLER,
59626 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59627 		ZEND_NULL_HANDLER,
59628 		ZEND_NULL_HANDLER,
59629 		ZEND_NULL_HANDLER,
59630 		ZEND_NULL_HANDLER,
59631 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59632 		ZEND_NULL_HANDLER,
59633 		ZEND_NULL_HANDLER,
59634 		ZEND_NULL_HANDLER,
59635 		ZEND_NULL_HANDLER,
59636 		ZEND_NULL_HANDLER,
59637 		ZEND_NULL_HANDLER,
59638 		ZEND_NULL_HANDLER,
59639 		ZEND_NULL_HANDLER,
59640 		ZEND_NULL_HANDLER,
59641 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
59642 		ZEND_NULL_HANDLER,
59643 		ZEND_NULL_HANDLER,
59644 		ZEND_NULL_HANDLER,
59645 		ZEND_NULL_HANDLER,
59646 		ZEND_NULL_HANDLER,
59647 		ZEND_NULL_HANDLER,
59648 		ZEND_NULL_HANDLER,
59649 		ZEND_NULL_HANDLER,
59650 		ZEND_NULL_HANDLER,
59651 		ZEND_NULL_HANDLER,
59652 		ZEND_NULL_HANDLER,
59653 		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
59654 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
59655 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
59656 		ZEND_NULL_HANDLER,
59657 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
59658 		ZEND_NULL_HANDLER,
59659 		ZEND_NULL_HANDLER,
59660 		ZEND_NULL_HANDLER,
59661 		ZEND_NULL_HANDLER,
59662 		ZEND_NULL_HANDLER,
59663 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
59664 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
59665 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
59666 		ZEND_NULL_HANDLER,
59667 		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
59668 		ZEND_NULL_HANDLER,
59669 		ZEND_NULL_HANDLER,
59670 		ZEND_NULL_HANDLER,
59671 		ZEND_NULL_HANDLER,
59672 		ZEND_NULL_HANDLER,
59673 		ZEND_NULL_HANDLER,
59674 		ZEND_NULL_HANDLER,
59675 		ZEND_NULL_HANDLER,
59676 		ZEND_NULL_HANDLER,
59677 		ZEND_NULL_HANDLER,
59678 		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
59679 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59680 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59681 		ZEND_NULL_HANDLER,
59682 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
59683 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
59684 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59685 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59686 		ZEND_NULL_HANDLER,
59687 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
59688 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
59689 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
59690 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
59691 		ZEND_NULL_HANDLER,
59692 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
59693 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
59694 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
59695 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
59696 		ZEND_NULL_HANDLER,
59697 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
59698 		ZEND_NULL_HANDLER,
59699 		ZEND_NULL_HANDLER,
59700 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
59701 		ZEND_NULL_HANDLER,
59702 		ZEND_NULL_HANDLER,
59703 		ZEND_EXIT_SPEC_CONST_HANDLER,
59704 		ZEND_EXIT_SPEC_TMPVAR_HANDLER,
59705 		ZEND_EXIT_SPEC_TMPVAR_HANDLER,
59706 		ZEND_EXIT_SPEC_UNUSED_HANDLER,
59707 		ZEND_EXIT_SPEC_CV_HANDLER,
59708 		ZEND_NULL_HANDLER,
59709 		ZEND_NULL_HANDLER,
59710 		ZEND_NULL_HANDLER,
59711 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
59712 		ZEND_NULL_HANDLER,
59713 		ZEND_NULL_HANDLER,
59714 		ZEND_NULL_HANDLER,
59715 		ZEND_NULL_HANDLER,
59716 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
59717 		ZEND_NULL_HANDLER,
59718 		ZEND_NULL_HANDLER,
59719 		ZEND_NULL_HANDLER,
59720 		ZEND_NULL_HANDLER,
59721 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
59722 		ZEND_NULL_HANDLER,
59723 		ZEND_NULL_HANDLER,
59724 		ZEND_NULL_HANDLER,
59725 		ZEND_NULL_HANDLER,
59726 		ZEND_NULL_HANDLER,
59727 		ZEND_NULL_HANDLER,
59728 		ZEND_NULL_HANDLER,
59729 		ZEND_NULL_HANDLER,
59730 		ZEND_NULL_HANDLER,
59731 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
59732 		ZEND_NULL_HANDLER,
59733 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
59734 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
59735 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
59736 		ZEND_NULL_HANDLER,
59737 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
59738 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
59739 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59740 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59741 		ZEND_NULL_HANDLER,
59742 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
59743 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
59744 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59745 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59746 		ZEND_NULL_HANDLER,
59747 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
59748 		ZEND_NULL_HANDLER,
59749 		ZEND_NULL_HANDLER,
59750 		ZEND_NULL_HANDLER,
59751 		ZEND_NULL_HANDLER,
59752 		ZEND_NULL_HANDLER,
59753 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
59754 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
59755 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
59756 		ZEND_NULL_HANDLER,
59757 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
59758 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
59759 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
59760 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
59761 		ZEND_NULL_HANDLER,
59762 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
59763 		ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER,
59764 		ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER,
59765 		ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER,
59766 		ZEND_NULL_HANDLER,
59767 		ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER,
59768 		ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER,
59769 		ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER,
59770 		ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER,
59771 		ZEND_NULL_HANDLER,
59772 		ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER,
59773 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
59774 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
59775 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
59776 		ZEND_NULL_HANDLER,
59777 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
59778 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
59779 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
59780 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
59781 		ZEND_NULL_HANDLER,
59782 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
59783 		ZEND_NULL_HANDLER,
59784 		ZEND_NULL_HANDLER,
59785 		ZEND_NULL_HANDLER,
59786 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
59787 		ZEND_NULL_HANDLER,
59788 		ZEND_NULL_HANDLER,
59789 		ZEND_NULL_HANDLER,
59790 		ZEND_NULL_HANDLER,
59791 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
59792 		ZEND_NULL_HANDLER,
59793 		ZEND_NULL_HANDLER,
59794 		ZEND_NULL_HANDLER,
59795 		ZEND_NULL_HANDLER,
59796 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
59797 		ZEND_NULL_HANDLER,
59798 		ZEND_NULL_HANDLER,
59799 		ZEND_NULL_HANDLER,
59800 		ZEND_NULL_HANDLER,
59801 		ZEND_NULL_HANDLER,
59802 		ZEND_NULL_HANDLER,
59803 		ZEND_NULL_HANDLER,
59804 		ZEND_NULL_HANDLER,
59805 		ZEND_NULL_HANDLER,
59806 		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
59807 		ZEND_NULL_HANDLER,
59808 		ZEND_NULL_HANDLER,
59809 		ZEND_NULL_HANDLER,
59810 		ZEND_NULL_HANDLER,
59811 		ZEND_NULL_HANDLER,
59812 		ZEND_NULL_HANDLER,
59813 		ZEND_NULL_HANDLER,
59814 		ZEND_NULL_HANDLER,
59815 		ZEND_NULL_HANDLER,
59816 		ZEND_NULL_HANDLER,
59817 		ZEND_NULL_HANDLER,
59818 		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
59819 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
59820 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
59821 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
59822 		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
59823 		ZEND_NULL_HANDLER,
59824 		ZEND_NULL_HANDLER,
59825 		ZEND_NULL_HANDLER,
59826 		ZEND_NULL_HANDLER,
59827 		ZEND_NULL_HANDLER,
59828 		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
59829 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
59830 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
59831 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
59832 		ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
59833 		ZEND_NULL_HANDLER,
59834 		ZEND_NULL_HANDLER,
59835 		ZEND_NULL_HANDLER,
59836 		ZEND_NULL_HANDLER,
59837 		ZEND_NULL_HANDLER,
59838 		ZEND_NULL_HANDLER,
59839 		ZEND_NULL_HANDLER,
59840 		ZEND_NULL_HANDLER,
59841 		ZEND_NULL_HANDLER,
59842 		ZEND_NULL_HANDLER,
59843 		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
59844 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
59845 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
59846 		ZEND_NULL_HANDLER,
59847 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
59848 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
59849 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
59850 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
59851 		ZEND_NULL_HANDLER,
59852 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
59853 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
59854 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
59855 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
59856 		ZEND_NULL_HANDLER,
59857 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
59858 		ZEND_NULL_HANDLER,
59859 		ZEND_NULL_HANDLER,
59860 		ZEND_NULL_HANDLER,
59861 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
59862 		ZEND_NULL_HANDLER,
59863 		ZEND_NULL_HANDLER,
59864 		ZEND_NULL_HANDLER,
59865 		ZEND_NULL_HANDLER,
59866 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
59867 		ZEND_NULL_HANDLER,
59868 		ZEND_NULL_HANDLER,
59869 		ZEND_NULL_HANDLER,
59870 		ZEND_NULL_HANDLER,
59871 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
59872 		ZEND_NULL_HANDLER,
59873 		ZEND_NULL_HANDLER,
59874 		ZEND_NULL_HANDLER,
59875 		ZEND_NULL_HANDLER,
59876 		ZEND_NULL_HANDLER,
59877 		ZEND_NULL_HANDLER,
59878 		ZEND_NULL_HANDLER,
59879 		ZEND_NULL_HANDLER,
59880 		ZEND_NULL_HANDLER,
59881 		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
59882 		ZEND_NULL_HANDLER,
59883 		ZEND_NULL_HANDLER,
59884 		ZEND_NULL_HANDLER,
59885 		ZEND_NULL_HANDLER,
59886 		ZEND_NULL_HANDLER,
59887 		ZEND_NULL_HANDLER,
59888 		ZEND_NULL_HANDLER,
59889 		ZEND_NULL_HANDLER,
59890 		ZEND_NULL_HANDLER,
59891 		ZEND_NULL_HANDLER,
59892 		ZEND_NULL_HANDLER,
59893 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
59894 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
59895 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
59896 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
59897 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
59898 		ZEND_NULL_HANDLER,
59899 		ZEND_NULL_HANDLER,
59900 		ZEND_NULL_HANDLER,
59901 		ZEND_NULL_HANDLER,
59902 		ZEND_NULL_HANDLER,
59903 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
59904 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
59905 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
59906 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
59907 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
59908 		ZEND_NULL_HANDLER,
59909 		ZEND_NULL_HANDLER,
59910 		ZEND_NULL_HANDLER,
59911 		ZEND_NULL_HANDLER,
59912 		ZEND_NULL_HANDLER,
59913 		ZEND_NULL_HANDLER,
59914 		ZEND_NULL_HANDLER,
59915 		ZEND_NULL_HANDLER,
59916 		ZEND_NULL_HANDLER,
59917 		ZEND_NULL_HANDLER,
59918 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
59919 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
59920 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
59921 		ZEND_NULL_HANDLER,
59922 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
59923 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
59924 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
59925 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
59926 		ZEND_NULL_HANDLER,
59927 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
59928 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
59929 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
59930 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
59931 		ZEND_NULL_HANDLER,
59932 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
59933 		ZEND_NULL_HANDLER,
59934 		ZEND_NULL_HANDLER,
59935 		ZEND_NULL_HANDLER,
59936 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
59937 		ZEND_NULL_HANDLER,
59938 		ZEND_NULL_HANDLER,
59939 		ZEND_NULL_HANDLER,
59940 		ZEND_NULL_HANDLER,
59941 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
59942 		ZEND_NULL_HANDLER,
59943 		ZEND_NULL_HANDLER,
59944 		ZEND_NULL_HANDLER,
59945 		ZEND_NULL_HANDLER,
59946 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
59947 		ZEND_NULL_HANDLER,
59948 		ZEND_NULL_HANDLER,
59949 		ZEND_NULL_HANDLER,
59950 		ZEND_NULL_HANDLER,
59951 		ZEND_NULL_HANDLER,
59952 		ZEND_NULL_HANDLER,
59953 		ZEND_NULL_HANDLER,
59954 		ZEND_NULL_HANDLER,
59955 		ZEND_NULL_HANDLER,
59956 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
59957 		ZEND_NULL_HANDLER,
59958 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
59959 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
59960 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
59961 		ZEND_NULL_HANDLER,
59962 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
59963 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
59964 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59965 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59966 		ZEND_NULL_HANDLER,
59967 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
59968 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
59969 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59970 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59971 		ZEND_NULL_HANDLER,
59972 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
59973 		ZEND_NULL_HANDLER,
59974 		ZEND_NULL_HANDLER,
59975 		ZEND_NULL_HANDLER,
59976 		ZEND_NULL_HANDLER,
59977 		ZEND_NULL_HANDLER,
59978 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
59979 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
59980 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
59981 		ZEND_NULL_HANDLER,
59982 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
59983 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
59984 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
59985 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
59986 		ZEND_NULL_HANDLER,
59987 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
59988 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
59989 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59990 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59991 		ZEND_NULL_HANDLER,
59992 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
59993 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
59994 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59995 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59996 		ZEND_NULL_HANDLER,
59997 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
59998 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
59999 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
60000 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
60001 		ZEND_NULL_HANDLER,
60002 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
60003 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
60004 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
60005 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
60006 		ZEND_NULL_HANDLER,
60007 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
60008 		ZEND_NULL_HANDLER,
60009 		ZEND_NULL_HANDLER,
60010 		ZEND_NULL_HANDLER,
60011 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
60012 		ZEND_NULL_HANDLER,
60013 		ZEND_NULL_HANDLER,
60014 		ZEND_NULL_HANDLER,
60015 		ZEND_NULL_HANDLER,
60016 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
60017 		ZEND_NULL_HANDLER,
60018 		ZEND_NULL_HANDLER,
60019 		ZEND_NULL_HANDLER,
60020 		ZEND_NULL_HANDLER,
60021 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
60022 		ZEND_NULL_HANDLER,
60023 		ZEND_NULL_HANDLER,
60024 		ZEND_NULL_HANDLER,
60025 		ZEND_NULL_HANDLER,
60026 		ZEND_NULL_HANDLER,
60027 		ZEND_NULL_HANDLER,
60028 		ZEND_NULL_HANDLER,
60029 		ZEND_NULL_HANDLER,
60030 		ZEND_NULL_HANDLER,
60031 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
60032 		ZEND_NULL_HANDLER,
60033 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
60034 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
60035 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
60036 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
60037 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
60038 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
60039 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
60040 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
60041 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
60042 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
60043 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
60044 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
60045 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
60046 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
60047 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
60048 		ZEND_NULL_HANDLER,
60049 		ZEND_NULL_HANDLER,
60050 		ZEND_NULL_HANDLER,
60051 		ZEND_NULL_HANDLER,
60052 		ZEND_NULL_HANDLER,
60053 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
60054 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
60055 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
60056 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
60057 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
60058 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
60059 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
60060 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
60061 		ZEND_NULL_HANDLER,
60062 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
60063 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
60064 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
60065 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
60066 		ZEND_NULL_HANDLER,
60067 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
60068 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
60069 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
60070 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
60071 		ZEND_NULL_HANDLER,
60072 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
60073 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
60074 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
60075 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
60076 		ZEND_NULL_HANDLER,
60077 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
60078 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
60079 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
60080 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
60081 		ZEND_NULL_HANDLER,
60082 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
60083 		ZEND_NULL_HANDLER,
60084 		ZEND_NULL_HANDLER,
60085 		ZEND_NULL_HANDLER,
60086 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
60087 		ZEND_NULL_HANDLER,
60088 		ZEND_NULL_HANDLER,
60089 		ZEND_NULL_HANDLER,
60090 		ZEND_NULL_HANDLER,
60091 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
60092 		ZEND_NULL_HANDLER,
60093 		ZEND_NULL_HANDLER,
60094 		ZEND_NULL_HANDLER,
60095 		ZEND_NULL_HANDLER,
60096 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
60097 		ZEND_NULL_HANDLER,
60098 		ZEND_NULL_HANDLER,
60099 		ZEND_NULL_HANDLER,
60100 		ZEND_NULL_HANDLER,
60101 		ZEND_NULL_HANDLER,
60102 		ZEND_NULL_HANDLER,
60103 		ZEND_NULL_HANDLER,
60104 		ZEND_NULL_HANDLER,
60105 		ZEND_NULL_HANDLER,
60106 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
60107 		ZEND_NULL_HANDLER,
60108 		ZEND_NULL_HANDLER,
60109 		ZEND_NULL_HANDLER,
60110 		ZEND_NULL_HANDLER,
60111 		ZEND_NULL_HANDLER,
60112 		ZEND_NULL_HANDLER,
60113 		ZEND_NULL_HANDLER,
60114 		ZEND_NULL_HANDLER,
60115 		ZEND_NULL_HANDLER,
60116 		ZEND_NULL_HANDLER,
60117 		ZEND_NULL_HANDLER,
60118 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
60119 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
60120 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
60121 		ZEND_NULL_HANDLER,
60122 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
60123 		ZEND_NULL_HANDLER,
60124 		ZEND_NULL_HANDLER,
60125 		ZEND_NULL_HANDLER,
60126 		ZEND_NULL_HANDLER,
60127 		ZEND_NULL_HANDLER,
60128 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
60129 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
60130 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
60131 		ZEND_NULL_HANDLER,
60132 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
60133 		ZEND_NULL_HANDLER,
60134 		ZEND_NULL_HANDLER,
60135 		ZEND_NULL_HANDLER,
60136 		ZEND_NULL_HANDLER,
60137 		ZEND_NULL_HANDLER,
60138 		ZEND_NULL_HANDLER,
60139 		ZEND_NULL_HANDLER,
60140 		ZEND_NULL_HANDLER,
60141 		ZEND_NULL_HANDLER,
60142 		ZEND_NULL_HANDLER,
60143 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
60144 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
60145 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
60146 		ZEND_NULL_HANDLER,
60147 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
60148 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
60149 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
60150 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
60151 		ZEND_NULL_HANDLER,
60152 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
60153 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
60154 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
60155 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
60156 		ZEND_NULL_HANDLER,
60157 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
60158 		ZEND_FETCH_LIST_SPEC_CONST_CONST_HANDLER,
60159 		ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_HANDLER,
60160 		ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_HANDLER,
60161 		ZEND_NULL_HANDLER,
60162 		ZEND_FETCH_LIST_SPEC_CONST_CV_HANDLER,
60163 		ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER,
60164 		ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER,
60165 		ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER,
60166 		ZEND_NULL_HANDLER,
60167 		ZEND_FETCH_LIST_SPEC_TMPVAR_CV_HANDLER,
60168 		ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER,
60169 		ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER,
60170 		ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER,
60171 		ZEND_NULL_HANDLER,
60172 		ZEND_FETCH_LIST_SPEC_TMPVAR_CV_HANDLER,
60173 		ZEND_NULL_HANDLER,
60174 		ZEND_NULL_HANDLER,
60175 		ZEND_NULL_HANDLER,
60176 		ZEND_NULL_HANDLER,
60177 		ZEND_NULL_HANDLER,
60178 		ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER,
60179 		ZEND_FETCH_LIST_SPEC_CV_TMPVAR_HANDLER,
60180 		ZEND_FETCH_LIST_SPEC_CV_TMPVAR_HANDLER,
60181 		ZEND_NULL_HANDLER,
60182 		ZEND_FETCH_LIST_SPEC_CV_CV_HANDLER,
60183 		ZEND_NULL_HANDLER,
60184 		ZEND_NULL_HANDLER,
60185 		ZEND_NULL_HANDLER,
60186 		ZEND_NULL_HANDLER,
60187 		ZEND_NULL_HANDLER,
60188 		ZEND_NULL_HANDLER,
60189 		ZEND_NULL_HANDLER,
60190 		ZEND_NULL_HANDLER,
60191 		ZEND_NULL_HANDLER,
60192 		ZEND_NULL_HANDLER,
60193 		ZEND_NULL_HANDLER,
60194 		ZEND_NULL_HANDLER,
60195 		ZEND_NULL_HANDLER,
60196 		ZEND_NULL_HANDLER,
60197 		ZEND_NULL_HANDLER,
60198 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
60199 		ZEND_NULL_HANDLER,
60200 		ZEND_NULL_HANDLER,
60201 		ZEND_NULL_HANDLER,
60202 		ZEND_NULL_HANDLER,
60203 		ZEND_NULL_HANDLER,
60204 		ZEND_NULL_HANDLER,
60205 		ZEND_NULL_HANDLER,
60206 		ZEND_NULL_HANDLER,
60207 		ZEND_NULL_HANDLER,
60208 		ZEND_EXT_STMT_SPEC_HANDLER,
60209 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
60210 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
60211 		ZEND_EXT_NOP_SPEC_HANDLER,
60212 		ZEND_TICKS_SPEC_HANDLER,
60213 		ZEND_NULL_HANDLER,
60214 		ZEND_NULL_HANDLER,
60215 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
60216 		ZEND_NULL_HANDLER,
60217 		ZEND_NULL_HANDLER,
60218 		ZEND_NULL_HANDLER,
60219 		ZEND_NULL_HANDLER,
60220 		ZEND_NULL_HANDLER,
60221 		ZEND_NULL_HANDLER,
60222 		ZEND_CATCH_SPEC_CONST_CV_HANDLER,
60223 		ZEND_NULL_HANDLER,
60224 		ZEND_NULL_HANDLER,
60225 		ZEND_NULL_HANDLER,
60226 		ZEND_NULL_HANDLER,
60227 		ZEND_NULL_HANDLER,
60228 		ZEND_NULL_HANDLER,
60229 		ZEND_NULL_HANDLER,
60230 		ZEND_NULL_HANDLER,
60231 		ZEND_NULL_HANDLER,
60232 		ZEND_NULL_HANDLER,
60233 		ZEND_NULL_HANDLER,
60234 		ZEND_NULL_HANDLER,
60235 		ZEND_NULL_HANDLER,
60236 		ZEND_NULL_HANDLER,
60237 		ZEND_NULL_HANDLER,
60238 		ZEND_NULL_HANDLER,
60239 		ZEND_NULL_HANDLER,
60240 		ZEND_NULL_HANDLER,
60241 		ZEND_NULL_HANDLER,
60242 		ZEND_NULL_HANDLER,
60243 		ZEND_THROW_SPEC_CONST_HANDLER,
60244 		ZEND_THROW_SPEC_TMP_HANDLER,
60245 		ZEND_THROW_SPEC_VAR_HANDLER,
60246 		ZEND_NULL_HANDLER,
60247 		ZEND_THROW_SPEC_CV_HANDLER,
60248 		ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
60249 		ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
60250 		ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER,
60251 		ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
60252 		ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
60253 		ZEND_CLONE_SPEC_CONST_HANDLER,
60254 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
60255 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
60256 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
60257 		ZEND_CLONE_SPEC_CV_HANDLER,
60258 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
60259 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
60260 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
60261 		ZEND_NULL_HANDLER,
60262 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
60263 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
60264 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
60265 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
60266 		ZEND_NULL_HANDLER,
60267 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
60268 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
60269 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
60270 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
60271 		ZEND_NULL_HANDLER,
60272 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
60273 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
60274 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
60275 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
60276 		ZEND_NULL_HANDLER,
60277 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
60278 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
60279 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
60280 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
60281 		ZEND_NULL_HANDLER,
60282 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
60283 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
60284 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
60285 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
60286 		ZEND_NULL_HANDLER,
60287 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
60288 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
60289 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
60290 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
60291 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
60292 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
60293 		ZEND_NULL_HANDLER,
60294 		ZEND_NULL_HANDLER,
60295 		ZEND_NULL_HANDLER,
60296 		ZEND_NULL_HANDLER,
60297 		ZEND_NULL_HANDLER,
60298 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
60299 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
60300 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
60301 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
60302 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
60303 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
60304 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
60305 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
60306 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
60307 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
60308 		ZEND_NULL_HANDLER,
60309 		ZEND_NULL_HANDLER,
60310 		ZEND_NULL_HANDLER,
60311 		ZEND_NULL_HANDLER,
60312 		ZEND_NULL_HANDLER,
60313 		ZEND_NULL_HANDLER,
60314 		ZEND_NULL_HANDLER,
60315 		ZEND_NULL_HANDLER,
60316 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
60317 		ZEND_NULL_HANDLER,
60318 		ZEND_NULL_HANDLER,
60319 		ZEND_NULL_HANDLER,
60320 		ZEND_NULL_HANDLER,
60321 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
60322 		ZEND_NULL_HANDLER,
60323 		ZEND_NULL_HANDLER,
60324 		ZEND_NULL_HANDLER,
60325 		ZEND_NULL_HANDLER,
60326 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
60327 		ZEND_NULL_HANDLER,
60328 		ZEND_NULL_HANDLER,
60329 		ZEND_NULL_HANDLER,
60330 		ZEND_NULL_HANDLER,
60331 		ZEND_NULL_HANDLER,
60332 		ZEND_NULL_HANDLER,
60333 		ZEND_NULL_HANDLER,
60334 		ZEND_NULL_HANDLER,
60335 		ZEND_NULL_HANDLER,
60336 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
60337 		ZEND_NULL_HANDLER,
60338 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
60339 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
60340 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
60341 		ZEND_NULL_HANDLER,
60342 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
60343 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
60344 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60345 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60346 		ZEND_NULL_HANDLER,
60347 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
60348 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
60349 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60350 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60351 		ZEND_NULL_HANDLER,
60352 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
60353 		ZEND_NULL_HANDLER,
60354 		ZEND_NULL_HANDLER,
60355 		ZEND_NULL_HANDLER,
60356 		ZEND_NULL_HANDLER,
60357 		ZEND_NULL_HANDLER,
60358 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
60359 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
60360 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
60361 		ZEND_NULL_HANDLER,
60362 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
60363 		ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
60364 		ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER,
60365 		ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
60366 		ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER,
60367 		ZEND_NULL_HANDLER,
60368 		ZEND_NULL_HANDLER,
60369 		ZEND_NULL_HANDLER,
60370 		ZEND_NULL_HANDLER,
60371 		ZEND_NULL_HANDLER,
60372 		ZEND_NULL_HANDLER,
60373 		ZEND_NULL_HANDLER,
60374 		ZEND_NULL_HANDLER,
60375 		ZEND_SEND_VAR_SPEC_VAR_HANDLER,
60376 		ZEND_NULL_HANDLER,
60377 		ZEND_SEND_VAR_SPEC_CV_HANDLER,
60378 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
60379 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
60380 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
60381 		ZEND_NULL_HANDLER,
60382 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
60383 		ZEND_NULL_HANDLER,
60384 		ZEND_NULL_HANDLER,
60385 		ZEND_NULL_HANDLER,
60386 		ZEND_NULL_HANDLER,
60387 		ZEND_NULL_HANDLER,
60388 		ZEND_NULL_HANDLER,
60389 		ZEND_NULL_HANDLER,
60390 		ZEND_NULL_HANDLER,
60391 		ZEND_NULL_HANDLER,
60392 		ZEND_NULL_HANDLER,
60393 		ZEND_NULL_HANDLER,
60394 		ZEND_NULL_HANDLER,
60395 		ZEND_NULL_HANDLER,
60396 		ZEND_NULL_HANDLER,
60397 		ZEND_NULL_HANDLER,
60398 		ZEND_NULL_HANDLER,
60399 		ZEND_NULL_HANDLER,
60400 		ZEND_NULL_HANDLER,
60401 		ZEND_NULL_HANDLER,
60402 		ZEND_NULL_HANDLER,
60403 		ZEND_SEND_ARRAY_SPEC_HANDLER,
60404 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
60405 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
60406 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
60407 		ZEND_NULL_HANDLER,
60408 		ZEND_SEND_USER_SPEC_CV_HANDLER,
60409 		ZEND_STRLEN_SPEC_CONST_HANDLER,
60410 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
60411 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
60412 		ZEND_NULL_HANDLER,
60413 		ZEND_STRLEN_SPEC_CV_HANDLER,
60414 		ZEND_DEFINED_SPEC_CONST_HANDLER,
60415 		ZEND_NULL_HANDLER,
60416 		ZEND_NULL_HANDLER,
60417 		ZEND_NULL_HANDLER,
60418 		ZEND_NULL_HANDLER,
60419 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
60420 		ZEND_TYPE_CHECK_SPEC_TMP_HANDLER,
60421 		ZEND_TYPE_CHECK_SPEC_VAR_HANDLER,
60422 		ZEND_NULL_HANDLER,
60423 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
60424 		ZEND_NULL_HANDLER,
60425 		ZEND_NULL_HANDLER,
60426 		ZEND_NULL_HANDLER,
60427 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
60428 		ZEND_NULL_HANDLER,
60429 		ZEND_NULL_HANDLER,
60430 		ZEND_NULL_HANDLER,
60431 		ZEND_NULL_HANDLER,
60432 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
60433 		ZEND_NULL_HANDLER,
60434 		ZEND_NULL_HANDLER,
60435 		ZEND_NULL_HANDLER,
60436 		ZEND_NULL_HANDLER,
60437 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
60438 		ZEND_NULL_HANDLER,
60439 		ZEND_NULL_HANDLER,
60440 		ZEND_NULL_HANDLER,
60441 		ZEND_NULL_HANDLER,
60442 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
60443 		ZEND_NULL_HANDLER,
60444 		ZEND_NULL_HANDLER,
60445 		ZEND_NULL_HANDLER,
60446 		ZEND_NULL_HANDLER,
60447 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
60448 		ZEND_NULL_HANDLER,
60449 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
60450 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
60451 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
60452 		ZEND_NULL_HANDLER,
60453 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
60454 		ZEND_NULL_HANDLER,
60455 		ZEND_NULL_HANDLER,
60456 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
60457 		ZEND_NULL_HANDLER,
60458 		ZEND_NULL_HANDLER,
60459 		ZEND_NULL_HANDLER,
60460 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
60461 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
60462 		ZEND_NULL_HANDLER,
60463 		ZEND_NULL_HANDLER,
60464 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
60465 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
60466 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
60467 		ZEND_NULL_HANDLER,
60468 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
60469 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
60470 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
60471 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
60472 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
60473 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
60474 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
60475 		ZEND_NULL_HANDLER,
60476 		ZEND_NULL_HANDLER,
60477 		ZEND_NULL_HANDLER,
60478 		ZEND_NULL_HANDLER,
60479 		ZEND_NULL_HANDLER,
60480 		ZEND_NULL_HANDLER,
60481 		ZEND_NULL_HANDLER,
60482 		ZEND_NULL_HANDLER,
60483 		ZEND_NULL_HANDLER,
60484 		ZEND_NULL_HANDLER,
60485 		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
60486 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60487 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60488 		ZEND_NULL_HANDLER,
60489 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
60490 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
60491 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60492 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60493 		ZEND_NULL_HANDLER,
60494 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
60495 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
60496 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60497 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60498 		ZEND_NULL_HANDLER,
60499 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
60500 		ZEND_NULL_HANDLER,
60501 		ZEND_NULL_HANDLER,
60502 		ZEND_NULL_HANDLER,
60503 		ZEND_NULL_HANDLER,
60504 		ZEND_NULL_HANDLER,
60505 		ZEND_NULL_HANDLER,
60506 		ZEND_NULL_HANDLER,
60507 		ZEND_NULL_HANDLER,
60508 		ZEND_NULL_HANDLER,
60509 		ZEND_NULL_HANDLER,
60510 		ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
60511 		ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60512 		ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60513 		ZEND_NULL_HANDLER,
60514 		ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER,
60515 		ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
60516 		ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60517 		ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60518 		ZEND_NULL_HANDLER,
60519 		ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
60520 		ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER,
60521 		ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60522 		ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60523 		ZEND_NULL_HANDLER,
60524 		ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER,
60525 		ZEND_NULL_HANDLER,
60526 		ZEND_NULL_HANDLER,
60527 		ZEND_NULL_HANDLER,
60528 		ZEND_NULL_HANDLER,
60529 		ZEND_NULL_HANDLER,
60530 		ZEND_NULL_HANDLER,
60531 		ZEND_NULL_HANDLER,
60532 		ZEND_NULL_HANDLER,
60533 		ZEND_NULL_HANDLER,
60534 		ZEND_NULL_HANDLER,
60535 		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
60536 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60537 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60538 		ZEND_NULL_HANDLER,
60539 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
60540 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
60541 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60542 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60543 		ZEND_NULL_HANDLER,
60544 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
60545 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
60546 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60547 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60548 		ZEND_NULL_HANDLER,
60549 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
60550 		ZEND_NULL_HANDLER,
60551 		ZEND_NULL_HANDLER,
60552 		ZEND_NULL_HANDLER,
60553 		ZEND_NULL_HANDLER,
60554 		ZEND_NULL_HANDLER,
60555 		ZEND_NULL_HANDLER,
60556 		ZEND_NULL_HANDLER,
60557 		ZEND_NULL_HANDLER,
60558 		ZEND_NULL_HANDLER,
60559 		ZEND_NULL_HANDLER,
60560 		ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
60561 		ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60562 		ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
60563 		ZEND_NULL_HANDLER,
60564 		ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER,
60565 		ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
60566 		ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60567 		ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60568 		ZEND_NULL_HANDLER,
60569 		ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
60570 		ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER,
60571 		ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60572 		ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER,
60573 		ZEND_NULL_HANDLER,
60574 		ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER,
60575 		ZEND_NULL_HANDLER,
60576 		ZEND_NULL_HANDLER,
60577 		ZEND_NULL_HANDLER,
60578 		ZEND_NULL_HANDLER,
60579 		ZEND_NULL_HANDLER,
60580 		ZEND_NULL_HANDLER,
60581 		ZEND_NULL_HANDLER,
60582 		ZEND_NULL_HANDLER,
60583 		ZEND_NULL_HANDLER,
60584 		ZEND_NULL_HANDLER,
60585 		ZEND_NULL_HANDLER,
60586 		ZEND_NULL_HANDLER,
60587 		ZEND_NULL_HANDLER,
60588 		ZEND_NULL_HANDLER,
60589 		ZEND_NULL_HANDLER,
60590 		ZEND_NULL_HANDLER,
60591 		ZEND_NULL_HANDLER,
60592 		ZEND_NULL_HANDLER,
60593 		ZEND_NULL_HANDLER,
60594 		ZEND_NULL_HANDLER,
60595 		ZEND_NULL_HANDLER,
60596 		ZEND_NULL_HANDLER,
60597 		ZEND_NULL_HANDLER,
60598 		ZEND_NULL_HANDLER,
60599 		ZEND_NULL_HANDLER,
60600 		ZEND_NULL_HANDLER,
60601 		ZEND_NULL_HANDLER,
60602 		ZEND_NULL_HANDLER,
60603 		ZEND_NULL_HANDLER,
60604 		ZEND_NULL_HANDLER,
60605 		ZEND_NULL_HANDLER,
60606 		ZEND_NULL_HANDLER,
60607 		ZEND_NULL_HANDLER,
60608 		ZEND_NULL_HANDLER,
60609 		ZEND_NULL_HANDLER,
60610 		ZEND_NULL_HANDLER,
60611 		ZEND_NULL_HANDLER,
60612 		ZEND_NULL_HANDLER,
60613 		ZEND_NULL_HANDLER,
60614 		ZEND_NULL_HANDLER,
60615 		ZEND_NULL_HANDLER,
60616 		ZEND_NULL_HANDLER,
60617 		ZEND_NULL_HANDLER,
60618 		ZEND_NULL_HANDLER,
60619 		ZEND_NULL_HANDLER,
60620 		ZEND_NULL_HANDLER,
60621 		ZEND_NULL_HANDLER,
60622 		ZEND_NULL_HANDLER,
60623 		ZEND_NULL_HANDLER,
60624 		ZEND_NULL_HANDLER,
60625 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
60626 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
60627 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60628 		ZEND_NULL_HANDLER,
60629 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60630 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60631 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60632 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60633 		ZEND_NULL_HANDLER,
60634 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60635 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60636 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60637 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60638 		ZEND_NULL_HANDLER,
60639 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60640 		ZEND_NULL_HANDLER,
60641 		ZEND_NULL_HANDLER,
60642 		ZEND_NULL_HANDLER,
60643 		ZEND_NULL_HANDLER,
60644 		ZEND_NULL_HANDLER,
60645 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
60646 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
60647 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
60648 		ZEND_NULL_HANDLER,
60649 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
60650 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
60651 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
60652 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
60653 		ZEND_NULL_HANDLER,
60654 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
60655 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
60656 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
60657 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60658 		ZEND_NULL_HANDLER,
60659 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60660 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
60661 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
60662 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
60663 		ZEND_NULL_HANDLER,
60664 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
60665 		ZEND_NULL_HANDLER,
60666 		ZEND_NULL_HANDLER,
60667 		ZEND_NULL_HANDLER,
60668 		ZEND_NULL_HANDLER,
60669 		ZEND_NULL_HANDLER,
60670 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
60671 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
60672 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
60673 		ZEND_NULL_HANDLER,
60674 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
60675 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
60676 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
60677 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
60678 		ZEND_NULL_HANDLER,
60679 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
60680 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60681 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60682 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60683 		ZEND_NULL_HANDLER,
60684 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60685 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60686 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60687 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60688 		ZEND_NULL_HANDLER,
60689 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60690 		ZEND_NULL_HANDLER,
60691 		ZEND_NULL_HANDLER,
60692 		ZEND_NULL_HANDLER,
60693 		ZEND_NULL_HANDLER,
60694 		ZEND_NULL_HANDLER,
60695 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
60696 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
60697 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
60698 		ZEND_NULL_HANDLER,
60699 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
60700 		ZEND_NULL_HANDLER,
60701 		ZEND_NULL_HANDLER,
60702 		ZEND_NULL_HANDLER,
60703 		ZEND_NULL_HANDLER,
60704 		ZEND_NULL_HANDLER,
60705 		ZEND_NULL_HANDLER,
60706 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
60707 		ZEND_NULL_HANDLER,
60708 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
60709 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
60710 		ZEND_NULL_HANDLER,
60711 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
60712 		ZEND_NULL_HANDLER,
60713 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
60714 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
60715 		ZEND_NULL_HANDLER,
60716 		ZEND_NULL_HANDLER,
60717 		ZEND_NULL_HANDLER,
60718 		ZEND_NULL_HANDLER,
60719 		ZEND_NULL_HANDLER,
60720 		ZEND_NULL_HANDLER,
60721 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
60722 		ZEND_NULL_HANDLER,
60723 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
60724 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
60725 		ZEND_NULL_HANDLER,
60726 		ZEND_DECLARE_CLASS_SPEC_HANDLER,
60727 		ZEND_NULL_HANDLER,
60728 		ZEND_NULL_HANDLER,
60729 		ZEND_DECLARE_INHERITED_CLASS_SPEC_VAR_HANDLER,
60730 		ZEND_NULL_HANDLER,
60731 		ZEND_NULL_HANDLER,
60732 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
60733 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
60734 		ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
60735 		ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
60736 		ZEND_NULL_HANDLER,
60737 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
60738 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
60739 		ZEND_NULL_HANDLER,
60740 		ZEND_NULL_HANDLER,
60741 		ZEND_NULL_HANDLER,
60742 		ZEND_NULL_HANDLER,
60743 		ZEND_NULL_HANDLER,
60744 		ZEND_NULL_HANDLER,
60745 		ZEND_NULL_HANDLER,
60746 		ZEND_NULL_HANDLER,
60747 		ZEND_NULL_HANDLER,
60748 		ZEND_NULL_HANDLER,
60749 		ZEND_NULL_HANDLER,
60750 		ZEND_NULL_HANDLER,
60751 		ZEND_NULL_HANDLER,
60752 		ZEND_NULL_HANDLER,
60753 		ZEND_NULL_HANDLER,
60754 		ZEND_NULL_HANDLER,
60755 		ZEND_NULL_HANDLER,
60756 		ZEND_NULL_HANDLER,
60757 		ZEND_NULL_HANDLER,
60758 		ZEND_NULL_HANDLER,
60759 		ZEND_NULL_HANDLER,
60760 		ZEND_NULL_HANDLER,
60761 		ZEND_NULL_HANDLER,
60762 		ZEND_NULL_HANDLER,
60763 		ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER,
60764 		ZEND_NULL_HANDLER,
60765 		ZEND_NULL_HANDLER,
60766 		ZEND_NULL_HANDLER,
60767 		ZEND_NULL_HANDLER,
60768 		ZEND_NULL_HANDLER,
60769 		ZEND_NULL_HANDLER,
60770 		ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_VAR_HANDLER,
60771 		ZEND_NULL_HANDLER,
60772 		ZEND_NULL_HANDLER,
60773 		ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
60774 		ZEND_NULL_HANDLER,
60775 		ZEND_NULL_HANDLER,
60776 		ZEND_NULL_HANDLER,
60777 		ZEND_NULL_HANDLER,
60778 		ZEND_NULL_HANDLER,
60779 		ZEND_NULL_HANDLER,
60780 		ZEND_NULL_HANDLER,
60781 		ZEND_NULL_HANDLER,
60782 		ZEND_NULL_HANDLER,
60783 		ZEND_NULL_HANDLER,
60784 		ZEND_NULL_HANDLER,
60785 		ZEND_NULL_HANDLER,
60786 		ZEND_NULL_HANDLER,
60787 		ZEND_NULL_HANDLER,
60788 		ZEND_NULL_HANDLER,
60789 		ZEND_NULL_HANDLER,
60790 		ZEND_NULL_HANDLER,
60791 		ZEND_NULL_HANDLER,
60792 		ZEND_NULL_HANDLER,
60793 		ZEND_NULL_HANDLER,
60794 		ZEND_NULL_HANDLER,
60795 		ZEND_NULL_HANDLER,
60796 		ZEND_NULL_HANDLER,
60797 		ZEND_NULL_HANDLER,
60798 		ZEND_NULL_HANDLER,
60799 		ZEND_NULL_HANDLER,
60800 		ZEND_NULL_HANDLER,
60801 		ZEND_NULL_HANDLER,
60802 		ZEND_NULL_HANDLER,
60803 		ZEND_NULL_HANDLER,
60804 		ZEND_NULL_HANDLER,
60805 		ZEND_NULL_HANDLER,
60806 		ZEND_NULL_HANDLER,
60807 		ZEND_NULL_HANDLER,
60808 		ZEND_NULL_HANDLER,
60809 		ZEND_NULL_HANDLER,
60810 		ZEND_NULL_HANDLER,
60811 		ZEND_NULL_HANDLER,
60812 		ZEND_NULL_HANDLER,
60813 		ZEND_NULL_HANDLER,
60814 		ZEND_NULL_HANDLER,
60815 		ZEND_NULL_HANDLER,
60816 		ZEND_NULL_HANDLER,
60817 		ZEND_NULL_HANDLER,
60818 		ZEND_NULL_HANDLER,
60819 		ZEND_NULL_HANDLER,
60820 		ZEND_NULL_HANDLER,
60821 		ZEND_NULL_HANDLER,
60822 		ZEND_NULL_HANDLER,
60823 		ZEND_NULL_HANDLER,
60824 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
60825 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
60826 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
60827 		ZEND_NULL_HANDLER,
60828 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
60829 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60830 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60831 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60832 		ZEND_NULL_HANDLER,
60833 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60834 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
60835 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
60836 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
60837 		ZEND_NULL_HANDLER,
60838 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
60839 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
60840 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
60841 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
60842 		ZEND_NULL_HANDLER,
60843 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
60844 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
60845 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
60846 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
60847 		ZEND_NULL_HANDLER,
60848 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
60849 		ZEND_NULL_HANDLER,
60850 		ZEND_NULL_HANDLER,
60851 		ZEND_NULL_HANDLER,
60852 		ZEND_NULL_HANDLER,
60853 		ZEND_NULL_HANDLER,
60854 		ZEND_NULL_HANDLER,
60855 		ZEND_NULL_HANDLER,
60856 		ZEND_NULL_HANDLER,
60857 		ZEND_NULL_HANDLER,
60858 		ZEND_NULL_HANDLER,
60859 		ZEND_NULL_HANDLER,
60860 		ZEND_NULL_HANDLER,
60861 		ZEND_NULL_HANDLER,
60862 		ZEND_NULL_HANDLER,
60863 		ZEND_NULL_HANDLER,
60864 		ZEND_NULL_HANDLER,
60865 		ZEND_NULL_HANDLER,
60866 		ZEND_NULL_HANDLER,
60867 		ZEND_NULL_HANDLER,
60868 		ZEND_NULL_HANDLER,
60869 		ZEND_NULL_HANDLER,
60870 		ZEND_NULL_HANDLER,
60871 		ZEND_NULL_HANDLER,
60872 		ZEND_NULL_HANDLER,
60873 		ZEND_NULL_HANDLER,
60874 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
60875 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
60876 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
60877 		ZEND_NULL_HANDLER,
60878 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
60879 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60880 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60881 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60882 		ZEND_NULL_HANDLER,
60883 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60884 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
60885 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
60886 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
60887 		ZEND_NULL_HANDLER,
60888 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
60889 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
60890 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
60891 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
60892 		ZEND_NULL_HANDLER,
60893 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
60894 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
60895 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
60896 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
60897 		ZEND_NULL_HANDLER,
60898 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
60899 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
60900 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
60901 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
60902 		ZEND_NULL_HANDLER,
60903 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
60904 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
60905 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60906 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60907 		ZEND_NULL_HANDLER,
60908 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
60909 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
60910 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60911 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
60912 		ZEND_NULL_HANDLER,
60913 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
60914 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
60915 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60916 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
60917 		ZEND_NULL_HANDLER,
60918 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
60919 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
60920 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
60921 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
60922 		ZEND_NULL_HANDLER,
60923 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
60924 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
60925 		ZEND_USER_OPCODE_SPEC_HANDLER,
60926 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
60927 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
60928 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
60929 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
60930 		ZEND_NULL_HANDLER,
60931 		ZEND_JMP_SET_SPEC_CV_HANDLER,
60932 		ZEND_NULL_HANDLER,
60933 		ZEND_NULL_HANDLER,
60934 		ZEND_NULL_HANDLER,
60935 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
60936 		ZEND_NULL_HANDLER,
60937 		ZEND_NULL_HANDLER,
60938 		ZEND_NULL_HANDLER,
60939 		ZEND_NULL_HANDLER,
60940 		ZEND_NULL_HANDLER,
60941 		ZEND_NULL_HANDLER,
60942 		ZEND_NULL_HANDLER,
60943 		ZEND_NULL_HANDLER,
60944 		ZEND_NULL_HANDLER,
60945 		ZEND_NULL_HANDLER,
60946 		ZEND_NULL_HANDLER,
60947 		ZEND_NULL_HANDLER,
60948 		ZEND_NULL_HANDLER,
60949 		ZEND_NULL_HANDLER,
60950 		ZEND_NULL_HANDLER,
60951 		ZEND_NULL_HANDLER,
60952 		ZEND_NULL_HANDLER,
60953 		ZEND_NULL_HANDLER,
60954 		ZEND_NULL_HANDLER,
60955 		ZEND_NULL_HANDLER,
60956 		ZEND_NULL_HANDLER,
60957 		ZEND_ADD_TRAIT_SPEC_HANDLER,
60958 		ZEND_BIND_TRAITS_SPEC_HANDLER,
60959 		ZEND_NULL_HANDLER,
60960 		ZEND_NULL_HANDLER,
60961 		ZEND_NULL_HANDLER,
60962 		ZEND_NULL_HANDLER,
60963 		ZEND_NULL_HANDLER,
60964 		ZEND_NULL_HANDLER,
60965 		ZEND_NULL_HANDLER,
60966 		ZEND_NULL_HANDLER,
60967 		ZEND_NULL_HANDLER,
60968 		ZEND_NULL_HANDLER,
60969 		ZEND_NULL_HANDLER,
60970 		ZEND_NULL_HANDLER,
60971 		ZEND_NULL_HANDLER,
60972 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
60973 		ZEND_NULL_HANDLER,
60974 		ZEND_NULL_HANDLER,
60975 		ZEND_NULL_HANDLER,
60976 		ZEND_NULL_HANDLER,
60977 		ZEND_NULL_HANDLER,
60978 		ZEND_NULL_HANDLER,
60979 		ZEND_NULL_HANDLER,
60980 		ZEND_NULL_HANDLER,
60981 		ZEND_NULL_HANDLER,
60982 		ZEND_NULL_HANDLER,
60983 		ZEND_NULL_HANDLER,
60984 		ZEND_FETCH_CLASS_NAME_SPEC_HANDLER,
60985 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
60986 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
60987 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
60988 		ZEND_YIELD_SPEC_CONST_TMP_HANDLER,
60989 		ZEND_YIELD_SPEC_CONST_VAR_HANDLER,
60990 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
60991 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
60992 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
60993 		ZEND_YIELD_SPEC_TMP_TMP_HANDLER,
60994 		ZEND_YIELD_SPEC_TMP_VAR_HANDLER,
60995 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
60996 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
60997 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
60998 		ZEND_YIELD_SPEC_VAR_TMP_HANDLER,
60999 		ZEND_YIELD_SPEC_VAR_VAR_HANDLER,
61000 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
61001 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
61002 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
61003 		ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER,
61004 		ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER,
61005 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
61006 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
61007 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
61008 		ZEND_YIELD_SPEC_CV_TMP_HANDLER,
61009 		ZEND_YIELD_SPEC_CV_VAR_HANDLER,
61010 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
61011 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
61012 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
61013 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
61014 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
61015 		ZEND_NULL_HANDLER,
61016 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
61017 		ZEND_FAST_CALL_SPEC_HANDLER,
61018 		ZEND_FAST_RET_SPEC_HANDLER,
61019 		ZEND_RECV_VARIADIC_SPEC_HANDLER,
61020 		ZEND_SEND_UNPACK_SPEC_HANDLER,
61021 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
61022 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
61023 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
61024 		ZEND_NULL_HANDLER,
61025 		ZEND_POW_SPEC_CONST_CV_HANDLER,
61026 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
61027 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61028 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61029 		ZEND_NULL_HANDLER,
61030 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
61031 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
61032 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61033 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61034 		ZEND_NULL_HANDLER,
61035 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
61036 		ZEND_NULL_HANDLER,
61037 		ZEND_NULL_HANDLER,
61038 		ZEND_NULL_HANDLER,
61039 		ZEND_NULL_HANDLER,
61040 		ZEND_NULL_HANDLER,
61041 		ZEND_POW_SPEC_CV_CONST_HANDLER,
61042 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
61043 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
61044 		ZEND_NULL_HANDLER,
61045 		ZEND_POW_SPEC_CV_CV_HANDLER,
61046 		ZEND_NULL_HANDLER,
61047 		ZEND_NULL_HANDLER,
61048 		ZEND_NULL_HANDLER,
61049 		ZEND_NULL_HANDLER,
61050 		ZEND_NULL_HANDLER,
61051 		ZEND_NULL_HANDLER,
61052 		ZEND_NULL_HANDLER,
61053 		ZEND_NULL_HANDLER,
61054 		ZEND_NULL_HANDLER,
61055 		ZEND_NULL_HANDLER,
61056 		ZEND_NULL_HANDLER,
61057 		ZEND_NULL_HANDLER,
61058 		ZEND_NULL_HANDLER,
61059 		ZEND_NULL_HANDLER,
61060 		ZEND_NULL_HANDLER,
61061 		ZEND_NULL_HANDLER,
61062 		ZEND_NULL_HANDLER,
61063 		ZEND_NULL_HANDLER,
61064 		ZEND_NULL_HANDLER,
61065 		ZEND_NULL_HANDLER,
61066 		ZEND_NULL_HANDLER,
61067 		ZEND_NULL_HANDLER,
61068 		ZEND_NULL_HANDLER,
61069 		ZEND_NULL_HANDLER,
61070 		ZEND_NULL_HANDLER,
61071 		ZEND_NULL_HANDLER,
61072 		ZEND_NULL_HANDLER,
61073 		ZEND_NULL_HANDLER,
61074 		ZEND_NULL_HANDLER,
61075 		ZEND_NULL_HANDLER,
61076 		ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER,
61077 		ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER,
61078 		ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER,
61079 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
61080 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER,
61081 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER,
61082 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER,
61083 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER,
61084 		ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER,
61085 		ZEND_NULL_HANDLER,
61086 		ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER,
61087 		ZEND_NULL_HANDLER,
61088 		ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER,
61089 		ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER,
61090 		ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER,
61091 		ZEND_NULL_HANDLER,
61092 		ZEND_NULL_HANDLER,
61093 		ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER,
61094 		ZEND_NULL_HANDLER,
61095 		ZEND_NULL_HANDLER,
61096 		ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
61097 		ZEND_NULL_HANDLER,
61098 		ZEND_NULL_HANDLER,
61099 		ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER,
61100 		ZEND_NULL_HANDLER,
61101 		ZEND_NULL_HANDLER,
61102 		ZEND_NULL_HANDLER,
61103 		ZEND_NULL_HANDLER,
61104 		ZEND_NULL_HANDLER,
61105 		ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER,
61106 		ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER,
61107 		ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER,
61108 		ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER,
61109 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
61110 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER,
61111 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER,
61112 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER,
61113 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER,
61114 		ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER,
61115 		ZEND_NULL_HANDLER,
61116 		ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER,
61117 		ZEND_NULL_HANDLER,
61118 		ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER,
61119 		ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER,
61120 		ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER,
61121 		ZEND_NULL_HANDLER,
61122 		ZEND_NULL_HANDLER,
61123 		ZEND_NULL_HANDLER,
61124 		ZEND_NULL_HANDLER,
61125 		ZEND_NULL_HANDLER,
61126 		ZEND_NULL_HANDLER,
61127 		ZEND_NULL_HANDLER,
61128 		ZEND_NULL_HANDLER,
61129 		ZEND_NULL_HANDLER,
61130 		ZEND_NULL_HANDLER,
61131 		ZEND_NULL_HANDLER,
61132 		ZEND_NULL_HANDLER,
61133 		ZEND_NULL_HANDLER,
61134 		ZEND_NULL_HANDLER,
61135 		ZEND_NULL_HANDLER,
61136 		ZEND_NULL_HANDLER,
61137 		ZEND_NULL_HANDLER,
61138 		ZEND_NULL_HANDLER,
61139 		ZEND_NULL_HANDLER,
61140 		ZEND_NULL_HANDLER,
61141 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
61142 		ZEND_NULL_HANDLER,
61143 		ZEND_NULL_HANDLER,
61144 		ZEND_NULL_HANDLER,
61145 		ZEND_NULL_HANDLER,
61146 		ZEND_COALESCE_SPEC_CONST_HANDLER,
61147 		ZEND_COALESCE_SPEC_TMP_HANDLER,
61148 		ZEND_COALESCE_SPEC_VAR_HANDLER,
61149 		ZEND_NULL_HANDLER,
61150 		ZEND_COALESCE_SPEC_CV_HANDLER,
61151 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
61152 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
61153 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
61154 		ZEND_NULL_HANDLER,
61155 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
61156 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
61157 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61158 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61159 		ZEND_NULL_HANDLER,
61160 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
61161 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
61162 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61163 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
61164 		ZEND_NULL_HANDLER,
61165 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
61166 		ZEND_NULL_HANDLER,
61167 		ZEND_NULL_HANDLER,
61168 		ZEND_NULL_HANDLER,
61169 		ZEND_NULL_HANDLER,
61170 		ZEND_NULL_HANDLER,
61171 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
61172 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
61173 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
61174 		ZEND_NULL_HANDLER,
61175 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
61176 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
61177 		ZEND_NULL_HANDLER,
61178 		ZEND_NULL_HANDLER,
61179 		ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_VAR_HANDLER,
61180 		ZEND_NULL_HANDLER,
61181 		ZEND_NULL_HANDLER,
61182 		ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER,
61183 		ZEND_NULL_HANDLER,
61184 		ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER,
61185 		ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER,
61186 		ZEND_NULL_HANDLER,
61187 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER,
61188 		ZEND_NULL_HANDLER,
61189 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER,
61190 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER,
61191 		ZEND_NULL_HANDLER,
61192 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER,
61193 		ZEND_NULL_HANDLER,
61194 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER,
61195 		ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER,
61196 		ZEND_NULL_HANDLER,
61197 		ZEND_NULL_HANDLER,
61198 		ZEND_NULL_HANDLER,
61199 		ZEND_NULL_HANDLER,
61200 		ZEND_NULL_HANDLER,
61201 		ZEND_NULL_HANDLER,
61202 		ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER,
61203 		ZEND_NULL_HANDLER,
61204 		ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER,
61205 		ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER,
61206 		ZEND_NULL_HANDLER,
61207 		ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER,
61208 		ZEND_NULL_HANDLER,
61209 		ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER,
61210 		ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER,
61211 		ZEND_NULL_HANDLER,
61212 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER,
61213 		ZEND_NULL_HANDLER,
61214 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER,
61215 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER,
61216 		ZEND_NULL_HANDLER,
61217 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER,
61218 		ZEND_NULL_HANDLER,
61219 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER,
61220 		ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER,
61221 		ZEND_NULL_HANDLER,
61222 		ZEND_NULL_HANDLER,
61223 		ZEND_NULL_HANDLER,
61224 		ZEND_NULL_HANDLER,
61225 		ZEND_NULL_HANDLER,
61226 		ZEND_NULL_HANDLER,
61227 		ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER,
61228 		ZEND_NULL_HANDLER,
61229 		ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER,
61230 		ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER,
61231 		ZEND_NULL_HANDLER,
61232 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER,
61233 		ZEND_NULL_HANDLER,
61234 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER,
61235 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER,
61236 		ZEND_NULL_HANDLER,
61237 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER,
61238 		ZEND_NULL_HANDLER,
61239 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER,
61240 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61241 		ZEND_NULL_HANDLER,
61242 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER,
61243 		ZEND_NULL_HANDLER,
61244 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER,
61245 		ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER,
61246 		ZEND_NULL_HANDLER,
61247 		ZEND_NULL_HANDLER,
61248 		ZEND_NULL_HANDLER,
61249 		ZEND_NULL_HANDLER,
61250 		ZEND_NULL_HANDLER,
61251 		ZEND_NULL_HANDLER,
61252 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER,
61253 		ZEND_NULL_HANDLER,
61254 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER,
61255 		ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER,
61256 		ZEND_NULL_HANDLER,
61257 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER,
61258 		ZEND_NULL_HANDLER,
61259 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER,
61260 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER,
61261 		ZEND_NULL_HANDLER,
61262 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER,
61263 		ZEND_NULL_HANDLER,
61264 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER,
61265 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61266 		ZEND_NULL_HANDLER,
61267 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER,
61268 		ZEND_NULL_HANDLER,
61269 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER,
61270 		ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER,
61271 		ZEND_NULL_HANDLER,
61272 		ZEND_NULL_HANDLER,
61273 		ZEND_NULL_HANDLER,
61274 		ZEND_NULL_HANDLER,
61275 		ZEND_NULL_HANDLER,
61276 		ZEND_NULL_HANDLER,
61277 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER,
61278 		ZEND_NULL_HANDLER,
61279 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER,
61280 		ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER,
61281 		ZEND_NULL_HANDLER,
61282 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
61283 		ZEND_NULL_HANDLER,
61284 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER,
61285 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
61286 		ZEND_NULL_HANDLER,
61287 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
61288 		ZEND_NULL_HANDLER,
61289 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
61290 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
61291 		ZEND_NULL_HANDLER,
61292 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
61293 		ZEND_NULL_HANDLER,
61294 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER,
61295 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
61296 		ZEND_NULL_HANDLER,
61297 		ZEND_NULL_HANDLER,
61298 		ZEND_NULL_HANDLER,
61299 		ZEND_NULL_HANDLER,
61300 		ZEND_NULL_HANDLER,
61301 		ZEND_NULL_HANDLER,
61302 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER,
61303 		ZEND_NULL_HANDLER,
61304 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER,
61305 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
61306 		ZEND_NULL_HANDLER,
61307 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER,
61308 		ZEND_NULL_HANDLER,
61309 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER,
61310 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER,
61311 		ZEND_NULL_HANDLER,
61312 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER,
61313 		ZEND_NULL_HANDLER,
61314 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER,
61315 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
61316 		ZEND_NULL_HANDLER,
61317 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER,
61318 		ZEND_NULL_HANDLER,
61319 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER,
61320 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
61321 		ZEND_NULL_HANDLER,
61322 		ZEND_NULL_HANDLER,
61323 		ZEND_NULL_HANDLER,
61324 		ZEND_NULL_HANDLER,
61325 		ZEND_NULL_HANDLER,
61326 		ZEND_NULL_HANDLER,
61327 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER,
61328 		ZEND_NULL_HANDLER,
61329 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER,
61330 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER,
61331 		ZEND_NULL_HANDLER,
61332 		ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER,
61333 		ZEND_NULL_HANDLER,
61334 		ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER,
61335 		ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER,
61336 		ZEND_NULL_HANDLER,
61337 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
61338 		ZEND_NULL_HANDLER,
61339 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
61340 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
61341 		ZEND_NULL_HANDLER,
61342 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
61343 		ZEND_NULL_HANDLER,
61344 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
61345 		ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
61346 		ZEND_NULL_HANDLER,
61347 		ZEND_NULL_HANDLER,
61348 		ZEND_NULL_HANDLER,
61349 		ZEND_NULL_HANDLER,
61350 		ZEND_NULL_HANDLER,
61351 		ZEND_NULL_HANDLER,
61352 		ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER,
61353 		ZEND_NULL_HANDLER,
61354 		ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER,
61355 		ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER,
61356 		ZEND_NULL_HANDLER,
61357 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER,
61358 		ZEND_NULL_HANDLER,
61359 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER,
61360 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER,
61361 		ZEND_NULL_HANDLER,
61362 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
61363 		ZEND_NULL_HANDLER,
61364 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
61365 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
61366 		ZEND_NULL_HANDLER,
61367 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER,
61368 		ZEND_NULL_HANDLER,
61369 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER,
61370 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER,
61371 		ZEND_NULL_HANDLER,
61372 		ZEND_NULL_HANDLER,
61373 		ZEND_NULL_HANDLER,
61374 		ZEND_NULL_HANDLER,
61375 		ZEND_NULL_HANDLER,
61376 		ZEND_NULL_HANDLER,
61377 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER,
61378 		ZEND_NULL_HANDLER,
61379 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER,
61380 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER,
61381 		ZEND_NULL_HANDLER,
61382 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
61383 		ZEND_NULL_HANDLER,
61384 		ZEND_NULL_HANDLER,
61385 		ZEND_NULL_HANDLER,
61386 		ZEND_NULL_HANDLER,
61387 		ZEND_NULL_HANDLER,
61388 		ZEND_NULL_HANDLER,
61389 		ZEND_NULL_HANDLER,
61390 		ZEND_NULL_HANDLER,
61391 		ZEND_NULL_HANDLER,
61392 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
61393 		ZEND_NULL_HANDLER,
61394 		ZEND_NULL_HANDLER,
61395 		ZEND_NULL_HANDLER,
61396 		ZEND_NULL_HANDLER,
61397 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
61398 		ZEND_NULL_HANDLER,
61399 		ZEND_NULL_HANDLER,
61400 		ZEND_NULL_HANDLER,
61401 		ZEND_NULL_HANDLER,
61402 		ZEND_NULL_HANDLER,
61403 		ZEND_NULL_HANDLER,
61404 		ZEND_NULL_HANDLER,
61405 		ZEND_NULL_HANDLER,
61406 		ZEND_NULL_HANDLER,
61407 		ZEND_NULL_HANDLER,
61408 		ZEND_NULL_HANDLER,
61409 		ZEND_NULL_HANDLER,
61410 		ZEND_NULL_HANDLER,
61411 		ZEND_NULL_HANDLER,
61412 		ZEND_NULL_HANDLER,
61413 		ZEND_NULL_HANDLER,
61414 		ZEND_NULL_HANDLER,
61415 		ZEND_NULL_HANDLER,
61416 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
61417 		ZEND_NULL_HANDLER,
61418 		ZEND_NULL_HANDLER,
61419 		ZEND_NULL_HANDLER,
61420 		ZEND_NULL_HANDLER,
61421 		ZEND_NULL_HANDLER,
61422 		ZEND_NULL_HANDLER,
61423 		ZEND_NULL_HANDLER,
61424 		ZEND_NULL_HANDLER,
61425 		ZEND_NULL_HANDLER,
61426 		ZEND_NULL_HANDLER,
61427 		ZEND_NULL_HANDLER,
61428 		ZEND_NULL_HANDLER,
61429 		ZEND_NULL_HANDLER,
61430 		ZEND_NULL_HANDLER,
61431 		ZEND_NULL_HANDLER,
61432 		ZEND_NULL_HANDLER,
61433 		ZEND_NULL_HANDLER,
61434 		ZEND_NULL_HANDLER,
61435 		ZEND_NULL_HANDLER,
61436 		ZEND_NULL_HANDLER,
61437 		ZEND_NULL_HANDLER,
61438 		ZEND_NULL_HANDLER,
61439 		ZEND_NULL_HANDLER,
61440 		ZEND_NULL_HANDLER,
61441 		ZEND_NULL_HANDLER,
61442 		ZEND_NULL_HANDLER,
61443 		ZEND_NULL_HANDLER,
61444 		ZEND_NULL_HANDLER,
61445 		ZEND_NULL_HANDLER,
61446 		ZEND_NULL_HANDLER,
61447 		ZEND_NULL_HANDLER,
61448 		ZEND_NULL_HANDLER,
61449 		ZEND_NULL_HANDLER,
61450 		ZEND_NULL_HANDLER,
61451 		ZEND_NULL_HANDLER,
61452 		ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER,
61453 		ZEND_NULL_HANDLER,
61454 		ZEND_NULL_HANDLER,
61455 		ZEND_NULL_HANDLER,
61456 		ZEND_NULL_HANDLER,
61457 		ZEND_NULL_HANDLER,
61458 		ZEND_NULL_HANDLER,
61459 		ZEND_NULL_HANDLER,
61460 		ZEND_NULL_HANDLER,
61461 		ZEND_NULL_HANDLER,
61462 		ZEND_NULL_HANDLER,
61463 		ZEND_NULL_HANDLER,
61464 		ZEND_NULL_HANDLER,
61465 		ZEND_NULL_HANDLER,
61466 		ZEND_NULL_HANDLER,
61467 		ZEND_NULL_HANDLER,
61468 		ZEND_NULL_HANDLER,
61469 		ZEND_NULL_HANDLER,
61470 		ZEND_NULL_HANDLER,
61471 		ZEND_NULL_HANDLER,
61472 		ZEND_NULL_HANDLER,
61473 		ZEND_NULL_HANDLER,
61474 		ZEND_NULL_HANDLER,
61475 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
61476 		ZEND_NULL_HANDLER,
61477 		ZEND_NULL_HANDLER,
61478 		ZEND_NULL_HANDLER,
61479 		ZEND_NULL_HANDLER,
61480 		ZEND_NULL_HANDLER,
61481 		ZEND_NULL_HANDLER,
61482 		ZEND_NULL_HANDLER,
61483 		ZEND_NULL_HANDLER,
61484 		ZEND_NULL_HANDLER,
61485 		ZEND_NULL_HANDLER,
61486 		ZEND_NULL_HANDLER,
61487 		ZEND_NULL_HANDLER,
61488 		ZEND_NULL_HANDLER,
61489 		ZEND_NULL_HANDLER,
61490 		ZEND_NULL_HANDLER,
61491 		ZEND_NULL_HANDLER,
61492 		ZEND_NULL_HANDLER,
61493 		ZEND_NULL_HANDLER,
61494 		ZEND_NULL_HANDLER,
61495 		ZEND_NULL_HANDLER,
61496 		ZEND_NULL_HANDLER,
61497 		ZEND_NULL_HANDLER,
61498 		ZEND_NULL_HANDLER,
61499 		ZEND_NULL_HANDLER,
61500 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
61501 		ZEND_NULL_HANDLER,
61502 		ZEND_NULL_HANDLER,
61503 		ZEND_NULL_HANDLER,
61504 		ZEND_NULL_HANDLER,
61505 		ZEND_NULL_HANDLER,
61506 		ZEND_NULL_HANDLER,
61507 		ZEND_NULL_HANDLER,
61508 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61509 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61510 		ZEND_NULL_HANDLER,
61511 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61512 		ZEND_NULL_HANDLER,
61513 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61514 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61515 		ZEND_NULL_HANDLER,
61516 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61517 		ZEND_NULL_HANDLER,
61518 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61519 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61520 		ZEND_NULL_HANDLER,
61521 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61522 		ZEND_NULL_HANDLER,
61523 		ZEND_NULL_HANDLER,
61524 		ZEND_NULL_HANDLER,
61525 		ZEND_NULL_HANDLER,
61526 		ZEND_NULL_HANDLER,
61527 		ZEND_NULL_HANDLER,
61528 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61529 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61530 		ZEND_NULL_HANDLER,
61531 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61532 		ZEND_NULL_HANDLER,
61533 		ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61534 		ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61535 		ZEND_NULL_HANDLER,
61536 		ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61537 		ZEND_NULL_HANDLER,
61538 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61539 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61540 		ZEND_NULL_HANDLER,
61541 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61542 		ZEND_NULL_HANDLER,
61543 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61544 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61545 		ZEND_NULL_HANDLER,
61546 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61547 		ZEND_NULL_HANDLER,
61548 		ZEND_NULL_HANDLER,
61549 		ZEND_NULL_HANDLER,
61550 		ZEND_NULL_HANDLER,
61551 		ZEND_NULL_HANDLER,
61552 		ZEND_NULL_HANDLER,
61553 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61554 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61555 		ZEND_NULL_HANDLER,
61556 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61557 		ZEND_NULL_HANDLER,
61558 		ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61559 		ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61560 		ZEND_NULL_HANDLER,
61561 		ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61562 		ZEND_NULL_HANDLER,
61563 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61564 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61565 		ZEND_NULL_HANDLER,
61566 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61567 		ZEND_NULL_HANDLER,
61568 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61569 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61570 		ZEND_NULL_HANDLER,
61571 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61572 		ZEND_NULL_HANDLER,
61573 		ZEND_NULL_HANDLER,
61574 		ZEND_NULL_HANDLER,
61575 		ZEND_NULL_HANDLER,
61576 		ZEND_NULL_HANDLER,
61577 		ZEND_NULL_HANDLER,
61578 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61579 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61580 		ZEND_NULL_HANDLER,
61581 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61582 		ZEND_NULL_HANDLER,
61583 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61584 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61585 		ZEND_NULL_HANDLER,
61586 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61587 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
61588 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61589 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61590 		ZEND_NULL_HANDLER,
61591 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61592 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
61593 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61594 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61595 		ZEND_NULL_HANDLER,
61596 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61597 		ZEND_NULL_HANDLER,
61598 		ZEND_NULL_HANDLER,
61599 		ZEND_NULL_HANDLER,
61600 		ZEND_NULL_HANDLER,
61601 		ZEND_NULL_HANDLER,
61602 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
61603 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61604 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61605 		ZEND_NULL_HANDLER,
61606 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61607 		ZEND_NULL_HANDLER,
61608 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61609 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61610 		ZEND_NULL_HANDLER,
61611 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61612 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61613 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61614 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61615 		ZEND_NULL_HANDLER,
61616 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61617 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61618 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61619 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61620 		ZEND_NULL_HANDLER,
61621 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61622 		ZEND_NULL_HANDLER,
61623 		ZEND_NULL_HANDLER,
61624 		ZEND_NULL_HANDLER,
61625 		ZEND_NULL_HANDLER,
61626 		ZEND_NULL_HANDLER,
61627 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
61628 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61629 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61630 		ZEND_NULL_HANDLER,
61631 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61632 		ZEND_NULL_HANDLER,
61633 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61634 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61635 		ZEND_NULL_HANDLER,
61636 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61637 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
61638 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61639 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61640 		ZEND_NULL_HANDLER,
61641 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61642 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
61643 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61644 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61645 		ZEND_NULL_HANDLER,
61646 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61647 		ZEND_NULL_HANDLER,
61648 		ZEND_NULL_HANDLER,
61649 		ZEND_NULL_HANDLER,
61650 		ZEND_NULL_HANDLER,
61651 		ZEND_NULL_HANDLER,
61652 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
61653 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61654 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61655 		ZEND_NULL_HANDLER,
61656 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61657 		ZEND_NULL_HANDLER,
61658 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61659 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61660 		ZEND_NULL_HANDLER,
61661 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
61662 		ZEND_NULL_HANDLER,
61663 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61664 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61665 		ZEND_NULL_HANDLER,
61666 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61667 		ZEND_NULL_HANDLER,
61668 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61669 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61670 		ZEND_NULL_HANDLER,
61671 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61672 		ZEND_NULL_HANDLER,
61673 		ZEND_NULL_HANDLER,
61674 		ZEND_NULL_HANDLER,
61675 		ZEND_NULL_HANDLER,
61676 		ZEND_NULL_HANDLER,
61677 		ZEND_NULL_HANDLER,
61678 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61679 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61680 		ZEND_NULL_HANDLER,
61681 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61682 		ZEND_NULL_HANDLER,
61683 		ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61684 		ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61685 		ZEND_NULL_HANDLER,
61686 		ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61687 		ZEND_NULL_HANDLER,
61688 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61689 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61690 		ZEND_NULL_HANDLER,
61691 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61692 		ZEND_NULL_HANDLER,
61693 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61694 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61695 		ZEND_NULL_HANDLER,
61696 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61697 		ZEND_NULL_HANDLER,
61698 		ZEND_NULL_HANDLER,
61699 		ZEND_NULL_HANDLER,
61700 		ZEND_NULL_HANDLER,
61701 		ZEND_NULL_HANDLER,
61702 		ZEND_NULL_HANDLER,
61703 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61704 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61705 		ZEND_NULL_HANDLER,
61706 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61707 		ZEND_NULL_HANDLER,
61708 		ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61709 		ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61710 		ZEND_NULL_HANDLER,
61711 		ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61712 		ZEND_NULL_HANDLER,
61713 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61714 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61715 		ZEND_NULL_HANDLER,
61716 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61717 		ZEND_NULL_HANDLER,
61718 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61719 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61720 		ZEND_NULL_HANDLER,
61721 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61722 		ZEND_NULL_HANDLER,
61723 		ZEND_NULL_HANDLER,
61724 		ZEND_NULL_HANDLER,
61725 		ZEND_NULL_HANDLER,
61726 		ZEND_NULL_HANDLER,
61727 		ZEND_NULL_HANDLER,
61728 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61729 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61730 		ZEND_NULL_HANDLER,
61731 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61732 		ZEND_NULL_HANDLER,
61733 		ZEND_NULL_HANDLER,
61734 		ZEND_NULL_HANDLER,
61735 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61736 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61737 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61738 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61739 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61740 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61741 		ZEND_NULL_HANDLER,
61742 		ZEND_NULL_HANDLER,
61743 		ZEND_NULL_HANDLER,
61744 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61745 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61746 		ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61747 		ZEND_NULL_HANDLER,
61748 		ZEND_NULL_HANDLER,
61749 		ZEND_NULL_HANDLER,
61750 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61751 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61752 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61753 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61754 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61755 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61756 		ZEND_NULL_HANDLER,
61757 		ZEND_NULL_HANDLER,
61758 		ZEND_NULL_HANDLER,
61759 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61760 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61761 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61762 		ZEND_NULL_HANDLER,
61763 		ZEND_NULL_HANDLER,
61764 		ZEND_NULL_HANDLER,
61765 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61766 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61767 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61768 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61769 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61770 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61771 		ZEND_NULL_HANDLER,
61772 		ZEND_NULL_HANDLER,
61773 		ZEND_NULL_HANDLER,
61774 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61775 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61776 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61777 		ZEND_NULL_HANDLER,
61778 		ZEND_NULL_HANDLER,
61779 		ZEND_NULL_HANDLER,
61780 		ZEND_NULL_HANDLER,
61781 		ZEND_NULL_HANDLER,
61782 		ZEND_NULL_HANDLER,
61783 		ZEND_NULL_HANDLER,
61784 		ZEND_NULL_HANDLER,
61785 		ZEND_NULL_HANDLER,
61786 		ZEND_NULL_HANDLER,
61787 		ZEND_NULL_HANDLER,
61788 		ZEND_NULL_HANDLER,
61789 		ZEND_NULL_HANDLER,
61790 		ZEND_NULL_HANDLER,
61791 		ZEND_NULL_HANDLER,
61792 		ZEND_NULL_HANDLER,
61793 		ZEND_NULL_HANDLER,
61794 		ZEND_NULL_HANDLER,
61795 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61796 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61797 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61798 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61799 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61800 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61801 		ZEND_NULL_HANDLER,
61802 		ZEND_NULL_HANDLER,
61803 		ZEND_NULL_HANDLER,
61804 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61805 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61806 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61807 		ZEND_NULL_HANDLER,
61808 		ZEND_NULL_HANDLER,
61809 		ZEND_NULL_HANDLER,
61810 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61811 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61812 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61813 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61814 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61815 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61816 		ZEND_NULL_HANDLER,
61817 		ZEND_NULL_HANDLER,
61818 		ZEND_NULL_HANDLER,
61819 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61820 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61821 		ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61822 		ZEND_NULL_HANDLER,
61823 		ZEND_NULL_HANDLER,
61824 		ZEND_NULL_HANDLER,
61825 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61826 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61827 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61828 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61829 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61830 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61831 		ZEND_NULL_HANDLER,
61832 		ZEND_NULL_HANDLER,
61833 		ZEND_NULL_HANDLER,
61834 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61835 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61836 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61837 		ZEND_NULL_HANDLER,
61838 		ZEND_NULL_HANDLER,
61839 		ZEND_NULL_HANDLER,
61840 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61841 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61842 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61843 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61844 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61845 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61846 		ZEND_NULL_HANDLER,
61847 		ZEND_NULL_HANDLER,
61848 		ZEND_NULL_HANDLER,
61849 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61850 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61851 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61852 		ZEND_NULL_HANDLER,
61853 		ZEND_NULL_HANDLER,
61854 		ZEND_NULL_HANDLER,
61855 		ZEND_NULL_HANDLER,
61856 		ZEND_NULL_HANDLER,
61857 		ZEND_NULL_HANDLER,
61858 		ZEND_NULL_HANDLER,
61859 		ZEND_NULL_HANDLER,
61860 		ZEND_NULL_HANDLER,
61861 		ZEND_NULL_HANDLER,
61862 		ZEND_NULL_HANDLER,
61863 		ZEND_NULL_HANDLER,
61864 		ZEND_NULL_HANDLER,
61865 		ZEND_NULL_HANDLER,
61866 		ZEND_NULL_HANDLER,
61867 		ZEND_NULL_HANDLER,
61868 		ZEND_NULL_HANDLER,
61869 		ZEND_NULL_HANDLER,
61870 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61871 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61872 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61873 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61874 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61875 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61876 		ZEND_NULL_HANDLER,
61877 		ZEND_NULL_HANDLER,
61878 		ZEND_NULL_HANDLER,
61879 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61880 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61881 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61882 		ZEND_NULL_HANDLER,
61883 		ZEND_NULL_HANDLER,
61884 		ZEND_NULL_HANDLER,
61885 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61886 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61887 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61888 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61889 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61890 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61891 		ZEND_NULL_HANDLER,
61892 		ZEND_NULL_HANDLER,
61893 		ZEND_NULL_HANDLER,
61894 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
61895 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61896 		ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61897 		ZEND_NULL_HANDLER,
61898 		ZEND_NULL_HANDLER,
61899 		ZEND_NULL_HANDLER,
61900 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61901 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61902 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61903 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61904 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61905 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61906 		ZEND_NULL_HANDLER,
61907 		ZEND_NULL_HANDLER,
61908 		ZEND_NULL_HANDLER,
61909 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61910 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61911 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61912 		ZEND_NULL_HANDLER,
61913 		ZEND_NULL_HANDLER,
61914 		ZEND_NULL_HANDLER,
61915 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61916 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61917 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61918 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61919 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61920 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61921 		ZEND_NULL_HANDLER,
61922 		ZEND_NULL_HANDLER,
61923 		ZEND_NULL_HANDLER,
61924 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61925 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61926 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61927 		ZEND_NULL_HANDLER,
61928 		ZEND_NULL_HANDLER,
61929 		ZEND_NULL_HANDLER,
61930 		ZEND_NULL_HANDLER,
61931 		ZEND_NULL_HANDLER,
61932 		ZEND_NULL_HANDLER,
61933 		ZEND_NULL_HANDLER,
61934 		ZEND_NULL_HANDLER,
61935 		ZEND_NULL_HANDLER,
61936 		ZEND_NULL_HANDLER,
61937 		ZEND_NULL_HANDLER,
61938 		ZEND_NULL_HANDLER,
61939 		ZEND_NULL_HANDLER,
61940 		ZEND_NULL_HANDLER,
61941 		ZEND_NULL_HANDLER,
61942 		ZEND_NULL_HANDLER,
61943 		ZEND_NULL_HANDLER,
61944 		ZEND_NULL_HANDLER,
61945 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61946 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61947 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61948 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61949 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61950 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61951 		ZEND_NULL_HANDLER,
61952 		ZEND_NULL_HANDLER,
61953 		ZEND_NULL_HANDLER,
61954 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61955 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61956 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61957 		ZEND_NULL_HANDLER,
61958 		ZEND_NULL_HANDLER,
61959 		ZEND_NULL_HANDLER,
61960 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61961 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61962 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61963 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61964 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61965 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61966 		ZEND_NULL_HANDLER,
61967 		ZEND_NULL_HANDLER,
61968 		ZEND_NULL_HANDLER,
61969 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
61970 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
61971 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
61972 		ZEND_NULL_HANDLER,
61973 		ZEND_NULL_HANDLER,
61974 		ZEND_NULL_HANDLER,
61975 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61976 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61977 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61978 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61979 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61980 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61981 		ZEND_NULL_HANDLER,
61982 		ZEND_NULL_HANDLER,
61983 		ZEND_NULL_HANDLER,
61984 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61985 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61986 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61987 		ZEND_NULL_HANDLER,
61988 		ZEND_NULL_HANDLER,
61989 		ZEND_NULL_HANDLER,
61990 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61991 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61992 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61993 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61994 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
61995 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
61996 		ZEND_NULL_HANDLER,
61997 		ZEND_NULL_HANDLER,
61998 		ZEND_NULL_HANDLER,
61999 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62000 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62001 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62002 		ZEND_NULL_HANDLER,
62003 		ZEND_NULL_HANDLER,
62004 		ZEND_NULL_HANDLER,
62005 		ZEND_NULL_HANDLER,
62006 		ZEND_NULL_HANDLER,
62007 		ZEND_NULL_HANDLER,
62008 		ZEND_NULL_HANDLER,
62009 		ZEND_NULL_HANDLER,
62010 		ZEND_NULL_HANDLER,
62011 		ZEND_NULL_HANDLER,
62012 		ZEND_NULL_HANDLER,
62013 		ZEND_NULL_HANDLER,
62014 		ZEND_NULL_HANDLER,
62015 		ZEND_NULL_HANDLER,
62016 		ZEND_NULL_HANDLER,
62017 		ZEND_NULL_HANDLER,
62018 		ZEND_NULL_HANDLER,
62019 		ZEND_NULL_HANDLER,
62020 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62021 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62022 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62023 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62024 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62025 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62026 		ZEND_NULL_HANDLER,
62027 		ZEND_NULL_HANDLER,
62028 		ZEND_NULL_HANDLER,
62029 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62030 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62031 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62032 		ZEND_NULL_HANDLER,
62033 		ZEND_NULL_HANDLER,
62034 		ZEND_NULL_HANDLER,
62035 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62036 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62037 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62038 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62039 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62040 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62041 		ZEND_NULL_HANDLER,
62042 		ZEND_NULL_HANDLER,
62043 		ZEND_NULL_HANDLER,
62044 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62045 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62046 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62047 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62048 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62049 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62050 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62051 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62052 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62053 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62054 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62055 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62056 		ZEND_NULL_HANDLER,
62057 		ZEND_NULL_HANDLER,
62058 		ZEND_NULL_HANDLER,
62059 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62060 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62061 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62062 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62063 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62064 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62065 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62066 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62067 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62068 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62069 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62070 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62071 		ZEND_NULL_HANDLER,
62072 		ZEND_NULL_HANDLER,
62073 		ZEND_NULL_HANDLER,
62074 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62075 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62076 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62077 		ZEND_NULL_HANDLER,
62078 		ZEND_NULL_HANDLER,
62079 		ZEND_NULL_HANDLER,
62080 		ZEND_NULL_HANDLER,
62081 		ZEND_NULL_HANDLER,
62082 		ZEND_NULL_HANDLER,
62083 		ZEND_NULL_HANDLER,
62084 		ZEND_NULL_HANDLER,
62085 		ZEND_NULL_HANDLER,
62086 		ZEND_NULL_HANDLER,
62087 		ZEND_NULL_HANDLER,
62088 		ZEND_NULL_HANDLER,
62089 		ZEND_NULL_HANDLER,
62090 		ZEND_NULL_HANDLER,
62091 		ZEND_NULL_HANDLER,
62092 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62093 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62094 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62095 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62096 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62097 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62098 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62099 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62100 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62101 		ZEND_NULL_HANDLER,
62102 		ZEND_NULL_HANDLER,
62103 		ZEND_NULL_HANDLER,
62104 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62105 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62106 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62107 		ZEND_NULL_HANDLER,
62108 		ZEND_NULL_HANDLER,
62109 		ZEND_NULL_HANDLER,
62110 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62111 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62112 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62113 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62114 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62115 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62116 		ZEND_NULL_HANDLER,
62117 		ZEND_NULL_HANDLER,
62118 		ZEND_NULL_HANDLER,
62119 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62120 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62121 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62122 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62123 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62124 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62125 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62126 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62127 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62128 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62129 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62130 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62131 		ZEND_NULL_HANDLER,
62132 		ZEND_NULL_HANDLER,
62133 		ZEND_NULL_HANDLER,
62134 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62135 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62136 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62137 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62138 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62139 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62140 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62141 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62142 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62143 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62144 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62145 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62146 		ZEND_NULL_HANDLER,
62147 		ZEND_NULL_HANDLER,
62148 		ZEND_NULL_HANDLER,
62149 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62150 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62151 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62152 		ZEND_NULL_HANDLER,
62153 		ZEND_NULL_HANDLER,
62154 		ZEND_NULL_HANDLER,
62155 		ZEND_NULL_HANDLER,
62156 		ZEND_NULL_HANDLER,
62157 		ZEND_NULL_HANDLER,
62158 		ZEND_NULL_HANDLER,
62159 		ZEND_NULL_HANDLER,
62160 		ZEND_NULL_HANDLER,
62161 		ZEND_NULL_HANDLER,
62162 		ZEND_NULL_HANDLER,
62163 		ZEND_NULL_HANDLER,
62164 		ZEND_NULL_HANDLER,
62165 		ZEND_NULL_HANDLER,
62166 		ZEND_NULL_HANDLER,
62167 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62168 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62169 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62170 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62171 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62172 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62173 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62174 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62175 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62176 		ZEND_NULL_HANDLER,
62177 		ZEND_NULL_HANDLER,
62178 		ZEND_NULL_HANDLER,
62179 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62180 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62181 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62182 		ZEND_NULL_HANDLER,
62183 		ZEND_NULL_HANDLER,
62184 		ZEND_NULL_HANDLER,
62185 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62186 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62187 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62188 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62189 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62190 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62191 		ZEND_NULL_HANDLER,
62192 		ZEND_NULL_HANDLER,
62193 		ZEND_NULL_HANDLER,
62194 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
62195 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62196 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62197 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62198 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62199 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62200 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62201 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62202 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62203 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62204 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62205 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62206 		ZEND_NULL_HANDLER,
62207 		ZEND_NULL_HANDLER,
62208 		ZEND_NULL_HANDLER,
62209 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62210 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62211 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62212 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62213 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62214 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62215 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62216 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62217 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62218 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62219 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62220 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62221 		ZEND_NULL_HANDLER,
62222 		ZEND_NULL_HANDLER,
62223 		ZEND_NULL_HANDLER,
62224 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62225 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62226 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62227 		ZEND_NULL_HANDLER,
62228 		ZEND_NULL_HANDLER,
62229 		ZEND_NULL_HANDLER,
62230 		ZEND_NULL_HANDLER,
62231 		ZEND_NULL_HANDLER,
62232 		ZEND_NULL_HANDLER,
62233 		ZEND_NULL_HANDLER,
62234 		ZEND_NULL_HANDLER,
62235 		ZEND_NULL_HANDLER,
62236 		ZEND_NULL_HANDLER,
62237 		ZEND_NULL_HANDLER,
62238 		ZEND_NULL_HANDLER,
62239 		ZEND_NULL_HANDLER,
62240 		ZEND_NULL_HANDLER,
62241 		ZEND_NULL_HANDLER,
62242 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
62243 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62244 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62245 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62246 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62247 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62248 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62249 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62250 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62251 		ZEND_NULL_HANDLER,
62252 		ZEND_NULL_HANDLER,
62253 		ZEND_NULL_HANDLER,
62254 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62255 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62256 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62257 		ZEND_NULL_HANDLER,
62258 		ZEND_NULL_HANDLER,
62259 		ZEND_NULL_HANDLER,
62260 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62261 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62262 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62263 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62264 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62265 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62266 		ZEND_NULL_HANDLER,
62267 		ZEND_NULL_HANDLER,
62268 		ZEND_NULL_HANDLER,
62269 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
62270 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62271 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62272 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62273 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62274 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62275 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62276 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62277 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62278 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62279 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62280 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62281 		ZEND_NULL_HANDLER,
62282 		ZEND_NULL_HANDLER,
62283 		ZEND_NULL_HANDLER,
62284 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62285 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62286 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62287 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62288 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62289 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62290 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62291 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62292 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62293 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62294 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62295 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62296 		ZEND_NULL_HANDLER,
62297 		ZEND_NULL_HANDLER,
62298 		ZEND_NULL_HANDLER,
62299 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62300 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62301 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62302 		ZEND_NULL_HANDLER,
62303 		ZEND_NULL_HANDLER,
62304 		ZEND_NULL_HANDLER,
62305 		ZEND_NULL_HANDLER,
62306 		ZEND_NULL_HANDLER,
62307 		ZEND_NULL_HANDLER,
62308 		ZEND_NULL_HANDLER,
62309 		ZEND_NULL_HANDLER,
62310 		ZEND_NULL_HANDLER,
62311 		ZEND_NULL_HANDLER,
62312 		ZEND_NULL_HANDLER,
62313 		ZEND_NULL_HANDLER,
62314 		ZEND_NULL_HANDLER,
62315 		ZEND_NULL_HANDLER,
62316 		ZEND_NULL_HANDLER,
62317 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
62318 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62319 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62320 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62321 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62322 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62323 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62324 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62325 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62326 		ZEND_NULL_HANDLER,
62327 		ZEND_NULL_HANDLER,
62328 		ZEND_NULL_HANDLER,
62329 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62330 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62331 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62332 		ZEND_NULL_HANDLER,
62333 		ZEND_NULL_HANDLER,
62334 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62335 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62336 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62337 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62338 		ZEND_NULL_HANDLER,
62339 		ZEND_NULL_HANDLER,
62340 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62341 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62342 		ZEND_NULL_HANDLER,
62343 		ZEND_NULL_HANDLER,
62344 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62345 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62346 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62347 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62348 		ZEND_NULL_HANDLER,
62349 		ZEND_NULL_HANDLER,
62350 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62351 		ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62352 		ZEND_NULL_HANDLER,
62353 		ZEND_NULL_HANDLER,
62354 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62355 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62356 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62357 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62358 		ZEND_NULL_HANDLER,
62359 		ZEND_NULL_HANDLER,
62360 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62361 		ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62362 		ZEND_NULL_HANDLER,
62363 		ZEND_NULL_HANDLER,
62364 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62365 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62366 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62367 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62368 		ZEND_NULL_HANDLER,
62369 		ZEND_NULL_HANDLER,
62370 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62371 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62372 		ZEND_NULL_HANDLER,
62373 		ZEND_NULL_HANDLER,
62374 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62375 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62376 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62377 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62378 		ZEND_NULL_HANDLER,
62379 		ZEND_NULL_HANDLER,
62380 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62381 		ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62382 		ZEND_NULL_HANDLER,
62383 		ZEND_NULL_HANDLER,
62384 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62385 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62386 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62387 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62388 		ZEND_NULL_HANDLER,
62389 		ZEND_NULL_HANDLER,
62390 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER,
62391 		ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER,
62392 		ZEND_NULL_HANDLER,
62393 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62394 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62395 		ZEND_NULL_HANDLER,
62396 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62397 		ZEND_NULL_HANDLER,
62398 		ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER,
62399 		ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER,
62400 		ZEND_NULL_HANDLER,
62401 		ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER,
62402 		ZEND_NULL_HANDLER,
62403 		ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62404 		ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62405 		ZEND_NULL_HANDLER,
62406 		ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62407 		ZEND_NULL_HANDLER,
62408 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62409 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62410 		ZEND_NULL_HANDLER,
62411 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER,
62412 		ZEND_NULL_HANDLER,
62413 		ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER,
62414 		ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER,
62415 		ZEND_NULL_HANDLER,
62416 		ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER,
62417 		ZEND_NULL_HANDLER,
62418 		ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62419 		ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62420 		ZEND_NULL_HANDLER,
62421 		ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER,
62422 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
62423 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62424 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62425 		ZEND_NULL_HANDLER,
62426 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
62427 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
62428 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62429 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62430 		ZEND_NULL_HANDLER,
62431 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
62432 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_HANDLER,
62433 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER,
62434 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER,
62435 		ZEND_NULL_HANDLER,
62436 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_HANDLER,
62437 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
62438 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER,
62439 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER,
62440 		ZEND_NULL_HANDLER,
62441 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER,
62442 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
62443 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER,
62444 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER,
62445 		ZEND_NULL_HANDLER,
62446 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER,
62447 		ZEND_NULL_HANDLER,
62448 		ZEND_NULL_HANDLER,
62449 		ZEND_NULL_HANDLER,
62450 		ZEND_NULL_HANDLER,
62451 		ZEND_NULL_HANDLER,
62452 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
62453 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER,
62454 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER,
62455 		ZEND_NULL_HANDLER,
62456 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_HANDLER,
62457 		ZEND_NULL_HANDLER,
62458 		ZEND_NULL_HANDLER,
62459 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
62460 		ZEND_NULL_HANDLER,
62461 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
62462 		ZEND_NULL_HANDLER,
62463 		ZEND_NULL_HANDLER,
62464 		ZEND_NULL_HANDLER,
62465 		ZEND_NULL_HANDLER,
62466 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER,
62467 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_HANDLER,
62468 		ZEND_NULL_HANDLER,
62469 		ZEND_NULL_HANDLER,
62470 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER,
62471 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER,
62472 		ZEND_NULL_HANDLER
62473 	};
62474 	static const uint32_t specs[] = {
62475 		0,
62476 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62477 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62478 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62479 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62480 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62481 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62482 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62483 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62484 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62485 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62486 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62487 		276 | SPEC_RULE_OP1,
62488 		281 | SPEC_RULE_OP1,
62489 		286 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62490 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62491 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62492 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62493 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62494 		411 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62495 		436 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62496 		461 | SPEC_RULE_OP1,
62497 		466 | SPEC_RULE_OP1,
62498 		471 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62499 		546 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62500 		621 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62501 		696 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62502 		771 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62503 		846 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62504 		921 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62505 		996 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62506 		1071 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62507 		1146 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62508 		1221 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62509 		1296 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
62510 		1306 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
62511 		1316 | SPEC_RULE_OP1,
62512 		1321 | SPEC_RULE_OP1,
62513 		1326 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
62514 		1376 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62515 		1401 | SPEC_RULE_OP1,
62516 		1406,
62517 		1407,
62518 		1408 | SPEC_RULE_OP1,
62519 		1413 | SPEC_RULE_OP1,
62520 		1418 | SPEC_RULE_OP1,
62521 		1423 | SPEC_RULE_OP1,
62522 		1428 | SPEC_RULE_OP1,
62523 		1433 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62524 		1458 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62525 		1483 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
62526 		1493 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62527 		1518 | SPEC_RULE_OP1,
62528 		1523 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62529 		1548 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62530 		1573 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62531 		1598 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62532 		1623,
62533 		1624 | SPEC_RULE_OP1,
62534 		1629 | SPEC_RULE_OP2,
62535 		1634 | SPEC_RULE_RETVAL,
62536 		1636 | SPEC_RULE_OP2,
62537 		1641 | SPEC_RULE_OP1,
62538 		1646,
62539 		1647 | SPEC_RULE_OP2,
62540 		1652 | SPEC_RULE_OP1,
62541 		1657 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
62542 		1667 | SPEC_RULE_OP1,
62543 		1672 | SPEC_RULE_OP1,
62544 		1677 | SPEC_RULE_OP2,
62545 		1682 | SPEC_RULE_OP1,
62546 		1687 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62547 		1712 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62548 		1737 | SPEC_RULE_OP1,
62549 		1742 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62550 		1767 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62551 		1792 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62552 		1817 | SPEC_RULE_OP1,
62553 		1822 | SPEC_RULE_OP1,
62554 		1827 | SPEC_RULE_OP1,
62555 		1832 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62556 		1857 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62557 		1882 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62558 		1907 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62559 		1932 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62560 		1957 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62561 		1982 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62562 		2007 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62563 		2032 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62564 		2057 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62565 		2082 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62566 		2107 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62567 		2132 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62568 		2157 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62569 		2182 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62570 		2207 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62571 		2232 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62572 		2257 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62573 		2282 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62574 		2307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62575 		4596,
62576 		2332,
62577 		2333,
62578 		2334,
62579 		2335,
62580 		2336,
62581 		2337 | SPEC_RULE_OP1,
62582 		2342 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62583 		2367 | SPEC_RULE_OP1,
62584 		2372 | SPEC_RULE_OP2,
62585 		2377 | SPEC_RULE_OP1,
62586 		2382 | SPEC_RULE_OP1,
62587 		2387 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62588 		2412 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62589 		2437 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62590 		2462 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62591 		2487 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
62592 		2497 | SPEC_RULE_OP1,
62593 		2502 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62594 		2527,
62595 		2528 | SPEC_RULE_OP1,
62596 		2533 | SPEC_RULE_OP1,
62597 		2538 | SPEC_RULE_OP1,
62598 		2543 | SPEC_RULE_OP1,
62599 		2548 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62600 		2573 | SPEC_RULE_OP1,
62601 		2578 | SPEC_RULE_OP1,
62602 		2583 | SPEC_RULE_OP1,
62603 		2588 | SPEC_RULE_OP2,
62604 		2593 | SPEC_RULE_RETVAL,
62605 		2595 | SPEC_RULE_RETVAL,
62606 		2597 | SPEC_RULE_RETVAL,
62607 		2599 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62608 		2624 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62609 		2649 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62610 		2674 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62611 		2699 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
62612 		2824,
62613 		2825 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62614 		2850,
62615 		2851 | SPEC_RULE_OP2,
62616 		2856,
62617 		2857 | SPEC_RULE_OP1,
62618 		2862 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62619 		2887 | SPEC_RULE_OP2,
62620 		2892 | SPEC_RULE_OP2,
62621 		2897,
62622 		2898 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
62623 		3023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62624 		3048,
62625 		3049,
62626 		3050,
62627 		3051 | SPEC_RULE_OP1,
62628 		3056 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62629 		3081,
62630 		3082,
62631 		3083 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62632 		3108,
62633 		3109,
62634 		3110,
62635 		3111 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62636 		3136 | SPEC_RULE_OP1,
62637 		3141,
62638 		3142,
62639 		3143,
62640 		3144,
62641 		3145 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62642 		3170 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ,
62643 		3245 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62644 		3270 | SPEC_RULE_OP1,
62645 		3275 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62646 		3300,
62647 		3301 | SPEC_RULE_OP2,
62648 		3306 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62649 		3331 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62650 		3356 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62651 		3381 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62652 		3406 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62653 		3431 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62654 		3456 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62655 		3481 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62656 		3506 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62657 		3531 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62658 		3556 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62659 		3581 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62660 		4596,
62661 		3606 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
62662 		4596
62663 	};
62664 	zend_opcode_handlers = labels;
62665 	zend_handlers_count = sizeof(labels) / sizeof(void*);
62666 	zend_spec_handlers = specs;
62667 }
62668 
62669 static HashTable *zend_handlers_table = NULL;
62670 
62671 static void init_opcode_serialiser(void)
62672 {
62673 	int i;
62674 	zval tmp;
62675 
62676 	zend_handlers_table = malloc(sizeof(HashTable));
62677 	zend_hash_init_ex(zend_handlers_table, zend_handlers_count, NULL, NULL, 1, 0);
62678 	zend_hash_real_init(zend_handlers_table, 0);
62679 	Z_TYPE_INFO(tmp) = IS_LONG;
62680 	for (i = 0; i < zend_handlers_count; i++) {
62681 		Z_LVAL(tmp) = i;
62682 		zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
62683 	}
62684 }
62685 
62686 ZEND_API void zend_serialize_opcode_handler(zend_op *op)
62687 {
62688 	zval *zv;
62689 
62690 	if (!zend_handlers_table) {
62691 		init_opcode_serialiser();
62692 	}
62693 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
62694 	ZEND_ASSERT(zv != NULL);
62695 	op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
62696 }
62697 
62698 ZEND_API void zend_deserialize_opcode_handler(zend_op *op)
62699 {
62700 	op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
62701 }
62702 
62703 static const void *zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)
62704 {
62705 	static const int zend_vm_decode[] = {
62706 		_UNUSED_CODE, /* 0              */
62707 		_CONST_CODE,  /* 1 = IS_CONST   */
62708 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
62709 		_UNUSED_CODE, /* 3              */
62710 		_VAR_CODE,    /* 4 = IS_VAR     */
62711 		_UNUSED_CODE, /* 5              */
62712 		_UNUSED_CODE, /* 6              */
62713 		_UNUSED_CODE, /* 7              */
62714 		_UNUSED_CODE, /* 8 = IS_UNUSED  */
62715 		_UNUSED_CODE, /* 9              */
62716 		_UNUSED_CODE, /* 10             */
62717 		_UNUSED_CODE, /* 11             */
62718 		_UNUSED_CODE, /* 12             */
62719 		_UNUSED_CODE, /* 13             */
62720 		_UNUSED_CODE, /* 14             */
62721 		_UNUSED_CODE, /* 15             */
62722 		_CV_CODE      /* 16 = IS_CV     */
62723 	};
62724 	uint32_t offset = 0;
62725 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
62726 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
62727 	if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
62728 	if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);
62729 	if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num < MAX_ARG_FLAG_NUM);
62730 	if (spec & SPEC_RULE_SMART_BRANCH) {
62731 		offset = offset * 3;
62732 		if ((op+1)->opcode == ZEND_JMPZ) {
62733 			offset += 1;
62734 		} else if ((op+1)->opcode == ZEND_JMPNZ) {
62735 			offset += 2;
62736 		}
62737 	}
62738 	if (spec & SPEC_RULE_DIM_OBJ) {
62739 		offset = offset * 3;
62740 		if (op->extended_value == ZEND_ASSIGN_DIM) {
62741 			offset += 1;
62742 		} else if (op->extended_value == ZEND_ASSIGN_OBJ) {
62743 			offset += 2;
62744 		}
62745 	}
62746 	return zend_opcode_handlers[(spec & SPEC_START_MASK) + offset];
62747 }
62748 
62749 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
62750 {
62751 	return zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
62752 }
62753 
62754 ZEND_API void zend_vm_set_opcode_handler(zend_op* op)
62755 {
62756 	op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);
62757 }
62758 
62759 ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint32_t op2_info, uint32_t res_info)
62760 {
62761 	zend_uchar opcode = zend_user_opcodes[op->opcode];
62762 	uint32_t spec = zend_spec_handlers[opcode];
62763 	switch (opcode) {
62764 		case ZEND_ADD:
62765 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62766 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62767 					break;
62768 				}
62769 				spec = 3631 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62770 				if (op->op1_type > op->op2_type) {
62771 					zend_swap_operands(op);
62772 				}
62773 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62774 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62775 					break;
62776 				}
62777 				spec = 3656 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62778 				if (op->op1_type > op->op2_type) {
62779 					zend_swap_operands(op);
62780 				}
62781 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62782 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62783 					break;
62784 				}
62785 				spec = 3681 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62786 				if (op->op1_type > op->op2_type) {
62787 					zend_swap_operands(op);
62788 				}
62789 			}
62790 			break;
62791 		case ZEND_SUB:
62792 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62793 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62794 					break;
62795 				}
62796 				spec = 3706 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62797 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62798 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62799 					break;
62800 				}
62801 				spec = 3731 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62802 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62803 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62804 					break;
62805 				}
62806 				spec = 3756 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62807 			}
62808 			break;
62809 		case ZEND_MUL:
62810 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62811 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62812 					break;
62813 				}
62814 				spec = 3781 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62815 				if (op->op1_type > op->op2_type) {
62816 					zend_swap_operands(op);
62817 				}
62818 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62819 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62820 					break;
62821 				}
62822 				spec = 3806 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62823 				if (op->op1_type > op->op2_type) {
62824 					zend_swap_operands(op);
62825 				}
62826 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62827 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62828 					break;
62829 				}
62830 				spec = 3831 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62831 				if (op->op1_type > op->op2_type) {
62832 					zend_swap_operands(op);
62833 				}
62834 			}
62835 			break;
62836 		case ZEND_IS_EQUAL:
62837 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62838 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62839 					break;
62840 				}
62841 				spec = 3856 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62842 				if (op->op1_type > op->op2_type) {
62843 					zend_swap_operands(op);
62844 				}
62845 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62846 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62847 					break;
62848 				}
62849 				spec = 3931 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62850 				if (op->op1_type > op->op2_type) {
62851 					zend_swap_operands(op);
62852 				}
62853 			}
62854 			break;
62855 		case ZEND_IS_NOT_EQUAL:
62856 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62857 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62858 					break;
62859 				}
62860 				spec = 4006 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62861 				if (op->op1_type > op->op2_type) {
62862 					zend_swap_operands(op);
62863 				}
62864 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62865 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62866 					break;
62867 				}
62868 				spec = 4081 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62869 				if (op->op1_type > op->op2_type) {
62870 					zend_swap_operands(op);
62871 				}
62872 			}
62873 			break;
62874 		case ZEND_IS_SMALLER:
62875 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62876 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62877 					break;
62878 				}
62879 				spec = 4156 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62880 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62881 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62882 					break;
62883 				}
62884 				spec = 4231 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62885 			}
62886 			break;
62887 		case ZEND_IS_SMALLER_OR_EQUAL:
62888 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
62889 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62890 					break;
62891 				}
62892 				spec = 4306 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62893 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
62894 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
62895 					break;
62896 				}
62897 				spec = 4381 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
62898 			}
62899 			break;
62900 		case ZEND_QM_ASSIGN:
62901 			if (op1_info == MAY_BE_DOUBLE) {
62902 				spec = 4546 | SPEC_RULE_OP1;
62903 			} else if (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)))) {
62904 				spec = 4551 | SPEC_RULE_OP1;
62905 			}
62906 			break;
62907 		case ZEND_PRE_INC:
62908 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
62909 				spec = 4456 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62910 			} else if (op1_info == MAY_BE_LONG) {
62911 				spec = 4466 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62912 			} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
62913 				spec = 4476 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62914 			}
62915 			break;
62916 		case ZEND_PRE_DEC:
62917 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
62918 				spec = 4486 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62919 			} else if (op1_info == MAY_BE_LONG) {
62920 				spec = 4496 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62921 			} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
62922 				spec = 4506 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
62923 			}
62924 			break;
62925 		case ZEND_POST_INC:
62926 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
62927 				spec = 4516 | SPEC_RULE_OP1;
62928 			} else if (op1_info == MAY_BE_LONG) {
62929 				spec = 4521 | SPEC_RULE_OP1;
62930 			} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
62931 				spec = 4526 | SPEC_RULE_OP1;
62932 			}
62933 			break;
62934 		case ZEND_POST_DEC:
62935 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
62936 				spec = 4531 | SPEC_RULE_OP1;
62937 			} else if (op1_info == MAY_BE_LONG) {
62938 				spec = 4536 | SPEC_RULE_OP1;
62939 			} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
62940 				spec = 4541 | SPEC_RULE_OP1;
62941 			}
62942 			break;
62943 		case ZEND_SEND_VAR_EX:
62944 			if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
62945 				spec = 4586 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG;
62946 			}
62947 			break;
62948 		case ZEND_FETCH_DIM_R:
62949 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
62950 				spec = 4556 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
62951 			}
62952 			break;
62953 		case ZEND_SEND_VAR:
62954 			if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
62955 				spec = 4581 | SPEC_RULE_OP1;
62956 			}
62957 			break;
62958 		default:
62959 			break;
62960 	}
62961 	op->handler = zend_vm_get_opcode_handler_ex(spec, op);
62962 }
62963 
62964 ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)
62965 {
62966 	int ret;
62967 #ifdef ZEND_VM_IP_GLOBAL_REG
62968 	const zend_op *orig_opline = opline;
62969 #endif
62970 #ifdef ZEND_VM_FP_GLOBAL_REG
62971 	zend_execute_data *orig_execute_data = execute_data;
62972 	execute_data = ex;
62973 #else
62974 	zend_execute_data *execute_data = ex;
62975 #endif
62976 
62977 	LOAD_OPLINE();
62978 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
62979 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62980 	if (EXPECTED(opline)) {
62981 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
62982 		SAVE_OPLINE();
62983 	} else {
62984 		ret = -1;
62985 	}
62986 #else
62987 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
62988 	SAVE_OPLINE();
62989 #endif
62990 #ifdef ZEND_VM_FP_GLOBAL_REG
62991 	execute_data = orig_execute_data;
62992 #endif
62993 #ifdef ZEND_VM_IP_GLOBAL_REG
62994 	opline = orig_opline;
62995 #endif
62996 	return ret;
62997 }
62998 
62999