xref: /PHP-7.4/Zend/zend_vm_execute.h (revision 0b7dffb4)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 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@php.net>                                 |
16    |          Zeev Suraski <zeev@php.net>                                 |
17    |          Dmitry Stogov <dmitry@php.net>                              |
18    +----------------------------------------------------------------------+
19 */
20 
21 #ifdef ZEND_WIN32
22 # pragma warning(disable : 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_EXTRA_MASK        0xfffc0000
311 #define SPEC_RULE_OP1          0x00010000
312 #define SPEC_RULE_OP2          0x00020000
313 #define SPEC_RULE_OP_DATA      0x00040000
314 #define SPEC_RULE_RETVAL       0x00080000
315 #define SPEC_RULE_QUICK_ARG    0x00100000
316 #define SPEC_RULE_SMART_BRANCH 0x00200000
317 #define SPEC_RULE_COMMUTATIVE  0x00800000
318 #define SPEC_RULE_ISSET        0x01000000
319 
320 static const uint32_t *zend_spec_handlers;
321 static const void * const *zend_opcode_handlers;
322 static int zend_handlers_count;
323 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
324 static const void * const * zend_opcode_handler_funcs;
325 static zend_op hybrid_halt_op;
326 #endif
327 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
328 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);
329 #endif
330 
331 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
332 static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op);
333 #else
334 # define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
335 #endif
336 
337 #ifndef VM_TRACE
338 # define VM_TRACE(op)
339 #endif
340 #ifndef VM_TRACE_START
341 # define VM_TRACE_START()
342 #endif
343 #ifndef VM_TRACE_END
344 # define VM_TRACE_END()
345 #endif
346 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
347 #define HYBRID_NEXT()     goto *(void**)(OPLINE->handler)
348 #define HYBRID_SWITCH()   HYBRID_NEXT();
349 #define HYBRID_CASE(op)   op ## _LABEL
350 #define HYBRID_BREAK()    HYBRID_NEXT()
351 #define HYBRID_DEFAULT    ZEND_NULL_LABEL
352 #endif
353 
354 #ifdef ZEND_VM_FP_GLOBAL_REG
355 # define ZEND_OPCODE_HANDLER_ARGS void
356 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
357 # define ZEND_OPCODE_HANDLER_ARGS_DC
358 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC
359 #else
360 # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data
361 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data
362 # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS
363 # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU
364 #endif
365 
366 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
367 # define ZEND_OPCODE_HANDLER_RET void
368 # define ZEND_VM_TAIL_CALL(call) call; return
369 # ifdef ZEND_VM_TAIL_CALL_DISPATCH
370 #  define ZEND_VM_CONTINUE()     ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return
371 # else
372 #  define ZEND_VM_CONTINUE()     return
373 # endif
374 # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
375 #  define ZEND_VM_RETURN()        opline = &hybrid_halt_op; return
376 #  define ZEND_VM_HOT             zend_always_inline ZEND_COLD ZEND_OPT_SIZE
377 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
378 # else
379 #  define ZEND_VM_RETURN()        opline = NULL; return
380 #  define ZEND_VM_HOT
381 #  define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
382 # endif
383 #else
384 # define ZEND_OPCODE_HANDLER_RET int
385 # define ZEND_VM_TAIL_CALL(call) return call
386 # define ZEND_VM_CONTINUE()      return  0
387 # define ZEND_VM_RETURN()        return -1
388 # define ZEND_VM_HOT
389 # define ZEND_VM_COLD            ZEND_COLD ZEND_OPT_SIZE
390 #endif
391 
392 typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
393 
394 #undef OPLINE
395 #undef DCL_OPLINE
396 #undef USE_OPLINE
397 #undef LOAD_OPLINE
398 #undef LOAD_OPLINE_EX
399 #undef SAVE_OPLINE
400 #undef SAVE_OPLINE_EX
401 #define DCL_OPLINE
402 #ifdef ZEND_VM_IP_GLOBAL_REG
403 # define OPLINE opline
404 # define USE_OPLINE
405 # define LOAD_OPLINE() opline = EX(opline)
406 # define LOAD_OPLINE_EX()
407 # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1
408 # define SAVE_OPLINE() EX(opline) = opline
409 # define SAVE_OPLINE_EX() SAVE_OPLINE()
410 #else
411 # define OPLINE EX(opline)
412 # define USE_OPLINE const zend_op *opline = EX(opline);
413 # define LOAD_OPLINE()
414 # define LOAD_OPLINE_EX()
415 # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE()
416 # define SAVE_OPLINE()
417 # define SAVE_OPLINE_EX()
418 #endif
419 #undef HANDLE_EXCEPTION
420 #undef HANDLE_EXCEPTION_LEAVE
421 #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE()
422 #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE()
423 #if defined(ZEND_VM_FP_GLOBAL_REG)
424 # define ZEND_VM_ENTER_EX()        ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE()
425 # define ZEND_VM_ENTER()           execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX()
426 # define ZEND_VM_LEAVE()           ZEND_VM_CONTINUE()
427 #elif defined(ZEND_VM_IP_GLOBAL_REG)
428 # define ZEND_VM_ENTER_EX()        return  1
429 # define ZEND_VM_ENTER()           opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX()
430 # define ZEND_VM_LEAVE()           return  2
431 #else
432 # define ZEND_VM_ENTER_EX()        return  1
433 # define ZEND_VM_ENTER()           return  1
434 # define ZEND_VM_LEAVE()           return  2
435 #endif
436 #define ZEND_VM_INTERRUPT()      ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
437 #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
438 #define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler_func(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
439 
440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS);
442 
zend_add_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)443 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_add_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
444 {
445 	USE_OPLINE
446 
447 	SAVE_OPLINE();
448 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
449 		op_1 = ZVAL_UNDEFINED_OP1();
450 	}
451 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
452 		op_2 = ZVAL_UNDEFINED_OP2();
453 	}
454 	add_function(EX_VAR(opline->result.var), op_1, op_2);
455 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
456 		zval_ptr_dtor_nogc(op_1);
457 	}
458 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
459 		zval_ptr_dtor_nogc(op_2);
460 	}
461 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
462 }
463 
zend_sub_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)464 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_sub_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
465 {
466 	USE_OPLINE
467 
468 	SAVE_OPLINE();
469 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
470 		op_1 = ZVAL_UNDEFINED_OP1();
471 	}
472 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
473 		op_2 = ZVAL_UNDEFINED_OP2();
474 	}
475 	sub_function(EX_VAR(opline->result.var), op_1, op_2);
476 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
477 		zval_ptr_dtor_nogc(op_1);
478 	}
479 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
480 		zval_ptr_dtor_nogc(op_2);
481 	}
482 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
483 }
484 
zend_mul_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)485 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mul_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
486 {
487 	USE_OPLINE
488 
489 	SAVE_OPLINE();
490 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
491 		op_1 = ZVAL_UNDEFINED_OP1();
492 	}
493 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
494 		op_2 = ZVAL_UNDEFINED_OP2();
495 	}
496 	mul_function(EX_VAR(opline->result.var), op_1, op_2);
497 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
498 		zval_ptr_dtor_nogc(op_1);
499 	}
500 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
501 		zval_ptr_dtor_nogc(op_2);
502 	}
503 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
504 }
505 
zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)506 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
507 {
508 	USE_OPLINE
509 
510 	SAVE_OPLINE();
511 	zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
512 	ZVAL_UNDEF(EX_VAR(opline->result.var));
513 	HANDLE_EXCEPTION();
514 }
515 
zend_mod_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)516 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
517 {
518 	USE_OPLINE
519 
520 	SAVE_OPLINE();
521 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
522 		op_1 = ZVAL_UNDEFINED_OP1();
523 	}
524 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
525 		op_2 = ZVAL_UNDEFINED_OP2();
526 	}
527 	mod_function(EX_VAR(opline->result.var), op_1, op_2);
528 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
529 		zval_ptr_dtor_nogc(op_1);
530 	}
531 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
532 		zval_ptr_dtor_nogc(op_2);
533 	}
534 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
535 }
536 
zend_shift_left_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)537 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_left_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
538 {
539 	USE_OPLINE
540 
541 	SAVE_OPLINE();
542 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
543 		op_1 = ZVAL_UNDEFINED_OP1();
544 	}
545 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
546 		op_2 = ZVAL_UNDEFINED_OP2();
547 	}
548 	shift_left_function(EX_VAR(opline->result.var), op_1, op_2);
549 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
550 		zval_ptr_dtor_nogc(op_1);
551 	}
552 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
553 		zval_ptr_dtor_nogc(op_2);
554 	}
555 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
556 }
557 
zend_shift_right_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)558 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_right_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
559 {
560 	USE_OPLINE
561 
562 	SAVE_OPLINE();
563 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
564 		op_1 = ZVAL_UNDEFINED_OP1();
565 	}
566 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
567 		op_2 = ZVAL_UNDEFINED_OP2();
568 	}
569 	shift_right_function(EX_VAR(opline->result.var), op_1, op_2);
570 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
571 		zval_ptr_dtor_nogc(op_1);
572 	}
573 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
574 		zval_ptr_dtor_nogc(op_2);
575 	}
576 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
577 }
578 
zend_is_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)579 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
580 {
581 	USE_OPLINE
582 
583 	SAVE_OPLINE();
584 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
585 		op_1 = ZVAL_UNDEFINED_OP1();
586 	}
587 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
588 		op_2 = ZVAL_UNDEFINED_OP2();
589 	}
590 	compare_function(EX_VAR(opline->result.var), op_1, op_2);
591 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
592 		zval_ptr_dtor_nogc(op_1);
593 	}
594 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
595 		zval_ptr_dtor_nogc(op_2);
596 	}
597 	if (UNEXPECTED(EG(exception))) {
598 		HANDLE_EXCEPTION();
599 	}
600 	if (Z_LVAL_P(EX_VAR(opline->result.var)) == 0) {
601 		ZEND_VM_SMART_BRANCH_TRUE();
602 		ZVAL_TRUE(EX_VAR(opline->result.var));
603 		ZEND_VM_NEXT_OPCODE();
604 	} else {
605 		ZEND_VM_SMART_BRANCH_FALSE();
606 		ZVAL_FALSE(EX_VAR(opline->result.var));
607 		ZEND_VM_NEXT_OPCODE();
608 	}
609 }
610 
zend_is_not_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)611 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_not_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
612 {
613 	USE_OPLINE
614 
615 	SAVE_OPLINE();
616 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
617 		op_1 = ZVAL_UNDEFINED_OP1();
618 	}
619 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
620 		op_2 = ZVAL_UNDEFINED_OP2();
621 	}
622 	compare_function(EX_VAR(opline->result.var), op_1, op_2);
623 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
624 		zval_ptr_dtor_nogc(op_1);
625 	}
626 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
627 		zval_ptr_dtor_nogc(op_2);
628 	}
629 	if (UNEXPECTED(EG(exception))) {
630 		HANDLE_EXCEPTION();
631 	}
632 	if (Z_LVAL_P(EX_VAR(opline->result.var)) != 0) {
633 		ZEND_VM_SMART_BRANCH_TRUE();
634 		ZVAL_TRUE(EX_VAR(opline->result.var));
635 		ZEND_VM_NEXT_OPCODE();
636 	} else {
637 		ZEND_VM_SMART_BRANCH_FALSE();
638 		ZVAL_FALSE(EX_VAR(opline->result.var));
639 		ZEND_VM_NEXT_OPCODE();
640 	}
641 }
642 
zend_is_smaller_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)643 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
644 {
645 	USE_OPLINE
646 
647 	SAVE_OPLINE();
648 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
649 		op_1 = ZVAL_UNDEFINED_OP1();
650 	}
651 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
652 		op_2 = ZVAL_UNDEFINED_OP2();
653 	}
654 	compare_function(EX_VAR(opline->result.var), op_1, op_2);
655 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
656 		zval_ptr_dtor_nogc(op_1);
657 	}
658 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
659 		zval_ptr_dtor_nogc(op_2);
660 	}
661 	if (UNEXPECTED(EG(exception))) {
662 		HANDLE_EXCEPTION();
663 	}
664 	if (Z_LVAL_P(EX_VAR(opline->result.var)) < 0) {
665 		ZEND_VM_SMART_BRANCH_TRUE();
666 		ZVAL_TRUE(EX_VAR(opline->result.var));
667 		ZEND_VM_NEXT_OPCODE();
668 	} else {
669 		ZEND_VM_SMART_BRANCH_FALSE();
670 		ZVAL_FALSE(EX_VAR(opline->result.var));
671 		ZEND_VM_NEXT_OPCODE();
672 	}
673 }
674 
zend_is_smaller_or_equal_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)675 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_or_equal_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
676 {
677 	USE_OPLINE
678 
679 	SAVE_OPLINE();
680 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
681 		op_1 = ZVAL_UNDEFINED_OP1();
682 	}
683 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
684 		op_2 = ZVAL_UNDEFINED_OP2();
685 	}
686 	compare_function(EX_VAR(opline->result.var), op_1, op_2);
687 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
688 		zval_ptr_dtor_nogc(op_1);
689 	}
690 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
691 		zval_ptr_dtor_nogc(op_2);
692 	}
693 	if (UNEXPECTED(EG(exception))) {
694 		HANDLE_EXCEPTION();
695 	}
696 	if (Z_LVAL_P(EX_VAR(opline->result.var)) <= 0) {
697 		ZEND_VM_SMART_BRANCH_TRUE();
698 		ZVAL_TRUE(EX_VAR(opline->result.var));
699 		ZEND_VM_NEXT_OPCODE();
700 	} else {
701 		ZEND_VM_SMART_BRANCH_FALSE();
702 		ZVAL_FALSE(EX_VAR(opline->result.var));
703 		ZEND_VM_NEXT_OPCODE();
704 	}
705 }
706 
zend_bw_or_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)707 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_or_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
708 {
709 	USE_OPLINE
710 
711 	SAVE_OPLINE();
712 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
713 		op_1 = ZVAL_UNDEFINED_OP1();
714 	}
715 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
716 		op_2 = ZVAL_UNDEFINED_OP2();
717 	}
718 	bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2);
719 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
720 		zval_ptr_dtor_nogc(op_1);
721 	}
722 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
723 		zval_ptr_dtor_nogc(op_2);
724 	}
725 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
726 }
727 
zend_bw_and_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)728 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_and_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
729 {
730 	USE_OPLINE
731 
732 	SAVE_OPLINE();
733 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
734 		op_1 = ZVAL_UNDEFINED_OP1();
735 	}
736 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
737 		op_2 = ZVAL_UNDEFINED_OP2();
738 	}
739 	bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2);
740 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
741 		zval_ptr_dtor_nogc(op_1);
742 	}
743 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
744 		zval_ptr_dtor_nogc(op_2);
745 	}
746 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
747 }
748 
zend_bw_xor_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)749 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_xor_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
750 {
751 	USE_OPLINE
752 
753 	SAVE_OPLINE();
754 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
755 		op_1 = ZVAL_UNDEFINED_OP1();
756 	}
757 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
758 		op_2 = ZVAL_UNDEFINED_OP2();
759 	}
760 	bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2);
761 	if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) {
762 		zval_ptr_dtor_nogc(op_1);
763 	}
764 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
765 		zval_ptr_dtor_nogc(op_2);
766 	}
767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
768 }
769 
zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)770 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
771 {
772 	USE_OPLINE
773 
774 	SAVE_OPLINE();
775 	zend_throw_error(NULL, "Using $this when not in object context");
776 	if ((opline+1)->opcode == ZEND_OP_DATA) {
777 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
778 	}
779 	FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
780 	UNDEF_RESULT();
781 	HANDLE_EXCEPTION();
782 }
783 
zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)784 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
785 {
786 	USE_OPLINE
787 	zval *function_name;
788 
789 	SAVE_OPLINE();
790 	function_name = RT_CONSTANT(opline, opline->op2);
791 	zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name));
792 	HANDLE_EXCEPTION();
793 }
794 
ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)795 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
796 {
797 	/* This helper actually never will receive IS_VAR as second op, and has the same handling for VAR and TMP in the first op, but for interoperability with the other binary_assign_op helpers, it is necessary to "include" it */
798 
799 	USE_OPLINE
800 	zend_free_op free_op_data;
801 	zval *prop, *value;
802 	zend_property_info *prop_info;
803 	zend_reference *ref;
804 
805 	SAVE_OPLINE();
806 
807 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
808 		ZEND_ASSERT(EG(exception));
809 		UNDEF_RESULT();
810 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
811 		HANDLE_EXCEPTION();
812 	}
813 
814 	value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
815 
816 	do {
817 		if (UNEXPECTED(Z_ISREF_P(prop))) {
818 			ref = Z_REF_P(prop);
819 			prop = Z_REFVAL_P(prop);
820 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
821 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
822 				break;
823 			}
824 		}
825 
826 		if (UNEXPECTED(prop_info->type)) {
827 			/* special case for typed properties */
828 			zend_binary_assign_op_typed_prop(prop_info, prop, value OPLINE_CC EXECUTE_DATA_CC);
829 		} else {
830 			zend_binary_op(prop, prop, value OPLINE_CC);
831 		}
832 	} while (0);
833 
834 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
835 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
836 	}
837 
838 	FREE_OP(free_op_data);
839 	/* assign_static_prop has two opcodes! */
840 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
841 }
842 
ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)843 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
844 {
845 	USE_OPLINE
846 	zval *prop;
847 	zend_property_info *prop_info;
848 
849 	SAVE_OPLINE();
850 
851 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
852 		UNDEF_RESULT();
853 		HANDLE_EXCEPTION();
854 	}
855 
856 	zend_pre_incdec_property_zval(prop, prop_info->type ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
857 
858 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
859 }
860 
861 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
863 {
864 	USE_OPLINE
865 	zval *prop;
866 	zend_property_info *prop_info;
867 
868 	SAVE_OPLINE();
869 
870 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
871 		UNDEF_RESULT();
872 		HANDLE_EXCEPTION();
873 	}
874 
875 	zend_post_incdec_property_zval(prop, prop_info->type ? prop_info : NULL OPLINE_CC EXECUTE_DATA_CC);
876 
877 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
878 }
879 
880 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)881 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC(int type ZEND_OPCODE_HANDLER_ARGS_DC)
882 {
883 	USE_OPLINE
884 	zval *prop;
885 
886 	SAVE_OPLINE();
887 
888 	if (UNEXPECTED(zend_fetch_static_property_address(&prop, NULL, opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS, type, opline->extended_value & ZEND_FETCH_OBJ_FLAGS OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
889 		ZEND_ASSERT(EG(exception) || (type == BP_VAR_IS));
890 		prop = &EG(uninitialized_zval);
891 	}
892 
893 	if (type == BP_VAR_R || type == BP_VAR_IS) {
894 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), prop);
895 	} else {
896 		ZVAL_INDIRECT(EX_VAR(opline->result.var), prop);
897 	}
898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
899 }
900 
901 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
903 {
904 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
905 }
906 
907 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)908 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
909 {
910 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
911 }
912 
913 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)914 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
915 {
916 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
917 }
918 
919 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)920 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
921 {
922 	int fetch_type =
923 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
924 			BP_VAR_W : BP_VAR_R;
925 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
926 }
927 
928 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)929 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
930 {
931 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
932 }
933 
934 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)935 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
936 {
937 	ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
938 }
939 
zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)940 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
941 {
942 	USE_OPLINE
943 
944 	SAVE_OPLINE();
945 	zend_throw_error(NULL, "Cannot use temporary expression in write context");
946 	FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
947 	FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
948 	ZVAL_UNDEF(EX_VAR(opline->result.var));
949 	HANDLE_EXCEPTION();
950 }
951 
zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)952 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
953 {
954 	USE_OPLINE
955 
956 	SAVE_OPLINE();
957 	zend_throw_error(NULL, "Cannot use [] for reading");
958 	FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
959 	FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
960 	ZVAL_UNDEF(EX_VAR(opline->result.var));
961 	HANDLE_EXCEPTION();
962 }
963 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)964 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
965 {
966 	USE_OPLINE
967 
968 	zval *prop, *value;
969 	zend_property_info *prop_info;
970 
971 	SAVE_OPLINE();
972 
973 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
974 
975 		UNDEF_RESULT();
976 		HANDLE_EXCEPTION();
977 	}
978 
979 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
980 
981 	if (UNEXPECTED(prop_info->type)) {
982 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
983 
984 	} else {
985 		value = zend_assign_to_variable(prop, value, IS_CONST, EX_USES_STRICT_TYPES());
986 	}
987 
988 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
989 		ZVAL_COPY(EX_VAR(opline->result.var), value);
990 	}
991 
992 	/* assign_static_prop has two opcodes! */
993 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
994 }
995 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
997 {
998 	USE_OPLINE
999 	zend_free_op free_op_data;
1000 	zval *prop, *value;
1001 	zend_property_info *prop_info;
1002 
1003 	SAVE_OPLINE();
1004 
1005 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1006 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1007 		UNDEF_RESULT();
1008 		HANDLE_EXCEPTION();
1009 	}
1010 
1011 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
1012 
1013 	if (UNEXPECTED(prop_info->type)) {
1014 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
1015 		zval_ptr_dtor_nogc(free_op_data);
1016 	} else {
1017 		value = zend_assign_to_variable(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
1018 	}
1019 
1020 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1021 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1022 	}
1023 
1024 	/* assign_static_prop has two opcodes! */
1025 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1026 }
1027 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1029 {
1030 	USE_OPLINE
1031 	zend_free_op free_op_data;
1032 	zval *prop, *value;
1033 	zend_property_info *prop_info;
1034 
1035 	SAVE_OPLINE();
1036 
1037 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1038 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1039 		UNDEF_RESULT();
1040 		HANDLE_EXCEPTION();
1041 	}
1042 
1043 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
1044 
1045 	if (UNEXPECTED(prop_info->type)) {
1046 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
1047 		zval_ptr_dtor_nogc(free_op_data);
1048 	} else {
1049 		value = zend_assign_to_variable(prop, value, IS_VAR, EX_USES_STRICT_TYPES());
1050 	}
1051 
1052 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1053 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1054 	}
1055 
1056 	/* assign_static_prop has two opcodes! */
1057 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1058 }
1059 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1061 {
1062 	USE_OPLINE
1063 
1064 	zval *prop, *value;
1065 	zend_property_info *prop_info;
1066 
1067 	SAVE_OPLINE();
1068 
1069 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1070 
1071 		UNDEF_RESULT();
1072 		HANDLE_EXCEPTION();
1073 	}
1074 
1075 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
1076 
1077 	if (UNEXPECTED(prop_info->type)) {
1078 		value = zend_assign_to_typed_prop(prop_info, prop, value EXECUTE_DATA_CC);
1079 
1080 	} else {
1081 		value = zend_assign_to_variable(prop, value, IS_CV, EX_USES_STRICT_TYPES());
1082 	}
1083 
1084 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1085 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1086 	}
1087 
1088 	/* assign_static_prop has two opcodes! */
1089 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1090 }
1091 
ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1093 {
1094 	USE_OPLINE
1095 	zend_free_op free_op_data;
1096 	zval *prop, *value_ptr;
1097 	zend_property_info *prop_info;
1098 
1099 	SAVE_OPLINE();
1100 
1101 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1102 		FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
1103 		UNDEF_RESULT();
1104 		HANDLE_EXCEPTION();
1105 	}
1106 
1107 	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, &free_op_data, BP_VAR_W);
1108 
1109 	if ((opline+1)->op1_type == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
1110 		prop = &EG(uninitialized_zval);
1111 	} else if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
1112 		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr OPLINE_CC EXECUTE_DATA_CC))) {
1113 			prop = &EG(uninitialized_zval);
1114 		}
1115 	} else if (UNEXPECTED(prop_info->type)) {
1116 		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr EXECUTE_DATA_CC);
1117 	} else {
1118 		zend_assign_to_variable_reference(prop, value_ptr);
1119 	}
1120 
1121 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1122 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
1123 	}
1124 
1125 	if (free_op_data) {zval_ptr_dtor_nogc(free_op_data);};
1126 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1127 }
1128 
zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)1129 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
1130 {
1131 	zend_execute_data *old_execute_data;
1132 	uint32_t call_info = EX_CALL_INFO();
1133 	SAVE_OPLINE();
1134 
1135 	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) {
1136 		EG(current_execute_data) = EX(prev_execute_data);
1137 		i_free_compiled_variables(execute_data);
1138 
1139 #ifdef ZEND_PREFER_RELOAD
1140 		call_info = EX_CALL_INFO();
1141 #endif
1142 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1143 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1144 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1145 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1146 		}
1147 		EG(vm_stack_top) = (zval*)execute_data;
1148 		execute_data = EX(prev_execute_data);
1149 
1150 		if (UNEXPECTED(EG(exception) != NULL)) {
1151 			zend_rethrow_exception(execute_data);
1152 			HANDLE_EXCEPTION_LEAVE();
1153 		}
1154 
1155 		LOAD_NEXT_OPLINE();
1156 		ZEND_VM_LEAVE();
1157 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
1158 		EG(current_execute_data) = EX(prev_execute_data);
1159 		i_free_compiled_variables(execute_data);
1160 
1161 #ifdef ZEND_PREFER_RELOAD
1162 		call_info = EX_CALL_INFO();
1163 #endif
1164 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1165 			zend_clean_and_cache_symbol_table(EX(symbol_table));
1166 		}
1167 
1168 		/* Free extra args before releasing the closure,
1169 		 * as that may free the op_array. */
1170 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1171 
1172 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1173 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1174 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1175 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1176 		}
1177 
1178 		old_execute_data = execute_data;
1179 		execute_data = EX(prev_execute_data);
1180 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1181 
1182 		if (UNEXPECTED(EG(exception) != NULL)) {
1183 			zend_rethrow_exception(execute_data);
1184 			HANDLE_EXCEPTION_LEAVE();
1185 		}
1186 
1187 		LOAD_NEXT_OPLINE();
1188 		ZEND_VM_LEAVE();
1189 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
1190 		zend_detach_symbol_table(execute_data);
1191 		destroy_op_array(&EX(func)->op_array);
1192 		efree_size(EX(func), sizeof(zend_op_array));
1193 #ifdef ZEND_PREFER_RELOAD
1194 		call_info = EX_CALL_INFO();
1195 #endif
1196 		old_execute_data = execute_data;
1197 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
1198 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1199 
1200 		zend_attach_symbol_table(execute_data);
1201 		if (UNEXPECTED(EG(exception) != NULL)) {
1202 			zend_rethrow_exception(execute_data);
1203 			HANDLE_EXCEPTION_LEAVE();
1204 		}
1205 
1206 		LOAD_NEXT_OPLINE();
1207 		ZEND_VM_LEAVE();
1208 	} else {
1209 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
1210 			EG(current_execute_data) = EX(prev_execute_data);
1211 			i_free_compiled_variables(execute_data);
1212 #ifdef ZEND_PREFER_RELOAD
1213 			call_info = EX_CALL_INFO();
1214 #endif
1215 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
1216 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1217 					zend_clean_and_cache_symbol_table(EX(symbol_table));
1218 				}
1219 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1220 			}
1221 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1222 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1223 			}
1224 			ZEND_VM_RETURN();
1225 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
1226 			zend_array *symbol_table = EX(symbol_table);
1227 
1228 			zend_detach_symbol_table(execute_data);
1229 			old_execute_data = EX(prev_execute_data);
1230 			while (old_execute_data) {
1231 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1232 					if (old_execute_data->symbol_table == symbol_table) {
1233 						zend_attach_symbol_table(old_execute_data);
1234 					}
1235 					break;
1236 				}
1237 				old_execute_data = old_execute_data->prev_execute_data;
1238 			}
1239 			EG(current_execute_data) = EX(prev_execute_data);
1240 			ZEND_VM_RETURN();
1241 		}
1242 	}
1243 }
1244 
ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1245 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1246 {
1247 	USE_OPLINE
1248 
1249 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
1250 }
1251 
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1252 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1253 {
1254 	USE_OPLINE
1255 	zend_execute_data *call = EX(call);
1256 	zend_function *fbc = call->func;
1257 	zval *ret;
1258 	zval retval;
1259 
1260 	SAVE_OPLINE();
1261 	EX(call) = call->prev_execute_data;
1262 
1263 	call->prev_execute_data = execute_data;
1264 	EG(current_execute_data) = call;
1265 
1266 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
1267 	ZVAL_NULL(ret);
1268 
1269 	fbc->internal_function.handler(call, ret);
1270 
1271 #if ZEND_DEBUG
1272 	if (!EG(exception) && call->func) {
1273 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1274 			zend_verify_internal_return_type(call->func, ret));
1275 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1276 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1277 	}
1278 #endif
1279 
1280 	EG(current_execute_data) = execute_data;
1281 	zend_vm_stack_free_args(call);
1282 	zend_vm_stack_free_call_frame(call);
1283 
1284 	if (!0) {
1285 		i_zval_ptr_dtor(ret);
1286 	}
1287 
1288 	if (UNEXPECTED(EG(exception) != NULL)) {
1289 		zend_rethrow_exception(execute_data);
1290 		HANDLE_EXCEPTION();
1291 	}
1292 
1293 	ZEND_VM_SET_OPCODE(opline + 1);
1294 	ZEND_VM_CONTINUE();
1295 }
1296 
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1297 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1298 {
1299 	USE_OPLINE
1300 	zend_execute_data *call = EX(call);
1301 	zend_function *fbc = call->func;
1302 	zval *ret;
1303 	zval retval;
1304 
1305 	SAVE_OPLINE();
1306 	EX(call) = call->prev_execute_data;
1307 
1308 	call->prev_execute_data = execute_data;
1309 	EG(current_execute_data) = call;
1310 
1311 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
1312 	ZVAL_NULL(ret);
1313 
1314 	fbc->internal_function.handler(call, ret);
1315 
1316 #if ZEND_DEBUG
1317 	if (!EG(exception) && call->func) {
1318 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1319 			zend_verify_internal_return_type(call->func, ret));
1320 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1321 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1322 	}
1323 #endif
1324 
1325 	EG(current_execute_data) = execute_data;
1326 	zend_vm_stack_free_args(call);
1327 	zend_vm_stack_free_call_frame(call);
1328 
1329 	if (!1) {
1330 		i_zval_ptr_dtor(ret);
1331 	}
1332 
1333 	if (UNEXPECTED(EG(exception) != NULL)) {
1334 		zend_rethrow_exception(execute_data);
1335 		HANDLE_EXCEPTION();
1336 	}
1337 
1338 	ZEND_VM_SET_OPCODE(opline + 1);
1339 	ZEND_VM_CONTINUE();
1340 }
1341 
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1342 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1343 {
1344 	USE_OPLINE
1345 	zend_execute_data *call = EX(call);
1346 	zend_function *fbc = call->func;
1347 	zval *ret;
1348 
1349 	SAVE_OPLINE();
1350 	EX(call) = call->prev_execute_data;
1351 
1352 	ret = NULL;
1353 	if (0) {
1354 		ret = EX_VAR(opline->result.var);
1355 	}
1356 
1357 	call->prev_execute_data = execute_data;
1358 	execute_data = call;
1359 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1360 	LOAD_OPLINE_EX();
1361 
1362 	ZEND_VM_ENTER_EX();
1363 }
1364 
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1365 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1366 {
1367 	USE_OPLINE
1368 	zend_execute_data *call = EX(call);
1369 	zend_function *fbc = call->func;
1370 	zval *ret;
1371 
1372 	SAVE_OPLINE();
1373 	EX(call) = call->prev_execute_data;
1374 
1375 	ret = NULL;
1376 	if (1) {
1377 		ret = EX_VAR(opline->result.var);
1378 	}
1379 
1380 	call->prev_execute_data = execute_data;
1381 	execute_data = call;
1382 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1383 	LOAD_OPLINE_EX();
1384 
1385 	ZEND_VM_ENTER_EX();
1386 }
1387 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1388 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1389 {
1390 	USE_OPLINE
1391 	zend_execute_data *call = EX(call);
1392 	zend_function *fbc = call->func;
1393 	zval *ret;
1394 
1395 	SAVE_OPLINE();
1396 	EX(call) = call->prev_execute_data;
1397 
1398 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1399 		ret = NULL;
1400 		if (0) {
1401 			ret = EX_VAR(opline->result.var);
1402 		}
1403 
1404 		call->prev_execute_data = execute_data;
1405 		execute_data = call;
1406 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1407 		LOAD_OPLINE_EX();
1408 
1409 		ZEND_VM_ENTER_EX();
1410 	} else {
1411 		zval retval;
1412 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1413 
1414 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1415 			zend_deprecated_function(fbc);
1416 			if (UNEXPECTED(EG(exception) != NULL)) {
1417 				UNDEF_RESULT();
1418 				if (!0) {
1419 					ret = &retval;
1420 					ZVAL_UNDEF(ret);
1421 				}
1422 				goto fcall_by_name_end;
1423 			}
1424 		}
1425 
1426 		call->prev_execute_data = execute_data;
1427 		EG(current_execute_data) = call;
1428 
1429 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
1430 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
1431 			UNDEF_RESULT();
1432 			if (!0) {
1433 				ret = &retval;
1434 				ZVAL_UNDEF(ret);
1435 			}
1436 			goto fcall_by_name_end;
1437 		}
1438 
1439 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1440 		ZVAL_NULL(ret);
1441 
1442 		fbc->internal_function.handler(call, ret);
1443 
1444 #if ZEND_DEBUG
1445 		if (!EG(exception) && call->func) {
1446 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1447 				zend_verify_internal_return_type(call->func, ret));
1448 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1449 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1450 		}
1451 #endif
1452 
1453 		EG(current_execute_data) = execute_data;
1454 
1455 fcall_by_name_end:
1456 		zend_vm_stack_free_args(call);
1457 		zend_vm_stack_free_call_frame(call);
1458 
1459 		if (!0) {
1460 			i_zval_ptr_dtor(ret);
1461 		}
1462 	}
1463 
1464 	if (UNEXPECTED(EG(exception) != NULL)) {
1465 		zend_rethrow_exception(execute_data);
1466 		HANDLE_EXCEPTION();
1467 	}
1468 	ZEND_VM_SET_OPCODE(opline + 1);
1469 	ZEND_VM_CONTINUE();
1470 }
1471 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1472 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1473 {
1474 	USE_OPLINE
1475 	zend_execute_data *call = EX(call);
1476 	zend_function *fbc = call->func;
1477 	zval *ret;
1478 
1479 	SAVE_OPLINE();
1480 	EX(call) = call->prev_execute_data;
1481 
1482 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1483 		ret = NULL;
1484 		if (1) {
1485 			ret = EX_VAR(opline->result.var);
1486 		}
1487 
1488 		call->prev_execute_data = execute_data;
1489 		execute_data = call;
1490 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1491 		LOAD_OPLINE_EX();
1492 
1493 		ZEND_VM_ENTER_EX();
1494 	} else {
1495 		zval retval;
1496 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1497 
1498 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1499 			zend_deprecated_function(fbc);
1500 			if (UNEXPECTED(EG(exception) != NULL)) {
1501 				UNDEF_RESULT();
1502 				if (!1) {
1503 					ret = &retval;
1504 					ZVAL_UNDEF(ret);
1505 				}
1506 				goto fcall_by_name_end;
1507 			}
1508 		}
1509 
1510 		call->prev_execute_data = execute_data;
1511 		EG(current_execute_data) = call;
1512 
1513 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
1514 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
1515 			UNDEF_RESULT();
1516 			if (!1) {
1517 				ret = &retval;
1518 				ZVAL_UNDEF(ret);
1519 			}
1520 			goto fcall_by_name_end;
1521 		}
1522 
1523 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1524 		ZVAL_NULL(ret);
1525 
1526 		fbc->internal_function.handler(call, ret);
1527 
1528 #if ZEND_DEBUG
1529 		if (!EG(exception) && call->func) {
1530 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1531 				zend_verify_internal_return_type(call->func, ret));
1532 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1533 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1534 		}
1535 #endif
1536 
1537 		EG(current_execute_data) = execute_data;
1538 
1539 fcall_by_name_end:
1540 		zend_vm_stack_free_args(call);
1541 		zend_vm_stack_free_call_frame(call);
1542 
1543 		if (!1) {
1544 			i_zval_ptr_dtor(ret);
1545 		}
1546 	}
1547 
1548 	if (UNEXPECTED(EG(exception) != NULL)) {
1549 		zend_rethrow_exception(execute_data);
1550 		HANDLE_EXCEPTION();
1551 	}
1552 	ZEND_VM_SET_OPCODE(opline + 1);
1553 	ZEND_VM_CONTINUE();
1554 }
1555 
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1556 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1557 {
1558 	USE_OPLINE
1559 	zend_execute_data *call = EX(call);
1560 	zend_function *fbc = call->func;
1561 	zval *ret;
1562 	zval retval;
1563 
1564 	SAVE_OPLINE();
1565 	EX(call) = call->prev_execute_data;
1566 	if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
1567 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
1568 			zend_abstract_method(fbc);
1569 fcall_except:
1570 			UNDEF_RESULT();
1571 			if (!0) {
1572 				ret = &retval;
1573 				ZVAL_UNDEF(ret);
1574 			}
1575 			goto fcall_end;
1576 		} else {
1577 			zend_deprecated_function(fbc);
1578 			if (UNEXPECTED(EG(exception) != NULL)) {
1579 				goto fcall_except;
1580 			}
1581 		}
1582 	}
1583 
1584 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1585 		ret = NULL;
1586 		if (0) {
1587 			ret = EX_VAR(opline->result.var);
1588 		}
1589 
1590 		call->prev_execute_data = execute_data;
1591 		execute_data = call;
1592 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1593 
1594 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1595 			LOAD_OPLINE_EX();
1596 			ZEND_VM_ENTER_EX();
1597 		} else {
1598 			SAVE_OPLINE_EX();
1599 			execute_data = EX(prev_execute_data);
1600 			LOAD_OPLINE();
1601 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1602 			zend_execute_ex(call);
1603 		}
1604 	} else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
1605 		call->prev_execute_data = execute_data;
1606 		EG(current_execute_data) = call;
1607 
1608 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
1609 		  && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
1610 			goto fcall_except;
1611 		}
1612 
1613 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1614 		ZVAL_NULL(ret);
1615 
1616 		if (!zend_execute_internal) {
1617 			/* saves one function call if zend_execute_internal is not used */
1618 			fbc->internal_function.handler(call, ret);
1619 		} else {
1620 			zend_execute_internal(call, ret);
1621 		}
1622 
1623 #if ZEND_DEBUG
1624 		if (!EG(exception) && call->func) {
1625 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1626 				zend_verify_internal_return_type(call->func, ret));
1627 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1628 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1629 		}
1630 #endif
1631 
1632 		EG(current_execute_data) = execute_data;
1633 
1634 fcall_end:
1635 		zend_vm_stack_free_args(call);
1636 		if (!0) {
1637 			i_zval_ptr_dtor(ret);
1638 		}
1639 	} else { /* ZEND_OVERLOADED_FUNCTION */
1640 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1641 
1642 		call->prev_execute_data = execute_data;
1643 
1644 		if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
1645 			UNDEF_RESULT();
1646 			HANDLE_EXCEPTION();
1647 		}
1648 
1649 		if (!0) {
1650 			zval_ptr_dtor(ret);
1651 		}
1652 	}
1653 
1654 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1655 		OBJ_RELEASE(Z_OBJ(call->This));
1656 	}
1657 
1658 	zend_vm_stack_free_call_frame(call);
1659 	if (UNEXPECTED(EG(exception) != NULL)) {
1660 		zend_rethrow_exception(execute_data);
1661 		HANDLE_EXCEPTION();
1662 	}
1663 
1664 	ZEND_VM_SET_OPCODE(opline + 1);
1665 	ZEND_VM_CONTINUE();
1666 }
1667 
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1668 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1669 {
1670 	USE_OPLINE
1671 	zend_execute_data *call = EX(call);
1672 	zend_function *fbc = call->func;
1673 	zval *ret;
1674 	zval retval;
1675 
1676 	SAVE_OPLINE();
1677 	EX(call) = call->prev_execute_data;
1678 	if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
1679 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
1680 			zend_abstract_method(fbc);
1681 fcall_except:
1682 			UNDEF_RESULT();
1683 			if (!1) {
1684 				ret = &retval;
1685 				ZVAL_UNDEF(ret);
1686 			}
1687 			goto fcall_end;
1688 		} else {
1689 			zend_deprecated_function(fbc);
1690 			if (UNEXPECTED(EG(exception) != NULL)) {
1691 				goto fcall_except;
1692 			}
1693 		}
1694 	}
1695 
1696 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1697 		ret = NULL;
1698 		if (1) {
1699 			ret = EX_VAR(opline->result.var);
1700 		}
1701 
1702 		call->prev_execute_data = execute_data;
1703 		execute_data = call;
1704 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1705 
1706 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1707 			LOAD_OPLINE_EX();
1708 			ZEND_VM_ENTER_EX();
1709 		} else {
1710 			SAVE_OPLINE_EX();
1711 			execute_data = EX(prev_execute_data);
1712 			LOAD_OPLINE();
1713 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1714 			zend_execute_ex(call);
1715 		}
1716 	} else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) {
1717 		call->prev_execute_data = execute_data;
1718 		EG(current_execute_data) = call;
1719 
1720 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
1721 		  && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
1722 			goto fcall_except;
1723 		}
1724 
1725 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1726 		ZVAL_NULL(ret);
1727 
1728 		if (!zend_execute_internal) {
1729 			/* saves one function call if zend_execute_internal is not used */
1730 			fbc->internal_function.handler(call, ret);
1731 		} else {
1732 			zend_execute_internal(call, ret);
1733 		}
1734 
1735 #if ZEND_DEBUG
1736 		if (!EG(exception) && call->func) {
1737 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1738 				zend_verify_internal_return_type(call->func, ret));
1739 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1740 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1741 		}
1742 #endif
1743 
1744 		EG(current_execute_data) = execute_data;
1745 
1746 fcall_end:
1747 		zend_vm_stack_free_args(call);
1748 		if (!1) {
1749 			i_zval_ptr_dtor(ret);
1750 		}
1751 	} else { /* ZEND_OVERLOADED_FUNCTION */
1752 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1753 
1754 		call->prev_execute_data = execute_data;
1755 
1756 		if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
1757 			UNDEF_RESULT();
1758 			HANDLE_EXCEPTION();
1759 		}
1760 
1761 		if (!1) {
1762 			zval_ptr_dtor(ret);
1763 		}
1764 	}
1765 
1766 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1767 		OBJ_RELEASE(Z_OBJ(call->This));
1768 	}
1769 
1770 	zend_vm_stack_free_call_frame(call);
1771 	if (UNEXPECTED(EG(exception) != NULL)) {
1772 		zend_rethrow_exception(execute_data);
1773 		HANDLE_EXCEPTION();
1774 	}
1775 
1776 	ZEND_VM_SET_OPCODE(opline + 1);
1777 	ZEND_VM_CONTINUE();
1778 }
1779 
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1780 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1781 {
1782 	zval *return_value = EX(return_value);
1783 
1784 	if (EXPECTED(return_value)) {
1785 		USE_OPLINE
1786 		zend_generator *generator;
1787 		zend_execute_data *gen_execute_data;
1788 		uint32_t num_args, used_stack, call_info;
1789 
1790 		object_init_ex(return_value, zend_ce_generator);
1791 
1792 		/*
1793 		 * Normally the execute_data is allocated on the VM stack (because it does
1794 		 * not actually do any allocation and thus is faster). For generators
1795 		 * though this behavior would be suboptimal, because the (rather large)
1796 		 * structure would have to be copied back and forth every time execution is
1797 		 * suspended or resumed. That's why for generators the execution context
1798 		 * is allocated on heap.
1799 		 */
1800 		num_args = EX_NUM_ARGS();
1801 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
1802 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
1803 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
1804 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
1805 		} else {
1806 			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);
1807 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
1808 		}
1809 		memcpy(gen_execute_data, execute_data, used_stack);
1810 
1811 		/* Save execution context in generator object. */
1812 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
1813 		generator->execute_data = gen_execute_data;
1814 		generator->frozen_call_stack = NULL;
1815 		generator->execute_fake.opline = NULL;
1816 		generator->execute_fake.func = NULL;
1817 		generator->execute_fake.prev_execute_data = NULL;
1818 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
1819 
1820 		gen_execute_data->opline = opline + 1;
1821 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
1822 		gen_execute_data->return_value = (zval*)generator;
1823 		call_info = Z_TYPE_INFO(EX(This));
1824 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
1825 		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
1826 			 /* Bug #72523 */
1827 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
1828 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
1829 			Z_ADDREF(gen_execute_data->This);
1830 		}
1831 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
1832 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
1833 		gen_execute_data->prev_execute_data = NULL;
1834 
1835 		call_info = EX_CALL_INFO();
1836 		EG(current_execute_data) = EX(prev_execute_data);
1837 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
1838 			EG(vm_stack_top) = (zval*)execute_data;
1839 			execute_data = EX(prev_execute_data);
1840 			LOAD_NEXT_OPLINE();
1841 			ZEND_VM_LEAVE();
1842 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
1843 			zend_execute_data *old_execute_data = execute_data;
1844 			execute_data = EX(prev_execute_data);
1845 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1846 			LOAD_NEXT_OPLINE();
1847 			ZEND_VM_LEAVE();
1848 		} else {
1849 			ZEND_VM_RETURN();
1850 		}
1851 	} else {
1852 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
1853 	}
1854 }
1855 
zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)1856 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
1857 {
1858 	USE_OPLINE
1859 	zval *arg;
1860 	uint32_t arg_num = opline->op2.num;
1861 
1862 	SAVE_OPLINE();
1863 	zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
1864 	FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
1865 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
1866 	ZVAL_UNDEF(arg);
1867 	HANDLE_EXCEPTION();
1868 }
1869 
ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1871 {
1872 	USE_OPLINE
1873 	zend_free_op free_op1;
1874 	zval *args;
1875 	int arg_num;
1876 
1877 	SAVE_OPLINE();
1878 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
1879 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
1880 
1881 send_again:
1882 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
1883 		HashTable *ht = Z_ARRVAL_P(args);
1884 		zval *arg, *top;
1885 		zend_string *name;
1886 
1887 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
1888 
1889 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
1890 			uint32_t i;
1891 			int separate = 0;
1892 
1893 			/* check if any of arguments are going to be passed by reference */
1894 			for (i = 0; i < zend_hash_num_elements(ht); i++) {
1895 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) {
1896 					separate = 1;
1897 					break;
1898 				}
1899 			}
1900 			if (separate) {
1901 				SEPARATE_ARRAY(args);
1902 				ht = Z_ARRVAL_P(args);
1903 			}
1904 		}
1905 
1906 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
1907 			if (name) {
1908 				zend_throw_error(NULL, "Cannot unpack array with string keys");
1909 				FREE_OP(free_op1);
1910 				HANDLE_EXCEPTION();
1911 			}
1912 
1913 			top = ZEND_CALL_ARG(EX(call), arg_num);
1914 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1915 				if (Z_ISREF_P(arg)) {
1916 					Z_ADDREF_P(arg);
1917 					ZVAL_REF(top, Z_REF_P(arg));
1918 				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
1919 					/* array is already separated above */
1920 					ZVAL_MAKE_REF_EX(arg, 2);
1921 					ZVAL_REF(top, Z_REF_P(arg));
1922 				} else {
1923 					Z_TRY_ADDREF_P(arg);
1924 					ZVAL_NEW_REF(top, arg);
1925 				}
1926 			} else {
1927 				ZVAL_COPY_DEREF(top, arg);
1928 			}
1929 
1930 			ZEND_CALL_NUM_ARGS(EX(call))++;
1931 			arg_num++;
1932 		} ZEND_HASH_FOREACH_END();
1933 
1934 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
1935 		zend_class_entry *ce = Z_OBJCE_P(args);
1936 		zend_object_iterator *iter;
1937 
1938 		if (!ce || !ce->get_iterator) {
1939 			zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
1940 		} else {
1941 
1942 			iter = ce->get_iterator(ce, args, 0);
1943 			if (UNEXPECTED(!iter)) {
1944 				FREE_OP(free_op1);
1945 				if (!EG(exception)) {
1946 					zend_throw_exception_ex(
1947 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
1948 					);
1949 				}
1950 				HANDLE_EXCEPTION();
1951 			}
1952 
1953 			if (iter->funcs->rewind) {
1954 				iter->funcs->rewind(iter);
1955 			}
1956 
1957 			for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) {
1958 				zval *arg, *top;
1959 
1960 				if (UNEXPECTED(EG(exception) != NULL)) {
1961 					break;
1962 				}
1963 
1964 				arg = iter->funcs->get_current_data(iter);
1965 				if (UNEXPECTED(EG(exception) != NULL)) {
1966 					break;
1967 				}
1968 
1969 				if (iter->funcs->get_current_key) {
1970 					zval key;
1971 					iter->funcs->get_current_key(iter, &key);
1972 					if (UNEXPECTED(EG(exception) != NULL)) {
1973 						break;
1974 					}
1975 
1976 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
1977 						zend_throw_error(NULL,
1978 							(Z_TYPE(key) == IS_STRING) ?
1979 								"Cannot unpack Traversable with string keys" :
1980 								"Cannot unpack Traversable with non-integer keys");
1981 						zval_ptr_dtor(&key);
1982 						break;
1983 					}
1984 				}
1985 
1986 				if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
1987 					zend_error(
1988 						E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
1989 						" by unpacking a Traversable, passing by-value instead", arg_num,
1990 						EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
1991 						EX(call)->func->common.scope ? "::" : "",
1992 						ZSTR_VAL(EX(call)->func->common.function_name)
1993 					);
1994 				}
1995 
1996 				ZVAL_DEREF(arg);
1997 				Z_TRY_ADDREF_P(arg);
1998 
1999 				zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
2000 				top = ZEND_CALL_ARG(EX(call), arg_num);
2001 				ZVAL_COPY_VALUE(top, arg);
2002 				ZEND_CALL_NUM_ARGS(EX(call))++;
2003 
2004 				iter->funcs->move_forward(iter);
2005 			}
2006 
2007 			zend_iterator_dtor(iter);
2008 		}
2009 	} else if (EXPECTED(Z_ISREF_P(args))) {
2010 		args = Z_REFVAL_P(args);
2011 		goto send_again;
2012 	} else {
2013 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
2014 			ZVAL_UNDEFINED_OP1();
2015 		}
2016 		zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
2017 	}
2018 
2019 	FREE_OP(free_op1);
2020 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2021 }
2022 
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2024 {
2025 	USE_OPLINE
2026 	zend_free_op free_op1;
2027 	zval *args;
2028 
2029 	SAVE_OPLINE();
2030 	args = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
2031 
2032 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
2033 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
2034 			args = Z_REFVAL_P(args);
2035 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2036 				goto send_array;
2037 			}
2038 		}
2039 		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)));
2040 		if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
2041 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(call)->func));
2042 		} else if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_RELEASE_THIS) {
2043 			OBJ_RELEASE(Z_OBJ(EX(call)->This));
2044 		}
2045 		EX(call)->func = (zend_function*)&zend_pass_function;
2046 		Z_OBJ(EX(call)->This) = NULL;
2047 		ZEND_CALL_INFO(EX(call)) &= ~(ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS);
2048 		FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
2049 	} else {
2050 		uint32_t arg_num;
2051 		HashTable *ht;
2052 		zval *arg, *param;
2053 
2054 
2055 send_array:
2056 		ht = Z_ARRVAL_P(args);
2057 		if (opline->op2_type != IS_UNUSED) {
2058 			zend_free_op free_op2;
2059 			zval *op2 = get_zval_ptr(opline->op2_type, opline->op2, &free_op2, BP_VAR_R);
2060 			uint32_t skip = opline->extended_value;
2061 			uint32_t count = zend_hash_num_elements(ht);
2062 			zend_long len = zval_get_long(op2);
2063 
2064 			if (len < 0) {
2065 				len += (zend_long)(count - skip);
2066 			}
2067 			if (skip < count && len > 0) {
2068 				if (len > (zend_long)(count - skip)) {
2069 					len = (zend_long)(count - skip);
2070 				}
2071 				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
2072 				arg_num = 1;
2073 				param = ZEND_CALL_ARG(EX(call), 1);
2074 				ZEND_HASH_FOREACH_VAL(ht, arg) {
2075 					zend_bool must_wrap = 0;
2076 					if (skip > 0) {
2077 						skip--;
2078 						continue;
2079 					} else if ((zend_long)(arg_num - 1) >= len) {
2080 						break;
2081 					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2082 						if (UNEXPECTED(!Z_ISREF_P(arg))) {
2083 							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2084 								/* By-value send is not allowed -- emit a warning,
2085 								 * but still perform the call. */
2086 								zend_param_must_be_ref(EX(call)->func, arg_num);
2087 								must_wrap = 1;
2088 							}
2089 						}
2090 					} else {
2091 						if (Z_ISREF_P(arg) &&
2092 						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2093 							/* don't separate references for __call */
2094 							arg = Z_REFVAL_P(arg);
2095 						}
2096 					}
2097 					if (EXPECTED(!must_wrap)) {
2098 						ZVAL_COPY(param, arg);
2099 					} else {
2100 						Z_TRY_ADDREF_P(arg);
2101 						ZVAL_NEW_REF(param, arg);
2102 					}
2103 					ZEND_CALL_NUM_ARGS(EX(call))++;
2104 					arg_num++;
2105 					param++;
2106 				} ZEND_HASH_FOREACH_END();
2107 			}
2108 			FREE_OP(free_op2);
2109 		} else {
2110 			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
2111 			arg_num = 1;
2112 			param = ZEND_CALL_ARG(EX(call), 1);
2113 			ZEND_HASH_FOREACH_VAL(ht, arg) {
2114 				zend_bool must_wrap = 0;
2115 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2116 					if (UNEXPECTED(!Z_ISREF_P(arg))) {
2117 						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2118 							/* By-value send is not allowed -- emit a warning,
2119 							 * but still perform the call. */
2120 							zend_param_must_be_ref(EX(call)->func, arg_num);
2121 							must_wrap = 1;
2122 						}
2123 					}
2124 				} else {
2125 					if (Z_ISREF_P(arg) &&
2126 					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2127 						/* don't separate references for __call */
2128 						arg = Z_REFVAL_P(arg);
2129 					}
2130 				}
2131 				if (EXPECTED(!must_wrap)) {
2132 					ZVAL_COPY(param, arg);
2133 				} else {
2134 					Z_TRY_ADDREF_P(arg);
2135 					ZVAL_NEW_REF(param, arg);
2136 				}
2137 				ZEND_CALL_NUM_ARGS(EX(call))++;
2138 				arg_num++;
2139 				param++;
2140 			} ZEND_HASH_FOREACH_END();
2141 		}
2142 	}
2143 	FREE_OP(free_op1);
2144 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2145 }
2146 
zend_case_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)2147 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_case_helper_SPEC(zval *op_1, zval *op_2 ZEND_OPCODE_HANDLER_ARGS_DC)
2148 {
2149 	USE_OPLINE
2150 
2151 	SAVE_OPLINE();
2152 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
2153 		op_1 = ZVAL_UNDEFINED_OP1();
2154 	}
2155 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
2156 		op_2 = ZVAL_UNDEFINED_OP2();
2157 	}
2158 	compare_function(EX_VAR(opline->result.var), op_1, op_2);
2159 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
2160 		zval_ptr_dtor_nogc(op_2);
2161 	}
2162 	if (UNEXPECTED(EG(exception))) {
2163 		HANDLE_EXCEPTION();
2164 	}
2165 	if (Z_LVAL_P(EX_VAR(opline->result.var)) == 0) {
2166 		ZEND_VM_SMART_BRANCH_TRUE();
2167 		ZVAL_TRUE(EX_VAR(opline->result.var));
2168 		ZEND_VM_NEXT_OPCODE();
2169 	} else {
2170 		ZEND_VM_SMART_BRANCH_FALSE();
2171 		ZVAL_FALSE(EX_VAR(opline->result.var));
2172 		ZEND_VM_NEXT_OPCODE();
2173 	}
2174 }
2175 
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2177 {
2178 	USE_OPLINE
2179 	zend_free_op free_op1;
2180 	zval *op1;
2181 
2182 	SAVE_OPLINE();
2183 	op1 = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
2184 
2185 add_unpack_again:
2186 	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
2187 		HashTable *ht = Z_ARRVAL_P(op1);
2188 		zval *val;
2189 		zend_string *key;
2190 
2191 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
2192 			if (key) {
2193 				zend_throw_error(NULL, "Cannot unpack array with string keys");
2194 				FREE_OP(free_op1);
2195 				HANDLE_EXCEPTION();
2196 			} else {
2197 				if (Z_ISREF_P(val) && Z_REFCOUNT_P(val) == 1) {
2198 					val = Z_REFVAL_P(val);
2199 				}
2200 				Z_TRY_ADDREF_P(val);
2201 				if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
2202 					zend_cannot_add_element();
2203 					zval_ptr_dtor_nogc(val);
2204 					break;
2205 				}
2206 			}
2207 		} ZEND_HASH_FOREACH_END();
2208 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
2209 		zend_class_entry *ce = Z_OBJCE_P(op1);
2210 		zend_object_iterator *iter;
2211 
2212 		if (!ce || !ce->get_iterator) {
2213 			zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2214 		} else {
2215 			iter = ce->get_iterator(ce, op1, 0);
2216 			if (UNEXPECTED(!iter)) {
2217 				FREE_OP(free_op1);
2218 				if (!EG(exception)) {
2219 					zend_throw_exception_ex(
2220 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2221 					);
2222 				}
2223 				HANDLE_EXCEPTION();
2224 			}
2225 
2226 			if (iter->funcs->rewind) {
2227 				iter->funcs->rewind(iter);
2228 			}
2229 
2230 			for (; iter->funcs->valid(iter) == SUCCESS; ) {
2231 				zval *val;
2232 
2233 				if (UNEXPECTED(EG(exception) != NULL)) {
2234 					break;
2235 				}
2236 
2237 				val = iter->funcs->get_current_data(iter);
2238 				if (UNEXPECTED(EG(exception) != NULL)) {
2239 					break;
2240 				}
2241 
2242 				if (iter->funcs->get_current_key) {
2243 					zval key;
2244 					iter->funcs->get_current_key(iter, &key);
2245 					if (UNEXPECTED(EG(exception) != NULL)) {
2246 						break;
2247 					}
2248 
2249 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2250 						zend_throw_error(NULL,
2251 							(Z_TYPE(key) == IS_STRING) ?
2252 								"Cannot unpack Traversable with string keys" :
2253 								"Cannot unpack Traversable with non-integer keys");
2254 						zval_ptr_dtor(&key);
2255 						break;
2256 					}
2257 				}
2258 
2259 				ZVAL_DEREF(val);
2260 				Z_TRY_ADDREF_P(val);
2261 
2262 				if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
2263 					zend_cannot_add_element();
2264 					zval_ptr_dtor_nogc(val);
2265 				}
2266 
2267 				iter->funcs->move_forward(iter);
2268 			}
2269 
2270 			zend_iterator_dtor(iter);
2271 		}
2272 	} else if (EXPECTED(Z_ISREF_P(op1))) {
2273 		op1 = Z_REFVAL_P(op1);
2274 		goto add_unpack_again;
2275 	} else {
2276 		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2277 	}
2278 
2279 	FREE_OP(free_op1);
2280 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2281 }
2282 
ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2283 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2284 {
2285 	USE_OPLINE
2286 	zval *varname;
2287 	zend_string *name, *tmp_name = NULL;
2288 	zend_class_entry *ce;
2289 	zend_free_op free_op1;
2290 
2291 	SAVE_OPLINE();
2292 
2293 	if (opline->op2_type == IS_CONST) {
2294 		ce = CACHED_PTR(opline->extended_value);
2295 		if (UNEXPECTED(ce == NULL)) {
2296 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
2297 			if (UNEXPECTED(ce == NULL)) {
2298 				ZEND_ASSERT(EG(exception));
2299 				FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2300 				HANDLE_EXCEPTION();
2301 			}
2302 			/*CACHE_PTR(opline->extended_value, ce);*/
2303 		}
2304 	} else if (opline->op2_type == IS_UNUSED) {
2305 		ce = zend_fetch_class(NULL, opline->op2.num);
2306 		if (UNEXPECTED(ce == NULL)) {
2307 			ZEND_ASSERT(EG(exception));
2308 			FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2309 			HANDLE_EXCEPTION();
2310 		}
2311 	} else {
2312 		ce = Z_CE_P(EX_VAR(opline->op2.var));
2313 	}
2314 
2315 	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
2316 	if (opline->op1_type == IS_CONST) {
2317 		name = Z_STR_P(varname);
2318 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
2319 		name = Z_STR_P(varname);
2320 	} else {
2321 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
2322 			varname = ZVAL_UNDEFINED_OP1();
2323 		}
2324 		name = zval_get_tmp_string(varname, &tmp_name);
2325 	}
2326 
2327 	zend_std_unset_static_property(ce, name);
2328 
2329 	zend_tmp_string_release(tmp_name);
2330 	FREE_OP(free_op1);
2331 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2332 }
2333 
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2335 {
2336 	USE_OPLINE
2337 	zval *value;
2338 	int result;
2339 
2340 	SAVE_OPLINE();
2341 
2342 	result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
2343 
2344 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
2345 		result = result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
2346 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2347 	} else {
2348 		result = result != SUCCESS || !i_zend_is_true(value);
2349 	}
2350 
2351 	ZEND_VM_SMART_BRANCH(result, 1);
2352 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
2353 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2354 }
2355 
ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2356 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2357 {
2358 	USE_OPLINE
2359 
2360 	SAVE_OPLINE();
2361 	if (opline->op1_type != IS_UNUSED) {
2362 		zend_free_op free_op1;
2363 		zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
2364 
2365 		do {
2366 			if (Z_TYPE_P(ptr) == IS_LONG) {
2367 				EG(exit_status) = Z_LVAL_P(ptr);
2368 			} else {
2369 				if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
2370 					ptr = Z_REFVAL_P(ptr);
2371 					if (Z_TYPE_P(ptr) == IS_LONG) {
2372 						EG(exit_status) = Z_LVAL_P(ptr);
2373 						break;
2374 					}
2375 				}
2376 				zend_print_zval(ptr, 0);
2377 			}
2378 		} while (0);
2379 		FREE_OP(free_op1);
2380 	}
2381 	zend_bailout();
2382 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
2383 }
2384 
ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2386 {
2387 	USE_OPLINE
2388 
2389 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
2390 
2391 	if (EG(error_reporting)) {
2392 		do {
2393 			EG(error_reporting) = 0;
2394 			if (!EG(error_reporting_ini_entry)) {
2395 				zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1);
2396 				if (zv) {
2397 					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
2398 				} else {
2399 					break;
2400 				}
2401 			}
2402 			if (!EG(error_reporting_ini_entry)->modified) {
2403 				if (!EG(modified_ini_directives)) {
2404 					ALLOC_HASHTABLE(EG(modified_ini_directives));
2405 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
2406 				}
2407 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
2408 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
2409 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
2410 					EG(error_reporting_ini_entry)->modified = 1;
2411 				}
2412 			}
2413 		} while (0);
2414 	}
2415 	ZEND_VM_NEXT_OPCODE();
2416 }
2417 
ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2418 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2419 {
2420 	USE_OPLINE
2421 
2422 	if (!EG(no_extensions)) {
2423 		SAVE_OPLINE();
2424 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
2425 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2426 	}
2427 	ZEND_VM_NEXT_OPCODE();
2428 }
2429 
ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2430 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2431 {
2432 	USE_OPLINE
2433 
2434 	if (!EG(no_extensions)) {
2435 		SAVE_OPLINE();
2436 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
2437 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2438 	}
2439 	ZEND_VM_NEXT_OPCODE();
2440 }
2441 
ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2442 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2443 {
2444 	USE_OPLINE
2445 
2446 	if (!EG(no_extensions)) {
2447 		SAVE_OPLINE();
2448 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
2449 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2450 	}
2451 	ZEND_VM_NEXT_OPCODE();
2452 }
2453 
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2454 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2455 {
2456 	zval *zv;
2457 	zend_class_entry *ce;
2458 	USE_OPLINE
2459 
2460 	ce = CACHED_PTR(opline->extended_value);
2461 	if (UNEXPECTED(ce == NULL)) {
2462 		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
2463 		zv = zend_hash_find_ex(EG(class_table), rtd_key, 1);
2464 		if (UNEXPECTED(zv == NULL)) {
2465 			SAVE_OPLINE();
2466 			do {
2467 				ZEND_ASSERT(EX(func)->op_array.fn_flags & ZEND_ACC_PRELOADED);
2468 				if (zend_preload_autoload
2469 				  && zend_preload_autoload(EX(func)->op_array.filename) == SUCCESS) {
2470 					zv = zend_hash_find_ex(EG(class_table), rtd_key, 1);
2471 					if (EXPECTED(zv != NULL)) {
2472 						break;
2473 					}
2474 				}
2475 				zend_error_noreturn(E_ERROR, "Anonymous class wasn't preloaded");
2476 			} while (0);
2477 		}
2478 		ZEND_ASSERT(zv != NULL);
2479 		ce = Z_CE_P(zv);
2480 		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
2481 			SAVE_OPLINE();
2482 			if (zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL) == FAILURE) {
2483 				HANDLE_EXCEPTION();
2484 			}
2485 		}
2486 		CACHE_PTR(opline->extended_value, ce);
2487 	}
2488 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
2489 	ZEND_VM_NEXT_OPCODE();
2490 }
2491 
ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2493 {
2494 	USE_OPLINE
2495 
2496 	SAVE_OPLINE();
2497 	do_bind_function(RT_CONSTANT(opline, opline->op1));
2498 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2499 }
2500 
ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2501 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2502 {
2503 	USE_OPLINE
2504 
2505 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
2506 		EG(ticks_count) = 0;
2507 		if (zend_ticks_function) {
2508 			SAVE_OPLINE();
2509 			zend_ticks_function(opline->extended_value);
2510 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2511 		}
2512 	}
2513 	ZEND_VM_NEXT_OPCODE();
2514 }
2515 
ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2516 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2517 {
2518 	USE_OPLINE
2519 
2520 	ZEND_VM_NEXT_OPCODE();
2521 }
2522 
ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2523 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2524 {
2525 	USE_OPLINE
2526 
2527 	ZEND_VM_NEXT_OPCODE();
2528 }
2529 
zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset,uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)2530 static zend_never_inline 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)
2531 {
2532 	/* May be NULL during generator closing (only finally blocks are executed) */
2533 	zend_object *ex = EG(exception);
2534 
2535 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
2536 	while (try_catch_offset != (uint32_t) -1) {
2537 		zend_try_catch_element *try_catch =
2538 			&EX(func)->op_array.try_catch_array[try_catch_offset];
2539 
2540 		if (op_num < try_catch->catch_op && ex) {
2541 			/* Go to catch block */
2542 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
2543 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
2544 
2545 		} else if (op_num < try_catch->finally_op) {
2546 			/* Go to finally block */
2547 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
2548 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
2549 			Z_OBJ_P(fast_call) = EG(exception);
2550 			EG(exception) = NULL;
2551 			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
2552 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
2553 
2554 		} else if (op_num < try_catch->finally_end) {
2555 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
2556 
2557 			/* cleanup incomplete RETURN statement */
2558 			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
2559 			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
2560 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
2561 
2562 				zval_ptr_dtor(return_value);
2563 			}
2564 
2565 			/* Chain potential exception from wrapping finally block */
2566 			if (Z_OBJ_P(fast_call)) {
2567 				if (ex) {
2568 					zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
2569 				} else {
2570 					EG(exception) = Z_OBJ_P(fast_call);
2571 				}
2572 				ex = Z_OBJ_P(fast_call);
2573 			}
2574 		}
2575 
2576 		try_catch_offset--;
2577 	}
2578 
2579 	/* Uncaught exception */
2580 	cleanup_live_vars(execute_data, op_num, 0);
2581 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
2582 		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
2583 		zend_generator_close(generator, 1);
2584 		ZEND_VM_RETURN();
2585 	} else {
2586 		/* We didn't execute RETURN, and have to initialize return_value */
2587 		if (EX(return_value)) {
2588 			ZVAL_UNDEF(EX(return_value));
2589 		}
2590 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2591 	}
2592 }
2593 
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2595 {
2596 	const zend_op *throw_op = EG(opline_before_exception);
2597 	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
2598 	int i, current_try_catch_offset = -1;
2599 
2600 	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
2601 		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
2602 		/* exceptions thrown because of loop var destruction on return/break/...
2603 		 * are logically thrown at the end of the foreach loop, so adjust the
2604 		 * throw_op_num.
2605 		 */
2606 		const zend_live_range *range = find_live_range(
2607 			&EX(func)->op_array, throw_op_num, throw_op->op1.var);
2608 		throw_op_num = range->end;
2609 	}
2610 
2611 	/* Find the innermost try/catch/finally the exception was thrown in */
2612 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
2613 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
2614 		if (try_catch->try_op > throw_op_num) {
2615 			/* further blocks will not be relevant... */
2616 			break;
2617 		}
2618 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
2619 			current_try_catch_offset = i;
2620 		}
2621 	}
2622 
2623 	cleanup_unfinished_calls(execute_data, throw_op_num);
2624 
2625 	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
2626 		switch (throw_op->opcode) {
2627 			case ZEND_ADD_ARRAY_ELEMENT:
2628 			case ZEND_ADD_ARRAY_UNPACK:
2629 			case ZEND_ROPE_INIT:
2630 			case ZEND_ROPE_ADD:
2631 				break; /* exception while building structures, live range handling will free those */
2632 
2633 			case ZEND_FETCH_CLASS:
2634 			case ZEND_DECLARE_ANON_CLASS:
2635 				break; /* return value is zend_class_entry pointer */
2636 
2637 			default:
2638 				zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
2639 		}
2640 	}
2641 
2642 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
2643 }
2644 
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2646 {
2647 	USE_OPLINE
2648 	int ret;
2649 
2650 	SAVE_OPLINE();
2651 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
2652 	opline = EX(opline);
2653 
2654 	switch (ret) {
2655 		case ZEND_USER_OPCODE_CONTINUE:
2656 			ZEND_VM_CONTINUE();
2657 		case ZEND_USER_OPCODE_RETURN:
2658 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
2659 				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
2660 				zend_generator_close(generator, 1);
2661 				ZEND_VM_RETURN();
2662 			} else {
2663 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2664 			}
2665 		case ZEND_USER_OPCODE_ENTER:
2666 			ZEND_VM_ENTER();
2667 		case ZEND_USER_OPCODE_LEAVE:
2668 			ZEND_VM_LEAVE();
2669 		case ZEND_USER_OPCODE_DISPATCH:
2670 			ZEND_VM_DISPATCH(opline->opcode, opline);
2671 		default:
2672 			ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
2673 	}
2674 }
2675 
zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2676 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2677 {
2678 	USE_OPLINE
2679 
2680 	SAVE_OPLINE();
2681 	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
2682 	FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
2683 	FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2684 	UNDEF_RESULT();
2685 	HANDLE_EXCEPTION();
2686 }
2687 
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2689 {
2690 	USE_OPLINE
2691 	zval *fast_call = EX_VAR(opline->op1.var);
2692 	SAVE_OPLINE();
2693 
2694 	/* cleanup incomplete RETURN statement */
2695 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
2696 	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
2697 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
2698 
2699 		zval_ptr_dtor(return_value);
2700 	}
2701 
2702 	/* cleanup delayed exception */
2703 	if (Z_OBJ_P(fast_call) != NULL) {
2704 		/* discard the previously thrown exception */
2705 		OBJ_RELEASE(Z_OBJ_P(fast_call));
2706 		Z_OBJ_P(fast_call) = NULL;
2707 	}
2708 
2709 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2710 }
2711 
ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2712 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2713 {
2714 	USE_OPLINE
2715 	zval *fast_call = EX_VAR(opline->result.var);
2716 
2717 	Z_OBJ_P(fast_call) = NULL;
2718 	/* set return address */
2719 	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
2720 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
2721 }
2722 
ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2723 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2724 {
2725 	USE_OPLINE
2726 	zval *fast_call = EX_VAR(opline->op1.var);
2727 	uint32_t current_try_catch_offset, current_op_num;
2728 
2729 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
2730 		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
2731 
2732 		ZEND_VM_JMP_EX(fast_ret + 1, 0);
2733 	}
2734 
2735 	/* special case for unhandled exceptions */
2736 	EG(exception) = Z_OBJ_P(fast_call);
2737 	Z_OBJ_P(fast_call) = NULL;
2738 	current_try_catch_offset = opline->op2.num;
2739 	current_op_num = opline - EX(func)->op_array.opcodes;
2740 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
2741 }
2742 
ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2744 {
2745 	USE_OPLINE
2746 
2747 	if (EG(assertions) <= 0) {
2748 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
2749 		if (RETURN_VALUE_USED(opline)) {
2750 			ZVAL_TRUE(EX_VAR(opline->result.var));
2751 		}
2752 		ZEND_VM_JMP_EX(target, 0);
2753 	} else {
2754 		ZEND_VM_NEXT_OPCODE();
2755 	}
2756 }
2757 
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2758 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2759 {
2760 	zend_array *args = NULL;
2761 	zend_function *fbc = EX(func);
2762 	zval *ret = EX(return_value);
2763 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS);
2764 	uint32_t num_args = EX_NUM_ARGS();
2765 	zend_execute_data *call;
2766 
2767 	SAVE_OPLINE();
2768 
2769 	if (num_args) {
2770 		zval *p = ZEND_CALL_ARG(execute_data, 1);
2771 		zval *end = p + num_args;
2772 
2773 		args = zend_new_array(num_args);
2774 		zend_hash_real_init_packed(args);
2775 		ZEND_HASH_FILL_PACKED(args) {
2776 			do {
2777 				ZEND_HASH_FILL_ADD(p);
2778 				p++;
2779 			} while (p != end);
2780 		} ZEND_HASH_FILL_END();
2781 	}
2782 
2783 	call = execute_data;
2784 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
2785 
2786 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
2787 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
2788 	ZEND_CALL_NUM_ARGS(call) = 2;
2789 
2790 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
2791 	if (args) {
2792 		ZVAL_ARR(ZEND_CALL_ARG(call, 2), args);
2793 	} else {
2794 		ZVAL_EMPTY_ARRAY(ZEND_CALL_ARG(call, 2));
2795 	}
2796 	zend_free_trampoline(fbc);
2797 	fbc = call->func;
2798 
2799 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
2800 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
2801 			init_func_run_time_cache(&fbc->op_array);
2802 		}
2803 		execute_data = call;
2804 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
2805 		if (EXPECTED(zend_execute_ex == execute_ex)) {
2806 			LOAD_OPLINE_EX();
2807 			ZEND_VM_ENTER_EX();
2808 		} else {
2809 			SAVE_OPLINE_EX();
2810 			execute_data = EX(prev_execute_data);
2811 			LOAD_OPLINE();
2812 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
2813 			zend_execute_ex(call);
2814 		}
2815 	} else {
2816 		zval retval;
2817 
2818 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
2819 
2820 		EG(current_execute_data) = call;
2821 
2822 		if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
2823 		 && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
2824 			zend_vm_stack_free_call_frame(call);
2825 			if (ret) {
2826 				ZVAL_UNDEF(ret);
2827 			}
2828 			goto call_trampoline_end;
2829 		}
2830 
2831 		if (ret == NULL) {
2832 			ret = &retval;
2833 		}
2834 
2835 		ZVAL_NULL(ret);
2836 		if (!zend_execute_internal) {
2837 			/* saves one function call if zend_execute_internal is not used */
2838 			fbc->internal_function.handler(call, ret);
2839 		} else {
2840 			zend_execute_internal(call, ret);
2841 		}
2842 
2843 #if ZEND_DEBUG
2844 		if (!EG(exception) && call->func) {
2845 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
2846 				zend_verify_internal_return_type(call->func, ret));
2847 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
2848 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
2849 		}
2850 #endif
2851 
2852 		EG(current_execute_data) = call->prev_execute_data;
2853 
2854 call_trampoline_end:
2855 		zend_vm_stack_free_args(call);
2856 		if (ret == &retval) {
2857 			zval_ptr_dtor(ret);
2858 		}
2859 	}
2860 
2861 	execute_data = EG(current_execute_data);
2862 
2863 	if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
2864 		ZEND_VM_RETURN();
2865 	}
2866 
2867 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
2868 		zend_object *object = Z_OBJ(call->This);
2869 		OBJ_RELEASE(object);
2870 	}
2871 	zend_vm_stack_free_call_frame(call);
2872 
2873 	if (UNEXPECTED(EG(exception) != NULL)) {
2874 		zend_rethrow_exception(execute_data);
2875 		HANDLE_EXCEPTION_LEAVE();
2876 	}
2877 
2878 	LOAD_OPLINE();
2879 	ZEND_VM_INC_OPCODE();
2880 	ZEND_VM_LEAVE();
2881 }
2882 
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2883 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2884 {
2885 	USE_OPLINE
2886 
2887 	OPLINE = OP_JMP_ADDR(opline, opline->op1);
2888 	ZEND_VM_CONTINUE();
2889 }
2890 
zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2891 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2892 {
2893 	EG(vm_interrupt) = 0;
2894 	SAVE_OPLINE();
2895 	if (EG(timed_out)) {
2896 		zend_timeout(0);
2897 	} else if (zend_interrupt_function) {
2898 		zend_interrupt_function(execute_data);
2899 		ZEND_VM_ENTER();
2900 	}
2901 	ZEND_VM_CONTINUE();
2902 }
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2903 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2904 {
2905 	USE_OPLINE
2906 	zend_function *fbc;
2907 	zval *function_name, *func;
2908 	zend_execute_data *call;
2909 
2910 	fbc = CACHED_PTR(opline->result.num);
2911 	if (UNEXPECTED(fbc == NULL)) {
2912 		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
2913 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(function_name+1), 1);
2914 		if (UNEXPECTED(func == NULL)) {
2915 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2916 		}
2917 		fbc = Z_FUNC_P(func);
2918 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
2919 			init_func_run_time_cache(&fbc->op_array);
2920 		}
2921 		CACHE_PTR(opline->result.num, fbc);
2922 	}
2923 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
2924 		fbc, opline->extended_value, NULL);
2925 	call->prev_execute_data = EX(call);
2926 	EX(call) = call;
2927 
2928 	ZEND_VM_NEXT_OPCODE();
2929 }
2930 
ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2931 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2932 {
2933 	USE_OPLINE
2934 
2935 	zval *function_name;
2936 	zend_execute_data *call;
2937 
2938 	SAVE_OPLINE();
2939 	function_name = RT_CONSTANT(opline, opline->op2);
2940 
2941 try_function_name:
2942 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
2943 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
2944 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
2945 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
2946 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
2947 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
2948 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
2949 		function_name = Z_REFVAL_P(function_name);
2950 		goto try_function_name;
2951 	} else {
2952 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
2953 			ZVAL_UNDEFINED_OP2();
2954 			if (UNEXPECTED(EG(exception) != NULL)) {
2955 				HANDLE_EXCEPTION();
2956 			}
2957 		}
2958 		zend_throw_error(NULL, "Function name must be a string");
2959 		call = NULL;
2960 	}
2961 
2962 	if (UNEXPECTED(!call)) {
2963 		HANDLE_EXCEPTION();
2964 	}
2965 
2966 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
2967 		if (UNEXPECTED(EG(exception))) {
2968 			if (call) {
2969 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
2970 					zend_string_release_ex(call->func->common.function_name, 0);
2971 					zend_free_trampoline(call->func);
2972 				}
2973 				zend_vm_stack_free_call_frame(call);
2974 			}
2975 			HANDLE_EXCEPTION();
2976 		}
2977 	}
2978 
2979 	call->prev_execute_data = EX(call);
2980 	EX(call) = call;
2981 
2982 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2983 }
2984 
ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2985 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2986 {
2987 	USE_OPLINE
2988 	zval *func_name;
2989 	zval *func;
2990 	zend_function *fbc;
2991 	zend_execute_data *call;
2992 
2993 	fbc = CACHED_PTR(opline->result.num);
2994 	if (UNEXPECTED(fbc == NULL)) {
2995 		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
2996 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1);
2997 		if (func == NULL) {
2998 			func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1);
2999 			if (UNEXPECTED(func == NULL)) {
3000 				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3001 			}
3002 		}
3003 		fbc = Z_FUNC_P(func);
3004 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3005 			init_func_run_time_cache(&fbc->op_array);
3006 		}
3007 		CACHE_PTR(opline->result.num, fbc);
3008 	}
3009 
3010 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3011 		fbc, opline->extended_value, NULL);
3012 	call->prev_execute_data = EX(call);
3013 	EX(call) = call;
3014 
3015 	ZEND_VM_NEXT_OPCODE();
3016 }
3017 
ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3018 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3019 {
3020 	USE_OPLINE
3021 	zval *fname;
3022 	zval *func;
3023 	zend_function *fbc;
3024 	zend_execute_data *call;
3025 
3026 	fbc = CACHED_PTR(opline->result.num);
3027 	if (UNEXPECTED(fbc == NULL)) {
3028 		fname = (zval*)RT_CONSTANT(opline, opline->op2);
3029 		func = zend_hash_find_ex(EG(function_table), Z_STR_P(fname), 1);
3030 		if (UNEXPECTED(func == NULL)) {
3031 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3032 		}
3033 		fbc = Z_FUNC_P(func);
3034 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3035 			init_func_run_time_cache(&fbc->op_array);
3036 		}
3037 		CACHE_PTR(opline->result.num, fbc);
3038 	}
3039 
3040 	call = _zend_vm_stack_push_call_frame_ex(
3041 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
3042 		fbc, opline->extended_value, NULL);
3043 	call->prev_execute_data = EX(call);
3044 	EX(call) = call;
3045 
3046 	ZEND_VM_NEXT_OPCODE();
3047 }
3048 
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3049 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3050 {
3051 	USE_OPLINE
3052 	uint32_t arg_num;
3053 	zval *param;
3054 
3055 	ZEND_VM_REPEATABLE_OPCODE
3056 
3057 	arg_num = opline->op1.num;
3058 	param = EX_VAR(opline->result.var);
3059 	if (arg_num > EX_NUM_ARGS()) {
3060 		zval *default_value = RT_CONSTANT(opline, opline->op2);
3061 
3062 		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
3063 			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
3064 
3065 			/* we keep in cache only not refcounted values */
3066 			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
3067 				ZVAL_COPY_VALUE(param, cache_val);
3068 			} else {
3069 				SAVE_OPLINE();
3070 				ZVAL_COPY(param, default_value);
3071 				if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
3072 					zval_ptr_dtor_nogc(param);
3073 					ZVAL_UNDEF(param);
3074 					HANDLE_EXCEPTION();
3075 				}
3076 				if (!Z_REFCOUNTED_P(param)) {
3077 					ZVAL_COPY_VALUE(cache_val, param);
3078 				}
3079 			}
3080 			goto recv_init_check_type;
3081 		} else {
3082 			ZVAL_COPY(param, default_value);
3083 		}
3084 	} else {
3085 recv_init_check_type:
3086 		if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3087 			zval *default_value = RT_CONSTANT(opline, opline->op2);
3088 
3089 			SAVE_OPLINE();
3090 			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)))) {
3091 				HANDLE_EXCEPTION();
3092 			}
3093 		}
3094 	}
3095 
3096 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
3097 	ZEND_VM_NEXT_OPCODE();
3098 }
3099 
ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3101 {
3102 	USE_OPLINE
3103 	zend_free_op free_op2;
3104 	zval *function_name;
3105 	zend_execute_data *call;
3106 
3107 	SAVE_OPLINE();
3108 	function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
3109 
3110 try_function_name:
3111 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3112 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3113 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3114 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
3115 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3116 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3117 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3118 		function_name = Z_REFVAL_P(function_name);
3119 		goto try_function_name;
3120 	} else {
3121 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3122 			ZVAL_UNDEFINED_OP2();
3123 			if (UNEXPECTED(EG(exception) != NULL)) {
3124 				HANDLE_EXCEPTION();
3125 			}
3126 		}
3127 		zend_throw_error(NULL, "Function name must be a string");
3128 		call = NULL;
3129 	}
3130 
3131 	zval_ptr_dtor_nogc(free_op2);
3132 	if (UNEXPECTED(!call)) {
3133 		HANDLE_EXCEPTION();
3134 	}
3135 
3136 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
3137 		if (UNEXPECTED(EG(exception))) {
3138 			if (call) {
3139 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3140 					zend_string_release_ex(call->func->common.function_name, 0);
3141 					zend_free_trampoline(call->func);
3142 				}
3143 				zend_vm_stack_free_call_frame(call);
3144 			}
3145 			HANDLE_EXCEPTION();
3146 		}
3147 	}
3148 
3149 	call->prev_execute_data = EX(call);
3150 	EX(call) = call;
3151 
3152 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3153 }
3154 
ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3155 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3156 {
3157 	USE_OPLINE
3158 	uint32_t arg_num = opline->op1.num;
3159 
3160 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
3161 		SAVE_OPLINE();
3162 		zend_missing_arg_error(execute_data);
3163 		HANDLE_EXCEPTION();
3164 	} else {
3165 		zval *param = EX_VAR(opline->result.var);
3166 
3167 		SAVE_OPLINE();
3168 		if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)))) {
3169 			HANDLE_EXCEPTION();
3170 		}
3171 	}
3172 
3173 	ZEND_VM_NEXT_OPCODE();
3174 }
3175 
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3177 {
3178 	USE_OPLINE
3179 	uint32_t arg_num = opline->op1.num;
3180 	uint32_t arg_count = EX_NUM_ARGS();
3181 	zval *params;
3182 
3183 	SAVE_OPLINE();
3184 
3185 	params = EX_VAR(opline->result.var);
3186 
3187 	if (arg_num <= arg_count) {
3188 		zval *param;
3189 
3190 		array_init_size(params, arg_count - arg_num + 1);
3191 		zend_hash_real_init_packed(Z_ARRVAL_P(params));
3192 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
3193 			param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
3194 			if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3195 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
3196 				do {
3197 					zend_verify_variadic_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num));
3198 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3199 					ZEND_HASH_FILL_ADD(param);
3200 					param++;
3201 				} while (++arg_num <= arg_count);
3202 			} else {
3203 				do {
3204 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
3205 					ZEND_HASH_FILL_ADD(param);
3206 					param++;
3207 				} while (++arg_num <= arg_count);
3208 			}
3209 		} ZEND_HASH_FILL_END();
3210 	} else {
3211 		ZVAL_EMPTY_ARRAY(params);
3212 	}
3213 
3214 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3215 }
3216 
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3218 {
3219 	USE_OPLINE
3220 
3221 	zval *function_name;
3222 	zend_execute_data *call;
3223 
3224 	SAVE_OPLINE();
3225 	function_name = EX_VAR(opline->op2.var);
3226 
3227 try_function_name:
3228 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3229 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3230 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3231 		call = zend_init_dynamic_call_object(function_name, opline->extended_value);
3232 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3233 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3234 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3235 		function_name = Z_REFVAL_P(function_name);
3236 		goto try_function_name;
3237 	} else {
3238 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3239 			ZVAL_UNDEFINED_OP2();
3240 			if (UNEXPECTED(EG(exception) != NULL)) {
3241 				HANDLE_EXCEPTION();
3242 			}
3243 		}
3244 		zend_throw_error(NULL, "Function name must be a string");
3245 		call = NULL;
3246 	}
3247 
3248 	if (UNEXPECTED(!call)) {
3249 		HANDLE_EXCEPTION();
3250 	}
3251 
3252 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
3253 		if (UNEXPECTED(EG(exception))) {
3254 			if (call) {
3255 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3256 					zend_string_release_ex(call->func->common.function_name, 0);
3257 					zend_free_trampoline(call->func);
3258 				}
3259 				zend_vm_stack_free_call_frame(call);
3260 			}
3261 			HANDLE_EXCEPTION();
3262 		}
3263 	}
3264 
3265 	call->prev_execute_data = EX(call);
3266 	EX(call) = call;
3267 
3268 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3269 }
3270 
ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3271 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3272 {
3273 	USE_OPLINE
3274 
3275 	zval *op1;
3276 
3277 	op1 = RT_CONSTANT(opline, opline->op1);
3278 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
3279 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
3280 		ZEND_VM_NEXT_OPCODE();
3281 	}
3282 
3283 	SAVE_OPLINE();
3284 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
3285 		op1 = ZVAL_UNDEFINED_OP1();
3286 	}
3287 	bitwise_not_function(EX_VAR(opline->result.var), op1);
3288 
3289 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3290 }
3291 
ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3292 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3293 {
3294 	USE_OPLINE
3295 	zval *val;
3296 
3297 
3298 	val = RT_CONSTANT(opline, opline->op1);
3299 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3300 		ZVAL_FALSE(EX_VAR(opline->result.var));
3301 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3302 		/* The result and op1 can be the same cv zval */
3303 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
3304 		ZVAL_TRUE(EX_VAR(opline->result.var));
3305 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
3306 			SAVE_OPLINE();
3307 			ZVAL_UNDEFINED_OP1();
3308 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3309 		}
3310 	} else {
3311 		SAVE_OPLINE();
3312 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
3313 
3314 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3315 	}
3316 	ZEND_VM_NEXT_OPCODE();
3317 }
3318 
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3319 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3320 {
3321 	USE_OPLINE
3322 
3323 	zval *z;
3324 
3325 	SAVE_OPLINE();
3326 	z = RT_CONSTANT(opline, opline->op1);
3327 
3328 	if (Z_TYPE_P(z) == IS_STRING) {
3329 		zend_string *str = Z_STR_P(z);
3330 
3331 		if (ZSTR_LEN(str) != 0) {
3332 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
3333 		}
3334 	} else {
3335 		zend_string *str = zval_get_string_func(z);
3336 
3337 		if (ZSTR_LEN(str) != 0) {
3338 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
3339 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
3340 			ZVAL_UNDEFINED_OP1();
3341 		}
3342 		zend_string_release_ex(str, 0);
3343 	}
3344 
3345 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3346 }
3347 
ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3348 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3349 {
3350 	USE_OPLINE
3351 
3352 	zval *val;
3353 
3354 	val = RT_CONSTANT(opline, opline->op1);
3355 
3356 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3357 		ZEND_VM_NEXT_OPCODE();
3358 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3359 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3360 			SAVE_OPLINE();
3361 			ZVAL_UNDEFINED_OP1();
3362 			if (UNEXPECTED(EG(exception))) {
3363 				HANDLE_EXCEPTION();
3364 			}
3365 		}
3366 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3367 	}
3368 
3369 	SAVE_OPLINE();
3370 	if (i_zend_is_true(val)) {
3371 		opline++;
3372 	} else {
3373 		opline = OP_JMP_ADDR(opline, opline->op2);
3374 	}
3375 
3376 	ZEND_VM_JMP(opline);
3377 }
3378 
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3379 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3380 {
3381 	USE_OPLINE
3382 
3383 	zval *val;
3384 
3385 	val = RT_CONSTANT(opline, opline->op1);
3386 
3387 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3388 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3389 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3390 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3391 			SAVE_OPLINE();
3392 			ZVAL_UNDEFINED_OP1();
3393 			if (UNEXPECTED(EG(exception))) {
3394 				HANDLE_EXCEPTION();
3395 			}
3396 		}
3397 		ZEND_VM_NEXT_OPCODE();
3398 	}
3399 
3400 	SAVE_OPLINE();
3401 	if (i_zend_is_true(val)) {
3402 		opline = OP_JMP_ADDR(opline, opline->op2);
3403 	} else {
3404 		opline++;
3405 	}
3406 
3407 	ZEND_VM_JMP(opline);
3408 }
3409 
ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3411 {
3412 	USE_OPLINE
3413 
3414 	zval *val;
3415 
3416 	val = RT_CONSTANT(opline, opline->op1);
3417 
3418 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
3419 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
3420 		ZEND_VM_CONTINUE();
3421 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3422 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3423 			SAVE_OPLINE();
3424 			ZVAL_UNDEFINED_OP1();
3425 			if (UNEXPECTED(EG(exception))) {
3426 				HANDLE_EXCEPTION();
3427 			}
3428 		}
3429 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3430 	}
3431 
3432 	SAVE_OPLINE();
3433 	if (i_zend_is_true(val)) {
3434 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
3435 	} else {
3436 		opline = OP_JMP_ADDR(opline, opline->op2);
3437 	}
3438 
3439 	ZEND_VM_JMP(opline);
3440 }
3441 
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3442 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3443 {
3444 	USE_OPLINE
3445 
3446 	zval *val;
3447 	int ret;
3448 
3449 	val = RT_CONSTANT(opline, opline->op1);
3450 
3451 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3452 		ZVAL_TRUE(EX_VAR(opline->result.var));
3453 		ZEND_VM_NEXT_OPCODE();
3454 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3455 		ZVAL_FALSE(EX_VAR(opline->result.var));
3456 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3457 			SAVE_OPLINE();
3458 			ZVAL_UNDEFINED_OP1();
3459 			if (UNEXPECTED(EG(exception))) {
3460 				HANDLE_EXCEPTION();
3461 			}
3462 		}
3463 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3464 	}
3465 
3466 	SAVE_OPLINE();
3467 	ret = i_zend_is_true(val);
3468 
3469 	if (ret) {
3470 		ZVAL_TRUE(EX_VAR(opline->result.var));
3471 		opline++;
3472 	} else {
3473 		ZVAL_FALSE(EX_VAR(opline->result.var));
3474 		opline = OP_JMP_ADDR(opline, opline->op2);
3475 	}
3476 	ZEND_VM_JMP(opline);
3477 }
3478 
ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3479 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3480 {
3481 	USE_OPLINE
3482 
3483 	zval *val;
3484 	int ret;
3485 
3486 	val = RT_CONSTANT(opline, opline->op1);
3487 
3488 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3489 		ZVAL_TRUE(EX_VAR(opline->result.var));
3490 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3491 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3492 		ZVAL_FALSE(EX_VAR(opline->result.var));
3493 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
3494 			SAVE_OPLINE();
3495 			ZVAL_UNDEFINED_OP1();
3496 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3497 		} else {
3498 			ZEND_VM_NEXT_OPCODE();
3499 		}
3500 	}
3501 
3502 	SAVE_OPLINE();
3503 	ret = i_zend_is_true(val);
3504 
3505 	if (ret) {
3506 		ZVAL_TRUE(EX_VAR(opline->result.var));
3507 		opline = OP_JMP_ADDR(opline, opline->op2);
3508 	} else {
3509 		ZVAL_FALSE(EX_VAR(opline->result.var));
3510 		opline++;
3511 	}
3512 	ZEND_VM_JMP(opline);
3513 }
3514 
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3515 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3516 {
3517 	USE_OPLINE
3518 	zval *retval_ptr;
3519 	zval *return_value;
3520 	zend_free_op free_op1;
3521 
3522 	retval_ptr = RT_CONSTANT(opline, opline->op1);
3523 	return_value = EX(return_value);
3524 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
3525 		SAVE_OPLINE();
3526 		retval_ptr = ZVAL_UNDEFINED_OP1();
3527 		if (return_value) {
3528 			ZVAL_NULL(return_value);
3529 		}
3530 	} else if (!return_value) {
3531 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
3532 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
3533 				SAVE_OPLINE();
3534 				rc_dtor_func(Z_COUNTED_P(free_op1));
3535 			}
3536 		}
3537 	} else {
3538 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
3539 			ZVAL_COPY_VALUE(return_value, retval_ptr);
3540 			if (IS_CONST == IS_CONST) {
3541 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
3542 					Z_ADDREF_P(return_value);
3543 				}
3544 			}
3545 		} else if (IS_CONST == IS_CV) {
3546 			do {
3547 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
3548 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
3549 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
3550 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
3551 							ZVAL_COPY_VALUE(return_value, retval_ptr);
3552 							if (GC_MAY_LEAK(ref)) {
3553 								gc_possible_root(ref);
3554 							}
3555 							ZVAL_NULL(retval_ptr);
3556 							break;
3557 						} else {
3558 							Z_ADDREF_P(retval_ptr);
3559 						}
3560 					} else {
3561 						retval_ptr = Z_REFVAL_P(retval_ptr);
3562 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
3563 							Z_ADDREF_P(retval_ptr);
3564 						}
3565 					}
3566 				}
3567 				ZVAL_COPY_VALUE(return_value, retval_ptr);
3568 			} while (0);
3569 		} else /* if (IS_CONST == IS_VAR) */ {
3570 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
3571 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
3572 
3573 				retval_ptr = Z_REFVAL_P(retval_ptr);
3574 				ZVAL_COPY_VALUE(return_value, retval_ptr);
3575 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
3576 					efree_size(ref, sizeof(zend_reference));
3577 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
3578 					Z_ADDREF_P(retval_ptr);
3579 				}
3580 			} else {
3581 				ZVAL_COPY_VALUE(return_value, retval_ptr);
3582 			}
3583 		}
3584 	}
3585 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3586 }
3587 
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3588 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3589 {
3590 	USE_OPLINE
3591 	zval *retval_ptr;
3592 
3593 
3594 	SAVE_OPLINE();
3595 
3596 	do {
3597 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
3598 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
3599 			/* Not supposed to happen, but we'll allow it */
3600 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
3601 
3602 			retval_ptr = RT_CONSTANT(opline, opline->op1);
3603 			if (!EX(return_value)) {
3604 
3605 			} else {
3606 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
3607 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
3608 					break;
3609 				}
3610 
3611 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
3612 				if (IS_CONST == IS_CONST) {
3613 					Z_TRY_ADDREF_P(retval_ptr);
3614 				}
3615 			}
3616 			break;
3617 		}
3618 
3619 		retval_ptr = NULL;
3620 
3621 		if (IS_CONST == IS_VAR) {
3622 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
3623 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
3624 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
3625 				if (EX(return_value)) {
3626 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
3627 				} else {
3628 
3629 				}
3630 				break;
3631 			}
3632 		}
3633 
3634 		if (EX(return_value)) {
3635 			if (Z_ISREF_P(retval_ptr)) {
3636 				Z_ADDREF_P(retval_ptr);
3637 			} else {
3638 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
3639 			}
3640 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
3641 		}
3642 
3643 	} while (0);
3644 
3645 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3646 }
3647 
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3648 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3649 {
3650 	USE_OPLINE
3651 	zval *retval;
3652 
3653 
3654 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3655 
3656 	SAVE_OPLINE();
3657 	retval = RT_CONSTANT(opline, opline->op1);
3658 
3659 	/* Copy return value into generator->retval */
3660 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
3661 		ZVAL_COPY_VALUE(&generator->retval, retval);
3662 		if (IS_CONST == IS_CONST) {
3663 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
3664 				Z_ADDREF(generator->retval);
3665 			}
3666 		}
3667 	} else if (IS_CONST == IS_CV) {
3668 		ZVAL_COPY_DEREF(&generator->retval, retval);
3669 	} else /* if (IS_CONST == IS_VAR) */ {
3670 		if (UNEXPECTED(Z_ISREF_P(retval))) {
3671 			zend_refcounted *ref = Z_COUNTED_P(retval);
3672 
3673 			retval = Z_REFVAL_P(retval);
3674 			ZVAL_COPY_VALUE(&generator->retval, retval);
3675 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
3676 				efree_size(ref, sizeof(zend_reference));
3677 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
3678 				Z_ADDREF_P(retval);
3679 			}
3680 		} else {
3681 			ZVAL_COPY_VALUE(&generator->retval, retval);
3682 		}
3683 	}
3684 
3685 	/* Close the generator to free up resources */
3686 	zend_generator_close(generator, 1);
3687 
3688 	/* Pass execution back to handling code */
3689 	ZEND_VM_RETURN();
3690 }
3691 
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3692 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3693 {
3694 	USE_OPLINE
3695 	zval *value;
3696 
3697 
3698 	SAVE_OPLINE();
3699 	value = RT_CONSTANT(opline, opline->op1);
3700 
3701 	do {
3702 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
3703 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
3704 				value = Z_REFVAL_P(value);
3705 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
3706 					break;
3707 				}
3708 			}
3709 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
3710 				ZVAL_UNDEFINED_OP1();
3711 				if (UNEXPECTED(EG(exception) != NULL)) {
3712 					HANDLE_EXCEPTION();
3713 				}
3714 			}
3715 			zend_throw_error(NULL, "Can only throw objects");
3716 
3717 			HANDLE_EXCEPTION();
3718 		}
3719 	} while (0);
3720 
3721 	zend_exception_save();
3722 	if (IS_CONST != IS_TMP_VAR) {
3723 		Z_TRY_ADDREF_P(value);
3724 	}
3725 
3726 	zend_throw_exception_object(value);
3727 	zend_exception_restore();
3728 
3729 	HANDLE_EXCEPTION();
3730 }
3731 
ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3733 {
3734 	USE_OPLINE
3735 	zend_class_entry *ce, *catch_ce;
3736 	zend_object *exception;
3737 	zval *ex;
3738 
3739 	SAVE_OPLINE();
3740 	/* Check whether an exception has been thrown, if not, jump over code */
3741 	zend_exception_restore();
3742 	if (EG(exception) == NULL) {
3743 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3744 	}
3745 	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
3746 	if (UNEXPECTED(catch_ce == NULL)) {
3747 		catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
3748 
3749 		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
3750 	}
3751 	ce = EG(exception)->ce;
3752 
3753 #ifdef HAVE_DTRACE
3754 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
3755 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
3756 	}
3757 #endif /* HAVE_DTRACE */
3758 
3759 	if (ce != catch_ce) {
3760 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
3761 			if (opline->extended_value & ZEND_LAST_CATCH) {
3762 				zend_rethrow_exception(execute_data);
3763 				HANDLE_EXCEPTION();
3764 			}
3765 			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
3766 		}
3767 	}
3768 
3769 	exception = EG(exception);
3770 	ex = EX_VAR(opline->result.var);
3771 	{
3772 		/* Always perform a strict assignment. There is a reasonable expectation that if you
3773 		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
3774 		 * we should not permit coercion to string here. */
3775 		zval tmp;
3776 		ZVAL_OBJ(&tmp, exception);
3777 		EG(exception) = NULL;
3778 		zend_assign_to_variable(ex, &tmp, IS_TMP_VAR, /* strict */ 1);
3779 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3780 	}
3781 }
3782 
ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3783 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3784 {
3785 	USE_OPLINE
3786 	zval *value, *arg;
3787 
3788 
3789 	value = RT_CONSTANT(opline, opline->op1);
3790 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3791 	ZVAL_COPY_VALUE(arg, value);
3792 	if (IS_CONST == IS_CONST) {
3793 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3794 			Z_ADDREF_P(arg);
3795 		}
3796 	}
3797 	ZEND_VM_NEXT_OPCODE();
3798 }
3799 
ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3801 {
3802 	USE_OPLINE
3803 	zval *value, *arg;
3804 
3805 	uint32_t arg_num = opline->op2.num;
3806 
3807 	if (EXPECTED(0)) {
3808 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3809 			goto send_val_by_ref;
3810 		}
3811 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3812 send_val_by_ref:
3813 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3814 	}
3815 	value = RT_CONSTANT(opline, opline->op1);
3816 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3817 	ZVAL_COPY_VALUE(arg, value);
3818 	if (IS_CONST == IS_CONST) {
3819 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3820 			Z_ADDREF_P(arg);
3821 		}
3822 	}
3823 	ZEND_VM_NEXT_OPCODE();
3824 }
3825 
ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3826 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3827 {
3828 	USE_OPLINE
3829 	zval *value, *arg;
3830 
3831 	uint32_t arg_num = opline->op2.num;
3832 
3833 	if (EXPECTED(1)) {
3834 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3835 			goto send_val_by_ref;
3836 		}
3837 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
3838 send_val_by_ref:
3839 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3840 	}
3841 	value = RT_CONSTANT(opline, opline->op1);
3842 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
3843 	ZVAL_COPY_VALUE(arg, value);
3844 	if (IS_CONST == IS_CONST) {
3845 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
3846 			Z_ADDREF_P(arg);
3847 		}
3848 	}
3849 	ZEND_VM_NEXT_OPCODE();
3850 }
3851 
ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3852 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3853 {
3854 	USE_OPLINE
3855 	zval *arg, *param;
3856 
3857 
3858 	SAVE_OPLINE();
3859 
3860 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
3861 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
3862 	}
3863 
3864 	arg = RT_CONSTANT(opline, opline->op1);
3865 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
3866 	ZVAL_COPY(param, arg);
3867 
3868 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3869 }
3870 
ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3871 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3872 {
3873 	USE_OPLINE
3874 	zval *val;
3875 
3876 
3877 	val = RT_CONSTANT(opline, opline->op1);
3878 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
3879 		ZVAL_TRUE(EX_VAR(opline->result.var));
3880 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
3881 		/* The result and op1 can be the same cv zval */
3882 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
3883 		ZVAL_FALSE(EX_VAR(opline->result.var));
3884 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
3885 			SAVE_OPLINE();
3886 			ZVAL_UNDEFINED_OP1();
3887 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3888 		}
3889 	} else {
3890 		SAVE_OPLINE();
3891 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
3892 
3893 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3894 	}
3895 	ZEND_VM_NEXT_OPCODE();
3896 }
3897 
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3898 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3899 {
3900 	USE_OPLINE
3901 
3902 	zval *obj;
3903 	zend_class_entry *ce, *scope;
3904 	zend_function *clone;
3905 	zend_object_clone_obj_t clone_call;
3906 
3907 	SAVE_OPLINE();
3908 	obj = RT_CONSTANT(opline, opline->op1);
3909 
3910 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
3911 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3912 	}
3913 
3914 	do {
3915 		if (IS_CONST == IS_CONST ||
3916 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
3917 		    if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
3918 				obj = Z_REFVAL_P(obj);
3919 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
3920 					break;
3921 				}
3922 			}
3923 			ZVAL_UNDEF(EX_VAR(opline->result.var));
3924 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
3925 				ZVAL_UNDEFINED_OP1();
3926 				if (UNEXPECTED(EG(exception) != NULL)) {
3927 					HANDLE_EXCEPTION();
3928 				}
3929 			}
3930 			zend_throw_error(NULL, "__clone method called on non-object");
3931 
3932 			HANDLE_EXCEPTION();
3933 		}
3934 	} while (0);
3935 
3936 	ce = Z_OBJCE_P(obj);
3937 	clone = ce->clone;
3938 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
3939 	if (UNEXPECTED(clone_call == NULL)) {
3940 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
3941 
3942 		ZVAL_UNDEF(EX_VAR(opline->result.var));
3943 		HANDLE_EXCEPTION();
3944 	}
3945 
3946 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
3947 		scope = EX(func)->op_array.scope;
3948 		if (clone->common.scope != scope) {
3949 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
3950 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
3951 				zend_wrong_clone_call(clone, scope);
3952 
3953 				ZVAL_UNDEF(EX_VAR(opline->result.var));
3954 				HANDLE_EXCEPTION();
3955 			}
3956 		}
3957 	}
3958 
3959 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
3960 
3961 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3962 }
3963 
ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3964 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3965 {
3966 	USE_OPLINE
3967 
3968 	zval *expr;
3969 	zval *result = EX_VAR(opline->result.var);
3970 	HashTable *ht;
3971 
3972 	SAVE_OPLINE();
3973 	expr = RT_CONSTANT(opline, opline->op1);
3974 
3975 	switch (opline->extended_value) {
3976 		case IS_NULL:
3977 			ZVAL_NULL(result);
3978 			break;
3979 		case _IS_BOOL:
3980 			ZVAL_BOOL(result, zend_is_true(expr));
3981 			break;
3982 		case IS_LONG:
3983 			ZVAL_LONG(result, zval_get_long(expr));
3984 			break;
3985 		case IS_DOUBLE:
3986 			ZVAL_DOUBLE(result, zval_get_double(expr));
3987 			break;
3988 		case IS_STRING:
3989 			ZVAL_STR(result, zval_get_string(expr));
3990 			break;
3991 		default:
3992 			if (IS_CONST & (IS_VAR|IS_CV)) {
3993 				ZVAL_DEREF(expr);
3994 			}
3995 			/* If value is already of correct type, return it directly */
3996 			if (Z_TYPE_P(expr) == opline->extended_value) {
3997 				ZVAL_COPY_VALUE(result, expr);
3998 				if (IS_CONST == IS_CONST) {
3999 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4000 				} else if (IS_CONST != IS_TMP_VAR) {
4001 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4002 				}
4003 
4004 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4005 			}
4006 
4007 			if (opline->extended_value == IS_ARRAY) {
4008 				if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
4009 					if (Z_TYPE_P(expr) != IS_NULL) {
4010 						ZVAL_ARR(result, zend_new_array(1));
4011 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
4012 						if (IS_CONST == IS_CONST) {
4013 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4014 						} else {
4015 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4016 						}
4017 					} else {
4018 						ZVAL_EMPTY_ARRAY(result);
4019 					}
4020 				} else {
4021 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
4022 					if (obj_ht) {
4023 						/* fast copy */
4024 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
4025 							(Z_OBJCE_P(expr)->default_properties_count ||
4026 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
4027 							 GC_IS_RECURSIVE(obj_ht))));
4028 						zend_release_properties(obj_ht);
4029 					} else {
4030 						ZVAL_EMPTY_ARRAY(result);
4031 					}
4032 				}
4033 			} else {
4034 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
4035 				if (Z_TYPE_P(expr) == IS_ARRAY) {
4036 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
4037 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
4038 						/* TODO: try not to duplicate immutable arrays as well ??? */
4039 						ht = zend_array_dup(ht);
4040 					}
4041 					Z_OBJ_P(result)->properties = ht;
4042 				} else if (Z_TYPE_P(expr) != IS_NULL) {
4043 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
4044 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
4045 					if (IS_CONST == IS_CONST) {
4046 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4047 					} else {
4048 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4049 					}
4050 				}
4051 			}
4052 	}
4053 
4054 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4055 }
4056 
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4058 {
4059 	USE_OPLINE
4060 	zend_op_array *new_op_array;
4061 
4062 	zval *inc_filename;
4063 
4064 	SAVE_OPLINE();
4065 	inc_filename = RT_CONSTANT(opline, opline->op1);
4066 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4067 
4068 	if (UNEXPECTED(EG(exception) != NULL)) {
4069 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4070 			destroy_op_array(new_op_array);
4071 			efree_size(new_op_array, sizeof(zend_op_array));
4072 		}
4073 		UNDEF_RESULT();
4074 		HANDLE_EXCEPTION();
4075 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4076 		if (RETURN_VALUE_USED(opline)) {
4077 			ZVAL_TRUE(EX_VAR(opline->result.var));
4078 		}
4079 	} else if (EXPECTED(new_op_array != NULL)) {
4080 		zval *return_value = NULL;
4081 		zend_execute_data *call;
4082 
4083 		if (RETURN_VALUE_USED(opline)) {
4084 			return_value = EX_VAR(opline->result.var);
4085 		}
4086 
4087 		new_op_array->scope = EX(func)->op_array.scope;
4088 
4089 		call = zend_vm_stack_push_call_frame(
4090 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
4091 			(zend_function*)new_op_array, 0,
4092 			Z_PTR(EX(This)));
4093 
4094 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
4095 			call->symbol_table = EX(symbol_table);
4096 		} else {
4097 			call->symbol_table = zend_rebuild_symbol_table();
4098 		}
4099 
4100 		call->prev_execute_data = execute_data;
4101 		i_init_code_execute_data(call, new_op_array, return_value);
4102 		if (EXPECTED(zend_execute_ex == execute_ex)) {
4103 			ZEND_VM_ENTER();
4104 		} else {
4105 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
4106 			zend_execute_ex(call);
4107 			zend_vm_stack_free_call_frame(call);
4108 		}
4109 
4110 		destroy_op_array(new_op_array);
4111 		efree_size(new_op_array, sizeof(zend_op_array));
4112 		if (UNEXPECTED(EG(exception) != NULL)) {
4113 			zend_rethrow_exception(execute_data);
4114 			UNDEF_RESULT();
4115 			HANDLE_EXCEPTION();
4116 		}
4117 	} else if (RETURN_VALUE_USED(opline)) {
4118 		ZVAL_FALSE(EX_VAR(opline->result.var));
4119 	}
4120 	ZEND_VM_NEXT_OPCODE();
4121 }
4122 
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4123 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4124 {
4125 	USE_OPLINE
4126 
4127 	zval *array_ptr, *result;
4128 
4129 	SAVE_OPLINE();
4130 
4131 	array_ptr = RT_CONSTANT(opline, opline->op1);
4132 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
4133 		result = EX_VAR(opline->result.var);
4134 		ZVAL_COPY_VALUE(result, array_ptr);
4135 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
4136 			Z_ADDREF_P(array_ptr);
4137 		}
4138 		Z_FE_POS_P(result) = 0;
4139 
4140 		ZEND_VM_NEXT_OPCODE();
4141 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
4142 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
4143 			HashTable *properties;
4144 			if (Z_OBJ_P(array_ptr)->properties
4145 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
4146 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
4147 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
4148 				}
4149 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
4150 			}
4151 
4152 			properties = Z_OBJPROP_P(array_ptr);
4153 			result = EX_VAR(opline->result.var);
4154 			ZVAL_COPY_VALUE(result, array_ptr);
4155 			if (IS_CONST != IS_TMP_VAR) {
4156 				Z_ADDREF_P(array_ptr);
4157 			}
4158 
4159 			if (zend_hash_num_elements(properties) == 0) {
4160 				Z_FE_ITER_P(result) = (uint32_t) -1;
4161 
4162 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4163 			}
4164 
4165 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
4166 
4167 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4168 		} else {
4169 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
4170 
4171 			if (UNEXPECTED(EG(exception))) {
4172 				HANDLE_EXCEPTION();
4173 			} else if (is_empty) {
4174 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4175 			} else {
4176 				ZEND_VM_NEXT_OPCODE();
4177 			}
4178 		}
4179 	} else {
4180 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
4181 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4182 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
4183 
4184 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4185 	}
4186 }
4187 
ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4188 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4189 {
4190 	USE_OPLINE
4191 
4192 	zval *array_ptr, *array_ref;
4193 
4194 	SAVE_OPLINE();
4195 
4196 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4197 		array_ref = array_ptr = NULL;
4198 		if (Z_ISREF_P(array_ref)) {
4199 			array_ptr = Z_REFVAL_P(array_ref);
4200 		}
4201 	} else {
4202 		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
4203 	}
4204 
4205 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
4206 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4207 			if (array_ptr == array_ref) {
4208 				ZVAL_NEW_REF(array_ref, array_ref);
4209 				array_ptr = Z_REFVAL_P(array_ref);
4210 			}
4211 			Z_ADDREF_P(array_ref);
4212 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
4213 		} else {
4214 			array_ref = EX_VAR(opline->result.var);
4215 			ZVAL_NEW_REF(array_ref, array_ptr);
4216 			array_ptr = Z_REFVAL_P(array_ref);
4217 		}
4218 		if (IS_CONST == IS_CONST) {
4219 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
4220 		} else {
4221 			SEPARATE_ARRAY(array_ptr);
4222 		}
4223 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
4224 
4225 		if (IS_CONST == IS_VAR) {
4226 
4227 		}
4228 		ZEND_VM_NEXT_OPCODE();
4229 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
4230 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
4231 			HashTable *properties;
4232 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
4233 				if (array_ptr == array_ref) {
4234 					ZVAL_NEW_REF(array_ref, array_ref);
4235 					array_ptr = Z_REFVAL_P(array_ref);
4236 				}
4237 				Z_ADDREF_P(array_ref);
4238 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
4239 			} else {
4240 				array_ptr = EX_VAR(opline->result.var);
4241 				ZVAL_COPY_VALUE(array_ptr, array_ref);
4242 			}
4243 			if (Z_OBJ_P(array_ptr)->properties
4244 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
4245 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
4246 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
4247 				}
4248 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
4249 			}
4250 
4251 			properties = Z_OBJPROP_P(array_ptr);
4252 			if (zend_hash_num_elements(properties) == 0) {
4253 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
4254 
4255 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4256 			}
4257 
4258 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
4259 
4260 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4261 		} else {
4262 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
4263 
4264 			if (IS_CONST == IS_VAR) {
4265 
4266 			} else {
4267 
4268 			}
4269 			if (UNEXPECTED(EG(exception))) {
4270 				HANDLE_EXCEPTION();
4271 			} else if (is_empty) {
4272 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4273 			} else {
4274 				ZEND_VM_NEXT_OPCODE();
4275 			}
4276 		}
4277 	} else {
4278 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
4279 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4280 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
4281 		if (IS_CONST == IS_VAR) {
4282 
4283 		} else {
4284 
4285 		}
4286 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
4287 	}
4288 }
4289 
ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4290 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4291 {
4292 	USE_OPLINE
4293 
4294 	zval *value;
4295 	zval *ref = NULL;
4296 	int ret;
4297 
4298 	SAVE_OPLINE();
4299 	value = RT_CONSTANT(opline, opline->op1);
4300 
4301 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
4302 		if (IS_CONST == IS_VAR) {
4303 			ref = value;
4304 		}
4305 		value = Z_REFVAL_P(value);
4306 	}
4307 
4308 	ret = i_zend_is_true(value);
4309 
4310 	if (UNEXPECTED(EG(exception))) {
4311 
4312 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4313 		HANDLE_EXCEPTION();
4314 	}
4315 
4316 	if (ret) {
4317 		zval *result = EX_VAR(opline->result.var);
4318 
4319 		ZVAL_COPY_VALUE(result, value);
4320 		if (IS_CONST == IS_CONST) {
4321 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4322 		} else if (IS_CONST == IS_CV) {
4323 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4324 		} else if (IS_CONST == IS_VAR && ref) {
4325 			zend_reference *r = Z_REF_P(ref);
4326 
4327 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
4328 				efree_size(r, sizeof(zend_reference));
4329 			} else if (Z_OPT_REFCOUNTED_P(result)) {
4330 				Z_ADDREF_P(result);
4331 			}
4332 		}
4333 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4334 	}
4335 
4336 	ZEND_VM_NEXT_OPCODE();
4337 }
4338 
ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4339 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4340 {
4341 	USE_OPLINE
4342 
4343 	zval *value;
4344 	zval *ref = NULL;
4345 
4346 	SAVE_OPLINE();
4347 	value = RT_CONSTANT(opline, opline->op1);
4348 
4349 	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
4350 		if (IS_CONST & IS_VAR) {
4351 			ref = value;
4352 		}
4353 		value = Z_REFVAL_P(value);
4354 	}
4355 
4356 	if (Z_TYPE_P(value) > IS_NULL) {
4357 		zval *result = EX_VAR(opline->result.var);
4358 		ZVAL_COPY_VALUE(result, value);
4359 		if (IS_CONST == IS_CONST) {
4360 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4361 		} else if (IS_CONST == IS_CV) {
4362 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4363 		} else if ((IS_CONST & IS_VAR) && ref) {
4364 			zend_reference *r = Z_REF_P(ref);
4365 
4366 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
4367 				efree_size(r, sizeof(zend_reference));
4368 			} else if (Z_OPT_REFCOUNTED_P(result)) {
4369 				Z_ADDREF_P(result);
4370 			}
4371 		}
4372 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4373 	}
4374 
4375 	ZEND_VM_NEXT_OPCODE();
4376 }
4377 
ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4378 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4379 {
4380 	USE_OPLINE
4381 
4382 	zval *value;
4383 	zval *result = EX_VAR(opline->result.var);
4384 
4385 	value = RT_CONSTANT(opline, opline->op1);
4386 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4387 		SAVE_OPLINE();
4388 		ZVAL_UNDEFINED_OP1();
4389 		ZVAL_NULL(result);
4390 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4391 	}
4392 
4393 	if (IS_CONST == IS_CV) {
4394 		ZVAL_COPY_DEREF(result, value);
4395 	} else if (IS_CONST == IS_VAR) {
4396 		if (UNEXPECTED(Z_ISREF_P(value))) {
4397 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
4398 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
4399 				efree_size(Z_REF_P(value), sizeof(zend_reference));
4400 			} else if (Z_OPT_REFCOUNTED_P(result)) {
4401 				Z_ADDREF_P(result);
4402 			}
4403 		} else {
4404 			ZVAL_COPY_VALUE(result, value);
4405 		}
4406 	} else {
4407 		ZVAL_COPY_VALUE(result, value);
4408 		if (IS_CONST == IS_CONST) {
4409 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
4410 				Z_ADDREF_P(result);
4411 			}
4412 		}
4413 	}
4414 	ZEND_VM_NEXT_OPCODE();
4415 }
4416 
ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4417 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4418 {
4419 	USE_OPLINE
4420 
4421 	SAVE_OPLINE();
4422 	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
4423 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4424 }
4425 
ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4427 {
4428 	USE_OPLINE
4429 
4430 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4431 
4432 	zval *val;
4433 
4434 
4435 	SAVE_OPLINE();
4436 	val = RT_CONSTANT(opline, opline->op1);
4437 
4438 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
4439 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
4440 
4441 		UNDEF_RESULT();
4442 		HANDLE_EXCEPTION();
4443 	}
4444 
4445 	if (Z_TYPE_P(val) == IS_ARRAY) {
4446 		ZVAL_COPY_VALUE(&generator->values, val);
4447 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
4448 			Z_ADDREF_P(val);
4449 		}
4450 		Z_FE_POS(generator->values) = 0;
4451 
4452 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
4453 		zend_class_entry *ce = Z_OBJCE_P(val);
4454 		if (ce == zend_ce_generator) {
4455 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
4456 
4457 			if (IS_CONST != IS_TMP_VAR) {
4458 				Z_ADDREF_P(val);
4459 			}
4460 
4461 			if (Z_ISUNDEF(new_gen->retval)) {
4462 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
4463 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
4464 					zval_ptr_dtor(val);
4465 					UNDEF_RESULT();
4466 					HANDLE_EXCEPTION();
4467 				} else {
4468 					zend_generator_yield_from(generator, new_gen);
4469 				}
4470 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
4471 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
4472 				zval_ptr_dtor(val);
4473 				UNDEF_RESULT();
4474 				HANDLE_EXCEPTION();
4475 			} else {
4476 				if (RETURN_VALUE_USED(opline)) {
4477 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
4478 				}
4479 				ZEND_VM_NEXT_OPCODE();
4480 			}
4481 		} else {
4482 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
4483 
4484 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
4485 				if (!EG(exception)) {
4486 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
4487 				}
4488 				UNDEF_RESULT();
4489 				HANDLE_EXCEPTION();
4490 			}
4491 
4492 			iter->index = 0;
4493 			if (iter->funcs->rewind) {
4494 				iter->funcs->rewind(iter);
4495 				if (UNEXPECTED(EG(exception) != NULL)) {
4496 					OBJ_RELEASE(&iter->std);
4497 					UNDEF_RESULT();
4498 					HANDLE_EXCEPTION();
4499 				}
4500 			}
4501 
4502 			ZVAL_OBJ(&generator->values, &iter->std);
4503 		}
4504 	} else {
4505 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
4506 
4507 		UNDEF_RESULT();
4508 		HANDLE_EXCEPTION();
4509 	}
4510 
4511 	/* This is the default return value
4512 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
4513 	if (RETURN_VALUE_USED(opline)) {
4514 		ZVAL_NULL(EX_VAR(opline->result.var));
4515 	}
4516 
4517 	/* This generator has no send target (though the generator we delegate to might have one) */
4518 	generator->send_target = NULL;
4519 
4520 	/* We increment to the next op, so we are at the correct position when the
4521 	 * generator is resumed. */
4522 	ZEND_VM_INC_OPCODE();
4523 
4524 	/* The GOTO VM uses a local opline variable. We need to set the opline
4525 	 * variable in execute_data so we don't resume at an old position. */
4526 	SAVE_OPLINE();
4527 
4528 	ZEND_VM_RETURN();
4529 }
4530 
ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4531 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4532 {
4533 	USE_OPLINE
4534 	zval *value;
4535 
4536 
4537 	value = RT_CONSTANT(opline, opline->op1);
4538 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
4539 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
4540 
4541 		ZEND_VM_NEXT_OPCODE();
4542 	} else {
4543 		zend_bool strict;
4544 
4545 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
4546 			value = Z_REFVAL_P(value);
4547 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
4548 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
4549 
4550 				ZEND_VM_NEXT_OPCODE();
4551 			}
4552 		}
4553 
4554 		SAVE_OPLINE();
4555 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4556 			value = ZVAL_UNDEFINED_OP1();
4557 		}
4558 		strict = EX_USES_STRICT_TYPES();
4559 		do {
4560 			if (EXPECTED(!strict)) {
4561 				zend_string *str;
4562 				zval tmp;
4563 
4564 				ZVAL_COPY(&tmp, value);
4565 				if (zend_parse_arg_str_weak(&tmp, &str)) {
4566 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
4567 					zval_ptr_dtor(&tmp);
4568 					break;
4569 				}
4570 				zval_ptr_dtor(&tmp);
4571 			}
4572 			if (!EG(exception)) {
4573 				zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
4574 			}
4575 			ZVAL_NULL(EX_VAR(opline->result.var));
4576 		} while (0);
4577 	}
4578 
4579 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4580 }
4581 
ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4582 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4583 {
4584 	USE_OPLINE
4585 	zval *value;
4586 	int result = 0;
4587 
4588 
4589 	value = RT_CONSTANT(opline, opline->op1);
4590 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
4591 type_check_resource:
4592 		if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
4593 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
4594 			result = 1;
4595 		}
4596 	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
4597 		value = Z_REFVAL_P(value);
4598 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
4599 			goto type_check_resource;
4600 		}
4601 	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4602 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
4603 		SAVE_OPLINE();
4604 		ZVAL_UNDEFINED_OP1();
4605 		if (UNEXPECTED(EG(exception))) {
4606 			ZVAL_UNDEF(EX_VAR(opline->result.var));
4607 			HANDLE_EXCEPTION();
4608 		}
4609 	}
4610 	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
4611 		SAVE_OPLINE();
4612 
4613 		ZEND_VM_SMART_BRANCH(result, 1);
4614 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4615 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4616 	} else {
4617 		ZEND_VM_SMART_BRANCH(result, 0);
4618 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
4619 		ZEND_VM_NEXT_OPCODE();
4620 	}
4621 }
4622 
ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4623 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4624 {
4625 	USE_OPLINE
4626 	zend_constant *c;
4627 
4628 	c = CACHED_PTR(opline->extended_value);
4629 	if (EXPECTED(c != NULL)) {
4630 		if (!IS_SPECIAL_CACHE_VAL(c)) {
4631 defined_true:
4632 			ZEND_VM_SMART_BRANCH_TRUE();
4633 			ZVAL_TRUE(EX_VAR(opline->result.var));
4634 			ZEND_VM_NEXT_OPCODE();
4635 		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
4636 defined_false:
4637 			ZEND_VM_SMART_BRANCH_FALSE();
4638 			ZVAL_FALSE(EX_VAR(opline->result.var));
4639 			ZEND_VM_NEXT_OPCODE();
4640 		}
4641 	}
4642 	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
4643 		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
4644 		goto defined_false;
4645 	} else {
4646 		goto defined_true;
4647 	}
4648 }
4649 
ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4650 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4651 {
4652 	USE_OPLINE
4653 
4654 	zval *value;
4655 
4656 	value = RT_CONSTANT(opline, opline->op1);
4657 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
4658 	ZEND_VM_NEXT_OPCODE();
4659 }
4660 
ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4661 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4662 {
4663 	USE_OPLINE
4664 
4665 	zval *value;
4666 
4667 	value = RT_CONSTANT(opline, opline->op1);
4668 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
4669 	ZEND_VM_NEXT_OPCODE();
4670 }
4671 
ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4672 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4673 {
4674 	USE_OPLINE
4675 
4676 	zval *value;
4677 
4678 	value = RT_CONSTANT(opline, opline->op1);
4679 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
4680 	ZEND_VM_NEXT_OPCODE();
4681 }
4682 
ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4683 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4684 {
4685 	USE_OPLINE
4686 	zval *value, *arg;
4687 
4688 
4689 	value = RT_CONSTANT(opline, opline->op1);
4690 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
4691 	ZVAL_COPY_VALUE(arg, value);
4692 	ZEND_VM_NEXT_OPCODE();
4693 }
4694 
ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4695 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4696 {
4697 	USE_OPLINE
4698 	zval *value, *arg;
4699 
4700 	uint32_t arg_num = opline->op2.num;
4701 
4702 	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
4703 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4704 	}
4705 	value = RT_CONSTANT(opline, opline->op1);
4706 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
4707 	ZVAL_COPY_VALUE(arg, value);
4708 	ZEND_VM_NEXT_OPCODE();
4709 }
4710 
ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4711 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4712 {
4713 	USE_OPLINE
4714 
4715 	zval *op1, *op2, *result;
4716 	double d1, d2;
4717 
4718 	op1 = RT_CONSTANT(opline, opline->op1);
4719 	op2 = RT_CONSTANT(opline, opline->op2);
4720 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4721 		/* pass */
4722 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4723 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4724 			result = EX_VAR(opline->result.var);
4725 			fast_long_add_function(result, op1, op2);
4726 			ZEND_VM_NEXT_OPCODE();
4727 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4728 			d1 = (double)Z_LVAL_P(op1);
4729 			d2 = Z_DVAL_P(op2);
4730 			goto add_double;
4731 		}
4732 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4733 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4734 			d1 = Z_DVAL_P(op1);
4735 			d2 = Z_DVAL_P(op2);
4736 add_double:
4737 			result = EX_VAR(opline->result.var);
4738 			ZVAL_DOUBLE(result, d1 + d2);
4739 			ZEND_VM_NEXT_OPCODE();
4740 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4741 			d1 = Z_DVAL_P(op1);
4742 			d2 = (double)Z_LVAL_P(op2);
4743 			goto add_double;
4744 		}
4745 	}
4746 
4747 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4748 }
4749 
ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4750 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4751 {
4752 	USE_OPLINE
4753 
4754 	zval *op1, *op2, *result;
4755 	double d1, d2;
4756 
4757 	op1 = RT_CONSTANT(opline, opline->op1);
4758 	op2 = RT_CONSTANT(opline, opline->op2);
4759 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4760 		/* pass */
4761 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4762 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4763 			result = EX_VAR(opline->result.var);
4764 			fast_long_sub_function(result, op1, op2);
4765 			ZEND_VM_NEXT_OPCODE();
4766 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4767 			d1 = (double)Z_LVAL_P(op1);
4768 			d2 = Z_DVAL_P(op2);
4769 			goto sub_double;
4770 		}
4771 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4772 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4773 			d1 = Z_DVAL_P(op1);
4774 			d2 = Z_DVAL_P(op2);
4775 sub_double:
4776 			result = EX_VAR(opline->result.var);
4777 			ZVAL_DOUBLE(result, d1 - d2);
4778 			ZEND_VM_NEXT_OPCODE();
4779 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4780 			d1 = Z_DVAL_P(op1);
4781 			d2 = (double)Z_LVAL_P(op2);
4782 			goto sub_double;
4783 		}
4784 	}
4785 
4786 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4787 }
4788 
ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4789 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4790 {
4791 	USE_OPLINE
4792 
4793 	zval *op1, *op2, *result;
4794 	double d1, d2;
4795 
4796 	op1 = RT_CONSTANT(opline, opline->op1);
4797 	op2 = RT_CONSTANT(opline, opline->op2);
4798 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4799 		/* pass */
4800 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4801 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4802 			zend_long overflow;
4803 
4804 			result = EX_VAR(opline->result.var);
4805 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
4806 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
4807 			ZEND_VM_NEXT_OPCODE();
4808 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4809 			d1 = (double)Z_LVAL_P(op1);
4810 			d2 = Z_DVAL_P(op2);
4811 			goto mul_double;
4812 		}
4813 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
4814 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
4815 			d1 = Z_DVAL_P(op1);
4816 			d2 = Z_DVAL_P(op2);
4817 mul_double:
4818 			result = EX_VAR(opline->result.var);
4819 			ZVAL_DOUBLE(result, d1 * d2);
4820 			ZEND_VM_NEXT_OPCODE();
4821 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4822 			d1 = Z_DVAL_P(op1);
4823 			d2 = (double)Z_LVAL_P(op2);
4824 			goto mul_double;
4825 		}
4826 	}
4827 
4828 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4829 }
4830 
ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4831 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4832 {
4833 	USE_OPLINE
4834 
4835 	zval *op1, *op2;
4836 
4837 	SAVE_OPLINE();
4838 	op1 = RT_CONSTANT(opline, opline->op1);
4839 	op2 = RT_CONSTANT(opline, opline->op2);
4840 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
4841 
4842 
4843 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4844 }
4845 
ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4846 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4847 {
4848 	USE_OPLINE
4849 
4850 	zval *op1, *op2, *result;
4851 
4852 	op1 = RT_CONSTANT(opline, opline->op1);
4853 	op2 = RT_CONSTANT(opline, opline->op2);
4854 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4855 		/* pass */
4856 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4857 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
4858 			result = EX_VAR(opline->result.var);
4859 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
4860 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4861 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
4862 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
4863 				ZVAL_LONG(result, 0);
4864 			} else {
4865 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
4866 			}
4867 			ZEND_VM_NEXT_OPCODE();
4868 		}
4869 	}
4870 
4871 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4872 }
4873 
ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4874 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4875 {
4876 	USE_OPLINE
4877 
4878 	zval *op1, *op2;
4879 
4880 	op1 = RT_CONSTANT(opline, opline->op1);
4881 	op2 = RT_CONSTANT(opline, opline->op2);
4882 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4883 		/* pass */
4884 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4885 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
4886 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
4887 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
4888 		ZVAL_LONG(EX_VAR(opline->result.var),
4889 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
4890 		ZEND_VM_NEXT_OPCODE();
4891 	}
4892 
4893 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4894 }
4895 
ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4896 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4897 {
4898 	USE_OPLINE
4899 
4900 	zval *op1, *op2;
4901 
4902 	op1 = RT_CONSTANT(opline, opline->op1);
4903 	op2 = RT_CONSTANT(opline, opline->op2);
4904 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4905 		/* pass */
4906 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
4907 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
4908 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
4909 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
4910 		ZEND_VM_NEXT_OPCODE();
4911 	}
4912 
4913 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4914 }
4915 
ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4916 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4917 {
4918 	USE_OPLINE
4919 
4920 	zval *op1, *op2;
4921 
4922 	SAVE_OPLINE();
4923 	op1 = RT_CONSTANT(opline, opline->op1);
4924 	op2 = RT_CONSTANT(opline, opline->op2);
4925 	pow_function(EX_VAR(opline->result.var), op1, op2);
4926 
4927 
4928 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4929 }
4930 
ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4931 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4932 {
4933 	USE_OPLINE
4934 
4935 	zval *op1, *op2;
4936 	zend_bool result;
4937 
4938 	SAVE_OPLINE();
4939 	op1 = RT_CONSTANT(opline, opline->op1);
4940 	op2 = RT_CONSTANT(opline, opline->op2);
4941 	result = fast_is_identical_function(op1, op2);
4942 
4943 
4944 	ZEND_VM_SMART_BRANCH(result, 1);
4945 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4946 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4947 }
4948 
ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4949 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4950 {
4951 	USE_OPLINE
4952 
4953 	zval *op1, *op2;
4954 	zend_bool result;
4955 
4956 	SAVE_OPLINE();
4957 	op1 = RT_CONSTANT(opline, opline->op1);
4958 	op2 = RT_CONSTANT(opline, opline->op2);
4959 	result = fast_is_not_identical_function(op1, op2);
4960 
4961 
4962 	ZEND_VM_SMART_BRANCH(result, 1);
4963 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
4964 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4965 }
4966 
ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4967 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4968 {
4969 	USE_OPLINE
4970 
4971 	zval *op1, *op2;
4972 	double d1, d2;
4973 
4974 	op1 = RT_CONSTANT(opline, opline->op1);
4975 	op2 = RT_CONSTANT(opline, opline->op2);
4976 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
4977 		/* pass */
4978 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
4979 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
4980 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
4981 is_equal_true:
4982 				ZEND_VM_SMART_BRANCH_TRUE();
4983 				ZVAL_TRUE(EX_VAR(opline->result.var));
4984 				ZEND_VM_NEXT_OPCODE();
4985 			} else {
4986 is_equal_false:
4987 				ZEND_VM_SMART_BRANCH_FALSE();
4988 				ZVAL_FALSE(EX_VAR(opline->result.var));
4989 				ZEND_VM_NEXT_OPCODE();
4990 			}
4991 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4992 			d1 = (double)Z_LVAL_P(op1);
4993 			d2 = Z_DVAL_P(op2);
4994 			goto is_equal_double;
4995 		}
4996 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
4997 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
4998 			d1 = Z_DVAL_P(op1);
4999 			d2 = Z_DVAL_P(op2);
5000 is_equal_double:
5001 			if (d1 == d2) {
5002 				goto is_equal_true;
5003 			} else {
5004 				goto is_equal_false;
5005 			}
5006 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5007 			d1 = Z_DVAL_P(op1);
5008 			d2 = (double)Z_LVAL_P(op2);
5009 			goto is_equal_double;
5010 		}
5011 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5012 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5013 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5014 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5015 				zval_ptr_dtor_str(op1);
5016 			}
5017 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5018 				zval_ptr_dtor_str(op2);
5019 			}
5020 			if (result) {
5021 				goto is_equal_true;
5022 			} else {
5023 				goto is_equal_false;
5024 			}
5025 		}
5026 	}
5027 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5028 }
5029 
ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5030 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5031 {
5032 	USE_OPLINE
5033 
5034 	zval *op1, *op2;
5035 	double d1, d2;
5036 
5037 	op1 = RT_CONSTANT(opline, opline->op1);
5038 	op2 = RT_CONSTANT(opline, opline->op2);
5039 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5040 		/* pass */
5041 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
5042 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5043 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
5044 is_not_equal_true:
5045 				ZEND_VM_SMART_BRANCH_TRUE();
5046 				ZVAL_TRUE(EX_VAR(opline->result.var));
5047 				ZEND_VM_NEXT_OPCODE();
5048 			} else {
5049 is_not_equal_false:
5050 				ZEND_VM_SMART_BRANCH_FALSE();
5051 				ZVAL_FALSE(EX_VAR(opline->result.var));
5052 				ZEND_VM_NEXT_OPCODE();
5053 			}
5054 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5055 			d1 = (double)Z_LVAL_P(op1);
5056 			d2 = Z_DVAL_P(op2);
5057 			goto is_not_equal_double;
5058 		}
5059 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
5060 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
5061 			d1 = Z_DVAL_P(op1);
5062 			d2 = Z_DVAL_P(op2);
5063 is_not_equal_double:
5064 			if (d1 != d2) {
5065 				goto is_not_equal_true;
5066 			} else {
5067 				goto is_not_equal_false;
5068 			}
5069 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
5070 			d1 = Z_DVAL_P(op1);
5071 			d2 = (double)Z_LVAL_P(op2);
5072 			goto is_not_equal_double;
5073 		}
5074 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5075 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5076 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
5077 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5078 				zval_ptr_dtor_str(op1);
5079 			}
5080 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5081 				zval_ptr_dtor_str(op2);
5082 			}
5083 			if (!result) {
5084 				goto is_not_equal_true;
5085 			} else {
5086 				goto is_not_equal_false;
5087 			}
5088 		}
5089 	}
5090 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5091 }
5092 
ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5093 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5094 {
5095 	USE_OPLINE
5096 
5097 	zval *op1, *op2;
5098 	double d1, d2;
5099 
5100 	op1 = RT_CONSTANT(opline, opline->op1);
5101 	op2 = RT_CONSTANT(opline, opline->op2);
5102 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5103 		/* pass */
5104 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5105 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5106 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
5107 is_smaller_true:
5108 				ZEND_VM_SMART_BRANCH_TRUE();
5109 				ZVAL_TRUE(EX_VAR(opline->result.var));
5110 				ZEND_VM_NEXT_OPCODE();
5111 			} else {
5112 is_smaller_false:
5113 				ZEND_VM_SMART_BRANCH_FALSE();
5114 				ZVAL_FALSE(EX_VAR(opline->result.var));
5115 				ZEND_VM_NEXT_OPCODE();
5116 			}
5117 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5118 			d1 = (double)Z_LVAL_P(op1);
5119 			d2 = Z_DVAL_P(op2);
5120 			goto is_smaller_double;
5121 		}
5122 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5123 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5124 			d1 = Z_DVAL_P(op1);
5125 			d2 = Z_DVAL_P(op2);
5126 is_smaller_double:
5127 			if (d1 < d2) {
5128 				goto is_smaller_true;
5129 			} else {
5130 				goto is_smaller_false;
5131 			}
5132 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5133 			d1 = Z_DVAL_P(op1);
5134 			d2 = (double)Z_LVAL_P(op2);
5135 			goto is_smaller_double;
5136 		}
5137 	}
5138 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5139 }
5140 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5141 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5142 {
5143 	USE_OPLINE
5144 
5145 	zval *op1, *op2;
5146 	double d1, d2;
5147 
5148 	op1 = RT_CONSTANT(opline, opline->op1);
5149 	op2 = RT_CONSTANT(opline, opline->op2);
5150 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5151 		/* pass */
5152 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5153 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5154 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
5155 is_smaller_or_equal_true:
5156 				ZEND_VM_SMART_BRANCH_TRUE();
5157 				ZVAL_TRUE(EX_VAR(opline->result.var));
5158 				ZEND_VM_NEXT_OPCODE();
5159 			} else {
5160 is_smaller_or_equal_false:
5161 				ZEND_VM_SMART_BRANCH_FALSE();
5162 				ZVAL_FALSE(EX_VAR(opline->result.var));
5163 				ZEND_VM_NEXT_OPCODE();
5164 			}
5165 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5166 			d1 = (double)Z_LVAL_P(op1);
5167 			d2 = Z_DVAL_P(op2);
5168 			goto is_smaller_or_equal_double;
5169 		}
5170 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5171 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5172 			d1 = Z_DVAL_P(op1);
5173 			d2 = Z_DVAL_P(op2);
5174 is_smaller_or_equal_double:
5175 			if (d1 <= d2) {
5176 				goto is_smaller_or_equal_true;
5177 			} else {
5178 				goto is_smaller_or_equal_false;
5179 			}
5180 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5181 			d1 = Z_DVAL_P(op1);
5182 			d2 = (double)Z_LVAL_P(op2);
5183 			goto is_smaller_or_equal_double;
5184 		}
5185 	}
5186 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5187 }
5188 
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5189 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5190 {
5191 	USE_OPLINE
5192 
5193 	zval *op1, *op2;
5194 
5195 	SAVE_OPLINE();
5196 	op1 = RT_CONSTANT(opline, opline->op1);
5197 	op2 = RT_CONSTANT(opline, opline->op2);
5198 	compare_function(EX_VAR(opline->result.var), op1, op2);
5199 
5200 
5201 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5202 }
5203 
ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5204 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5205 {
5206 	USE_OPLINE
5207 
5208 	zval *op1, *op2;
5209 
5210 	op1 = RT_CONSTANT(opline, opline->op1);
5211 	op2 = RT_CONSTANT(opline, opline->op2);
5212 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5213 		/* pass */
5214 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5215 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5216 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
5217 		ZEND_VM_NEXT_OPCODE();
5218 	}
5219 
5220 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5221 }
5222 
ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5223 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5224 {
5225 	USE_OPLINE
5226 
5227 	zval *op1, *op2;
5228 
5229 	op1 = RT_CONSTANT(opline, opline->op1);
5230 	op2 = RT_CONSTANT(opline, opline->op2);
5231 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5232 		/* pass */
5233 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5234 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5235 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
5236 		ZEND_VM_NEXT_OPCODE();
5237 	}
5238 
5239 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5240 }
5241 
ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5242 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5243 {
5244 	USE_OPLINE
5245 
5246 	zval *op1, *op2;
5247 
5248 	op1 = RT_CONSTANT(opline, opline->op1);
5249 	op2 = RT_CONSTANT(opline, opline->op2);
5250 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5251 		/* pass */
5252 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5253 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5254 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
5255 		ZEND_VM_NEXT_OPCODE();
5256 	}
5257 
5258 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5259 }
5260 
ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5261 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5262 {
5263 	USE_OPLINE
5264 
5265 	zval *op1, *op2;
5266 
5267 	SAVE_OPLINE();
5268 	op1 = RT_CONSTANT(opline, opline->op1);
5269 	op2 = RT_CONSTANT(opline, opline->op2);
5270 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
5271 
5272 
5273 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5274 }
5275 
ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5276 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5277 {
5278 	USE_OPLINE
5279 
5280 	zval *container, *dim, *value;
5281 
5282 	SAVE_OPLINE();
5283 	container = RT_CONSTANT(opline, opline->op1);
5284 	dim = RT_CONSTANT(opline, opline->op2);
5285 	if (IS_CONST != IS_CONST) {
5286 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
5287 fetch_dim_r_array:
5288 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
5289 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
5290 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
5291 			container = Z_REFVAL_P(container);
5292 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
5293 				goto fetch_dim_r_array;
5294 			} else {
5295 				goto fetch_dim_r_slow;
5296 			}
5297 		} else {
5298 fetch_dim_r_slow:
5299 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
5300 				dim++;
5301 			}
5302 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
5303 		}
5304 	} else {
5305 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
5306 	}
5307 
5308 
5309 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5310 }
5311 
ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5312 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5313 {
5314 	USE_OPLINE
5315 
5316 	zval *container;
5317 
5318 	SAVE_OPLINE();
5319 	container = RT_CONSTANT(opline, opline->op1);
5320 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
5321 
5322 
5323 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5324 }
5325 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5326 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5327 {
5328 #if 0
5329 	USE_OPLINE
5330 #endif
5331 
5332 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
5333         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
5334 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5335         }
5336 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5337 	} else {
5338 		if (IS_CONST == IS_UNUSED) {
5339 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5340 		}
5341 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5342 	}
5343 }
5344 
ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5345 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5346 {
5347 	USE_OPLINE
5348 
5349 	zval *container;
5350 
5351 	zval *offset;
5352 	void **cache_slot = NULL;
5353 
5354 	SAVE_OPLINE();
5355 	container = RT_CONSTANT(opline, opline->op1);
5356 
5357 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5358 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5359 	}
5360 
5361 	offset = RT_CONSTANT(opline, opline->op2);
5362 
5363 	if (IS_CONST == IS_CONST ||
5364 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5365 	    do {
5366 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5367 				container = Z_REFVAL_P(container);
5368 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
5369 					break;
5370 				}
5371 			}
5372 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5373 				ZVAL_UNDEFINED_OP1();
5374 			}
5375 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
5376 				ZVAL_UNDEFINED_OP2();
5377 			}
5378 			zend_wrong_property_read(offset);
5379 			ZVAL_NULL(EX_VAR(opline->result.var));
5380 			goto fetch_obj_r_finish;
5381 		} while (0);
5382 	}
5383 
5384 	/* here we are sure we are dealing with an object */
5385 	do {
5386 		zend_object *zobj = Z_OBJ_P(container);
5387 		zval *retval;
5388 
5389 		if (IS_CONST == IS_CONST) {
5390 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
5391 
5392 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
5393 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
5394 
5395 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
5396 					retval = OBJ_PROP(zobj, prop_offset);
5397 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
5398 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5399 							goto fetch_obj_r_copy;
5400 						} else {
5401 fetch_obj_r_fast_copy:
5402 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
5403 							ZEND_VM_NEXT_OPCODE();
5404 						}
5405 					}
5406 				} else if (EXPECTED(zobj->properties != NULL)) {
5407 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
5408 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
5409 
5410 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
5411 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
5412 
5413 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
5414 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
5415 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
5416 						          EXPECTED(p->key != NULL) &&
5417 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
5418 								retval = &p->val;
5419 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5420 									goto fetch_obj_r_copy;
5421 								} else {
5422 									goto fetch_obj_r_fast_copy;
5423 								}
5424 							}
5425 						}
5426 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
5427 					}
5428 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
5429 					if (EXPECTED(retval)) {
5430 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
5431 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
5432 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5433 							goto fetch_obj_r_copy;
5434 						} else {
5435 							goto fetch_obj_r_fast_copy;
5436 						}
5437 					}
5438 				}
5439 			}
5440 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
5441 			ZVAL_UNDEFINED_OP2();
5442 		}
5443 
5444 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
5445 
5446 		if (retval != EX_VAR(opline->result.var)) {
5447 fetch_obj_r_copy:
5448 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
5449 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
5450 			zend_unwrap_reference(retval);
5451 		}
5452 	} while (0);
5453 
5454 fetch_obj_r_finish:
5455 
5456 
5457 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5458 }
5459 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5460 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5461 {
5462 	USE_OPLINE
5463 
5464 	zval *container;
5465 
5466 	zval *offset;
5467 	void **cache_slot = NULL;
5468 
5469 	SAVE_OPLINE();
5470 	container = RT_CONSTANT(opline, opline->op1);
5471 
5472 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
5473 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5474 	}
5475 
5476 	offset = RT_CONSTANT(opline, opline->op2);
5477 
5478 	if (IS_CONST == IS_CONST ||
5479 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
5480 		do {
5481 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
5482 				container = Z_REFVAL_P(container);
5483 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
5484 					break;
5485 				}
5486 			}
5487 			ZVAL_NULL(EX_VAR(opline->result.var));
5488 			goto fetch_obj_is_finish;
5489 		} while (0);
5490 	}
5491 
5492 	/* here we are sure we are dealing with an object */
5493 	do {
5494 		zend_object *zobj = Z_OBJ_P(container);
5495 		zval *retval;
5496 
5497 		if (IS_CONST == IS_CONST) {
5498 			cache_slot = CACHE_ADDR(opline->extended_value);
5499 
5500 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
5501 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
5502 
5503 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
5504 					retval = OBJ_PROP(zobj, prop_offset);
5505 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
5506 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5507 							goto fetch_obj_is_copy;
5508 						} else {
5509 fetch_obj_is_fast_copy:
5510 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
5511 							ZEND_VM_NEXT_OPCODE();
5512 						}
5513 					}
5514 				} else if (EXPECTED(zobj->properties != NULL)) {
5515 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
5516 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
5517 
5518 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
5519 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
5520 
5521 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
5522 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
5523 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
5524 						          EXPECTED(p->key != NULL) &&
5525 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
5526 								retval = &p->val;
5527 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5528 									goto fetch_obj_is_copy;
5529 								} else {
5530 									goto fetch_obj_is_fast_copy;
5531 								}
5532 							}
5533 						}
5534 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
5535 					}
5536 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
5537 					if (EXPECTED(retval)) {
5538 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
5539 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
5540 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
5541 							goto fetch_obj_is_copy;
5542 						} else {
5543 							goto fetch_obj_is_fast_copy;
5544 						}
5545 					}
5546 				}
5547 			}
5548 		}
5549 
5550 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
5551 
5552 		if (retval != EX_VAR(opline->result.var)) {
5553 fetch_obj_is_copy:
5554 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
5555 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
5556 			zend_unwrap_reference(retval);
5557 		}
5558 	} while (0);
5559 
5560 fetch_obj_is_finish:
5561 
5562 
5563 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5564 }
5565 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5566 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5567 {
5568 #if 0
5569 	USE_OPLINE
5570 #endif
5571 
5572 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
5573 		/* Behave like FETCH_OBJ_W */
5574 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
5575 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5576 		}
5577 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5578 	} else {
5579 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5580 	}
5581 }
5582 
ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5584 {
5585 	USE_OPLINE
5586 
5587 	zval *container;
5588 
5589 	SAVE_OPLINE();
5590 	container = RT_CONSTANT(opline, opline->op1);
5591 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
5592 
5593 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5594 }
5595 
ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5596 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5597 {
5598 	USE_OPLINE
5599 
5600 	zval *op1, *op2;
5601 	zend_string *op1_str, *op2_str, *str;
5602 
5603 
5604 	op1 = RT_CONSTANT(opline, opline->op1);
5605 	op2 = RT_CONSTANT(opline, opline->op2);
5606 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
5607 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
5608 		zend_string *op1_str = Z_STR_P(op1);
5609 		zend_string *op2_str = Z_STR_P(op2);
5610 		zend_string *str;
5611 
5612 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
5613 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
5614 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
5615 			} else {
5616 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
5617 			}
5618 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5619 				zend_string_release_ex(op1_str, 0);
5620 			}
5621 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
5622 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
5623 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
5624 			} else {
5625 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
5626 			}
5627 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5628 				zend_string_release_ex(op2_str, 0);
5629 			}
5630 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
5631 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
5632 		    size_t len = ZSTR_LEN(op1_str);
5633 
5634 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
5635 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
5636 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
5637 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5638 				zend_string_release_ex(op2_str, 0);
5639 			}
5640 		} else {
5641 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
5642 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
5643 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
5644 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
5645 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5646 				zend_string_release_ex(op1_str, 0);
5647 			}
5648 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5649 				zend_string_release_ex(op2_str, 0);
5650 			}
5651 		}
5652 		ZEND_VM_NEXT_OPCODE();
5653 	}
5654 
5655 	SAVE_OPLINE();
5656 	if (IS_CONST == IS_CONST) {
5657 		op1_str = Z_STR_P(op1);
5658 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
5659 		op1_str = zend_string_copy(Z_STR_P(op1));
5660 	} else {
5661 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
5662 			ZVAL_UNDEFINED_OP1();
5663 		}
5664 		op1_str = zval_get_string_func(op1);
5665 	}
5666 	if (IS_CONST == IS_CONST) {
5667 		op2_str = Z_STR_P(op2);
5668 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
5669 		op2_str = zend_string_copy(Z_STR_P(op2));
5670 	} else {
5671 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
5672 			ZVAL_UNDEFINED_OP2();
5673 		}
5674 		op2_str = zval_get_string_func(op2);
5675 	}
5676 	do {
5677 		if (IS_CONST != IS_CONST) {
5678 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
5679 				if (IS_CONST == IS_CONST) {
5680 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
5681 						GC_ADDREF(op2_str);
5682 					}
5683 				}
5684 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
5685 				zend_string_release_ex(op1_str, 0);
5686 				break;
5687 			}
5688 		}
5689 		if (IS_CONST != IS_CONST) {
5690 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
5691 				if (IS_CONST == IS_CONST) {
5692 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
5693 						GC_ADDREF(op1_str);
5694 					}
5695 				}
5696 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
5697 				zend_string_release_ex(op2_str, 0);
5698 				break;
5699 			}
5700 		}
5701 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
5702 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
5703 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
5704 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
5705 		if (IS_CONST != IS_CONST) {
5706 			zend_string_release_ex(op1_str, 0);
5707 		}
5708 		if (IS_CONST != IS_CONST) {
5709 			zend_string_release_ex(op2_str, 0);
5710 		}
5711 	} while (0);
5712 
5713 
5714 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5715 }
5716 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5717 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5718 {
5719 	USE_OPLINE
5720 	zval *function_name;
5721 	zend_free_op free_op1;
5722 	zval *object;
5723 	zend_function *fbc;
5724 	zend_class_entry *called_scope;
5725 	zend_object *obj;
5726 	zend_execute_data *call;
5727 	uint32_t call_info;
5728 
5729 	SAVE_OPLINE();
5730 
5731 	object = RT_CONSTANT(opline, opline->op1);
5732 
5733 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
5734 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5735 	}
5736 
5737 	if (IS_CONST != IS_CONST) {
5738 		function_name = RT_CONSTANT(opline, opline->op2);
5739 	}
5740 
5741 	if (IS_CONST != IS_CONST &&
5742 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5743 		do {
5744 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
5745 				function_name = Z_REFVAL_P(function_name);
5746 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5747 					break;
5748 				}
5749 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5750 				ZVAL_UNDEFINED_OP2();
5751 				if (UNEXPECTED(EG(exception) != NULL)) {
5752 
5753 					HANDLE_EXCEPTION();
5754 				}
5755 			}
5756 			zend_throw_error(NULL, "Method name must be a string");
5757 
5758 
5759 			HANDLE_EXCEPTION();
5760 		} while (0);
5761 	}
5762 
5763 	if (IS_CONST != IS_UNUSED) {
5764 		do {
5765 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
5766 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
5767 					object = Z_REFVAL_P(object);
5768 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
5769 						break;
5770 					}
5771 				}
5772 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
5773 					object = ZVAL_UNDEFINED_OP1();
5774 					if (UNEXPECTED(EG(exception) != NULL)) {
5775 						if (IS_CONST != IS_CONST) {
5776 
5777 						}
5778 						HANDLE_EXCEPTION();
5779 					}
5780 				}
5781 				if (IS_CONST == IS_CONST) {
5782 					function_name = RT_CONSTANT(opline, opline->op2);
5783 				}
5784 				zend_invalid_method_call(object, function_name);
5785 
5786 
5787 				HANDLE_EXCEPTION();
5788 			}
5789 		} while (0);
5790 	}
5791 
5792 	obj = Z_OBJ_P(object);
5793 	called_scope = obj->ce;
5794 
5795 	if (IS_CONST == IS_CONST &&
5796 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
5797 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
5798 	} else {
5799 	    zend_object *orig_obj = obj;
5800 
5801 		if (IS_CONST == IS_CONST) {
5802 			function_name = RT_CONSTANT(opline, opline->op2);
5803 		}
5804 
5805 		/* First, locate the function. */
5806 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
5807 		if (UNEXPECTED(fbc == NULL)) {
5808 			if (EXPECTED(!EG(exception))) {
5809 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
5810 			}
5811 
5812 
5813 			HANDLE_EXCEPTION();
5814 		}
5815 		if (IS_CONST == IS_CONST &&
5816 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5817 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
5818 		    EXPECTED(obj == orig_obj)) {
5819 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
5820 		}
5821 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
5822 			/* Reset "object" to trigger reference counting */
5823 			object = NULL;
5824 		}
5825 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
5826 			init_func_run_time_cache(&fbc->op_array);
5827 		}
5828 	}
5829 
5830 	if (IS_CONST != IS_CONST) {
5831 
5832 	}
5833 
5834 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
5835 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
5836 
5837 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
5838 			HANDLE_EXCEPTION();
5839 		}
5840 		/* call static method */
5841 		obj = (zend_object*)called_scope;
5842 		call_info = ZEND_CALL_NESTED_FUNCTION;
5843 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
5844 		if (IS_CONST == IS_CV) {
5845 			GC_ADDREF(obj); /* For $this pointer */
5846 		} else if (free_op1 != object) {
5847 			GC_ADDREF(obj); /* For $this pointer */
5848 
5849 		}
5850 		/* CV may be changed indirectly (e.g. when it's a reference) */
5851 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
5852 	}
5853 
5854 	call = zend_vm_stack_push_call_frame(call_info,
5855 		fbc, opline->extended_value, obj);
5856 	call->prev_execute_data = EX(call);
5857 	EX(call) = call;
5858 
5859 	ZEND_VM_NEXT_OPCODE();
5860 }
5861 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5863 {
5864 	USE_OPLINE
5865 	zval *function_name;
5866 	zend_class_entry *ce;
5867 	uint32_t call_info;
5868 	zend_function *fbc;
5869 	zend_execute_data *call;
5870 
5871 	SAVE_OPLINE();
5872 
5873 	if (IS_CONST == IS_CONST) {
5874 		/* no function found. try a static method in class */
5875 		ce = CACHED_PTR(opline->result.num);
5876 		if (UNEXPECTED(ce == NULL)) {
5877 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
5878 			if (UNEXPECTED(ce == NULL)) {
5879 				ZEND_ASSERT(EG(exception));
5880 
5881 				HANDLE_EXCEPTION();
5882 			}
5883 			if (IS_CONST != IS_CONST) {
5884 				CACHE_PTR(opline->result.num, ce);
5885 			}
5886 		}
5887 	} else if (IS_CONST == IS_UNUSED) {
5888 		ce = zend_fetch_class(NULL, opline->op1.num);
5889 		if (UNEXPECTED(ce == NULL)) {
5890 			ZEND_ASSERT(EG(exception));
5891 
5892 			HANDLE_EXCEPTION();
5893 		}
5894 	} else {
5895 		ce = Z_CE_P(EX_VAR(opline->op1.var));
5896 	}
5897 
5898 	if (IS_CONST == IS_CONST &&
5899 	    IS_CONST == IS_CONST &&
5900 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
5901 		/* nothing to do */
5902 	} else if (IS_CONST != IS_CONST &&
5903 	           IS_CONST == IS_CONST &&
5904 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
5905 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
5906 	} else if (IS_CONST != IS_UNUSED) {
5907 
5908 
5909 		function_name = RT_CONSTANT(opline, opline->op2);
5910 		if (IS_CONST != IS_CONST) {
5911 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
5912 				do {
5913 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
5914 						function_name = Z_REFVAL_P(function_name);
5915 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
5916 							break;
5917 						}
5918 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
5919 						ZVAL_UNDEFINED_OP2();
5920 						if (UNEXPECTED(EG(exception) != NULL)) {
5921 							HANDLE_EXCEPTION();
5922 						}
5923 					}
5924 					zend_throw_error(NULL, "Function name must be a string");
5925 
5926 					HANDLE_EXCEPTION();
5927 				} while (0);
5928 			}
5929 		}
5930 
5931 		if (ce->get_static_method) {
5932 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
5933 		} else {
5934 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
5935 		}
5936 		if (UNEXPECTED(fbc == NULL)) {
5937 			if (EXPECTED(!EG(exception))) {
5938 				zend_undefined_method(ce, Z_STR_P(function_name));
5939 			}
5940 
5941 			HANDLE_EXCEPTION();
5942 		}
5943 		if (IS_CONST == IS_CONST &&
5944 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
5945 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
5946 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
5947 		}
5948 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
5949 			init_func_run_time_cache(&fbc->op_array);
5950 		}
5951 		if (IS_CONST != IS_CONST) {
5952 
5953 		}
5954 	} else {
5955 		if (UNEXPECTED(ce->constructor == NULL)) {
5956 			zend_throw_error(NULL, "Cannot call constructor");
5957 			HANDLE_EXCEPTION();
5958 		}
5959 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
5960 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
5961 			HANDLE_EXCEPTION();
5962 		}
5963 		fbc = ce->constructor;
5964 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
5965 			init_func_run_time_cache(&fbc->op_array);
5966 		}
5967 	}
5968 
5969 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
5970 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
5971 			ce = (zend_class_entry*)Z_OBJ(EX(This));
5972 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
5973 		} else {
5974 			zend_non_static_method_call(fbc);
5975 			if (UNEXPECTED(EG(exception) != NULL)) {
5976 				HANDLE_EXCEPTION();
5977 			}
5978 			goto check_parent_and_self;
5979 		}
5980 	} else {
5981 check_parent_and_self:
5982 		/* previous opcode is ZEND_FETCH_CLASS */
5983 		if (IS_CONST == IS_UNUSED
5984 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
5985 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
5986 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
5987 				ce = Z_OBJCE(EX(This));
5988 			} else {
5989 				ce = Z_CE(EX(This));
5990 			}
5991 		}
5992 		call_info = ZEND_CALL_NESTED_FUNCTION;
5993 	}
5994 
5995 	call = zend_vm_stack_push_call_frame(call_info,
5996 		fbc, opline->extended_value, ce);
5997 	call->prev_execute_data = EX(call);
5998 	EX(call) = call;
5999 
6000 	ZEND_VM_NEXT_OPCODE();
6001 }
6002 
ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6003 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6004 {
6005 	USE_OPLINE
6006 
6007 	zval *function_name;
6008 	zend_fcall_info_cache fcc;
6009 	char *error = NULL;
6010 	zend_function *func;
6011 	void *object_or_called_scope;
6012 	zend_execute_data *call;
6013 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
6014 
6015 	SAVE_OPLINE();
6016 	function_name = RT_CONSTANT(opline, opline->op2);
6017 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
6018 		func = fcc.function_handler;
6019 		if (error) {
6020 			efree(error);
6021 			/* This is the only soft error is_callable() can generate */
6022 			zend_non_static_method_call(func);
6023 			if (UNEXPECTED(EG(exception) != NULL)) {
6024 
6025 				HANDLE_EXCEPTION();
6026 			}
6027 		}
6028 		object_or_called_scope = fcc.called_scope;
6029 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
6030 			/* Delay closure destruction until its invocation */
6031 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
6032 			call_info |= ZEND_CALL_CLOSURE;
6033 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
6034 				call_info |= ZEND_CALL_FAKE_CLOSURE;
6035 			}
6036 			if (fcc.object) {
6037 				object_or_called_scope = fcc.object;
6038 				call_info |= ZEND_CALL_HAS_THIS;
6039 			}
6040 		} else if (fcc.object) {
6041 			GC_ADDREF(fcc.object); /* For $this pointer */
6042 			object_or_called_scope = fcc.object;
6043 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
6044 		}
6045 
6046 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
6047 			if (call_info & ZEND_CALL_CLOSURE) {
6048 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
6049 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
6050 				zend_object_release(fcc.object);
6051 			}
6052 			HANDLE_EXCEPTION();
6053 		}
6054 
6055 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
6056 			init_func_run_time_cache(&func->op_array);
6057 		}
6058 	} else {
6059 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
6060 		efree(error);
6061 
6062 		if (UNEXPECTED(EG(exception))) {
6063 			HANDLE_EXCEPTION();
6064 		}
6065 		func = (zend_function*)&zend_pass_function;
6066 		object_or_called_scope = NULL;
6067 	}
6068 
6069 	call = zend_vm_stack_push_call_frame(call_info,
6070 		func, opline->extended_value, object_or_called_scope);
6071 	call->prev_execute_data = EX(call);
6072 	EX(call) = call;
6073 
6074 	ZEND_VM_NEXT_OPCODE();
6075 }
6076 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6078 {
6079 	zend_class_entry *ce, *scope;
6080 	zend_class_constant *c;
6081 	zval *value, *zv;
6082 	USE_OPLINE
6083 
6084 	SAVE_OPLINE();
6085 
6086 	do {
6087 		if (IS_CONST == IS_CONST) {
6088 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
6089 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
6090 				break;
6091 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
6092 				ce = CACHED_PTR(opline->extended_value);
6093 			} else {
6094 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
6095 				if (UNEXPECTED(ce == NULL)) {
6096 					ZEND_ASSERT(EG(exception));
6097 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6098 					HANDLE_EXCEPTION();
6099 				}
6100 			}
6101 		} else {
6102 			if (IS_CONST == IS_UNUSED) {
6103 				ce = zend_fetch_class(NULL, opline->op1.num);
6104 				if (UNEXPECTED(ce == NULL)) {
6105 					ZEND_ASSERT(EG(exception));
6106 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6107 					HANDLE_EXCEPTION();
6108 				}
6109 			} else {
6110 				ce = Z_CE_P(EX_VAR(opline->op1.var));
6111 			}
6112 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
6113 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
6114 				break;
6115 			}
6116 		}
6117 
6118 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
6119 		if (EXPECTED(zv != NULL)) {
6120 			c = Z_PTR_P(zv);
6121 			scope = EX(func)->op_array.scope;
6122 			if (!zend_verify_const_access(c, scope)) {
6123 				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(RT_CONSTANT(opline, opline->op2)));
6124 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6125 				HANDLE_EXCEPTION();
6126 			}
6127 			value = &c->value;
6128 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
6129 				zval_update_constant_ex(value, c->ce);
6130 				if (UNEXPECTED(EG(exception) != NULL)) {
6131 					ZVAL_UNDEF(EX_VAR(opline->result.var));
6132 					HANDLE_EXCEPTION();
6133 				}
6134 			}
6135 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
6136 		} else {
6137 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
6138 			ZVAL_UNDEF(EX_VAR(opline->result.var));
6139 			HANDLE_EXCEPTION();
6140 		}
6141 	} while (0);
6142 
6143 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
6144 
6145 	ZEND_VM_NEXT_OPCODE();
6146 }
6147 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6149 {
6150 	USE_OPLINE
6151 
6152 	zval *expr_ptr, new_expr;
6153 
6154 	SAVE_OPLINE();
6155 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
6156 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
6157 		expr_ptr = NULL;
6158 		if (Z_ISREF_P(expr_ptr)) {
6159 			Z_ADDREF_P(expr_ptr);
6160 		} else {
6161 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
6162 		}
6163 
6164 	} else {
6165 		expr_ptr = RT_CONSTANT(opline, opline->op1);
6166 		if (IS_CONST == IS_TMP_VAR) {
6167 			/* pass */
6168 		} else if (IS_CONST == IS_CONST) {
6169 			Z_TRY_ADDREF_P(expr_ptr);
6170 		} else if (IS_CONST == IS_CV) {
6171 			ZVAL_DEREF(expr_ptr);
6172 			Z_TRY_ADDREF_P(expr_ptr);
6173 		} else /* if (IS_CONST == IS_VAR) */ {
6174 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
6175 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
6176 
6177 				expr_ptr = Z_REFVAL_P(expr_ptr);
6178 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
6179 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
6180 					expr_ptr = &new_expr;
6181 					efree_size(ref, sizeof(zend_reference));
6182 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
6183 					Z_ADDREF_P(expr_ptr);
6184 				}
6185 			}
6186 		}
6187 	}
6188 
6189 	if (IS_CONST != IS_UNUSED) {
6190 
6191 		zval *offset = RT_CONSTANT(opline, opline->op2);
6192 		zend_string *str;
6193 		zend_ulong hval;
6194 
6195 add_again:
6196 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6197 			str = Z_STR_P(offset);
6198 			if (IS_CONST != IS_CONST) {
6199 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6200 					goto num_index;
6201 				}
6202 			}
6203 str_index:
6204 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
6205 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6206 			hval = Z_LVAL_P(offset);
6207 num_index:
6208 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
6209 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
6210 			offset = Z_REFVAL_P(offset);
6211 			goto add_again;
6212 		} else if (Z_TYPE_P(offset) == IS_NULL) {
6213 			str = ZSTR_EMPTY_ALLOC();
6214 			goto str_index;
6215 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
6216 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
6217 			goto num_index;
6218 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
6219 			hval = 0;
6220 			goto num_index;
6221 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
6222 			hval = 1;
6223 			goto num_index;
6224 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
6225 			zend_use_resource_as_offset(offset);
6226 			hval = Z_RES_HANDLE_P(offset);
6227 			goto num_index;
6228 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
6229 			ZVAL_UNDEFINED_OP2();
6230 			str = ZSTR_EMPTY_ALLOC();
6231 			goto str_index;
6232 		} else {
6233 			zend_illegal_offset();
6234 			zval_ptr_dtor_nogc(expr_ptr);
6235 		}
6236 
6237 	} else {
6238 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
6239 			zend_cannot_add_element();
6240 			zval_ptr_dtor_nogc(expr_ptr);
6241 		}
6242 	}
6243 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6244 }
6245 
ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6247 {
6248 	zval *array;
6249 	uint32_t size;
6250 	USE_OPLINE
6251 
6252 	array = EX_VAR(opline->result.var);
6253 	if (IS_CONST != IS_UNUSED) {
6254 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
6255 		ZVAL_ARR(array, zend_new_array(size));
6256 		/* Explicitly initialize array as not-packed if flag is set */
6257 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
6258 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
6259 		}
6260 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6261 	} else {
6262 		ZVAL_ARR(array, zend_new_array(0));
6263 		ZEND_VM_NEXT_OPCODE();
6264 	}
6265 }
6266 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6267 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6268 {
6269 	USE_OPLINE
6270 
6271 	zval *container;
6272 	int result;
6273 	zend_ulong hval;
6274 	zval *offset;
6275 
6276 	SAVE_OPLINE();
6277 	container = RT_CONSTANT(opline, opline->op1);
6278 	offset = RT_CONSTANT(opline, opline->op2);
6279 
6280 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6281 		HashTable *ht;
6282 		zval *value;
6283 		zend_string *str;
6284 
6285 isset_dim_obj_array:
6286 		ht = Z_ARRVAL_P(container);
6287 isset_again:
6288 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
6289 			str = Z_STR_P(offset);
6290 			if (IS_CONST != IS_CONST) {
6291 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
6292 					goto num_index_prop;
6293 				}
6294 			}
6295 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
6296 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
6297 			hval = Z_LVAL_P(offset);
6298 num_index_prop:
6299 			value = zend_hash_index_find(ht, hval);
6300 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
6301 			offset = Z_REFVAL_P(offset);
6302 			goto isset_again;
6303 		} else {
6304 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
6305 			if (UNEXPECTED(EG(exception))) {
6306 				result = 0;
6307 				goto isset_dim_obj_exit;
6308 			}
6309 		}
6310 
6311 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
6312 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
6313 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
6314 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
6315 
6316 			if (IS_CONST & (IS_CONST|IS_CV)) {
6317 				/* avoid exception check */
6318 
6319 				ZEND_VM_SMART_BRANCH(result, 0);
6320 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
6321 				ZEND_VM_NEXT_OPCODE();
6322 			}
6323 		} else {
6324 			result = (value == NULL || !i_zend_is_true(value));
6325 		}
6326 		goto isset_dim_obj_exit;
6327 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
6328 		container = Z_REFVAL_P(container);
6329 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6330 			goto isset_dim_obj_array;
6331 		}
6332 	}
6333 
6334 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
6335 		offset++;
6336 	}
6337 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
6338 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
6339 	} else {
6340 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
6341 	}
6342 
6343 isset_dim_obj_exit:
6344 
6345 
6346 	ZEND_VM_SMART_BRANCH(result, 1);
6347 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6349 }
6350 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6351 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6352 {
6353 	USE_OPLINE
6354 
6355 	zval *container;
6356 	int result;
6357 	zval *offset;
6358 
6359 	SAVE_OPLINE();
6360 	container = RT_CONSTANT(opline, opline->op1);
6361 
6362 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6363 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6364 	}
6365 
6366 	offset = RT_CONSTANT(opline, opline->op2);
6367 
6368 	if (IS_CONST == IS_CONST ||
6369 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6370 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6371 			container = Z_REFVAL_P(container);
6372 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
6373 				result = (opline->extended_value & ZEND_ISEMPTY);
6374 				goto isset_object_finish;
6375 			}
6376 		} else {
6377 			result = (opline->extended_value & ZEND_ISEMPTY);
6378 			goto isset_object_finish;
6379 		}
6380 	}
6381 
6382 	result =
6383 		(opline->extended_value & ZEND_ISEMPTY) ^
6384 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
6385 
6386 isset_object_finish:
6387 
6388 
6389 	ZEND_VM_SMART_BRANCH(result, 1);
6390 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
6391 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6392 }
6393 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6395 {
6396 	USE_OPLINE
6397 
6398 
6399 	zval *key, *subject;
6400 	HashTable *ht;
6401 	uint32_t result;
6402 
6403 	SAVE_OPLINE();
6404 
6405 	key = RT_CONSTANT(opline, opline->op1);
6406 	subject = RT_CONSTANT(opline, opline->op2);
6407 
6408 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
6409 array_key_exists_array:
6410 		ht = Z_ARRVAL_P(subject);
6411 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
6412 	} else {
6413 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
6414 			subject = Z_REFVAL_P(subject);
6415 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
6416 				goto array_key_exists_array;
6417 			}
6418 		}
6419 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
6420 	}
6421 
6422 
6423 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
6424 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
6425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6426 }
6427 
6428 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6430 {
6431 	USE_OPLINE
6432 	zval *lcname, *zv;
6433 	zend_class_entry *ce;
6434 
6435 	ce = CACHED_PTR(opline->extended_value);
6436 	if (ce == NULL) {
6437 		lcname = RT_CONSTANT(opline, opline->op1);
6438 		zv = zend_hash_find_ex(EG(class_table), Z_STR_P(lcname + 1), 1);
6439 		if (zv) {
6440 			SAVE_OPLINE();
6441 			ce = Z_CE_P(zv);
6442 			zv = zend_hash_set_bucket_key(EG(class_table), (Bucket*)zv, Z_STR_P(lcname));
6443 			if (UNEXPECTED(!zv)) {
6444 				zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name));
6445 			} else {
6446 				if (zend_do_link_class(ce, Z_STR_P(RT_CONSTANT(opline, opline->op2))) == FAILURE) {
6447 					/* Reload bucket pointer, the hash table may have been reallocated */
6448 					zv = zend_hash_find(EG(class_table), Z_STR_P(lcname));
6449 					zend_hash_set_bucket_key(EG(class_table), (Bucket *) zv, Z_STR_P(lcname + 1));
6450 					HANDLE_EXCEPTION();
6451 				}
6452 			}
6453 		}
6454 		CACHE_PTR(opline->extended_value, ce);
6455 	}
6456 	ZEND_VM_NEXT_OPCODE();
6457 }
6458 
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6460 {
6461 	USE_OPLINE
6462 
6463 	zval *name;
6464 	zval *val;
6465 	zend_constant c;
6466 
6467 	SAVE_OPLINE();
6468 	name  = RT_CONSTANT(opline, opline->op1);
6469 	val   = RT_CONSTANT(opline, opline->op2);
6470 
6471 	ZVAL_COPY(&c.value, val);
6472 	if (Z_OPT_CONSTANT(c.value)) {
6473 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
6474 			zval_ptr_dtor_nogc(&c.value);
6475 
6476 
6477 			HANDLE_EXCEPTION();
6478 		}
6479 	}
6480 	/* non persistent, case sensitive */
6481 	ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT);
6482 	c.name = zend_string_copy(Z_STR_P(name));
6483 
6484 	if (zend_register_constant(&c) == FAILURE) {
6485 	}
6486 
6487 
6488 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6489 }
6490 
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6491 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6492 {
6493 	USE_OPLINE
6494 
6495 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
6496 
6497 	SAVE_OPLINE();
6498 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
6499 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6500 	}
6501 
6502 	/* Destroy the previously yielded value */
6503 	zval_ptr_dtor(&generator->value);
6504 
6505 	/* Destroy the previously yielded key */
6506 	zval_ptr_dtor(&generator->key);
6507 
6508 	/* Set the new yielded value */
6509 	if (IS_CONST != IS_UNUSED) {
6510 
6511 
6512 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
6513 			/* Constants and temporary variables aren't yieldable by reference,
6514 			 * but we still allow them with a notice. */
6515 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
6516 				zval *value;
6517 
6518 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6519 
6520 				value = RT_CONSTANT(opline, opline->op1);
6521 				ZVAL_COPY_VALUE(&generator->value, value);
6522 				if (IS_CONST == IS_CONST) {
6523 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6524 						Z_ADDREF(generator->value);
6525 					}
6526 				}
6527 			} else {
6528 				zval *value_ptr = NULL;
6529 
6530 				/* If a function call result is yielded and the function did
6531 				 * not return by reference we throw a notice. */
6532 				do {
6533 					if (IS_CONST == IS_VAR) {
6534 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
6535 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
6536 						 && !Z_ISREF_P(value_ptr)) {
6537 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
6538 							ZVAL_COPY(&generator->value, value_ptr);
6539 							break;
6540 						}
6541 					}
6542 					if (Z_ISREF_P(value_ptr)) {
6543 						Z_ADDREF_P(value_ptr);
6544 					} else {
6545 						ZVAL_MAKE_REF_EX(value_ptr, 2);
6546 					}
6547 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
6548 				} while (0);
6549 
6550 			}
6551 		} else {
6552 			zval *value = RT_CONSTANT(opline, opline->op1);
6553 
6554 			/* Consts, temporary variables and references need copying */
6555 			if (IS_CONST == IS_CONST) {
6556 				ZVAL_COPY_VALUE(&generator->value, value);
6557 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
6558 					Z_ADDREF(generator->value);
6559 				}
6560 			} else if (IS_CONST == IS_TMP_VAR) {
6561 				ZVAL_COPY_VALUE(&generator->value, value);
6562             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
6563 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
6564 
6565 			} else {
6566 				ZVAL_COPY_VALUE(&generator->value, value);
6567 				if (IS_CONST == IS_CV) {
6568 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
6569 				}
6570 			}
6571 		}
6572 	} else {
6573 		/* If no value was specified yield null */
6574 		ZVAL_NULL(&generator->value);
6575 	}
6576 
6577 	/* Set the new yielded key */
6578 	if (IS_CONST != IS_UNUSED) {
6579 
6580 		zval *key = RT_CONSTANT(opline, opline->op2);
6581 
6582 		/* Consts, temporary variables and references need copying */
6583 		if (IS_CONST == IS_CONST) {
6584 			ZVAL_COPY_VALUE(&generator->key, key);
6585 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
6586 				Z_ADDREF(generator->key);
6587 			}
6588 		} else if (IS_CONST == IS_TMP_VAR) {
6589 			ZVAL_COPY_VALUE(&generator->key, key);
6590 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
6591 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
6592 
6593 		} else {
6594 			ZVAL_COPY_VALUE(&generator->key, key);
6595 			if (IS_CONST == IS_CV) {
6596 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
6597 			}
6598 		}
6599 
6600 		if (Z_TYPE(generator->key) == IS_LONG
6601 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
6602 		) {
6603 			generator->largest_used_integer_key = Z_LVAL(generator->key);
6604 		}
6605 	} else {
6606 		/* If no key was specified we use auto-increment keys */
6607 		generator->largest_used_integer_key++;
6608 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
6609 	}
6610 
6611 	if (RETURN_VALUE_USED(opline)) {
6612 		/* If the return value of yield is used set the send
6613 		 * target and initialize it to NULL */
6614 		generator->send_target = EX_VAR(opline->result.var);
6615 		ZVAL_NULL(generator->send_target);
6616 	} else {
6617 		generator->send_target = NULL;
6618 	}
6619 
6620 	/* We increment to the next op, so we are at the correct position when the
6621 	 * generator is resumed. */
6622 	ZEND_VM_INC_OPCODE();
6623 
6624 	/* The GOTO VM uses a local opline variable. We need to set the opline
6625 	 * variable in execute_data so we don't resume at an old position. */
6626 	SAVE_OPLINE();
6627 
6628 	ZEND_VM_RETURN();
6629 }
6630 
ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6631 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6632 {
6633 	USE_OPLINE
6634 
6635 	zval *op, *jump_zv;
6636 	HashTable *jumptable;
6637 
6638 	op = RT_CONSTANT(opline, opline->op1);
6639 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
6640 
6641 	if (Z_TYPE_P(op) != IS_LONG) {
6642 		ZVAL_DEREF(op);
6643 		if (Z_TYPE_P(op) != IS_LONG) {
6644 			/* Wrong type, fall back to ZEND_CASE chain */
6645 			ZEND_VM_NEXT_OPCODE();
6646 		}
6647 	}
6648 
6649 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
6650 	if (jump_zv != NULL) {
6651 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
6652 		ZEND_VM_CONTINUE();
6653 	} else {
6654 		/* default */
6655 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
6656 		ZEND_VM_CONTINUE();
6657 	}
6658 }
6659 
ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6660 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6661 {
6662 	USE_OPLINE
6663 
6664 	zval *op, *jump_zv;
6665 	HashTable *jumptable;
6666 
6667 	op = RT_CONSTANT(opline, opline->op1);
6668 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
6669 
6670 	if (Z_TYPE_P(op) != IS_STRING) {
6671 		if (IS_CONST == IS_CONST) {
6672 			/* Wrong type, fall back to ZEND_CASE chain */
6673 			ZEND_VM_NEXT_OPCODE();
6674 		} else {
6675 			ZVAL_DEREF(op);
6676 			if (Z_TYPE_P(op) != IS_STRING) {
6677 				/* Wrong type, fall back to ZEND_CASE chain */
6678 				ZEND_VM_NEXT_OPCODE();
6679 			}
6680 		}
6681 	}
6682 
6683 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
6684 	if (jump_zv != NULL) {
6685 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
6686 		ZEND_VM_CONTINUE();
6687 	} else {
6688 		/* default */
6689 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
6690 		ZEND_VM_CONTINUE();
6691 	}
6692 }
6693 
ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6694 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6695 {
6696 	USE_OPLINE
6697 
6698 	zval *op1;
6699 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
6700 	zval *result;
6701 
6702 	SAVE_OPLINE();
6703 	op1 = RT_CONSTANT(opline, opline->op1);
6704 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6705 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
6706 	} else if (opline->extended_value) {
6707 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
6708 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
6709 		} else {
6710 			result = NULL;
6711 		}
6712 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
6713 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
6714 	} else {
6715 		zend_string *key;
6716 		zval key_tmp, result_tmp, *val;
6717 
6718 		result = NULL;
6719 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
6720 			ZVAL_STR(&key_tmp, key);
6721 			compare_function(&result_tmp, op1, &key_tmp);
6722 			if (Z_LVAL(result_tmp) == 0) {
6723 				result = val;
6724 				break;
6725 			}
6726 		} ZEND_HASH_FOREACH_END();
6727 	}
6728 
6729 	ZEND_VM_SMART_BRANCH(result, 1);
6730 	ZVAL_BOOL(EX_VAR(opline->result.var), result != NULL);
6731 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6732 }
6733 
ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6734 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6735 {
6736 	USE_OPLINE
6737 
6738 	zval *op1, *op2, *result;
6739 	double d1, d2;
6740 
6741 	op1 = RT_CONSTANT(opline, opline->op1);
6742 	op2 = EX_VAR(opline->op2.var);
6743 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6744 		/* pass */
6745 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6746 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6747 			result = EX_VAR(opline->result.var);
6748 			fast_long_add_function(result, op1, op2);
6749 			ZEND_VM_NEXT_OPCODE();
6750 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6751 			d1 = (double)Z_LVAL_P(op1);
6752 			d2 = Z_DVAL_P(op2);
6753 			goto add_double;
6754 		}
6755 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6756 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6757 			d1 = Z_DVAL_P(op1);
6758 			d2 = Z_DVAL_P(op2);
6759 add_double:
6760 			result = EX_VAR(opline->result.var);
6761 			ZVAL_DOUBLE(result, d1 + d2);
6762 			ZEND_VM_NEXT_OPCODE();
6763 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6764 			d1 = Z_DVAL_P(op1);
6765 			d2 = (double)Z_LVAL_P(op2);
6766 			goto add_double;
6767 		}
6768 	}
6769 
6770 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6771 }
6772 
ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6773 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6774 {
6775 	USE_OPLINE
6776 
6777 	zval *op1, *op2, *result;
6778 	double d1, d2;
6779 
6780 	op1 = RT_CONSTANT(opline, opline->op1);
6781 	op2 = EX_VAR(opline->op2.var);
6782 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6783 		/* pass */
6784 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6785 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6786 			result = EX_VAR(opline->result.var);
6787 			fast_long_sub_function(result, op1, op2);
6788 			ZEND_VM_NEXT_OPCODE();
6789 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6790 			d1 = (double)Z_LVAL_P(op1);
6791 			d2 = Z_DVAL_P(op2);
6792 			goto sub_double;
6793 		}
6794 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6795 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6796 			d1 = Z_DVAL_P(op1);
6797 			d2 = Z_DVAL_P(op2);
6798 sub_double:
6799 			result = EX_VAR(opline->result.var);
6800 			ZVAL_DOUBLE(result, d1 - d2);
6801 			ZEND_VM_NEXT_OPCODE();
6802 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6803 			d1 = Z_DVAL_P(op1);
6804 			d2 = (double)Z_LVAL_P(op2);
6805 			goto sub_double;
6806 		}
6807 	}
6808 
6809 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6810 }
6811 
ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6812 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6813 {
6814 	USE_OPLINE
6815 
6816 	zval *op1, *op2, *result;
6817 
6818 	op1 = RT_CONSTANT(opline, opline->op1);
6819 	op2 = EX_VAR(opline->op2.var);
6820 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6821 		/* pass */
6822 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6823 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6824 			result = EX_VAR(opline->result.var);
6825 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
6826 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6827 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
6828 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
6829 				ZVAL_LONG(result, 0);
6830 			} else {
6831 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
6832 			}
6833 			ZEND_VM_NEXT_OPCODE();
6834 		}
6835 	}
6836 
6837 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6838 }
6839 
ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6841 {
6842 	USE_OPLINE
6843 
6844 	zval *op1, *op2;
6845 
6846 	op1 = RT_CONSTANT(opline, opline->op1);
6847 	op2 = EX_VAR(opline->op2.var);
6848 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6849 		/* pass */
6850 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6851 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
6852 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
6853 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
6854 		ZVAL_LONG(EX_VAR(opline->result.var),
6855 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
6856 		ZEND_VM_NEXT_OPCODE();
6857 	}
6858 
6859 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6860 }
6861 
ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6863 {
6864 	USE_OPLINE
6865 
6866 	zval *op1, *op2;
6867 
6868 	op1 = RT_CONSTANT(opline, opline->op1);
6869 	op2 = EX_VAR(opline->op2.var);
6870 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6871 		/* pass */
6872 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6873 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
6874 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
6875 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
6876 		ZEND_VM_NEXT_OPCODE();
6877 	}
6878 
6879 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6880 }
6881 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6883 {
6884 	USE_OPLINE
6885 
6886 	zval *op1, *op2;
6887 	double d1, d2;
6888 
6889 	op1 = RT_CONSTANT(opline, opline->op1);
6890 	op2 = EX_VAR(opline->op2.var);
6891 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6892 		/* pass */
6893 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6894 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6895 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6896 is_smaller_true:
6897 
6898 				ZVAL_TRUE(EX_VAR(opline->result.var));
6899 				ZEND_VM_NEXT_OPCODE();
6900 			} else {
6901 is_smaller_false:
6902 
6903 				ZVAL_FALSE(EX_VAR(opline->result.var));
6904 				ZEND_VM_NEXT_OPCODE();
6905 			}
6906 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6907 			d1 = (double)Z_LVAL_P(op1);
6908 			d2 = Z_DVAL_P(op2);
6909 			goto is_smaller_double;
6910 		}
6911 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6912 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6913 			d1 = Z_DVAL_P(op1);
6914 			d2 = Z_DVAL_P(op2);
6915 is_smaller_double:
6916 			if (d1 < d2) {
6917 				goto is_smaller_true;
6918 			} else {
6919 				goto is_smaller_false;
6920 			}
6921 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6922 			d1 = Z_DVAL_P(op1);
6923 			d2 = (double)Z_LVAL_P(op2);
6924 			goto is_smaller_double;
6925 		}
6926 	}
6927 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6928 }
6929 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6930 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6931 {
6932 	USE_OPLINE
6933 
6934 	zval *op1, *op2;
6935 	double d1, d2;
6936 
6937 	op1 = RT_CONSTANT(opline, opline->op1);
6938 	op2 = EX_VAR(opline->op2.var);
6939 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6940 		/* pass */
6941 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6942 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6943 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6944 is_smaller_true:
6945 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
6946 				ZVAL_TRUE(EX_VAR(opline->result.var));
6947 				ZEND_VM_NEXT_OPCODE();
6948 			} else {
6949 is_smaller_false:
6950 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
6951 				ZVAL_FALSE(EX_VAR(opline->result.var));
6952 				ZEND_VM_NEXT_OPCODE();
6953 			}
6954 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6955 			d1 = (double)Z_LVAL_P(op1);
6956 			d2 = Z_DVAL_P(op2);
6957 			goto is_smaller_double;
6958 		}
6959 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6960 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6961 			d1 = Z_DVAL_P(op1);
6962 			d2 = Z_DVAL_P(op2);
6963 is_smaller_double:
6964 			if (d1 < d2) {
6965 				goto is_smaller_true;
6966 			} else {
6967 				goto is_smaller_false;
6968 			}
6969 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6970 			d1 = Z_DVAL_P(op1);
6971 			d2 = (double)Z_LVAL_P(op2);
6972 			goto is_smaller_double;
6973 		}
6974 	}
6975 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6976 }
6977 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6978 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6979 {
6980 	USE_OPLINE
6981 
6982 	zval *op1, *op2;
6983 	double d1, d2;
6984 
6985 	op1 = RT_CONSTANT(opline, opline->op1);
6986 	op2 = EX_VAR(opline->op2.var);
6987 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
6988 		/* pass */
6989 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6990 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6991 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6992 is_smaller_true:
6993 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
6994 				ZVAL_TRUE(EX_VAR(opline->result.var));
6995 				ZEND_VM_NEXT_OPCODE();
6996 			} else {
6997 is_smaller_false:
6998 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
6999 				ZVAL_FALSE(EX_VAR(opline->result.var));
7000 				ZEND_VM_NEXT_OPCODE();
7001 			}
7002 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7003 			d1 = (double)Z_LVAL_P(op1);
7004 			d2 = Z_DVAL_P(op2);
7005 			goto is_smaller_double;
7006 		}
7007 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7008 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7009 			d1 = Z_DVAL_P(op1);
7010 			d2 = Z_DVAL_P(op2);
7011 is_smaller_double:
7012 			if (d1 < d2) {
7013 				goto is_smaller_true;
7014 			} else {
7015 				goto is_smaller_false;
7016 			}
7017 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7018 			d1 = Z_DVAL_P(op1);
7019 			d2 = (double)Z_LVAL_P(op2);
7020 			goto is_smaller_double;
7021 		}
7022 	}
7023 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7024 }
7025 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7027 {
7028 	USE_OPLINE
7029 
7030 	zval *op1, *op2;
7031 	double d1, d2;
7032 
7033 	op1 = RT_CONSTANT(opline, opline->op1);
7034 	op2 = EX_VAR(opline->op2.var);
7035 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7036 		/* pass */
7037 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7038 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7039 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7040 is_smaller_or_equal_true:
7041 
7042 				ZVAL_TRUE(EX_VAR(opline->result.var));
7043 				ZEND_VM_NEXT_OPCODE();
7044 			} else {
7045 is_smaller_or_equal_false:
7046 
7047 				ZVAL_FALSE(EX_VAR(opline->result.var));
7048 				ZEND_VM_NEXT_OPCODE();
7049 			}
7050 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7051 			d1 = (double)Z_LVAL_P(op1);
7052 			d2 = Z_DVAL_P(op2);
7053 			goto is_smaller_or_equal_double;
7054 		}
7055 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7056 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7057 			d1 = Z_DVAL_P(op1);
7058 			d2 = Z_DVAL_P(op2);
7059 is_smaller_or_equal_double:
7060 			if (d1 <= d2) {
7061 				goto is_smaller_or_equal_true;
7062 			} else {
7063 				goto is_smaller_or_equal_false;
7064 			}
7065 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7066 			d1 = Z_DVAL_P(op1);
7067 			d2 = (double)Z_LVAL_P(op2);
7068 			goto is_smaller_or_equal_double;
7069 		}
7070 	}
7071 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7072 }
7073 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7074 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7075 {
7076 	USE_OPLINE
7077 
7078 	zval *op1, *op2;
7079 	double d1, d2;
7080 
7081 	op1 = RT_CONSTANT(opline, opline->op1);
7082 	op2 = EX_VAR(opline->op2.var);
7083 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7084 		/* pass */
7085 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7086 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7087 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7088 is_smaller_or_equal_true:
7089 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
7090 				ZVAL_TRUE(EX_VAR(opline->result.var));
7091 				ZEND_VM_NEXT_OPCODE();
7092 			} else {
7093 is_smaller_or_equal_false:
7094 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
7095 				ZVAL_FALSE(EX_VAR(opline->result.var));
7096 				ZEND_VM_NEXT_OPCODE();
7097 			}
7098 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7099 			d1 = (double)Z_LVAL_P(op1);
7100 			d2 = Z_DVAL_P(op2);
7101 			goto is_smaller_or_equal_double;
7102 		}
7103 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7104 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7105 			d1 = Z_DVAL_P(op1);
7106 			d2 = Z_DVAL_P(op2);
7107 is_smaller_or_equal_double:
7108 			if (d1 <= d2) {
7109 				goto is_smaller_or_equal_true;
7110 			} else {
7111 				goto is_smaller_or_equal_false;
7112 			}
7113 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7114 			d1 = Z_DVAL_P(op1);
7115 			d2 = (double)Z_LVAL_P(op2);
7116 			goto is_smaller_or_equal_double;
7117 		}
7118 	}
7119 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7120 }
7121 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7122 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7123 {
7124 	USE_OPLINE
7125 
7126 	zval *op1, *op2;
7127 	double d1, d2;
7128 
7129 	op1 = RT_CONSTANT(opline, opline->op1);
7130 	op2 = EX_VAR(opline->op2.var);
7131 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7132 		/* pass */
7133 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7134 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7135 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
7136 is_smaller_or_equal_true:
7137 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
7138 				ZVAL_TRUE(EX_VAR(opline->result.var));
7139 				ZEND_VM_NEXT_OPCODE();
7140 			} else {
7141 is_smaller_or_equal_false:
7142 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
7143 				ZVAL_FALSE(EX_VAR(opline->result.var));
7144 				ZEND_VM_NEXT_OPCODE();
7145 			}
7146 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7147 			d1 = (double)Z_LVAL_P(op1);
7148 			d2 = Z_DVAL_P(op2);
7149 			goto is_smaller_or_equal_double;
7150 		}
7151 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7152 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7153 			d1 = Z_DVAL_P(op1);
7154 			d2 = Z_DVAL_P(op2);
7155 is_smaller_or_equal_double:
7156 			if (d1 <= d2) {
7157 				goto is_smaller_or_equal_true;
7158 			} else {
7159 				goto is_smaller_or_equal_false;
7160 			}
7161 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7162 			d1 = Z_DVAL_P(op1);
7163 			d2 = (double)Z_LVAL_P(op2);
7164 			goto is_smaller_or_equal_double;
7165 		}
7166 	}
7167 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7168 }
7169 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7170 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7171 {
7172 	USE_OPLINE
7173 	zval *op1, *op2, *result;
7174 
7175 	op1 = RT_CONSTANT(opline, opline->op1);
7176 	op2 = EX_VAR(opline->op2.var);
7177 	result = EX_VAR(opline->result.var);
7178 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
7179 	ZEND_VM_NEXT_OPCODE();
7180 }
7181 
ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7182 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7183 {
7184 	USE_OPLINE
7185 	zval *op1, *op2, *result;
7186 
7187 	op1 = RT_CONSTANT(opline, opline->op1);
7188 	op2 = EX_VAR(opline->op2.var);
7189 	result = EX_VAR(opline->result.var);
7190 	fast_long_sub_function(result, op1, op2);
7191 	ZEND_VM_NEXT_OPCODE();
7192 }
7193 
ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7194 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7195 {
7196 	USE_OPLINE
7197 	zval *op1, *op2, *result;
7198 
7199 	op1 = RT_CONSTANT(opline, opline->op1);
7200 	op2 = EX_VAR(opline->op2.var);
7201 	result = EX_VAR(opline->result.var);
7202 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
7203 	ZEND_VM_NEXT_OPCODE();
7204 }
7205 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7206 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7207 {
7208 	USE_OPLINE
7209 	zval *op1, *op2;
7210 	int result;
7211 
7212 	op1 = RT_CONSTANT(opline, opline->op1);
7213 	op2 = EX_VAR(opline->op2.var);
7214 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
7215 
7216 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7217 	ZEND_VM_NEXT_OPCODE();
7218 }
7219 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7220 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7221 {
7222 	USE_OPLINE
7223 	zval *op1, *op2;
7224 	int result;
7225 
7226 	op1 = RT_CONSTANT(opline, opline->op1);
7227 	op2 = EX_VAR(opline->op2.var);
7228 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
7229 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
7230 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7231 	ZEND_VM_NEXT_OPCODE();
7232 }
7233 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7234 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7235 {
7236 	USE_OPLINE
7237 	zval *op1, *op2;
7238 	int result;
7239 
7240 	op1 = RT_CONSTANT(opline, opline->op1);
7241 	op2 = EX_VAR(opline->op2.var);
7242 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
7243 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
7244 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7245 	ZEND_VM_NEXT_OPCODE();
7246 }
7247 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7248 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7249 {
7250 	USE_OPLINE
7251 	zval *op1, *op2;
7252 	int result;
7253 
7254 	op1 = RT_CONSTANT(opline, opline->op1);
7255 	op2 = EX_VAR(opline->op2.var);
7256 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
7257 
7258 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7259 	ZEND_VM_NEXT_OPCODE();
7260 }
7261 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7262 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7263 {
7264 	USE_OPLINE
7265 	zval *op1, *op2;
7266 	int result;
7267 
7268 	op1 = RT_CONSTANT(opline, opline->op1);
7269 	op2 = EX_VAR(opline->op2.var);
7270 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
7271 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
7272 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7273 	ZEND_VM_NEXT_OPCODE();
7274 }
7275 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7276 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7277 {
7278 	USE_OPLINE
7279 	zval *op1, *op2;
7280 	int result;
7281 
7282 	op1 = RT_CONSTANT(opline, opline->op1);
7283 	op2 = EX_VAR(opline->op2.var);
7284 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
7285 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
7286 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7287 	ZEND_VM_NEXT_OPCODE();
7288 }
7289 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7290 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7291 {
7292 	USE_OPLINE
7293 	zval *op1, *op2;
7294 	int result;
7295 
7296 	op1 = RT_CONSTANT(opline, opline->op1);
7297 	op2 = EX_VAR(opline->op2.var);
7298 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
7299 
7300 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7301 	ZEND_VM_NEXT_OPCODE();
7302 }
7303 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7304 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7305 {
7306 	USE_OPLINE
7307 	zval *op1, *op2;
7308 	int result;
7309 
7310 	op1 = RT_CONSTANT(opline, opline->op1);
7311 	op2 = EX_VAR(opline->op2.var);
7312 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
7313 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
7314 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7315 	ZEND_VM_NEXT_OPCODE();
7316 }
7317 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7318 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7319 {
7320 	USE_OPLINE
7321 	zval *op1, *op2;
7322 	int result;
7323 
7324 	op1 = RT_CONSTANT(opline, opline->op1);
7325 	op2 = EX_VAR(opline->op2.var);
7326 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
7327 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
7328 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7329 	ZEND_VM_NEXT_OPCODE();
7330 }
7331 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7333 {
7334 	USE_OPLINE
7335 	zval *op1, *op2;
7336 	int result;
7337 
7338 	op1 = RT_CONSTANT(opline, opline->op1);
7339 	op2 = EX_VAR(opline->op2.var);
7340 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
7341 
7342 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7343 	ZEND_VM_NEXT_OPCODE();
7344 }
7345 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7346 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7347 {
7348 	USE_OPLINE
7349 	zval *op1, *op2;
7350 	int result;
7351 
7352 	op1 = RT_CONSTANT(opline, opline->op1);
7353 	op2 = EX_VAR(opline->op2.var);
7354 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
7355 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
7356 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7357 	ZEND_VM_NEXT_OPCODE();
7358 }
7359 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7360 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7361 {
7362 	USE_OPLINE
7363 	zval *op1, *op2;
7364 	int result;
7365 
7366 	op1 = RT_CONSTANT(opline, opline->op1);
7367 	op2 = EX_VAR(opline->op2.var);
7368 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
7369 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
7370 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
7371 	ZEND_VM_NEXT_OPCODE();
7372 }
7373 
ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7374 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7375 {
7376 	USE_OPLINE
7377 
7378 	zval *container, *dim, *value;
7379 	zend_long offset;
7380 	HashTable *ht;
7381 
7382 	container = RT_CONSTANT(opline, opline->op1);
7383 	dim = EX_VAR(opline->op2.var);
7384 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7385 fetch_dim_r_index_array:
7386 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
7387 			offset = Z_LVAL_P(dim);
7388 		} else {
7389 			offset = zval_get_long(dim);
7390 		}
7391 		ht = Z_ARRVAL_P(container);
7392 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
7393 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
7394 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7395 			SAVE_OPLINE();
7396 
7397 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7398 		} else {
7399 			ZEND_VM_NEXT_OPCODE();
7400 		}
7401 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
7402 		container = Z_REFVAL_P(container);
7403 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7404 			goto fetch_dim_r_index_array;
7405 		} else {
7406 			goto fetch_dim_r_index_slow;
7407 		}
7408 	} else {
7409 fetch_dim_r_index_slow:
7410 		SAVE_OPLINE();
7411 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
7412 			dim++;
7413 		}
7414 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
7415 
7416 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7417 	}
7418 
7419 fetch_dim_r_index_undef:
7420 	ZVAL_NULL(EX_VAR(opline->result.var));
7421 	SAVE_OPLINE();
7422 	zend_undefined_offset(offset);
7423 
7424 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7425 }
7426 
ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7428 {
7429 	USE_OPLINE
7430 	zend_free_op free_op2;
7431 	zval *op1, *op2;
7432 
7433 	SAVE_OPLINE();
7434 	op1 = RT_CONSTANT(opline, opline->op1);
7435 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7436 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
7437 
7438 	zval_ptr_dtor_nogc(free_op2);
7439 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7440 }
7441 
ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7442 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7443 {
7444 	USE_OPLINE
7445 	zend_free_op free_op2;
7446 	zval *op1, *op2;
7447 
7448 	SAVE_OPLINE();
7449 	op1 = RT_CONSTANT(opline, opline->op1);
7450 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7451 	pow_function(EX_VAR(opline->result.var), op1, op2);
7452 
7453 	zval_ptr_dtor_nogc(free_op2);
7454 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7455 }
7456 
ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7457 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7458 {
7459 	USE_OPLINE
7460 	zend_free_op free_op2;
7461 	zval *op1, *op2;
7462 
7463 	op1 = RT_CONSTANT(opline, opline->op1);
7464 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7465 
7466 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
7467 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
7468 		zend_string *op1_str = Z_STR_P(op1);
7469 		zend_string *op2_str = Z_STR_P(op2);
7470 		zend_string *str;
7471 
7472 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
7473 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
7474 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
7475 			} else {
7476 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
7477 			}
7478 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7479 				zend_string_release_ex(op1_str, 0);
7480 			}
7481 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
7482 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
7483 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
7484 			} else {
7485 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
7486 			}
7487 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7488 				zend_string_release_ex(op2_str, 0);
7489 			}
7490 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
7491 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
7492 		    size_t len = ZSTR_LEN(op1_str);
7493 
7494 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
7495 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7496 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7497 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7498 				zend_string_release_ex(op2_str, 0);
7499 			}
7500 		} else {
7501 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
7502 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
7503 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7504 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7505 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7506 				zend_string_release_ex(op1_str, 0);
7507 			}
7508 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7509 				zend_string_release_ex(op2_str, 0);
7510 			}
7511 		}
7512 		ZEND_VM_NEXT_OPCODE();
7513 	} else {
7514 		SAVE_OPLINE();
7515 
7516 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7517 			op1 = ZVAL_UNDEFINED_OP1();
7518 		}
7519 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
7520 			op2 = ZVAL_UNDEFINED_OP2();
7521 		}
7522 		concat_function(EX_VAR(opline->result.var), op1, op2);
7523 
7524 		zval_ptr_dtor_nogc(free_op2);
7525 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7526 	}
7527 }
7528 
ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7530 {
7531 	USE_OPLINE
7532 	zend_free_op free_op2;
7533 	zval *op1, *op2;
7534 
7535 	SAVE_OPLINE();
7536 	op1 = RT_CONSTANT(opline, opline->op1);
7537 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7538 	compare_function(EX_VAR(opline->result.var), op1, op2);
7539 
7540 	zval_ptr_dtor_nogc(free_op2);
7541 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7542 }
7543 
ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7544 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7545 {
7546 	USE_OPLINE
7547 	zend_free_op free_op2;
7548 	zval *container, *dim, *value;
7549 
7550 	SAVE_OPLINE();
7551 	container = RT_CONSTANT(opline, opline->op1);
7552 	dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7553 	if (IS_CONST != IS_CONST) {
7554 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7555 fetch_dim_r_array:
7556 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
7557 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
7558 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
7559 			container = Z_REFVAL_P(container);
7560 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7561 				goto fetch_dim_r_array;
7562 			} else {
7563 				goto fetch_dim_r_slow;
7564 			}
7565 		} else {
7566 fetch_dim_r_slow:
7567 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
7568 				dim++;
7569 			}
7570 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
7571 		}
7572 	} else {
7573 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
7574 	}
7575 	zval_ptr_dtor_nogc(free_op2);
7576 
7577 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7578 }
7579 
ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7581 {
7582 	USE_OPLINE
7583 	zend_free_op free_op2;
7584 	zval *container;
7585 
7586 	SAVE_OPLINE();
7587 	container = RT_CONSTANT(opline, opline->op1);
7588 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
7589 	zval_ptr_dtor_nogc(free_op2);
7590 
7591 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7592 }
7593 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7595 {
7596 #if 0
7597 	USE_OPLINE
7598 #endif
7599 
7600 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
7601         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
7602 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7603         }
7604 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7605 	} else {
7606 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
7607 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7608 		}
7609 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7610 	}
7611 }
7612 
ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7613 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7614 {
7615 	USE_OPLINE
7616 
7617 	zval *container;
7618 	zend_free_op free_op2;
7619 	zval *offset;
7620 	void **cache_slot = NULL;
7621 
7622 	SAVE_OPLINE();
7623 	container = RT_CONSTANT(opline, opline->op1);
7624 
7625 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
7626 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7627 	}
7628 
7629 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7630 
7631 	if (IS_CONST == IS_CONST ||
7632 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7633 	    do {
7634 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7635 				container = Z_REFVAL_P(container);
7636 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
7637 					break;
7638 				}
7639 			}
7640 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
7641 				ZVAL_UNDEFINED_OP1();
7642 			}
7643 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
7644 				ZVAL_UNDEFINED_OP2();
7645 			}
7646 			zend_wrong_property_read(offset);
7647 			ZVAL_NULL(EX_VAR(opline->result.var));
7648 			goto fetch_obj_r_finish;
7649 		} while (0);
7650 	}
7651 
7652 	/* here we are sure we are dealing with an object */
7653 	do {
7654 		zend_object *zobj = Z_OBJ_P(container);
7655 		zval *retval;
7656 
7657 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
7658 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
7659 
7660 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
7661 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
7662 
7663 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
7664 					retval = OBJ_PROP(zobj, prop_offset);
7665 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
7666 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7667 							goto fetch_obj_r_copy;
7668 						} else {
7669 fetch_obj_r_fast_copy:
7670 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
7671 							ZEND_VM_NEXT_OPCODE();
7672 						}
7673 					}
7674 				} else if (EXPECTED(zobj->properties != NULL)) {
7675 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
7676 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
7677 
7678 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
7679 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
7680 
7681 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
7682 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
7683 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
7684 						          EXPECTED(p->key != NULL) &&
7685 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
7686 								retval = &p->val;
7687 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7688 									goto fetch_obj_r_copy;
7689 								} else {
7690 									goto fetch_obj_r_fast_copy;
7691 								}
7692 							}
7693 						}
7694 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
7695 					}
7696 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
7697 					if (EXPECTED(retval)) {
7698 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
7699 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
7700 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7701 							goto fetch_obj_r_copy;
7702 						} else {
7703 							goto fetch_obj_r_fast_copy;
7704 						}
7705 					}
7706 				}
7707 			}
7708 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
7709 			ZVAL_UNDEFINED_OP2();
7710 		}
7711 
7712 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
7713 
7714 		if (retval != EX_VAR(opline->result.var)) {
7715 fetch_obj_r_copy:
7716 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
7717 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
7718 			zend_unwrap_reference(retval);
7719 		}
7720 	} while (0);
7721 
7722 fetch_obj_r_finish:
7723 	zval_ptr_dtor_nogc(free_op2);
7724 
7725 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7726 }
7727 
ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7728 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7729 {
7730 	USE_OPLINE
7731 
7732 	zval *container;
7733 	zend_free_op free_op2;
7734 	zval *offset;
7735 	void **cache_slot = NULL;
7736 
7737 	SAVE_OPLINE();
7738 	container = RT_CONSTANT(opline, opline->op1);
7739 
7740 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
7741 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7742 	}
7743 
7744 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7745 
7746 	if (IS_CONST == IS_CONST ||
7747 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7748 		do {
7749 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7750 				container = Z_REFVAL_P(container);
7751 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
7752 					break;
7753 				}
7754 			}
7755 			ZVAL_NULL(EX_VAR(opline->result.var));
7756 			goto fetch_obj_is_finish;
7757 		} while (0);
7758 	}
7759 
7760 	/* here we are sure we are dealing with an object */
7761 	do {
7762 		zend_object *zobj = Z_OBJ_P(container);
7763 		zval *retval;
7764 
7765 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
7766 			cache_slot = CACHE_ADDR(opline->extended_value);
7767 
7768 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
7769 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
7770 
7771 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
7772 					retval = OBJ_PROP(zobj, prop_offset);
7773 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
7774 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7775 							goto fetch_obj_is_copy;
7776 						} else {
7777 fetch_obj_is_fast_copy:
7778 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
7779 							ZEND_VM_NEXT_OPCODE();
7780 						}
7781 					}
7782 				} else if (EXPECTED(zobj->properties != NULL)) {
7783 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
7784 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
7785 
7786 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
7787 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
7788 
7789 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
7790 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
7791 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
7792 						          EXPECTED(p->key != NULL) &&
7793 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
7794 								retval = &p->val;
7795 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7796 									goto fetch_obj_is_copy;
7797 								} else {
7798 									goto fetch_obj_is_fast_copy;
7799 								}
7800 							}
7801 						}
7802 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
7803 					}
7804 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
7805 					if (EXPECTED(retval)) {
7806 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
7807 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
7808 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
7809 							goto fetch_obj_is_copy;
7810 						} else {
7811 							goto fetch_obj_is_fast_copy;
7812 						}
7813 					}
7814 				}
7815 			}
7816 		}
7817 
7818 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
7819 
7820 		if (retval != EX_VAR(opline->result.var)) {
7821 fetch_obj_is_copy:
7822 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
7823 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
7824 			zend_unwrap_reference(retval);
7825 		}
7826 	} while (0);
7827 
7828 fetch_obj_is_finish:
7829 	zval_ptr_dtor_nogc(free_op2);
7830 
7831 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7832 }
7833 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7834 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7835 {
7836 #if 0
7837 	USE_OPLINE
7838 #endif
7839 
7840 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
7841 		/* Behave like FETCH_OBJ_W */
7842 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
7843 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7844 		}
7845 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7846 	} else {
7847 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7848 	}
7849 }
7850 
ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7852 {
7853 	USE_OPLINE
7854 	zend_free_op free_op2;
7855 	zval *container;
7856 
7857 	SAVE_OPLINE();
7858 	container = RT_CONSTANT(opline, opline->op1);
7859 	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
7860 	zval_ptr_dtor_nogc(free_op2);
7861 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7862 }
7863 
ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7865 {
7866 	USE_OPLINE
7867 	zend_free_op free_op2;
7868 	zval *op1, *op2;
7869 	zend_string *op1_str, *op2_str, *str;
7870 
7871 
7872 	op1 = RT_CONSTANT(opline, opline->op1);
7873 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
7874 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
7875 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
7876 		zend_string *op1_str = Z_STR_P(op1);
7877 		zend_string *op2_str = Z_STR_P(op2);
7878 		zend_string *str;
7879 
7880 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
7881 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
7882 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
7883 			} else {
7884 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
7885 			}
7886 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7887 				zend_string_release_ex(op1_str, 0);
7888 			}
7889 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
7890 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
7891 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
7892 			} else {
7893 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
7894 			}
7895 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7896 				zend_string_release_ex(op2_str, 0);
7897 			}
7898 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
7899 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
7900 		    size_t len = ZSTR_LEN(op1_str);
7901 
7902 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
7903 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
7904 			}
7905 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
7906 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7907 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7908 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7909 				zend_string_release_ex(op2_str, 0);
7910 			}
7911 		} else {
7912 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
7913 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
7914 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7915 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7916 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7917 				zend_string_release_ex(op1_str, 0);
7918 			}
7919 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
7920 				zend_string_release_ex(op2_str, 0);
7921 			}
7922 		}
7923 		ZEND_VM_NEXT_OPCODE();
7924 	}
7925 
7926 	SAVE_OPLINE();
7927 	if (IS_CONST == IS_CONST) {
7928 		op1_str = Z_STR_P(op1);
7929 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7930 		op1_str = zend_string_copy(Z_STR_P(op1));
7931 	} else {
7932 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7933 			ZVAL_UNDEFINED_OP1();
7934 		}
7935 		op1_str = zval_get_string_func(op1);
7936 	}
7937 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
7938 		op2_str = Z_STR_P(op2);
7939 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
7940 		op2_str = zend_string_copy(Z_STR_P(op2));
7941 	} else {
7942 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
7943 			ZVAL_UNDEFINED_OP2();
7944 		}
7945 		op2_str = zval_get_string_func(op2);
7946 	}
7947 	do {
7948 		if (IS_CONST != IS_CONST) {
7949 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
7950 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
7951 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
7952 						GC_ADDREF(op2_str);
7953 					}
7954 				}
7955 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
7956 				zend_string_release_ex(op1_str, 0);
7957 				break;
7958 			}
7959 		}
7960 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
7961 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
7962 				if (IS_CONST == IS_CONST) {
7963 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
7964 						GC_ADDREF(op1_str);
7965 					}
7966 				}
7967 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
7968 				zend_string_release_ex(op2_str, 0);
7969 				break;
7970 			}
7971 		}
7972 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
7973 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
7974 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
7975 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
7976 		if (IS_CONST != IS_CONST) {
7977 			zend_string_release_ex(op1_str, 0);
7978 		}
7979 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
7980 			zend_string_release_ex(op2_str, 0);
7981 		}
7982 	} while (0);
7983 
7984 	zval_ptr_dtor_nogc(free_op2);
7985 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7986 }
7987 
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7988 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7989 {
7990 	USE_OPLINE
7991 	zval *function_name;
7992 	zend_free_op free_op1, free_op2;
7993 	zval *object;
7994 	zend_function *fbc;
7995 	zend_class_entry *called_scope;
7996 	zend_object *obj;
7997 	zend_execute_data *call;
7998 	uint32_t call_info;
7999 
8000 	SAVE_OPLINE();
8001 
8002 	object = RT_CONSTANT(opline, opline->op1);
8003 
8004 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
8005 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8006 	}
8007 
8008 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8009 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8010 	}
8011 
8012 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
8013 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
8014 		do {
8015 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
8016 				function_name = Z_REFVAL_P(function_name);
8017 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
8018 					break;
8019 				}
8020 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
8021 				ZVAL_UNDEFINED_OP2();
8022 				if (UNEXPECTED(EG(exception) != NULL)) {
8023 
8024 					HANDLE_EXCEPTION();
8025 				}
8026 			}
8027 			zend_throw_error(NULL, "Method name must be a string");
8028 			zval_ptr_dtor_nogc(free_op2);
8029 
8030 			HANDLE_EXCEPTION();
8031 		} while (0);
8032 	}
8033 
8034 	if (IS_CONST != IS_UNUSED) {
8035 		do {
8036 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
8037 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
8038 					object = Z_REFVAL_P(object);
8039 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
8040 						break;
8041 					}
8042 				}
8043 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
8044 					object = ZVAL_UNDEFINED_OP1();
8045 					if (UNEXPECTED(EG(exception) != NULL)) {
8046 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8047 							zval_ptr_dtor_nogc(free_op2);
8048 						}
8049 						HANDLE_EXCEPTION();
8050 					}
8051 				}
8052 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8053 					function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8054 				}
8055 				zend_invalid_method_call(object, function_name);
8056 				zval_ptr_dtor_nogc(free_op2);
8057 
8058 				HANDLE_EXCEPTION();
8059 			}
8060 		} while (0);
8061 	}
8062 
8063 	obj = Z_OBJ_P(object);
8064 	called_scope = obj->ce;
8065 
8066 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8067 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
8068 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
8069 	} else {
8070 	    zend_object *orig_obj = obj;
8071 
8072 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8073 			function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8074 		}
8075 
8076 		/* First, locate the function. */
8077 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
8078 		if (UNEXPECTED(fbc == NULL)) {
8079 			if (EXPECTED(!EG(exception))) {
8080 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
8081 			}
8082 			zval_ptr_dtor_nogc(free_op2);
8083 
8084 			HANDLE_EXCEPTION();
8085 		}
8086 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8087 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
8088 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
8089 		    EXPECTED(obj == orig_obj)) {
8090 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
8091 		}
8092 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
8093 			/* Reset "object" to trigger reference counting */
8094 			object = NULL;
8095 		}
8096 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8097 			init_func_run_time_cache(&fbc->op_array);
8098 		}
8099 	}
8100 
8101 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8102 		zval_ptr_dtor_nogc(free_op2);
8103 	}
8104 
8105 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
8106 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
8107 
8108 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
8109 			HANDLE_EXCEPTION();
8110 		}
8111 		/* call static method */
8112 		obj = (zend_object*)called_scope;
8113 		call_info = ZEND_CALL_NESTED_FUNCTION;
8114 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
8115 		if (IS_CONST == IS_CV) {
8116 			GC_ADDREF(obj); /* For $this pointer */
8117 		} else if (free_op1 != object) {
8118 			GC_ADDREF(obj); /* For $this pointer */
8119 
8120 		}
8121 		/* CV may be changed indirectly (e.g. when it's a reference) */
8122 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
8123 	}
8124 
8125 	call = zend_vm_stack_push_call_frame(call_info,
8126 		fbc, opline->extended_value, obj);
8127 	call->prev_execute_data = EX(call);
8128 	EX(call) = call;
8129 
8130 	ZEND_VM_NEXT_OPCODE();
8131 }
8132 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8134 {
8135 	USE_OPLINE
8136 	zval *function_name;
8137 	zend_class_entry *ce;
8138 	uint32_t call_info;
8139 	zend_function *fbc;
8140 	zend_execute_data *call;
8141 
8142 	SAVE_OPLINE();
8143 
8144 	if (IS_CONST == IS_CONST) {
8145 		/* no function found. try a static method in class */
8146 		ce = CACHED_PTR(opline->result.num);
8147 		if (UNEXPECTED(ce == NULL)) {
8148 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
8149 			if (UNEXPECTED(ce == NULL)) {
8150 				ZEND_ASSERT(EG(exception));
8151 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8152 				HANDLE_EXCEPTION();
8153 			}
8154 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8155 				CACHE_PTR(opline->result.num, ce);
8156 			}
8157 		}
8158 	} else if (IS_CONST == IS_UNUSED) {
8159 		ce = zend_fetch_class(NULL, opline->op1.num);
8160 		if (UNEXPECTED(ce == NULL)) {
8161 			ZEND_ASSERT(EG(exception));
8162 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8163 			HANDLE_EXCEPTION();
8164 		}
8165 	} else {
8166 		ce = Z_CE_P(EX_VAR(opline->op1.var));
8167 	}
8168 
8169 	if (IS_CONST == IS_CONST &&
8170 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
8171 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
8172 		/* nothing to do */
8173 	} else if (IS_CONST != IS_CONST &&
8174 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
8175 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
8176 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
8177 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
8178 		zend_free_op free_op2;
8179 
8180 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8181 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8182 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
8183 				do {
8184 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
8185 						function_name = Z_REFVAL_P(function_name);
8186 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
8187 							break;
8188 						}
8189 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
8190 						ZVAL_UNDEFINED_OP2();
8191 						if (UNEXPECTED(EG(exception) != NULL)) {
8192 							HANDLE_EXCEPTION();
8193 						}
8194 					}
8195 					zend_throw_error(NULL, "Function name must be a string");
8196 					zval_ptr_dtor_nogc(free_op2);
8197 					HANDLE_EXCEPTION();
8198 				} while (0);
8199 			}
8200 		}
8201 
8202 		if (ce->get_static_method) {
8203 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
8204 		} else {
8205 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
8206 		}
8207 		if (UNEXPECTED(fbc == NULL)) {
8208 			if (EXPECTED(!EG(exception))) {
8209 				zend_undefined_method(ce, Z_STR_P(function_name));
8210 			}
8211 			zval_ptr_dtor_nogc(free_op2);
8212 			HANDLE_EXCEPTION();
8213 		}
8214 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
8215 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
8216 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
8217 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
8218 		}
8219 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8220 			init_func_run_time_cache(&fbc->op_array);
8221 		}
8222 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8223 			zval_ptr_dtor_nogc(free_op2);
8224 		}
8225 	} else {
8226 		if (UNEXPECTED(ce->constructor == NULL)) {
8227 			zend_throw_error(NULL, "Cannot call constructor");
8228 			HANDLE_EXCEPTION();
8229 		}
8230 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
8231 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
8232 			HANDLE_EXCEPTION();
8233 		}
8234 		fbc = ce->constructor;
8235 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
8236 			init_func_run_time_cache(&fbc->op_array);
8237 		}
8238 	}
8239 
8240 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
8241 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
8242 			ce = (zend_class_entry*)Z_OBJ(EX(This));
8243 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
8244 		} else {
8245 			zend_non_static_method_call(fbc);
8246 			if (UNEXPECTED(EG(exception) != NULL)) {
8247 				HANDLE_EXCEPTION();
8248 			}
8249 			goto check_parent_and_self;
8250 		}
8251 	} else {
8252 check_parent_and_self:
8253 		/* previous opcode is ZEND_FETCH_CLASS */
8254 		if (IS_CONST == IS_UNUSED
8255 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
8256 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
8257 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
8258 				ce = Z_OBJCE(EX(This));
8259 			} else {
8260 				ce = Z_CE(EX(This));
8261 			}
8262 		}
8263 		call_info = ZEND_CALL_NESTED_FUNCTION;
8264 	}
8265 
8266 	call = zend_vm_stack_push_call_frame(call_info,
8267 		fbc, opline->extended_value, ce);
8268 	call->prev_execute_data = EX(call);
8269 	EX(call) = call;
8270 
8271 	ZEND_VM_NEXT_OPCODE();
8272 }
8273 
ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8275 {
8276 	USE_OPLINE
8277 	zend_free_op free_op2;
8278 	zval *function_name;
8279 	zend_fcall_info_cache fcc;
8280 	char *error = NULL;
8281 	zend_function *func;
8282 	void *object_or_called_scope;
8283 	zend_execute_data *call;
8284 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
8285 
8286 	SAVE_OPLINE();
8287 	function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8288 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
8289 		func = fcc.function_handler;
8290 		if (error) {
8291 			efree(error);
8292 			/* This is the only soft error is_callable() can generate */
8293 			zend_non_static_method_call(func);
8294 			if (UNEXPECTED(EG(exception) != NULL)) {
8295 				zval_ptr_dtor_nogc(free_op2);
8296 				HANDLE_EXCEPTION();
8297 			}
8298 		}
8299 		object_or_called_scope = fcc.called_scope;
8300 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
8301 			/* Delay closure destruction until its invocation */
8302 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
8303 			call_info |= ZEND_CALL_CLOSURE;
8304 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
8305 				call_info |= ZEND_CALL_FAKE_CLOSURE;
8306 			}
8307 			if (fcc.object) {
8308 				object_or_called_scope = fcc.object;
8309 				call_info |= ZEND_CALL_HAS_THIS;
8310 			}
8311 		} else if (fcc.object) {
8312 			GC_ADDREF(fcc.object); /* For $this pointer */
8313 			object_or_called_scope = fcc.object;
8314 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
8315 		}
8316 
8317 		zval_ptr_dtor_nogc(free_op2);
8318 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
8319 			if (call_info & ZEND_CALL_CLOSURE) {
8320 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
8321 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
8322 				zend_object_release(fcc.object);
8323 			}
8324 			HANDLE_EXCEPTION();
8325 		}
8326 
8327 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
8328 			init_func_run_time_cache(&func->op_array);
8329 		}
8330 	} else {
8331 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
8332 		efree(error);
8333 		zval_ptr_dtor_nogc(free_op2);
8334 		if (UNEXPECTED(EG(exception))) {
8335 			HANDLE_EXCEPTION();
8336 		}
8337 		func = (zend_function*)&zend_pass_function;
8338 		object_or_called_scope = NULL;
8339 	}
8340 
8341 	call = zend_vm_stack_push_call_frame(call_info,
8342 		func, opline->extended_value, object_or_called_scope);
8343 	call->prev_execute_data = EX(call);
8344 	EX(call) = call;
8345 
8346 	ZEND_VM_NEXT_OPCODE();
8347 }
8348 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8350 {
8351 	USE_OPLINE
8352 
8353 	zval *expr_ptr, new_expr;
8354 
8355 	SAVE_OPLINE();
8356 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
8357 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
8358 		expr_ptr = NULL;
8359 		if (Z_ISREF_P(expr_ptr)) {
8360 			Z_ADDREF_P(expr_ptr);
8361 		} else {
8362 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
8363 		}
8364 
8365 	} else {
8366 		expr_ptr = RT_CONSTANT(opline, opline->op1);
8367 		if (IS_CONST == IS_TMP_VAR) {
8368 			/* pass */
8369 		} else if (IS_CONST == IS_CONST) {
8370 			Z_TRY_ADDREF_P(expr_ptr);
8371 		} else if (IS_CONST == IS_CV) {
8372 			ZVAL_DEREF(expr_ptr);
8373 			Z_TRY_ADDREF_P(expr_ptr);
8374 		} else /* if (IS_CONST == IS_VAR) */ {
8375 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
8376 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
8377 
8378 				expr_ptr = Z_REFVAL_P(expr_ptr);
8379 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
8380 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
8381 					expr_ptr = &new_expr;
8382 					efree_size(ref, sizeof(zend_reference));
8383 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
8384 					Z_ADDREF_P(expr_ptr);
8385 				}
8386 			}
8387 		}
8388 	}
8389 
8390 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
8391 		zend_free_op free_op2;
8392 		zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8393 		zend_string *str;
8394 		zend_ulong hval;
8395 
8396 add_again:
8397 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
8398 			str = Z_STR_P(offset);
8399 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8400 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
8401 					goto num_index;
8402 				}
8403 			}
8404 str_index:
8405 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
8406 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
8407 			hval = Z_LVAL_P(offset);
8408 num_index:
8409 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
8410 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
8411 			offset = Z_REFVAL_P(offset);
8412 			goto add_again;
8413 		} else if (Z_TYPE_P(offset) == IS_NULL) {
8414 			str = ZSTR_EMPTY_ALLOC();
8415 			goto str_index;
8416 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
8417 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
8418 			goto num_index;
8419 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
8420 			hval = 0;
8421 			goto num_index;
8422 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
8423 			hval = 1;
8424 			goto num_index;
8425 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
8426 			zend_use_resource_as_offset(offset);
8427 			hval = Z_RES_HANDLE_P(offset);
8428 			goto num_index;
8429 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
8430 			ZVAL_UNDEFINED_OP2();
8431 			str = ZSTR_EMPTY_ALLOC();
8432 			goto str_index;
8433 		} else {
8434 			zend_illegal_offset();
8435 			zval_ptr_dtor_nogc(expr_ptr);
8436 		}
8437 		zval_ptr_dtor_nogc(free_op2);
8438 	} else {
8439 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
8440 			zend_cannot_add_element();
8441 			zval_ptr_dtor_nogc(expr_ptr);
8442 		}
8443 	}
8444 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8445 }
8446 
ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8448 {
8449 	zval *array;
8450 	uint32_t size;
8451 	USE_OPLINE
8452 
8453 	array = EX_VAR(opline->result.var);
8454 	if (IS_CONST != IS_UNUSED) {
8455 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
8456 		ZVAL_ARR(array, zend_new_array(size));
8457 		/* Explicitly initialize array as not-packed if flag is set */
8458 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
8459 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
8460 		}
8461 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8462 	} else {
8463 		ZVAL_ARR(array, zend_new_array(0));
8464 		ZEND_VM_NEXT_OPCODE();
8465 	}
8466 }
8467 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8469 {
8470 	USE_OPLINE
8471 	zend_free_op free_op2;
8472 	zval *container;
8473 	int result;
8474 	zend_ulong hval;
8475 	zval *offset;
8476 
8477 	SAVE_OPLINE();
8478 	container = RT_CONSTANT(opline, opline->op1);
8479 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8480 
8481 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8482 		HashTable *ht;
8483 		zval *value;
8484 		zend_string *str;
8485 
8486 isset_dim_obj_array:
8487 		ht = Z_ARRVAL_P(container);
8488 isset_again:
8489 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
8490 			str = Z_STR_P(offset);
8491 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
8492 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
8493 					goto num_index_prop;
8494 				}
8495 			}
8496 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
8497 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
8498 			hval = Z_LVAL_P(offset);
8499 num_index_prop:
8500 			value = zend_hash_index_find(ht, hval);
8501 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
8502 			offset = Z_REFVAL_P(offset);
8503 			goto isset_again;
8504 		} else {
8505 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
8506 			if (UNEXPECTED(EG(exception))) {
8507 				result = 0;
8508 				goto isset_dim_obj_exit;
8509 			}
8510 		}
8511 
8512 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
8513 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
8514 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
8515 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
8516 
8517 			if (IS_CONST & (IS_CONST|IS_CV)) {
8518 				/* avoid exception check */
8519 				zval_ptr_dtor_nogc(free_op2);
8520 				ZEND_VM_SMART_BRANCH(result, 0);
8521 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
8522 				ZEND_VM_NEXT_OPCODE();
8523 			}
8524 		} else {
8525 			result = (value == NULL || !i_zend_is_true(value));
8526 		}
8527 		goto isset_dim_obj_exit;
8528 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
8529 		container = Z_REFVAL_P(container);
8530 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8531 			goto isset_dim_obj_array;
8532 		}
8533 	}
8534 
8535 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
8536 		offset++;
8537 	}
8538 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
8539 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
8540 	} else {
8541 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
8542 	}
8543 
8544 isset_dim_obj_exit:
8545 	zval_ptr_dtor_nogc(free_op2);
8546 
8547 	ZEND_VM_SMART_BRANCH(result, 1);
8548 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8549 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8550 }
8551 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8552 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8553 {
8554 	USE_OPLINE
8555 	zend_free_op free_op2;
8556 	zval *container;
8557 	int result;
8558 	zval *offset;
8559 
8560 	SAVE_OPLINE();
8561 	container = RT_CONSTANT(opline, opline->op1);
8562 
8563 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
8564 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8565 	}
8566 
8567 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8568 
8569 	if (IS_CONST == IS_CONST ||
8570 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8571 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8572 			container = Z_REFVAL_P(container);
8573 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
8574 				result = (opline->extended_value & ZEND_ISEMPTY);
8575 				goto isset_object_finish;
8576 			}
8577 		} else {
8578 			result = (opline->extended_value & ZEND_ISEMPTY);
8579 			goto isset_object_finish;
8580 		}
8581 	}
8582 
8583 	result =
8584 		(opline->extended_value & ZEND_ISEMPTY) ^
8585 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
8586 
8587 isset_object_finish:
8588 	zval_ptr_dtor_nogc(free_op2);
8589 
8590 	ZEND_VM_SMART_BRANCH(result, 1);
8591 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
8592 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8593 }
8594 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8596 {
8597 	USE_OPLINE
8598 
8599 	zend_free_op free_op2;
8600 	zval *key, *subject;
8601 	HashTable *ht;
8602 	uint32_t result;
8603 
8604 	SAVE_OPLINE();
8605 
8606 	key = RT_CONSTANT(opline, opline->op1);
8607 	subject = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8608 
8609 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
8610 array_key_exists_array:
8611 		ht = Z_ARRVAL_P(subject);
8612 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
8613 	} else {
8614 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
8615 			subject = Z_REFVAL_P(subject);
8616 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
8617 				goto array_key_exists_array;
8618 			}
8619 		}
8620 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
8621 	}
8622 
8623 	zval_ptr_dtor_nogc(free_op2);
8624 
8625 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
8626 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
8627 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8628 }
8629 
8630 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8631 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8632 {
8633 	USE_OPLINE
8634 
8635 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
8636 
8637 	SAVE_OPLINE();
8638 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
8639 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8640 	}
8641 
8642 	/* Destroy the previously yielded value */
8643 	zval_ptr_dtor(&generator->value);
8644 
8645 	/* Destroy the previously yielded key */
8646 	zval_ptr_dtor(&generator->key);
8647 
8648 	/* Set the new yielded value */
8649 	if (IS_CONST != IS_UNUSED) {
8650 
8651 
8652 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
8653 			/* Constants and temporary variables aren't yieldable by reference,
8654 			 * but we still allow them with a notice. */
8655 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
8656 				zval *value;
8657 
8658 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8659 
8660 				value = RT_CONSTANT(opline, opline->op1);
8661 				ZVAL_COPY_VALUE(&generator->value, value);
8662 				if (IS_CONST == IS_CONST) {
8663 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8664 						Z_ADDREF(generator->value);
8665 					}
8666 				}
8667 			} else {
8668 				zval *value_ptr = NULL;
8669 
8670 				/* If a function call result is yielded and the function did
8671 				 * not return by reference we throw a notice. */
8672 				do {
8673 					if (IS_CONST == IS_VAR) {
8674 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
8675 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
8676 						 && !Z_ISREF_P(value_ptr)) {
8677 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8678 							ZVAL_COPY(&generator->value, value_ptr);
8679 							break;
8680 						}
8681 					}
8682 					if (Z_ISREF_P(value_ptr)) {
8683 						Z_ADDREF_P(value_ptr);
8684 					} else {
8685 						ZVAL_MAKE_REF_EX(value_ptr, 2);
8686 					}
8687 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
8688 				} while (0);
8689 
8690 			}
8691 		} else {
8692 			zval *value = RT_CONSTANT(opline, opline->op1);
8693 
8694 			/* Consts, temporary variables and references need copying */
8695 			if (IS_CONST == IS_CONST) {
8696 				ZVAL_COPY_VALUE(&generator->value, value);
8697 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8698 					Z_ADDREF(generator->value);
8699 				}
8700 			} else if (IS_CONST == IS_TMP_VAR) {
8701 				ZVAL_COPY_VALUE(&generator->value, value);
8702             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
8703 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
8704 
8705 			} else {
8706 				ZVAL_COPY_VALUE(&generator->value, value);
8707 				if (IS_CONST == IS_CV) {
8708 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
8709 				}
8710 			}
8711 		}
8712 	} else {
8713 		/* If no value was specified yield null */
8714 		ZVAL_NULL(&generator->value);
8715 	}
8716 
8717 	/* Set the new yielded key */
8718 	if (IS_TMP_VAR != IS_UNUSED) {
8719 		zend_free_op free_op2;
8720 		zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8721 
8722 		/* Consts, temporary variables and references need copying */
8723 		if (IS_TMP_VAR == IS_CONST) {
8724 			ZVAL_COPY_VALUE(&generator->key, key);
8725 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
8726 				Z_ADDREF(generator->key);
8727 			}
8728 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
8729 			ZVAL_COPY_VALUE(&generator->key, key);
8730 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
8731 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
8732 
8733 		} else {
8734 			ZVAL_COPY_VALUE(&generator->key, key);
8735 			if (IS_TMP_VAR == IS_CV) {
8736 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
8737 			}
8738 		}
8739 
8740 		if (Z_TYPE(generator->key) == IS_LONG
8741 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
8742 		) {
8743 			generator->largest_used_integer_key = Z_LVAL(generator->key);
8744 		}
8745 	} else {
8746 		/* If no key was specified we use auto-increment keys */
8747 		generator->largest_used_integer_key++;
8748 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
8749 	}
8750 
8751 	if (RETURN_VALUE_USED(opline)) {
8752 		/* If the return value of yield is used set the send
8753 		 * target and initialize it to NULL */
8754 		generator->send_target = EX_VAR(opline->result.var);
8755 		ZVAL_NULL(generator->send_target);
8756 	} else {
8757 		generator->send_target = NULL;
8758 	}
8759 
8760 	/* We increment to the next op, so we are at the correct position when the
8761 	 * generator is resumed. */
8762 	ZEND_VM_INC_OPCODE();
8763 
8764 	/* The GOTO VM uses a local opline variable. We need to set the opline
8765 	 * variable in execute_data so we don't resume at an old position. */
8766 	SAVE_OPLINE();
8767 
8768 	ZEND_VM_RETURN();
8769 }
8770 
ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8772 {
8773 	USE_OPLINE
8774 
8775 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
8776 
8777 	SAVE_OPLINE();
8778 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
8779 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8780 	}
8781 
8782 	/* Destroy the previously yielded value */
8783 	zval_ptr_dtor(&generator->value);
8784 
8785 	/* Destroy the previously yielded key */
8786 	zval_ptr_dtor(&generator->key);
8787 
8788 	/* Set the new yielded value */
8789 	if (IS_CONST != IS_UNUSED) {
8790 
8791 
8792 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
8793 			/* Constants and temporary variables aren't yieldable by reference,
8794 			 * but we still allow them with a notice. */
8795 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
8796 				zval *value;
8797 
8798 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8799 
8800 				value = RT_CONSTANT(opline, opline->op1);
8801 				ZVAL_COPY_VALUE(&generator->value, value);
8802 				if (IS_CONST == IS_CONST) {
8803 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8804 						Z_ADDREF(generator->value);
8805 					}
8806 				}
8807 			} else {
8808 				zval *value_ptr = NULL;
8809 
8810 				/* If a function call result is yielded and the function did
8811 				 * not return by reference we throw a notice. */
8812 				do {
8813 					if (IS_CONST == IS_VAR) {
8814 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
8815 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
8816 						 && !Z_ISREF_P(value_ptr)) {
8817 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
8818 							ZVAL_COPY(&generator->value, value_ptr);
8819 							break;
8820 						}
8821 					}
8822 					if (Z_ISREF_P(value_ptr)) {
8823 						Z_ADDREF_P(value_ptr);
8824 					} else {
8825 						ZVAL_MAKE_REF_EX(value_ptr, 2);
8826 					}
8827 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
8828 				} while (0);
8829 
8830 			}
8831 		} else {
8832 			zval *value = RT_CONSTANT(opline, opline->op1);
8833 
8834 			/* Consts, temporary variables and references need copying */
8835 			if (IS_CONST == IS_CONST) {
8836 				ZVAL_COPY_VALUE(&generator->value, value);
8837 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
8838 					Z_ADDREF(generator->value);
8839 				}
8840 			} else if (IS_CONST == IS_TMP_VAR) {
8841 				ZVAL_COPY_VALUE(&generator->value, value);
8842             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
8843 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
8844 
8845 			} else {
8846 				ZVAL_COPY_VALUE(&generator->value, value);
8847 				if (IS_CONST == IS_CV) {
8848 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
8849 				}
8850 			}
8851 		}
8852 	} else {
8853 		/* If no value was specified yield null */
8854 		ZVAL_NULL(&generator->value);
8855 	}
8856 
8857 	/* Set the new yielded key */
8858 	if (IS_VAR != IS_UNUSED) {
8859 		zend_free_op free_op2;
8860 		zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
8861 
8862 		/* Consts, temporary variables and references need copying */
8863 		if (IS_VAR == IS_CONST) {
8864 			ZVAL_COPY_VALUE(&generator->key, key);
8865 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
8866 				Z_ADDREF(generator->key);
8867 			}
8868 		} else if (IS_VAR == IS_TMP_VAR) {
8869 			ZVAL_COPY_VALUE(&generator->key, key);
8870 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
8871 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
8872 			zval_ptr_dtor_nogc(free_op2);
8873 		} else {
8874 			ZVAL_COPY_VALUE(&generator->key, key);
8875 			if (IS_VAR == IS_CV) {
8876 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
8877 			}
8878 		}
8879 
8880 		if (Z_TYPE(generator->key) == IS_LONG
8881 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
8882 		) {
8883 			generator->largest_used_integer_key = Z_LVAL(generator->key);
8884 		}
8885 	} else {
8886 		/* If no key was specified we use auto-increment keys */
8887 		generator->largest_used_integer_key++;
8888 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
8889 	}
8890 
8891 	if (RETURN_VALUE_USED(opline)) {
8892 		/* If the return value of yield is used set the send
8893 		 * target and initialize it to NULL */
8894 		generator->send_target = EX_VAR(opline->result.var);
8895 		ZVAL_NULL(generator->send_target);
8896 	} else {
8897 		generator->send_target = NULL;
8898 	}
8899 
8900 	/* We increment to the next op, so we are at the correct position when the
8901 	 * generator is resumed. */
8902 	ZEND_VM_INC_OPCODE();
8903 
8904 	/* The GOTO VM uses a local opline variable. We need to set the opline
8905 	 * variable in execute_data so we don't resume at an old position. */
8906 	SAVE_OPLINE();
8907 
8908 	ZEND_VM_RETURN();
8909 }
8910 
zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)8911 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
8912 {
8913 	USE_OPLINE
8914 
8915 	zval *varname;
8916 	zval *retval;
8917 	zend_string *name, *tmp_name;
8918 	HashTable *target_symbol_table;
8919 
8920 	SAVE_OPLINE();
8921 	varname = RT_CONSTANT(opline, opline->op1);
8922 
8923 	if (IS_CONST == IS_CONST) {
8924 		name = Z_STR_P(varname);
8925 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
8926 		name = Z_STR_P(varname);
8927 		tmp_name = NULL;
8928 	} else {
8929 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
8930 			ZVAL_UNDEFINED_OP1();
8931 		}
8932 		name = zval_try_get_tmp_string(varname, &tmp_name);
8933 		if (UNEXPECTED(!name)) {
8934 
8935 			ZVAL_UNDEF(EX_VAR(opline->result.var));
8936 			HANDLE_EXCEPTION();
8937 		}
8938 	}
8939 
8940 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
8941 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
8942 	if (retval == NULL) {
8943 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
8944 fetch_this:
8945 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
8946 			if (IS_CONST != IS_CONST) {
8947 				zend_tmp_string_release(tmp_name);
8948 			}
8949 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8950 		}
8951 		if (type == BP_VAR_W) {
8952 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
8953 		} else if (type == BP_VAR_IS) {
8954 			retval = &EG(uninitialized_zval);
8955 		} else {
8956 			zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
8957 			if (type == BP_VAR_RW) {
8958 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
8959 			} else {
8960 				retval = &EG(uninitialized_zval);
8961 			}
8962 		}
8963 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
8964 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
8965 		retval = Z_INDIRECT_P(retval);
8966 		if (Z_TYPE_P(retval) == IS_UNDEF) {
8967 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
8968 				goto fetch_this;
8969 			}
8970 			if (type == BP_VAR_W) {
8971 				ZVAL_NULL(retval);
8972 			} else if (type == BP_VAR_IS) {
8973 				retval = &EG(uninitialized_zval);
8974 			} else {
8975 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
8976 				if (type == BP_VAR_RW) {
8977 					ZVAL_NULL(retval);
8978 				} else {
8979 					retval = &EG(uninitialized_zval);
8980 				}
8981 			}
8982 		}
8983 	}
8984 
8985 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
8986 
8987 	}
8988 
8989 	if (IS_CONST != IS_CONST) {
8990 		zend_tmp_string_release(tmp_name);
8991 	}
8992 
8993 	ZEND_ASSERT(retval != NULL);
8994 	if (type == BP_VAR_R || type == BP_VAR_IS) {
8995 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8996 	} else {
8997 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
8998 	}
8999 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9000 }
9001 
ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9002 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9003 {
9004 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9005 }
9006 
ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9008 {
9009 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9010 }
9011 
ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9012 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9013 {
9014 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9015 }
9016 
ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9017 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9018 {
9019 	int fetch_type =
9020 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
9021 			BP_VAR_W : BP_VAR_R;
9022 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9023 }
9024 
ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9025 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9026 {
9027 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9028 }
9029 
ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9030 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9031 {
9032 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
9033 }
9034 
9035 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9037 {
9038 #if 0
9039 	USE_OPLINE
9040 #endif
9041 
9042 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9043         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9044 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9045         }
9046 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9047 	} else {
9048 		if (IS_UNUSED == IS_UNUSED) {
9049 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9050 		}
9051 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9052 	}
9053 }
9054 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9056 {
9057 	USE_OPLINE
9058 	zval *function_name;
9059 	zend_class_entry *ce;
9060 	uint32_t call_info;
9061 	zend_function *fbc;
9062 	zend_execute_data *call;
9063 
9064 	SAVE_OPLINE();
9065 
9066 	if (IS_CONST == IS_CONST) {
9067 		/* no function found. try a static method in class */
9068 		ce = CACHED_PTR(opline->result.num);
9069 		if (UNEXPECTED(ce == NULL)) {
9070 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
9071 			if (UNEXPECTED(ce == NULL)) {
9072 				ZEND_ASSERT(EG(exception));
9073 
9074 				HANDLE_EXCEPTION();
9075 			}
9076 			if (IS_UNUSED != IS_CONST) {
9077 				CACHE_PTR(opline->result.num, ce);
9078 			}
9079 		}
9080 	} else if (IS_CONST == IS_UNUSED) {
9081 		ce = zend_fetch_class(NULL, opline->op1.num);
9082 		if (UNEXPECTED(ce == NULL)) {
9083 			ZEND_ASSERT(EG(exception));
9084 
9085 			HANDLE_EXCEPTION();
9086 		}
9087 	} else {
9088 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9089 	}
9090 
9091 	if (IS_CONST == IS_CONST &&
9092 	    IS_UNUSED == IS_CONST &&
9093 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9094 		/* nothing to do */
9095 	} else if (IS_CONST != IS_CONST &&
9096 	           IS_UNUSED == IS_CONST &&
9097 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9098 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9099 	} else if (IS_UNUSED != IS_UNUSED) {
9100 
9101 
9102 		function_name = NULL;
9103 		if (IS_UNUSED != IS_CONST) {
9104 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9105 				do {
9106 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9107 						function_name = Z_REFVAL_P(function_name);
9108 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9109 							break;
9110 						}
9111 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9112 						ZVAL_UNDEFINED_OP2();
9113 						if (UNEXPECTED(EG(exception) != NULL)) {
9114 							HANDLE_EXCEPTION();
9115 						}
9116 					}
9117 					zend_throw_error(NULL, "Function name must be a string");
9118 
9119 					HANDLE_EXCEPTION();
9120 				} while (0);
9121 			}
9122 		}
9123 
9124 		if (ce->get_static_method) {
9125 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9126 		} else {
9127 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
9128 		}
9129 		if (UNEXPECTED(fbc == NULL)) {
9130 			if (EXPECTED(!EG(exception))) {
9131 				zend_undefined_method(ce, Z_STR_P(function_name));
9132 			}
9133 
9134 			HANDLE_EXCEPTION();
9135 		}
9136 		if (IS_UNUSED == IS_CONST &&
9137 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
9138 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
9139 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9140 		}
9141 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9142 			init_func_run_time_cache(&fbc->op_array);
9143 		}
9144 		if (IS_UNUSED != IS_CONST) {
9145 
9146 		}
9147 	} else {
9148 		if (UNEXPECTED(ce->constructor == NULL)) {
9149 			zend_throw_error(NULL, "Cannot call constructor");
9150 			HANDLE_EXCEPTION();
9151 		}
9152 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9153 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9154 			HANDLE_EXCEPTION();
9155 		}
9156 		fbc = ce->constructor;
9157 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9158 			init_func_run_time_cache(&fbc->op_array);
9159 		}
9160 	}
9161 
9162 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9163 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9164 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9165 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9166 		} else {
9167 			zend_non_static_method_call(fbc);
9168 			if (UNEXPECTED(EG(exception) != NULL)) {
9169 				HANDLE_EXCEPTION();
9170 			}
9171 			goto check_parent_and_self;
9172 		}
9173 	} else {
9174 check_parent_and_self:
9175 		/* previous opcode is ZEND_FETCH_CLASS */
9176 		if (IS_CONST == IS_UNUSED
9177 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9178 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9179 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9180 				ce = Z_OBJCE(EX(This));
9181 			} else {
9182 				ce = Z_CE(EX(This));
9183 			}
9184 		}
9185 		call_info = ZEND_CALL_NESTED_FUNCTION;
9186 	}
9187 
9188 	call = zend_vm_stack_push_call_frame(call_info,
9189 		fbc, opline->extended_value, ce);
9190 	call->prev_execute_data = EX(call);
9191 	EX(call) = call;
9192 
9193 	ZEND_VM_NEXT_OPCODE();
9194 }
9195 
ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9196 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9197 {
9198 	USE_OPLINE
9199 
9200 	SAVE_OPLINE();
9201 	if (IS_CONST == IS_UNUSED) {
9202 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
9203 	} else {
9204 /* prevents "undefined variable opline" errors */
9205 #if 0 || (IS_CONST != IS_UNUSED)
9206 		zval *retval_ref, *retval_ptr;
9207 
9208 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
9209 
9210 		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
9211 
9212 		if (IS_CONST == IS_CONST) {
9213 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
9214 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
9215 		} else if (IS_CONST == IS_VAR) {
9216 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
9217 				retval_ptr = Z_INDIRECT_P(retval_ptr);
9218 			}
9219 			ZVAL_DEREF(retval_ptr);
9220 		} else if (IS_CONST == IS_CV) {
9221 			ZVAL_DEREF(retval_ptr);
9222 		}
9223 
9224 		if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
9225 			&& ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
9226 			&& ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
9227 			&& !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
9228 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
9229 			&& retval_ref != retval_ptr)
9230 		) {
9231 			/* A cast might happen - unwrap the reference if this is a by-value return */
9232 			if (Z_REFCOUNT_P(retval_ref) == 1) {
9233 				ZVAL_UNREF(retval_ref);
9234 			} else {
9235 				Z_DELREF_P(retval_ref);
9236 				ZVAL_COPY(retval_ref, retval_ptr);
9237 			}
9238 			retval_ptr = retval_ref;
9239 		}
9240 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
9241 #endif
9242 	}
9243 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9244 }
9245 
ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9247 {
9248 	USE_OPLINE
9249 	zval *result;
9250 	zend_function *constructor;
9251 	zend_class_entry *ce;
9252 	zend_execute_data *call;
9253 
9254 	SAVE_OPLINE();
9255 	if (IS_CONST == IS_CONST) {
9256 		ce = CACHED_PTR(opline->op2.num);
9257 		if (UNEXPECTED(ce == NULL)) {
9258 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
9259 			if (UNEXPECTED(ce == NULL)) {
9260 				ZEND_ASSERT(EG(exception));
9261 				ZVAL_UNDEF(EX_VAR(opline->result.var));
9262 				HANDLE_EXCEPTION();
9263 			}
9264 			CACHE_PTR(opline->op2.num, ce);
9265 		}
9266 	} else if (IS_CONST == IS_UNUSED) {
9267 		ce = zend_fetch_class(NULL, opline->op1.num);
9268 		if (UNEXPECTED(ce == NULL)) {
9269 			ZEND_ASSERT(EG(exception));
9270 			ZVAL_UNDEF(EX_VAR(opline->result.var));
9271 			HANDLE_EXCEPTION();
9272 		}
9273 	} else {
9274 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9275 	}
9276 
9277 	result = EX_VAR(opline->result.var);
9278 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
9279 		ZVAL_UNDEF(result);
9280 		HANDLE_EXCEPTION();
9281 	}
9282 
9283 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
9284 	if (constructor == NULL) {
9285 		if (UNEXPECTED(EG(exception))) {
9286 			HANDLE_EXCEPTION();
9287 		}
9288 
9289 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
9290 		 * opcode is DO_FCALL in case EXT instructions are used. */
9291 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
9292 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
9293 		}
9294 
9295 		/* Perform a dummy function call */
9296 		call = zend_vm_stack_push_call_frame(
9297 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
9298 			opline->extended_value, NULL);
9299 	} else {
9300 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
9301 			init_func_run_time_cache(&constructor->op_array);
9302 		}
9303 		/* We are not handling overloaded classes right now */
9304 		call = zend_vm_stack_push_call_frame(
9305 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
9306 			constructor,
9307 			opline->extended_value,
9308 			Z_OBJ_P(result));
9309 		Z_ADDREF_P(result);
9310 	}
9311 
9312 	call->prev_execute_data = EX(call);
9313 	EX(call) = call;
9314 	ZEND_VM_NEXT_OPCODE();
9315 }
9316 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9317 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9318 {
9319 	USE_OPLINE
9320 
9321 	zval *expr_ptr, new_expr;
9322 
9323 	SAVE_OPLINE();
9324 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9325 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9326 		expr_ptr = NULL;
9327 		if (Z_ISREF_P(expr_ptr)) {
9328 			Z_ADDREF_P(expr_ptr);
9329 		} else {
9330 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
9331 		}
9332 
9333 	} else {
9334 		expr_ptr = RT_CONSTANT(opline, opline->op1);
9335 		if (IS_CONST == IS_TMP_VAR) {
9336 			/* pass */
9337 		} else if (IS_CONST == IS_CONST) {
9338 			Z_TRY_ADDREF_P(expr_ptr);
9339 		} else if (IS_CONST == IS_CV) {
9340 			ZVAL_DEREF(expr_ptr);
9341 			Z_TRY_ADDREF_P(expr_ptr);
9342 		} else /* if (IS_CONST == IS_VAR) */ {
9343 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9344 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9345 
9346 				expr_ptr = Z_REFVAL_P(expr_ptr);
9347 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9348 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9349 					expr_ptr = &new_expr;
9350 					efree_size(ref, sizeof(zend_reference));
9351 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9352 					Z_ADDREF_P(expr_ptr);
9353 				}
9354 			}
9355 		}
9356 	}
9357 
9358 	if (IS_UNUSED != IS_UNUSED) {
9359 
9360 		zval *offset = NULL;
9361 		zend_string *str;
9362 		zend_ulong hval;
9363 
9364 add_again:
9365 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9366 			str = Z_STR_P(offset);
9367 			if (IS_UNUSED != IS_CONST) {
9368 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9369 					goto num_index;
9370 				}
9371 			}
9372 str_index:
9373 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9374 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9375 			hval = Z_LVAL_P(offset);
9376 num_index:
9377 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9378 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9379 			offset = Z_REFVAL_P(offset);
9380 			goto add_again;
9381 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9382 			str = ZSTR_EMPTY_ALLOC();
9383 			goto str_index;
9384 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9385 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
9386 			goto num_index;
9387 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9388 			hval = 0;
9389 			goto num_index;
9390 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9391 			hval = 1;
9392 			goto num_index;
9393 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9394 			zend_use_resource_as_offset(offset);
9395 			hval = Z_RES_HANDLE_P(offset);
9396 			goto num_index;
9397 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9398 			ZVAL_UNDEFINED_OP2();
9399 			str = ZSTR_EMPTY_ALLOC();
9400 			goto str_index;
9401 		} else {
9402 			zend_illegal_offset();
9403 			zval_ptr_dtor_nogc(expr_ptr);
9404 		}
9405 
9406 	} else {
9407 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9408 			zend_cannot_add_element();
9409 			zval_ptr_dtor_nogc(expr_ptr);
9410 		}
9411 	}
9412 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9413 }
9414 
ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9416 {
9417 	zval *array;
9418 	uint32_t size;
9419 	USE_OPLINE
9420 
9421 	array = EX_VAR(opline->result.var);
9422 	if (IS_CONST != IS_UNUSED) {
9423 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9424 		ZVAL_ARR(array, zend_new_array(size));
9425 		/* Explicitly initialize array as not-packed if flag is set */
9426 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9427 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
9428 		}
9429 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9430 	} else {
9431 		ZVAL_ARR(array, zend_new_array(0));
9432 		ZEND_VM_NEXT_OPCODE();
9433 	}
9434 }
9435 
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9436 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9437 {
9438 	USE_OPLINE
9439 	zval *varname;
9440 	zend_string *name, *tmp_name;
9441 	HashTable *target_symbol_table;
9442 
9443 
9444 	SAVE_OPLINE();
9445 
9446 	varname = RT_CONSTANT(opline, opline->op1);
9447 
9448 	if (IS_CONST == IS_CONST) {
9449 		name = Z_STR_P(varname);
9450 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
9451 		name = Z_STR_P(varname);
9452 		tmp_name = NULL;
9453 	} else {
9454 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
9455 			varname = ZVAL_UNDEFINED_OP1();
9456 		}
9457 		name = zval_try_get_tmp_string(varname, &tmp_name);
9458 		if (UNEXPECTED(!name)) {
9459 
9460 			HANDLE_EXCEPTION();
9461 		}
9462 	}
9463 
9464 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
9465 	zend_hash_del_ind(target_symbol_table, name);
9466 
9467 	if (IS_CONST != IS_CONST) {
9468 		zend_tmp_string_release(tmp_name);
9469 	}
9470 
9471 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9472 }
9473 
9474 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9475 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9476 {
9477 	USE_OPLINE
9478 	zval *value;
9479 	int result;
9480 
9481 	zval *varname;
9482 	zend_string *name, *tmp_name;
9483 	HashTable *target_symbol_table;
9484 
9485 	SAVE_OPLINE();
9486 	varname = RT_CONSTANT(opline, opline->op1);
9487 	if (IS_CONST == IS_CONST) {
9488 		name = Z_STR_P(varname);
9489 	} else {
9490 		name = zval_get_tmp_string(varname, &tmp_name);
9491 	}
9492 
9493 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
9494 	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
9495 
9496 	if (IS_CONST != IS_CONST) {
9497 		zend_tmp_string_release(tmp_name);
9498 	}
9499 
9500 	if (!value) {
9501 		result = (opline->extended_value & ZEND_ISEMPTY);
9502 	} else {
9503 		if (Z_TYPE_P(value) == IS_INDIRECT) {
9504 			value = Z_INDIRECT_P(value);
9505 		}
9506 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
9507 			if (Z_ISREF_P(value)) {
9508 				value = Z_REFVAL_P(value);
9509 			}
9510 			result = Z_TYPE_P(value) > IS_NULL;
9511 		} else {
9512 			result = !i_zend_is_true(value);
9513 		}
9514 	}
9515 
9516 	ZEND_VM_SMART_BRANCH(result, 1);
9517 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
9518 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9519 }
9520 
9521 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9523 {
9524 	USE_OPLINE
9525 	zend_function *func;
9526 	zval *zfunc;
9527 	zval *object;
9528 	zend_class_entry *called_scope;
9529 
9530 	func = CACHED_PTR(opline->extended_value);
9531 	if (UNEXPECTED(func == NULL)) {
9532 		zfunc = zend_hash_find_ex(EG(function_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1);
9533 		ZEND_ASSERT(zfunc != NULL);
9534 		func = Z_FUNC_P(zfunc);
9535 		ZEND_ASSERT(func->type == ZEND_USER_FUNCTION);
9536 		CACHE_PTR(opline->extended_value, func);
9537 	}
9538 
9539 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
9540 		called_scope = Z_OBJCE(EX(This));
9541 		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
9542 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
9543 			object = NULL;
9544 		} else {
9545 			object = &EX(This);
9546 		}
9547 	} else {
9548 		called_scope = Z_CE(EX(This));
9549 		object = NULL;
9550 	}
9551 	zend_create_closure(EX_VAR(opline->result.var), func,
9552 		EX(func)->op_array.scope, called_scope, object);
9553 
9554 	ZEND_VM_NEXT_OPCODE();
9555 }
9556 
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9558 {
9559 	USE_OPLINE
9560 
9561 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
9562 
9563 	SAVE_OPLINE();
9564 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
9565 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9566 	}
9567 
9568 	/* Destroy the previously yielded value */
9569 	zval_ptr_dtor(&generator->value);
9570 
9571 	/* Destroy the previously yielded key */
9572 	zval_ptr_dtor(&generator->key);
9573 
9574 	/* Set the new yielded value */
9575 	if (IS_CONST != IS_UNUSED) {
9576 
9577 
9578 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
9579 			/* Constants and temporary variables aren't yieldable by reference,
9580 			 * but we still allow them with a notice. */
9581 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
9582 				zval *value;
9583 
9584 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9585 
9586 				value = RT_CONSTANT(opline, opline->op1);
9587 				ZVAL_COPY_VALUE(&generator->value, value);
9588 				if (IS_CONST == IS_CONST) {
9589 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9590 						Z_ADDREF(generator->value);
9591 					}
9592 				}
9593 			} else {
9594 				zval *value_ptr = NULL;
9595 
9596 				/* If a function call result is yielded and the function did
9597 				 * not return by reference we throw a notice. */
9598 				do {
9599 					if (IS_CONST == IS_VAR) {
9600 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
9601 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
9602 						 && !Z_ISREF_P(value_ptr)) {
9603 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9604 							ZVAL_COPY(&generator->value, value_ptr);
9605 							break;
9606 						}
9607 					}
9608 					if (Z_ISREF_P(value_ptr)) {
9609 						Z_ADDREF_P(value_ptr);
9610 					} else {
9611 						ZVAL_MAKE_REF_EX(value_ptr, 2);
9612 					}
9613 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
9614 				} while (0);
9615 
9616 			}
9617 		} else {
9618 			zval *value = RT_CONSTANT(opline, opline->op1);
9619 
9620 			/* Consts, temporary variables and references need copying */
9621 			if (IS_CONST == IS_CONST) {
9622 				ZVAL_COPY_VALUE(&generator->value, value);
9623 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9624 					Z_ADDREF(generator->value);
9625 				}
9626 			} else if (IS_CONST == IS_TMP_VAR) {
9627 				ZVAL_COPY_VALUE(&generator->value, value);
9628             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
9629 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
9630 
9631 			} else {
9632 				ZVAL_COPY_VALUE(&generator->value, value);
9633 				if (IS_CONST == IS_CV) {
9634 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
9635 				}
9636 			}
9637 		}
9638 	} else {
9639 		/* If no value was specified yield null */
9640 		ZVAL_NULL(&generator->value);
9641 	}
9642 
9643 	/* Set the new yielded key */
9644 	if (IS_UNUSED != IS_UNUSED) {
9645 
9646 		zval *key = NULL;
9647 
9648 		/* Consts, temporary variables and references need copying */
9649 		if (IS_UNUSED == IS_CONST) {
9650 			ZVAL_COPY_VALUE(&generator->key, key);
9651 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
9652 				Z_ADDREF(generator->key);
9653 			}
9654 		} else if (IS_UNUSED == IS_TMP_VAR) {
9655 			ZVAL_COPY_VALUE(&generator->key, key);
9656 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
9657 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
9658 
9659 		} else {
9660 			ZVAL_COPY_VALUE(&generator->key, key);
9661 			if (IS_UNUSED == IS_CV) {
9662 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
9663 			}
9664 		}
9665 
9666 		if (Z_TYPE(generator->key) == IS_LONG
9667 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
9668 		) {
9669 			generator->largest_used_integer_key = Z_LVAL(generator->key);
9670 		}
9671 	} else {
9672 		/* If no key was specified we use auto-increment keys */
9673 		generator->largest_used_integer_key++;
9674 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
9675 	}
9676 
9677 	if (RETURN_VALUE_USED(opline)) {
9678 		/* If the return value of yield is used set the send
9679 		 * target and initialize it to NULL */
9680 		generator->send_target = EX_VAR(opline->result.var);
9681 		ZVAL_NULL(generator->send_target);
9682 	} else {
9683 		generator->send_target = NULL;
9684 	}
9685 
9686 	/* We increment to the next op, so we are at the correct position when the
9687 	 * generator is resumed. */
9688 	ZEND_VM_INC_OPCODE();
9689 
9690 	/* The GOTO VM uses a local opline variable. We need to set the opline
9691 	 * variable in execute_data so we don't resume at an old position. */
9692 	SAVE_OPLINE();
9693 
9694 	ZEND_VM_RETURN();
9695 }
9696 
ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9697 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9698 {
9699 	USE_OPLINE
9700 
9701 	zval *op1;
9702 	zend_long count;
9703 
9704 	SAVE_OPLINE();
9705 	op1 = RT_CONSTANT(opline, opline->op1);
9706 	while (1) {
9707 		if (Z_TYPE_P(op1) == IS_ARRAY) {
9708 			count = zend_array_count(Z_ARRVAL_P(op1));
9709 			break;
9710 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
9711 			/* first, we check if the handler is defined */
9712 			if (Z_OBJ_HT_P(op1)->count_elements) {
9713 				if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
9714 					break;
9715 				}
9716 				if (UNEXPECTED(EG(exception))) {
9717 					count = 0;
9718 					break;
9719 				}
9720 			}
9721 
9722 			/* if not and the object implements Countable we call its count() method */
9723 			if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
9724 				zval retval;
9725 
9726 				zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
9727 				count = zval_get_long(&retval);
9728 				zval_ptr_dtor(&retval);
9729 				break;
9730 			}
9731 
9732 			/* If There's no handler and it doesn't implement Countable then add a warning */
9733 			count = 1;
9734 		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9735 			op1 = Z_REFVAL_P(op1);
9736 			continue;
9737 		} else if (Z_TYPE_P(op1) <= IS_NULL) {
9738 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9739 				ZVAL_UNDEFINED_OP1();
9740 			}
9741 			count = 0;
9742 		} else {
9743 			count = 1;
9744 		}
9745 		zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
9746 		break;
9747 	}
9748 
9749 	ZVAL_LONG(EX_VAR(opline->result.var), count);
9750 
9751 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9752 }
9753 
ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9754 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9755 {
9756 	USE_OPLINE
9757 
9758 	if (IS_CONST == IS_UNUSED) {
9759 		if (UNEXPECTED(!EX(func)->common.scope)) {
9760 			SAVE_OPLINE();
9761 			zend_error(E_WARNING, "get_class() called without object from outside a class");
9762 			ZVAL_FALSE(EX_VAR(opline->result.var));
9763 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9764 		} else {
9765 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
9766 			ZEND_VM_NEXT_OPCODE();
9767 		}
9768 	} else {
9769 
9770 		zval *op1;
9771 
9772 		SAVE_OPLINE();
9773 		op1 = RT_CONSTANT(opline, opline->op1);
9774 		while (1) {
9775 			if (Z_TYPE_P(op1) == IS_OBJECT) {
9776 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
9777 			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
9778 				op1 = Z_REFVAL_P(op1);
9779 				continue;
9780 			} else {
9781 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9782 					ZVAL_UNDEFINED_OP1();
9783 				}
9784 				zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
9785 				ZVAL_FALSE(EX_VAR(opline->result.var));
9786 			}
9787 			break;
9788 		}
9789 
9790 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9791 	}
9792 }
9793 
ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9794 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9795 {
9796 	USE_OPLINE
9797 
9798 	zval *op1;
9799 	zend_string *type;
9800 
9801 	SAVE_OPLINE();
9802 	op1 = RT_CONSTANT(opline, opline->op1);
9803 	type = zend_zval_get_type(op1);
9804 	if (EXPECTED(type)) {
9805 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
9806 	} else {
9807 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
9808 	}
9809 
9810 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9811 }
9812 
ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9813 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9814 {
9815 	USE_OPLINE
9816 	zend_array *ht;
9817 	uint32_t arg_count, result_size, skip;
9818 
9819 	arg_count = EX_NUM_ARGS();
9820 	if (IS_CONST == IS_CONST) {
9821 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
9822 		if (arg_count < skip) {
9823 			result_size = 0;
9824 		} else {
9825 			result_size = arg_count - skip;
9826 		}
9827 	} else {
9828 		skip = 0;
9829 		result_size = arg_count;
9830 	}
9831 
9832 	if (result_size) {
9833 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
9834 
9835 		ht = zend_new_array(result_size);
9836 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
9837 		zend_hash_real_init_packed(ht);
9838 		ZEND_HASH_FILL_PACKED(ht) {
9839 			zval *p, *q;
9840 			uint32_t i = skip;
9841 			p = EX_VAR_NUM(i);
9842 			if (arg_count > first_extra_arg) {
9843 				while (i < first_extra_arg) {
9844 					q = p;
9845 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
9846 						ZVAL_DEREF(q);
9847 						if (Z_OPT_REFCOUNTED_P(q)) {
9848 							Z_ADDREF_P(q);
9849 						}
9850 						ZEND_HASH_FILL_SET(q);
9851 					} else {
9852 						ZEND_HASH_FILL_SET_NULL();
9853 					}
9854 					ZEND_HASH_FILL_NEXT();
9855 					p++;
9856 					i++;
9857 				}
9858 				if (skip < first_extra_arg) {
9859 					skip = 0;
9860 				} else {
9861 					skip -= first_extra_arg;
9862 				}
9863 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
9864 			}
9865 			while (i < arg_count) {
9866 				q = p;
9867 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
9868 					ZVAL_DEREF(q);
9869 					if (Z_OPT_REFCOUNTED_P(q)) {
9870 						Z_ADDREF_P(q);
9871 					}
9872 					ZEND_HASH_FILL_SET(q);
9873 				} else {
9874 					ZEND_HASH_FILL_SET_NULL();
9875 				}
9876 				ZEND_HASH_FILL_NEXT();
9877 				p++;
9878 				i++;
9879 			}
9880 		} ZEND_HASH_FILL_END();
9881 		ht->nNumOfElements = result_size;
9882 	} else {
9883 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
9884 	}
9885 	ZEND_VM_NEXT_OPCODE();
9886 }
9887 
ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9889 {
9890 	USE_OPLINE
9891 
9892 	zval *op1, *op2;
9893 
9894 	SAVE_OPLINE();
9895 	op1 = RT_CONSTANT(opline, opline->op1);
9896 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
9897 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
9898 
9899 
9900 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9901 }
9902 
ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9904 {
9905 	USE_OPLINE
9906 
9907 	zval *op1, *op2;
9908 
9909 	SAVE_OPLINE();
9910 	op1 = RT_CONSTANT(opline, opline->op1);
9911 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
9912 	pow_function(EX_VAR(opline->result.var), op1, op2);
9913 
9914 
9915 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9916 }
9917 
ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9918 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9919 {
9920 	USE_OPLINE
9921 
9922 	zval *op1, *op2;
9923 
9924 	op1 = RT_CONSTANT(opline, opline->op1);
9925 	op2 = EX_VAR(opline->op2.var);
9926 
9927 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
9928 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
9929 		zend_string *op1_str = Z_STR_P(op1);
9930 		zend_string *op2_str = Z_STR_P(op2);
9931 		zend_string *str;
9932 
9933 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9934 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
9935 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
9936 			} else {
9937 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9938 			}
9939 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9940 				zend_string_release_ex(op1_str, 0);
9941 			}
9942 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9943 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
9944 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
9945 			} else {
9946 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9947 			}
9948 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
9949 				zend_string_release_ex(op2_str, 0);
9950 			}
9951 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
9952 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
9953 		    size_t len = ZSTR_LEN(op1_str);
9954 
9955 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
9956 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9957 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9958 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
9959 				zend_string_release_ex(op2_str, 0);
9960 			}
9961 		} else {
9962 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9963 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9964 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9965 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9966 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9967 				zend_string_release_ex(op1_str, 0);
9968 			}
9969 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
9970 				zend_string_release_ex(op2_str, 0);
9971 			}
9972 		}
9973 		ZEND_VM_NEXT_OPCODE();
9974 	} else {
9975 		SAVE_OPLINE();
9976 
9977 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9978 			op1 = ZVAL_UNDEFINED_OP1();
9979 		}
9980 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9981 			op2 = ZVAL_UNDEFINED_OP2();
9982 		}
9983 		concat_function(EX_VAR(opline->result.var), op1, op2);
9984 
9985 
9986 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9987 	}
9988 }
9989 
ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9990 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9991 {
9992 	USE_OPLINE
9993 
9994 	zval *op1, *op2;
9995 
9996 	SAVE_OPLINE();
9997 	op1 = RT_CONSTANT(opline, opline->op1);
9998 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
9999 	compare_function(EX_VAR(opline->result.var), op1, op2);
10000 
10001 
10002 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10003 }
10004 
ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10006 {
10007 	USE_OPLINE
10008 
10009 	zval *container, *dim, *value;
10010 
10011 	SAVE_OPLINE();
10012 	container = RT_CONSTANT(opline, opline->op1);
10013 	dim = EX_VAR(opline->op2.var);
10014 	if (IS_CONST != IS_CONST) {
10015 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10016 fetch_dim_r_array:
10017 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
10018 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
10019 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
10020 			container = Z_REFVAL_P(container);
10021 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10022 				goto fetch_dim_r_array;
10023 			} else {
10024 				goto fetch_dim_r_slow;
10025 			}
10026 		} else {
10027 fetch_dim_r_slow:
10028 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
10029 				dim++;
10030 			}
10031 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
10032 		}
10033 	} else {
10034 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
10035 	}
10036 
10037 
10038 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10039 }
10040 
ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10042 {
10043 	USE_OPLINE
10044 
10045 	zval *container;
10046 
10047 	SAVE_OPLINE();
10048 	container = RT_CONSTANT(opline, opline->op1);
10049 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
10050 
10051 
10052 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10053 }
10054 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10056 {
10057 #if 0
10058 	USE_OPLINE
10059 #endif
10060 
10061 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10062         if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10063 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10064         }
10065 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10066 	} else {
10067 		if (IS_CV == IS_UNUSED) {
10068 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10069 		}
10070 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10071 	}
10072 }
10073 
ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10074 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10075 {
10076 	USE_OPLINE
10077 
10078 	zval *container;
10079 
10080 	zval *offset;
10081 	void **cache_slot = NULL;
10082 
10083 	SAVE_OPLINE();
10084 	container = RT_CONSTANT(opline, opline->op1);
10085 
10086 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10087 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10088 	}
10089 
10090 	offset = EX_VAR(opline->op2.var);
10091 
10092 	if (IS_CONST == IS_CONST ||
10093 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10094 	    do {
10095 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10096 				container = Z_REFVAL_P(container);
10097 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
10098 					break;
10099 				}
10100 			}
10101 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10102 				ZVAL_UNDEFINED_OP1();
10103 			}
10104 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
10105 				ZVAL_UNDEFINED_OP2();
10106 			}
10107 			zend_wrong_property_read(offset);
10108 			ZVAL_NULL(EX_VAR(opline->result.var));
10109 			goto fetch_obj_r_finish;
10110 		} while (0);
10111 	}
10112 
10113 	/* here we are sure we are dealing with an object */
10114 	do {
10115 		zend_object *zobj = Z_OBJ_P(container);
10116 		zval *retval;
10117 
10118 		if (IS_CV == IS_CONST) {
10119 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
10120 
10121 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
10122 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
10123 
10124 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
10125 					retval = OBJ_PROP(zobj, prop_offset);
10126 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
10127 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10128 							goto fetch_obj_r_copy;
10129 						} else {
10130 fetch_obj_r_fast_copy:
10131 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10132 							ZEND_VM_NEXT_OPCODE();
10133 						}
10134 					}
10135 				} else if (EXPECTED(zobj->properties != NULL)) {
10136 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
10137 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
10138 
10139 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
10140 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
10141 
10142 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
10143 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
10144 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
10145 						          EXPECTED(p->key != NULL) &&
10146 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
10147 								retval = &p->val;
10148 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10149 									goto fetch_obj_r_copy;
10150 								} else {
10151 									goto fetch_obj_r_fast_copy;
10152 								}
10153 							}
10154 						}
10155 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
10156 					}
10157 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
10158 					if (EXPECTED(retval)) {
10159 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
10160 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
10161 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10162 							goto fetch_obj_r_copy;
10163 						} else {
10164 							goto fetch_obj_r_fast_copy;
10165 						}
10166 					}
10167 				}
10168 			}
10169 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
10170 			ZVAL_UNDEFINED_OP2();
10171 		}
10172 
10173 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
10174 
10175 		if (retval != EX_VAR(opline->result.var)) {
10176 fetch_obj_r_copy:
10177 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10178 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
10179 			zend_unwrap_reference(retval);
10180 		}
10181 	} while (0);
10182 
10183 fetch_obj_r_finish:
10184 
10185 
10186 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10187 }
10188 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10189 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10190 {
10191 	USE_OPLINE
10192 
10193 	zval *container;
10194 
10195 	zval *offset;
10196 	void **cache_slot = NULL;
10197 
10198 	SAVE_OPLINE();
10199 	container = RT_CONSTANT(opline, opline->op1);
10200 
10201 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
10202 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10203 	}
10204 
10205 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10206 
10207 	if (IS_CONST == IS_CONST ||
10208 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
10209 		do {
10210 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
10211 				container = Z_REFVAL_P(container);
10212 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
10213 					break;
10214 				}
10215 			}
10216 			ZVAL_NULL(EX_VAR(opline->result.var));
10217 			goto fetch_obj_is_finish;
10218 		} while (0);
10219 	}
10220 
10221 	/* here we are sure we are dealing with an object */
10222 	do {
10223 		zend_object *zobj = Z_OBJ_P(container);
10224 		zval *retval;
10225 
10226 		if (IS_CV == IS_CONST) {
10227 			cache_slot = CACHE_ADDR(opline->extended_value);
10228 
10229 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
10230 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
10231 
10232 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
10233 					retval = OBJ_PROP(zobj, prop_offset);
10234 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
10235 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10236 							goto fetch_obj_is_copy;
10237 						} else {
10238 fetch_obj_is_fast_copy:
10239 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10240 							ZEND_VM_NEXT_OPCODE();
10241 						}
10242 					}
10243 				} else if (EXPECTED(zobj->properties != NULL)) {
10244 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
10245 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
10246 
10247 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
10248 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
10249 
10250 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
10251 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
10252 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
10253 						          EXPECTED(p->key != NULL) &&
10254 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
10255 								retval = &p->val;
10256 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10257 									goto fetch_obj_is_copy;
10258 								} else {
10259 									goto fetch_obj_is_fast_copy;
10260 								}
10261 							}
10262 						}
10263 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
10264 					}
10265 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
10266 					if (EXPECTED(retval)) {
10267 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
10268 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
10269 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
10270 							goto fetch_obj_is_copy;
10271 						} else {
10272 							goto fetch_obj_is_fast_copy;
10273 						}
10274 					}
10275 				}
10276 			}
10277 		}
10278 
10279 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
10280 
10281 		if (retval != EX_VAR(opline->result.var)) {
10282 fetch_obj_is_copy:
10283 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10284 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
10285 			zend_unwrap_reference(retval);
10286 		}
10287 	} while (0);
10288 
10289 fetch_obj_is_finish:
10290 
10291 
10292 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10293 }
10294 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10295 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10296 {
10297 #if 0
10298 	USE_OPLINE
10299 #endif
10300 
10301 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10302 		/* Behave like FETCH_OBJ_W */
10303 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10304 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10305 		}
10306 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10307 	} else {
10308 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10309 	}
10310 }
10311 
ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10312 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10313 {
10314 	USE_OPLINE
10315 
10316 	zval *container;
10317 
10318 	SAVE_OPLINE();
10319 	container = RT_CONSTANT(opline, opline->op1);
10320 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
10321 
10322 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10323 }
10324 
ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10326 {
10327 	USE_OPLINE
10328 
10329 	zval *op1, *op2;
10330 	zend_string *op1_str, *op2_str, *str;
10331 
10332 
10333 	op1 = RT_CONSTANT(opline, opline->op1);
10334 	op2 = EX_VAR(opline->op2.var);
10335 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
10336 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
10337 		zend_string *op1_str = Z_STR_P(op1);
10338 		zend_string *op2_str = Z_STR_P(op2);
10339 		zend_string *str;
10340 
10341 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10342 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
10343 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
10344 			} else {
10345 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
10346 			}
10347 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10348 				zend_string_release_ex(op1_str, 0);
10349 			}
10350 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10351 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
10352 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
10353 			} else {
10354 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
10355 			}
10356 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10357 				zend_string_release_ex(op2_str, 0);
10358 			}
10359 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
10360 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
10361 		    size_t len = ZSTR_LEN(op1_str);
10362 
10363 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
10364 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
10365 			}
10366 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
10367 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10368 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10369 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10370 				zend_string_release_ex(op2_str, 0);
10371 			}
10372 		} else {
10373 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10374 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10375 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10376 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10377 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
10378 				zend_string_release_ex(op1_str, 0);
10379 			}
10380 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
10381 				zend_string_release_ex(op2_str, 0);
10382 			}
10383 		}
10384 		ZEND_VM_NEXT_OPCODE();
10385 	}
10386 
10387 	SAVE_OPLINE();
10388 	if (IS_CONST == IS_CONST) {
10389 		op1_str = Z_STR_P(op1);
10390 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
10391 		op1_str = zend_string_copy(Z_STR_P(op1));
10392 	} else {
10393 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10394 			ZVAL_UNDEFINED_OP1();
10395 		}
10396 		op1_str = zval_get_string_func(op1);
10397 	}
10398 	if (IS_CV == IS_CONST) {
10399 		op2_str = Z_STR_P(op2);
10400 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
10401 		op2_str = zend_string_copy(Z_STR_P(op2));
10402 	} else {
10403 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
10404 			ZVAL_UNDEFINED_OP2();
10405 		}
10406 		op2_str = zval_get_string_func(op2);
10407 	}
10408 	do {
10409 		if (IS_CONST != IS_CONST) {
10410 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
10411 				if (IS_CV == IS_CONST) {
10412 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
10413 						GC_ADDREF(op2_str);
10414 					}
10415 				}
10416 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
10417 				zend_string_release_ex(op1_str, 0);
10418 				break;
10419 			}
10420 		}
10421 		if (IS_CV != IS_CONST) {
10422 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
10423 				if (IS_CONST == IS_CONST) {
10424 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
10425 						GC_ADDREF(op1_str);
10426 					}
10427 				}
10428 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
10429 				zend_string_release_ex(op2_str, 0);
10430 				break;
10431 			}
10432 		}
10433 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
10434 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
10435 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
10436 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
10437 		if (IS_CONST != IS_CONST) {
10438 			zend_string_release_ex(op1_str, 0);
10439 		}
10440 		if (IS_CV != IS_CONST) {
10441 			zend_string_release_ex(op2_str, 0);
10442 		}
10443 	} while (0);
10444 
10445 
10446 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10447 }
10448 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10449 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10450 {
10451 	USE_OPLINE
10452 	zval *function_name;
10453 	zend_free_op free_op1;
10454 	zval *object;
10455 	zend_function *fbc;
10456 	zend_class_entry *called_scope;
10457 	zend_object *obj;
10458 	zend_execute_data *call;
10459 	uint32_t call_info;
10460 
10461 	SAVE_OPLINE();
10462 
10463 	object = RT_CONSTANT(opline, opline->op1);
10464 
10465 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
10466 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10467 	}
10468 
10469 	if (IS_CV != IS_CONST) {
10470 		function_name = EX_VAR(opline->op2.var);
10471 	}
10472 
10473 	if (IS_CV != IS_CONST &&
10474 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
10475 		do {
10476 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
10477 				function_name = Z_REFVAL_P(function_name);
10478 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
10479 					break;
10480 				}
10481 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
10482 				ZVAL_UNDEFINED_OP2();
10483 				if (UNEXPECTED(EG(exception) != NULL)) {
10484 
10485 					HANDLE_EXCEPTION();
10486 				}
10487 			}
10488 			zend_throw_error(NULL, "Method name must be a string");
10489 
10490 
10491 			HANDLE_EXCEPTION();
10492 		} while (0);
10493 	}
10494 
10495 	if (IS_CONST != IS_UNUSED) {
10496 		do {
10497 			if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
10498 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
10499 					object = Z_REFVAL_P(object);
10500 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
10501 						break;
10502 					}
10503 				}
10504 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
10505 					object = ZVAL_UNDEFINED_OP1();
10506 					if (UNEXPECTED(EG(exception) != NULL)) {
10507 						if (IS_CV != IS_CONST) {
10508 
10509 						}
10510 						HANDLE_EXCEPTION();
10511 					}
10512 				}
10513 				if (IS_CV == IS_CONST) {
10514 					function_name = EX_VAR(opline->op2.var);
10515 				}
10516 				zend_invalid_method_call(object, function_name);
10517 
10518 
10519 				HANDLE_EXCEPTION();
10520 			}
10521 		} while (0);
10522 	}
10523 
10524 	obj = Z_OBJ_P(object);
10525 	called_scope = obj->ce;
10526 
10527 	if (IS_CV == IS_CONST &&
10528 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
10529 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
10530 	} else {
10531 	    zend_object *orig_obj = obj;
10532 
10533 		if (IS_CV == IS_CONST) {
10534 			function_name = EX_VAR(opline->op2.var);
10535 		}
10536 
10537 		/* First, locate the function. */
10538 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
10539 		if (UNEXPECTED(fbc == NULL)) {
10540 			if (EXPECTED(!EG(exception))) {
10541 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
10542 			}
10543 
10544 
10545 			HANDLE_EXCEPTION();
10546 		}
10547 		if (IS_CV == IS_CONST &&
10548 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
10549 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
10550 		    EXPECTED(obj == orig_obj)) {
10551 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
10552 		}
10553 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
10554 			/* Reset "object" to trigger reference counting */
10555 			object = NULL;
10556 		}
10557 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10558 			init_func_run_time_cache(&fbc->op_array);
10559 		}
10560 	}
10561 
10562 	if (IS_CV != IS_CONST) {
10563 
10564 	}
10565 
10566 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
10567 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
10568 
10569 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
10570 			HANDLE_EXCEPTION();
10571 		}
10572 		/* call static method */
10573 		obj = (zend_object*)called_scope;
10574 		call_info = ZEND_CALL_NESTED_FUNCTION;
10575 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
10576 		if (IS_CONST == IS_CV) {
10577 			GC_ADDREF(obj); /* For $this pointer */
10578 		} else if (free_op1 != object) {
10579 			GC_ADDREF(obj); /* For $this pointer */
10580 
10581 		}
10582 		/* CV may be changed indirectly (e.g. when it's a reference) */
10583 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
10584 	}
10585 
10586 	call = zend_vm_stack_push_call_frame(call_info,
10587 		fbc, opline->extended_value, obj);
10588 	call->prev_execute_data = EX(call);
10589 	EX(call) = call;
10590 
10591 	ZEND_VM_NEXT_OPCODE();
10592 }
10593 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10595 {
10596 	USE_OPLINE
10597 	zval *function_name;
10598 	zend_class_entry *ce;
10599 	uint32_t call_info;
10600 	zend_function *fbc;
10601 	zend_execute_data *call;
10602 
10603 	SAVE_OPLINE();
10604 
10605 	if (IS_CONST == IS_CONST) {
10606 		/* no function found. try a static method in class */
10607 		ce = CACHED_PTR(opline->result.num);
10608 		if (UNEXPECTED(ce == NULL)) {
10609 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
10610 			if (UNEXPECTED(ce == NULL)) {
10611 				ZEND_ASSERT(EG(exception));
10612 
10613 				HANDLE_EXCEPTION();
10614 			}
10615 			if (IS_CV != IS_CONST) {
10616 				CACHE_PTR(opline->result.num, ce);
10617 			}
10618 		}
10619 	} else if (IS_CONST == IS_UNUSED) {
10620 		ce = zend_fetch_class(NULL, opline->op1.num);
10621 		if (UNEXPECTED(ce == NULL)) {
10622 			ZEND_ASSERT(EG(exception));
10623 
10624 			HANDLE_EXCEPTION();
10625 		}
10626 	} else {
10627 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10628 	}
10629 
10630 	if (IS_CONST == IS_CONST &&
10631 	    IS_CV == IS_CONST &&
10632 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
10633 		/* nothing to do */
10634 	} else if (IS_CONST != IS_CONST &&
10635 	           IS_CV == IS_CONST &&
10636 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
10637 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
10638 	} else if (IS_CV != IS_UNUSED) {
10639 
10640 
10641 		function_name = EX_VAR(opline->op2.var);
10642 		if (IS_CV != IS_CONST) {
10643 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
10644 				do {
10645 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
10646 						function_name = Z_REFVAL_P(function_name);
10647 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
10648 							break;
10649 						}
10650 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
10651 						ZVAL_UNDEFINED_OP2();
10652 						if (UNEXPECTED(EG(exception) != NULL)) {
10653 							HANDLE_EXCEPTION();
10654 						}
10655 					}
10656 					zend_throw_error(NULL, "Function name must be a string");
10657 
10658 					HANDLE_EXCEPTION();
10659 				} while (0);
10660 			}
10661 		}
10662 
10663 		if (ce->get_static_method) {
10664 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
10665 		} else {
10666 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
10667 		}
10668 		if (UNEXPECTED(fbc == NULL)) {
10669 			if (EXPECTED(!EG(exception))) {
10670 				zend_undefined_method(ce, Z_STR_P(function_name));
10671 			}
10672 
10673 			HANDLE_EXCEPTION();
10674 		}
10675 		if (IS_CV == IS_CONST &&
10676 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
10677 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
10678 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
10679 		}
10680 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10681 			init_func_run_time_cache(&fbc->op_array);
10682 		}
10683 		if (IS_CV != IS_CONST) {
10684 
10685 		}
10686 	} else {
10687 		if (UNEXPECTED(ce->constructor == NULL)) {
10688 			zend_throw_error(NULL, "Cannot call constructor");
10689 			HANDLE_EXCEPTION();
10690 		}
10691 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
10692 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
10693 			HANDLE_EXCEPTION();
10694 		}
10695 		fbc = ce->constructor;
10696 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10697 			init_func_run_time_cache(&fbc->op_array);
10698 		}
10699 	}
10700 
10701 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
10702 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
10703 			ce = (zend_class_entry*)Z_OBJ(EX(This));
10704 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
10705 		} else {
10706 			zend_non_static_method_call(fbc);
10707 			if (UNEXPECTED(EG(exception) != NULL)) {
10708 				HANDLE_EXCEPTION();
10709 			}
10710 			goto check_parent_and_self;
10711 		}
10712 	} else {
10713 check_parent_and_self:
10714 		/* previous opcode is ZEND_FETCH_CLASS */
10715 		if (IS_CONST == IS_UNUSED
10716 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
10717 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
10718 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
10719 				ce = Z_OBJCE(EX(This));
10720 			} else {
10721 				ce = Z_CE(EX(This));
10722 			}
10723 		}
10724 		call_info = ZEND_CALL_NESTED_FUNCTION;
10725 	}
10726 
10727 	call = zend_vm_stack_push_call_frame(call_info,
10728 		fbc, opline->extended_value, ce);
10729 	call->prev_execute_data = EX(call);
10730 	EX(call) = call;
10731 
10732 	ZEND_VM_NEXT_OPCODE();
10733 }
10734 
ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10736 {
10737 	USE_OPLINE
10738 
10739 	zval *function_name;
10740 	zend_fcall_info_cache fcc;
10741 	char *error = NULL;
10742 	zend_function *func;
10743 	void *object_or_called_scope;
10744 	zend_execute_data *call;
10745 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
10746 
10747 	SAVE_OPLINE();
10748 	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
10749 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
10750 		func = fcc.function_handler;
10751 		if (error) {
10752 			efree(error);
10753 			/* This is the only soft error is_callable() can generate */
10754 			zend_non_static_method_call(func);
10755 			if (UNEXPECTED(EG(exception) != NULL)) {
10756 
10757 				HANDLE_EXCEPTION();
10758 			}
10759 		}
10760 		object_or_called_scope = fcc.called_scope;
10761 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
10762 			/* Delay closure destruction until its invocation */
10763 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
10764 			call_info |= ZEND_CALL_CLOSURE;
10765 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
10766 				call_info |= ZEND_CALL_FAKE_CLOSURE;
10767 			}
10768 			if (fcc.object) {
10769 				object_or_called_scope = fcc.object;
10770 				call_info |= ZEND_CALL_HAS_THIS;
10771 			}
10772 		} else if (fcc.object) {
10773 			GC_ADDREF(fcc.object); /* For $this pointer */
10774 			object_or_called_scope = fcc.object;
10775 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
10776 		}
10777 
10778 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
10779 			if (call_info & ZEND_CALL_CLOSURE) {
10780 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
10781 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
10782 				zend_object_release(fcc.object);
10783 			}
10784 			HANDLE_EXCEPTION();
10785 		}
10786 
10787 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
10788 			init_func_run_time_cache(&func->op_array);
10789 		}
10790 	} else {
10791 		zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
10792 		efree(error);
10793 
10794 		if (UNEXPECTED(EG(exception))) {
10795 			HANDLE_EXCEPTION();
10796 		}
10797 		func = (zend_function*)&zend_pass_function;
10798 		object_or_called_scope = NULL;
10799 	}
10800 
10801 	call = zend_vm_stack_push_call_frame(call_info,
10802 		func, opline->extended_value, object_or_called_scope);
10803 	call->prev_execute_data = EX(call);
10804 	EX(call) = call;
10805 
10806 	ZEND_VM_NEXT_OPCODE();
10807 }
10808 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10810 {
10811 	USE_OPLINE
10812 
10813 	zval *expr_ptr, new_expr;
10814 
10815 	SAVE_OPLINE();
10816 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
10817 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
10818 		expr_ptr = NULL;
10819 		if (Z_ISREF_P(expr_ptr)) {
10820 			Z_ADDREF_P(expr_ptr);
10821 		} else {
10822 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
10823 		}
10824 
10825 	} else {
10826 		expr_ptr = RT_CONSTANT(opline, opline->op1);
10827 		if (IS_CONST == IS_TMP_VAR) {
10828 			/* pass */
10829 		} else if (IS_CONST == IS_CONST) {
10830 			Z_TRY_ADDREF_P(expr_ptr);
10831 		} else if (IS_CONST == IS_CV) {
10832 			ZVAL_DEREF(expr_ptr);
10833 			Z_TRY_ADDREF_P(expr_ptr);
10834 		} else /* if (IS_CONST == IS_VAR) */ {
10835 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
10836 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
10837 
10838 				expr_ptr = Z_REFVAL_P(expr_ptr);
10839 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
10840 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
10841 					expr_ptr = &new_expr;
10842 					efree_size(ref, sizeof(zend_reference));
10843 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
10844 					Z_ADDREF_P(expr_ptr);
10845 				}
10846 			}
10847 		}
10848 	}
10849 
10850 	if (IS_CV != IS_UNUSED) {
10851 
10852 		zval *offset = EX_VAR(opline->op2.var);
10853 		zend_string *str;
10854 		zend_ulong hval;
10855 
10856 add_again:
10857 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10858 			str = Z_STR_P(offset);
10859 			if (IS_CV != IS_CONST) {
10860 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10861 					goto num_index;
10862 				}
10863 			}
10864 str_index:
10865 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
10866 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10867 			hval = Z_LVAL_P(offset);
10868 num_index:
10869 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
10870 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
10871 			offset = Z_REFVAL_P(offset);
10872 			goto add_again;
10873 		} else if (Z_TYPE_P(offset) == IS_NULL) {
10874 			str = ZSTR_EMPTY_ALLOC();
10875 			goto str_index;
10876 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
10877 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
10878 			goto num_index;
10879 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
10880 			hval = 0;
10881 			goto num_index;
10882 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
10883 			hval = 1;
10884 			goto num_index;
10885 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
10886 			zend_use_resource_as_offset(offset);
10887 			hval = Z_RES_HANDLE_P(offset);
10888 			goto num_index;
10889 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
10890 			ZVAL_UNDEFINED_OP2();
10891 			str = ZSTR_EMPTY_ALLOC();
10892 			goto str_index;
10893 		} else {
10894 			zend_illegal_offset();
10895 			zval_ptr_dtor_nogc(expr_ptr);
10896 		}
10897 
10898 	} else {
10899 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
10900 			zend_cannot_add_element();
10901 			zval_ptr_dtor_nogc(expr_ptr);
10902 		}
10903 	}
10904 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10905 }
10906 
ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10907 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10908 {
10909 	zval *array;
10910 	uint32_t size;
10911 	USE_OPLINE
10912 
10913 	array = EX_VAR(opline->result.var);
10914 	if (IS_CONST != IS_UNUSED) {
10915 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10916 		ZVAL_ARR(array, zend_new_array(size));
10917 		/* Explicitly initialize array as not-packed if flag is set */
10918 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10919 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10920 		}
10921 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10922 	} else {
10923 		ZVAL_ARR(array, zend_new_array(0));
10924 		ZEND_VM_NEXT_OPCODE();
10925 	}
10926 }
10927 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10928 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10929 {
10930 	USE_OPLINE
10931 
10932 	zval *container;
10933 	int result;
10934 	zend_ulong hval;
10935 	zval *offset;
10936 
10937 	SAVE_OPLINE();
10938 	container = RT_CONSTANT(opline, opline->op1);
10939 	offset = EX_VAR(opline->op2.var);
10940 
10941 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10942 		HashTable *ht;
10943 		zval *value;
10944 		zend_string *str;
10945 
10946 isset_dim_obj_array:
10947 		ht = Z_ARRVAL_P(container);
10948 isset_again:
10949 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10950 			str = Z_STR_P(offset);
10951 			if (IS_CV != IS_CONST) {
10952 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10953 					goto num_index_prop;
10954 				}
10955 			}
10956 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
10957 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10958 			hval = Z_LVAL_P(offset);
10959 num_index_prop:
10960 			value = zend_hash_index_find(ht, hval);
10961 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
10962 			offset = Z_REFVAL_P(offset);
10963 			goto isset_again;
10964 		} else {
10965 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
10966 			if (UNEXPECTED(EG(exception))) {
10967 				result = 0;
10968 				goto isset_dim_obj_exit;
10969 			}
10970 		}
10971 
10972 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
10973 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
10974 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
10975 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
10976 
10977 			if (IS_CONST & (IS_CONST|IS_CV)) {
10978 				/* avoid exception check */
10979 
10980 				ZEND_VM_SMART_BRANCH(result, 0);
10981 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
10982 				ZEND_VM_NEXT_OPCODE();
10983 			}
10984 		} else {
10985 			result = (value == NULL || !i_zend_is_true(value));
10986 		}
10987 		goto isset_dim_obj_exit;
10988 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
10989 		container = Z_REFVAL_P(container);
10990 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
10991 			goto isset_dim_obj_array;
10992 		}
10993 	}
10994 
10995 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
10996 		offset++;
10997 	}
10998 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
10999 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
11000 	} else {
11001 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
11002 	}
11003 
11004 isset_dim_obj_exit:
11005 
11006 
11007 	ZEND_VM_SMART_BRANCH(result, 1);
11008 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11009 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11010 }
11011 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11012 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11013 {
11014 	USE_OPLINE
11015 
11016 	zval *container;
11017 	int result;
11018 	zval *offset;
11019 
11020 	SAVE_OPLINE();
11021 	container = RT_CONSTANT(opline, opline->op1);
11022 
11023 	if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11024 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11025 	}
11026 
11027 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11028 
11029 	if (IS_CONST == IS_CONST ||
11030 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11031 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11032 			container = Z_REFVAL_P(container);
11033 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
11034 				result = (opline->extended_value & ZEND_ISEMPTY);
11035 				goto isset_object_finish;
11036 			}
11037 		} else {
11038 			result = (opline->extended_value & ZEND_ISEMPTY);
11039 			goto isset_object_finish;
11040 		}
11041 	}
11042 
11043 	result =
11044 		(opline->extended_value & ZEND_ISEMPTY) ^
11045 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
11046 
11047 isset_object_finish:
11048 
11049 
11050 	ZEND_VM_SMART_BRANCH(result, 1);
11051 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11052 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11053 }
11054 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11056 {
11057 	USE_OPLINE
11058 
11059 
11060 	zval *key, *subject;
11061 	HashTable *ht;
11062 	uint32_t result;
11063 
11064 	SAVE_OPLINE();
11065 
11066 	key = RT_CONSTANT(opline, opline->op1);
11067 	subject = EX_VAR(opline->op2.var);
11068 
11069 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11070 array_key_exists_array:
11071 		ht = Z_ARRVAL_P(subject);
11072 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
11073 	} else {
11074 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
11075 			subject = Z_REFVAL_P(subject);
11076 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
11077 				goto array_key_exists_array;
11078 			}
11079 		}
11080 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
11081 	}
11082 
11083 
11084 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
11085 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
11086 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11087 }
11088 
11089 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11091 {
11092 	USE_OPLINE
11093 
11094 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
11095 
11096 	SAVE_OPLINE();
11097 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
11098 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11099 	}
11100 
11101 	/* Destroy the previously yielded value */
11102 	zval_ptr_dtor(&generator->value);
11103 
11104 	/* Destroy the previously yielded key */
11105 	zval_ptr_dtor(&generator->key);
11106 
11107 	/* Set the new yielded value */
11108 	if (IS_CONST != IS_UNUSED) {
11109 
11110 
11111 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
11112 			/* Constants and temporary variables aren't yieldable by reference,
11113 			 * but we still allow them with a notice. */
11114 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
11115 				zval *value;
11116 
11117 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11118 
11119 				value = RT_CONSTANT(opline, opline->op1);
11120 				ZVAL_COPY_VALUE(&generator->value, value);
11121 				if (IS_CONST == IS_CONST) {
11122 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11123 						Z_ADDREF(generator->value);
11124 					}
11125 				}
11126 			} else {
11127 				zval *value_ptr = NULL;
11128 
11129 				/* If a function call result is yielded and the function did
11130 				 * not return by reference we throw a notice. */
11131 				do {
11132 					if (IS_CONST == IS_VAR) {
11133 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
11134 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
11135 						 && !Z_ISREF_P(value_ptr)) {
11136 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
11137 							ZVAL_COPY(&generator->value, value_ptr);
11138 							break;
11139 						}
11140 					}
11141 					if (Z_ISREF_P(value_ptr)) {
11142 						Z_ADDREF_P(value_ptr);
11143 					} else {
11144 						ZVAL_MAKE_REF_EX(value_ptr, 2);
11145 					}
11146 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
11147 				} while (0);
11148 
11149 			}
11150 		} else {
11151 			zval *value = RT_CONSTANT(opline, opline->op1);
11152 
11153 			/* Consts, temporary variables and references need copying */
11154 			if (IS_CONST == IS_CONST) {
11155 				ZVAL_COPY_VALUE(&generator->value, value);
11156 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
11157 					Z_ADDREF(generator->value);
11158 				}
11159 			} else if (IS_CONST == IS_TMP_VAR) {
11160 				ZVAL_COPY_VALUE(&generator->value, value);
11161             } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
11162 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
11163 
11164 			} else {
11165 				ZVAL_COPY_VALUE(&generator->value, value);
11166 				if (IS_CONST == IS_CV) {
11167 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
11168 				}
11169 			}
11170 		}
11171 	} else {
11172 		/* If no value was specified yield null */
11173 		ZVAL_NULL(&generator->value);
11174 	}
11175 
11176 	/* Set the new yielded key */
11177 	if (IS_CV != IS_UNUSED) {
11178 
11179 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11180 
11181 		/* Consts, temporary variables and references need copying */
11182 		if (IS_CV == IS_CONST) {
11183 			ZVAL_COPY_VALUE(&generator->key, key);
11184 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
11185 				Z_ADDREF(generator->key);
11186 			}
11187 		} else if (IS_CV == IS_TMP_VAR) {
11188 			ZVAL_COPY_VALUE(&generator->key, key);
11189 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
11190 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
11191 
11192 		} else {
11193 			ZVAL_COPY_VALUE(&generator->key, key);
11194 			if (IS_CV == IS_CV) {
11195 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
11196 			}
11197 		}
11198 
11199 		if (Z_TYPE(generator->key) == IS_LONG
11200 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
11201 		) {
11202 			generator->largest_used_integer_key = Z_LVAL(generator->key);
11203 		}
11204 	} else {
11205 		/* If no key was specified we use auto-increment keys */
11206 		generator->largest_used_integer_key++;
11207 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
11208 	}
11209 
11210 	if (RETURN_VALUE_USED(opline)) {
11211 		/* If the return value of yield is used set the send
11212 		 * target and initialize it to NULL */
11213 		generator->send_target = EX_VAR(opline->result.var);
11214 		ZVAL_NULL(generator->send_target);
11215 	} else {
11216 		generator->send_target = NULL;
11217 	}
11218 
11219 	/* We increment to the next op, so we are at the correct position when the
11220 	 * generator is resumed. */
11221 	ZEND_VM_INC_OPCODE();
11222 
11223 	/* The GOTO VM uses a local opline variable. We need to set the opline
11224 	 * variable in execute_data so we don't resume at an old position. */
11225 	SAVE_OPLINE();
11226 
11227 	ZEND_VM_RETURN();
11228 }
11229 
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11230 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11231 {
11232 	USE_OPLINE
11233 
11234 	zval *value;
11235 
11236 	value = EX_VAR(opline->op1.var);
11237 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
11238 	ZEND_VM_NEXT_OPCODE();
11239 }
11240 
ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11241 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11242 {
11243 	USE_OPLINE
11244 
11245 	zval *value;
11246 
11247 	value = EX_VAR(opline->op1.var);
11248 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
11249 	ZEND_VM_NEXT_OPCODE();
11250 }
11251 
ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11252 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11253 {
11254 	USE_OPLINE
11255 
11256 	zval *value;
11257 
11258 	value = EX_VAR(opline->op1.var);
11259 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
11260 	ZEND_VM_NEXT_OPCODE();
11261 }
11262 
ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11263 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11264 {
11265 	USE_OPLINE
11266 
11267 	zval *op1, *op2, *result;
11268 	double d1, d2;
11269 
11270 	op1 = EX_VAR(opline->op1.var);
11271 	op2 = RT_CONSTANT(opline, opline->op2);
11272 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11273 		/* pass */
11274 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11275 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11276 			result = EX_VAR(opline->result.var);
11277 			fast_long_add_function(result, op1, op2);
11278 			ZEND_VM_NEXT_OPCODE();
11279 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11280 			d1 = (double)Z_LVAL_P(op1);
11281 			d2 = Z_DVAL_P(op2);
11282 			goto add_double;
11283 		}
11284 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11285 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11286 			d1 = Z_DVAL_P(op1);
11287 			d2 = Z_DVAL_P(op2);
11288 add_double:
11289 			result = EX_VAR(opline->result.var);
11290 			ZVAL_DOUBLE(result, d1 + d2);
11291 			ZEND_VM_NEXT_OPCODE();
11292 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11293 			d1 = Z_DVAL_P(op1);
11294 			d2 = (double)Z_LVAL_P(op2);
11295 			goto add_double;
11296 		}
11297 	}
11298 
11299 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11300 }
11301 
ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11302 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11303 {
11304 	USE_OPLINE
11305 
11306 	zval *op1, *op2, *result;
11307 	double d1, d2;
11308 
11309 	op1 = EX_VAR(opline->op1.var);
11310 	op2 = RT_CONSTANT(opline, opline->op2);
11311 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11312 		/* pass */
11313 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11314 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11315 			result = EX_VAR(opline->result.var);
11316 			fast_long_sub_function(result, op1, op2);
11317 			ZEND_VM_NEXT_OPCODE();
11318 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11319 			d1 = (double)Z_LVAL_P(op1);
11320 			d2 = Z_DVAL_P(op2);
11321 			goto sub_double;
11322 		}
11323 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11324 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11325 			d1 = Z_DVAL_P(op1);
11326 			d2 = Z_DVAL_P(op2);
11327 sub_double:
11328 			result = EX_VAR(opline->result.var);
11329 			ZVAL_DOUBLE(result, d1 - d2);
11330 			ZEND_VM_NEXT_OPCODE();
11331 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11332 			d1 = Z_DVAL_P(op1);
11333 			d2 = (double)Z_LVAL_P(op2);
11334 			goto sub_double;
11335 		}
11336 	}
11337 
11338 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11339 }
11340 
ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11342 {
11343 	USE_OPLINE
11344 
11345 	zval *op1, *op2, *result;
11346 	double d1, d2;
11347 
11348 	op1 = EX_VAR(opline->op1.var);
11349 	op2 = RT_CONSTANT(opline, opline->op2);
11350 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11351 		/* pass */
11352 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11353 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11354 			zend_long overflow;
11355 
11356 			result = EX_VAR(opline->result.var);
11357 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
11358 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
11359 			ZEND_VM_NEXT_OPCODE();
11360 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11361 			d1 = (double)Z_LVAL_P(op1);
11362 			d2 = Z_DVAL_P(op2);
11363 			goto mul_double;
11364 		}
11365 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11366 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11367 			d1 = Z_DVAL_P(op1);
11368 			d2 = Z_DVAL_P(op2);
11369 mul_double:
11370 			result = EX_VAR(opline->result.var);
11371 			ZVAL_DOUBLE(result, d1 * d2);
11372 			ZEND_VM_NEXT_OPCODE();
11373 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11374 			d1 = Z_DVAL_P(op1);
11375 			d2 = (double)Z_LVAL_P(op2);
11376 			goto mul_double;
11377 		}
11378 	}
11379 
11380 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11381 }
11382 
ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11383 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11384 {
11385 	USE_OPLINE
11386 
11387 	zval *op1, *op2, *result;
11388 
11389 	op1 = EX_VAR(opline->op1.var);
11390 	op2 = RT_CONSTANT(opline, opline->op2);
11391 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11392 		/* pass */
11393 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11394 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11395 			result = EX_VAR(opline->result.var);
11396 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
11397 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11398 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
11399 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
11400 				ZVAL_LONG(result, 0);
11401 			} else {
11402 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
11403 			}
11404 			ZEND_VM_NEXT_OPCODE();
11405 		}
11406 	}
11407 
11408 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11409 }
11410 
ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11412 {
11413 	USE_OPLINE
11414 
11415 	zval *op1, *op2;
11416 
11417 	op1 = EX_VAR(opline->op1.var);
11418 	op2 = RT_CONSTANT(opline, opline->op2);
11419 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11420 		/* pass */
11421 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
11422 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
11423 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
11424 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
11425 		ZVAL_LONG(EX_VAR(opline->result.var),
11426 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
11427 		ZEND_VM_NEXT_OPCODE();
11428 	}
11429 
11430 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11431 }
11432 
ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11434 {
11435 	USE_OPLINE
11436 
11437 	zval *op1, *op2;
11438 
11439 	op1 = EX_VAR(opline->op1.var);
11440 	op2 = RT_CONSTANT(opline, opline->op2);
11441 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11442 		/* pass */
11443 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
11444 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
11445 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
11446 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
11447 		ZEND_VM_NEXT_OPCODE();
11448 	}
11449 
11450 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11451 }
11452 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11453 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11454 {
11455 	USE_OPLINE
11456 
11457 	zval *op1, *op2;
11458 	double d1, d2;
11459 
11460 	op1 = EX_VAR(opline->op1.var);
11461 	op2 = RT_CONSTANT(opline, opline->op2);
11462 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11463 		/* pass */
11464 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11465 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11466 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
11467 is_smaller_true:
11468 
11469 				ZVAL_TRUE(EX_VAR(opline->result.var));
11470 				ZEND_VM_NEXT_OPCODE();
11471 			} else {
11472 is_smaller_false:
11473 
11474 				ZVAL_FALSE(EX_VAR(opline->result.var));
11475 				ZEND_VM_NEXT_OPCODE();
11476 			}
11477 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11478 			d1 = (double)Z_LVAL_P(op1);
11479 			d2 = Z_DVAL_P(op2);
11480 			goto is_smaller_double;
11481 		}
11482 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11483 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11484 			d1 = Z_DVAL_P(op1);
11485 			d2 = Z_DVAL_P(op2);
11486 is_smaller_double:
11487 			if (d1 < d2) {
11488 				goto is_smaller_true;
11489 			} else {
11490 				goto is_smaller_false;
11491 			}
11492 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11493 			d1 = Z_DVAL_P(op1);
11494 			d2 = (double)Z_LVAL_P(op2);
11495 			goto is_smaller_double;
11496 		}
11497 	}
11498 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11499 }
11500 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11501 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11502 {
11503 	USE_OPLINE
11504 
11505 	zval *op1, *op2;
11506 	double d1, d2;
11507 
11508 	op1 = EX_VAR(opline->op1.var);
11509 	op2 = RT_CONSTANT(opline, opline->op2);
11510 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11511 		/* pass */
11512 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11513 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11514 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
11515 is_smaller_true:
11516 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
11517 				ZVAL_TRUE(EX_VAR(opline->result.var));
11518 				ZEND_VM_NEXT_OPCODE();
11519 			} else {
11520 is_smaller_false:
11521 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
11522 				ZVAL_FALSE(EX_VAR(opline->result.var));
11523 				ZEND_VM_NEXT_OPCODE();
11524 			}
11525 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11526 			d1 = (double)Z_LVAL_P(op1);
11527 			d2 = Z_DVAL_P(op2);
11528 			goto is_smaller_double;
11529 		}
11530 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11531 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11532 			d1 = Z_DVAL_P(op1);
11533 			d2 = Z_DVAL_P(op2);
11534 is_smaller_double:
11535 			if (d1 < d2) {
11536 				goto is_smaller_true;
11537 			} else {
11538 				goto is_smaller_false;
11539 			}
11540 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11541 			d1 = Z_DVAL_P(op1);
11542 			d2 = (double)Z_LVAL_P(op2);
11543 			goto is_smaller_double;
11544 		}
11545 	}
11546 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11547 }
11548 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11549 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11550 {
11551 	USE_OPLINE
11552 
11553 	zval *op1, *op2;
11554 	double d1, d2;
11555 
11556 	op1 = EX_VAR(opline->op1.var);
11557 	op2 = RT_CONSTANT(opline, opline->op2);
11558 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11559 		/* pass */
11560 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11561 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11562 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
11563 is_smaller_true:
11564 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
11565 				ZVAL_TRUE(EX_VAR(opline->result.var));
11566 				ZEND_VM_NEXT_OPCODE();
11567 			} else {
11568 is_smaller_false:
11569 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
11570 				ZVAL_FALSE(EX_VAR(opline->result.var));
11571 				ZEND_VM_NEXT_OPCODE();
11572 			}
11573 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11574 			d1 = (double)Z_LVAL_P(op1);
11575 			d2 = Z_DVAL_P(op2);
11576 			goto is_smaller_double;
11577 		}
11578 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11579 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11580 			d1 = Z_DVAL_P(op1);
11581 			d2 = Z_DVAL_P(op2);
11582 is_smaller_double:
11583 			if (d1 < d2) {
11584 				goto is_smaller_true;
11585 			} else {
11586 				goto is_smaller_false;
11587 			}
11588 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11589 			d1 = Z_DVAL_P(op1);
11590 			d2 = (double)Z_LVAL_P(op2);
11591 			goto is_smaller_double;
11592 		}
11593 	}
11594 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11595 }
11596 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11598 {
11599 	USE_OPLINE
11600 
11601 	zval *op1, *op2;
11602 	double d1, d2;
11603 
11604 	op1 = EX_VAR(opline->op1.var);
11605 	op2 = RT_CONSTANT(opline, opline->op2);
11606 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11607 		/* pass */
11608 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11609 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11610 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
11611 is_smaller_or_equal_true:
11612 
11613 				ZVAL_TRUE(EX_VAR(opline->result.var));
11614 				ZEND_VM_NEXT_OPCODE();
11615 			} else {
11616 is_smaller_or_equal_false:
11617 
11618 				ZVAL_FALSE(EX_VAR(opline->result.var));
11619 				ZEND_VM_NEXT_OPCODE();
11620 			}
11621 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11622 			d1 = (double)Z_LVAL_P(op1);
11623 			d2 = Z_DVAL_P(op2);
11624 			goto is_smaller_or_equal_double;
11625 		}
11626 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11627 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11628 			d1 = Z_DVAL_P(op1);
11629 			d2 = Z_DVAL_P(op2);
11630 is_smaller_or_equal_double:
11631 			if (d1 <= d2) {
11632 				goto is_smaller_or_equal_true;
11633 			} else {
11634 				goto is_smaller_or_equal_false;
11635 			}
11636 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11637 			d1 = Z_DVAL_P(op1);
11638 			d2 = (double)Z_LVAL_P(op2);
11639 			goto is_smaller_or_equal_double;
11640 		}
11641 	}
11642 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11643 }
11644 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11645 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11646 {
11647 	USE_OPLINE
11648 
11649 	zval *op1, *op2;
11650 	double d1, d2;
11651 
11652 	op1 = EX_VAR(opline->op1.var);
11653 	op2 = RT_CONSTANT(opline, opline->op2);
11654 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11655 		/* pass */
11656 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11657 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11658 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
11659 is_smaller_or_equal_true:
11660 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
11661 				ZVAL_TRUE(EX_VAR(opline->result.var));
11662 				ZEND_VM_NEXT_OPCODE();
11663 			} else {
11664 is_smaller_or_equal_false:
11665 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
11666 				ZVAL_FALSE(EX_VAR(opline->result.var));
11667 				ZEND_VM_NEXT_OPCODE();
11668 			}
11669 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11670 			d1 = (double)Z_LVAL_P(op1);
11671 			d2 = Z_DVAL_P(op2);
11672 			goto is_smaller_or_equal_double;
11673 		}
11674 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11675 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11676 			d1 = Z_DVAL_P(op1);
11677 			d2 = Z_DVAL_P(op2);
11678 is_smaller_or_equal_double:
11679 			if (d1 <= d2) {
11680 				goto is_smaller_or_equal_true;
11681 			} else {
11682 				goto is_smaller_or_equal_false;
11683 			}
11684 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11685 			d1 = Z_DVAL_P(op1);
11686 			d2 = (double)Z_LVAL_P(op2);
11687 			goto is_smaller_or_equal_double;
11688 		}
11689 	}
11690 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11691 }
11692 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11693 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11694 {
11695 	USE_OPLINE
11696 
11697 	zval *op1, *op2;
11698 	double d1, d2;
11699 
11700 	op1 = EX_VAR(opline->op1.var);
11701 	op2 = RT_CONSTANT(opline, opline->op2);
11702 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11703 		/* pass */
11704 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
11705 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11706 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
11707 is_smaller_or_equal_true:
11708 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
11709 				ZVAL_TRUE(EX_VAR(opline->result.var));
11710 				ZEND_VM_NEXT_OPCODE();
11711 			} else {
11712 is_smaller_or_equal_false:
11713 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
11714 				ZVAL_FALSE(EX_VAR(opline->result.var));
11715 				ZEND_VM_NEXT_OPCODE();
11716 			}
11717 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11718 			d1 = (double)Z_LVAL_P(op1);
11719 			d2 = Z_DVAL_P(op2);
11720 			goto is_smaller_or_equal_double;
11721 		}
11722 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
11723 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
11724 			d1 = Z_DVAL_P(op1);
11725 			d2 = Z_DVAL_P(op2);
11726 is_smaller_or_equal_double:
11727 			if (d1 <= d2) {
11728 				goto is_smaller_or_equal_true;
11729 			} else {
11730 				goto is_smaller_or_equal_false;
11731 			}
11732 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11733 			d1 = Z_DVAL_P(op1);
11734 			d2 = (double)Z_LVAL_P(op2);
11735 			goto is_smaller_or_equal_double;
11736 		}
11737 	}
11738 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11739 }
11740 
ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11741 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11742 {
11743 	USE_OPLINE
11744 
11745 	zval *op1, *op2;
11746 
11747 	op1 = EX_VAR(opline->op1.var);
11748 	op2 = RT_CONSTANT(opline, opline->op2);
11749 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11750 		/* pass */
11751 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
11752 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11753 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
11754 		ZEND_VM_NEXT_OPCODE();
11755 	}
11756 
11757 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11758 }
11759 
ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11760 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11761 {
11762 	USE_OPLINE
11763 
11764 	zval *op1, *op2;
11765 
11766 	op1 = EX_VAR(opline->op1.var);
11767 	op2 = RT_CONSTANT(opline, opline->op2);
11768 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11769 		/* pass */
11770 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
11771 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11772 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
11773 		ZEND_VM_NEXT_OPCODE();
11774 	}
11775 
11776 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11777 }
11778 
ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11779 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11780 {
11781 	USE_OPLINE
11782 
11783 	zval *op1, *op2;
11784 
11785 	op1 = EX_VAR(opline->op1.var);
11786 	op2 = RT_CONSTANT(opline, opline->op2);
11787 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
11788 		/* pass */
11789 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
11790 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
11791 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
11792 		ZEND_VM_NEXT_OPCODE();
11793 	}
11794 
11795 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
11796 }
11797 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11799 {
11800 	USE_OPLINE
11801 
11802 	zval *container;
11803 
11804 	SAVE_OPLINE();
11805 	container = EX_VAR(opline->op1.var);
11806 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
11807 
11808 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11809 }
11810 
ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11811 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11812 {
11813 	USE_OPLINE
11814 
11815 	zval *op, *jump_zv;
11816 	HashTable *jumptable;
11817 
11818 	op = EX_VAR(opline->op1.var);
11819 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
11820 
11821 	if (Z_TYPE_P(op) != IS_LONG) {
11822 		ZVAL_DEREF(op);
11823 		if (Z_TYPE_P(op) != IS_LONG) {
11824 			/* Wrong type, fall back to ZEND_CASE chain */
11825 			ZEND_VM_NEXT_OPCODE();
11826 		}
11827 	}
11828 
11829 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
11830 	if (jump_zv != NULL) {
11831 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
11832 		ZEND_VM_CONTINUE();
11833 	} else {
11834 		/* default */
11835 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
11836 		ZEND_VM_CONTINUE();
11837 	}
11838 }
11839 
ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11841 {
11842 	USE_OPLINE
11843 
11844 	zval *op, *jump_zv;
11845 	HashTable *jumptable;
11846 
11847 	op = EX_VAR(opline->op1.var);
11848 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
11849 
11850 	if (Z_TYPE_P(op) != IS_STRING) {
11851 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
11852 			/* Wrong type, fall back to ZEND_CASE chain */
11853 			ZEND_VM_NEXT_OPCODE();
11854 		} else {
11855 			ZVAL_DEREF(op);
11856 			if (Z_TYPE_P(op) != IS_STRING) {
11857 				/* Wrong type, fall back to ZEND_CASE chain */
11858 				ZEND_VM_NEXT_OPCODE();
11859 			}
11860 		}
11861 	}
11862 
11863 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
11864 	if (jump_zv != NULL) {
11865 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
11866 		ZEND_VM_CONTINUE();
11867 	} else {
11868 		/* default */
11869 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
11870 		ZEND_VM_CONTINUE();
11871 	}
11872 }
11873 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11874 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11875 {
11876 	USE_OPLINE
11877 	zval *op1, *op2, *result;
11878 
11879 	op1 = EX_VAR(opline->op1.var);
11880 	op2 = RT_CONSTANT(opline, opline->op2);
11881 	result = EX_VAR(opline->result.var);
11882 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
11883 	ZEND_VM_NEXT_OPCODE();
11884 }
11885 
ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11886 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11887 {
11888 	USE_OPLINE
11889 	zval *op1, *op2, *result;
11890 
11891 	op1 = EX_VAR(opline->op1.var);
11892 	op2 = RT_CONSTANT(opline, opline->op2);
11893 	result = EX_VAR(opline->result.var);
11894 	fast_long_add_function(result, op1, op2);
11895 	ZEND_VM_NEXT_OPCODE();
11896 }
11897 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11898 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11899 {
11900 	USE_OPLINE
11901 	zval *op1, *op2, *result;
11902 
11903 	op1 = EX_VAR(opline->op1.var);
11904 	op2 = RT_CONSTANT(opline, opline->op2);
11905 	result = EX_VAR(opline->result.var);
11906 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
11907 	ZEND_VM_NEXT_OPCODE();
11908 }
11909 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11910 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11911 {
11912 	USE_OPLINE
11913 	zval *op1, *op2, *result;
11914 
11915 	op1 = EX_VAR(opline->op1.var);
11916 	op2 = RT_CONSTANT(opline, opline->op2);
11917 	result = EX_VAR(opline->result.var);
11918 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
11919 	ZEND_VM_NEXT_OPCODE();
11920 }
11921 
ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11922 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11923 {
11924 	USE_OPLINE
11925 	zval *op1, *op2, *result;
11926 
11927 	op1 = EX_VAR(opline->op1.var);
11928 	op2 = RT_CONSTANT(opline, opline->op2);
11929 	result = EX_VAR(opline->result.var);
11930 	fast_long_sub_function(result, op1, op2);
11931 	ZEND_VM_NEXT_OPCODE();
11932 }
11933 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11934 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11935 {
11936 	USE_OPLINE
11937 	zval *op1, *op2, *result;
11938 
11939 	op1 = EX_VAR(opline->op1.var);
11940 	op2 = RT_CONSTANT(opline, opline->op2);
11941 	result = EX_VAR(opline->result.var);
11942 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
11943 	ZEND_VM_NEXT_OPCODE();
11944 }
11945 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11946 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11947 {
11948 	USE_OPLINE
11949 	zval *op1, *op2, *result;
11950 
11951 	op1 = EX_VAR(opline->op1.var);
11952 	op2 = RT_CONSTANT(opline, opline->op2);
11953 	result = EX_VAR(opline->result.var);
11954 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
11955 	ZEND_VM_NEXT_OPCODE();
11956 }
11957 
ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11958 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11959 {
11960 	USE_OPLINE
11961 	zval *op1, *op2, *result;
11962 	zend_long overflow;
11963 
11964 	op1 = EX_VAR(opline->op1.var);
11965 	op2 = RT_CONSTANT(opline, opline->op2);
11966 	result = EX_VAR(opline->result.var);
11967 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
11968 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
11969 	ZEND_VM_NEXT_OPCODE();
11970 }
11971 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11972 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11973 {
11974 	USE_OPLINE
11975 	zval *op1, *op2, *result;
11976 
11977 	op1 = EX_VAR(opline->op1.var);
11978 	op2 = RT_CONSTANT(opline, opline->op2);
11979 	result = EX_VAR(opline->result.var);
11980 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
11981 	ZEND_VM_NEXT_OPCODE();
11982 }
11983 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11985 {
11986 	USE_OPLINE
11987 	zval *op1, *op2;
11988 	int result;
11989 
11990 	op1 = EX_VAR(opline->op1.var);
11991 	op2 = RT_CONSTANT(opline, opline->op2);
11992 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
11993 
11994 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
11995 	ZEND_VM_NEXT_OPCODE();
11996 }
11997 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11998 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11999 {
12000 	USE_OPLINE
12001 	zval *op1, *op2;
12002 	int result;
12003 
12004 	op1 = EX_VAR(opline->op1.var);
12005 	op2 = RT_CONSTANT(opline, opline->op2);
12006 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12007 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12008 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12009 	ZEND_VM_NEXT_OPCODE();
12010 }
12011 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12012 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12013 {
12014 	USE_OPLINE
12015 	zval *op1, *op2;
12016 	int result;
12017 
12018 	op1 = EX_VAR(opline->op1.var);
12019 	op2 = RT_CONSTANT(opline, opline->op2);
12020 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12021 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12022 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12023 	ZEND_VM_NEXT_OPCODE();
12024 }
12025 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12027 {
12028 	USE_OPLINE
12029 	zval *op1, *op2;
12030 	int result;
12031 
12032 	op1 = EX_VAR(opline->op1.var);
12033 	op2 = RT_CONSTANT(opline, opline->op2);
12034 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12035 
12036 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12037 	ZEND_VM_NEXT_OPCODE();
12038 }
12039 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12040 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12041 {
12042 	USE_OPLINE
12043 	zval *op1, *op2;
12044 	int result;
12045 
12046 	op1 = EX_VAR(opline->op1.var);
12047 	op2 = RT_CONSTANT(opline, opline->op2);
12048 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12049 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12050 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12051 	ZEND_VM_NEXT_OPCODE();
12052 }
12053 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12054 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12055 {
12056 	USE_OPLINE
12057 	zval *op1, *op2;
12058 	int result;
12059 
12060 	op1 = EX_VAR(opline->op1.var);
12061 	op2 = RT_CONSTANT(opline, opline->op2);
12062 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
12063 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12064 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12065 	ZEND_VM_NEXT_OPCODE();
12066 }
12067 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12068 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12069 {
12070 	USE_OPLINE
12071 	zval *op1, *op2;
12072 	int result;
12073 
12074 	op1 = EX_VAR(opline->op1.var);
12075 	op2 = RT_CONSTANT(opline, opline->op2);
12076 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12077 
12078 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12079 	ZEND_VM_NEXT_OPCODE();
12080 }
12081 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12082 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12083 {
12084 	USE_OPLINE
12085 	zval *op1, *op2;
12086 	int result;
12087 
12088 	op1 = EX_VAR(opline->op1.var);
12089 	op2 = RT_CONSTANT(opline, opline->op2);
12090 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12091 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12092 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12093 	ZEND_VM_NEXT_OPCODE();
12094 }
12095 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12096 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12097 {
12098 	USE_OPLINE
12099 	zval *op1, *op2;
12100 	int result;
12101 
12102 	op1 = EX_VAR(opline->op1.var);
12103 	op2 = RT_CONSTANT(opline, opline->op2);
12104 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
12105 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12106 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12107 	ZEND_VM_NEXT_OPCODE();
12108 }
12109 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12111 {
12112 	USE_OPLINE
12113 	zval *op1, *op2;
12114 	int result;
12115 
12116 	op1 = EX_VAR(opline->op1.var);
12117 	op2 = RT_CONSTANT(opline, opline->op2);
12118 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12119 
12120 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12121 	ZEND_VM_NEXT_OPCODE();
12122 }
12123 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12124 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12125 {
12126 	USE_OPLINE
12127 	zval *op1, *op2;
12128 	int result;
12129 
12130 	op1 = EX_VAR(opline->op1.var);
12131 	op2 = RT_CONSTANT(opline, opline->op2);
12132 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12133 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12134 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12135 	ZEND_VM_NEXT_OPCODE();
12136 }
12137 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12138 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12139 {
12140 	USE_OPLINE
12141 	zval *op1, *op2;
12142 	int result;
12143 
12144 	op1 = EX_VAR(opline->op1.var);
12145 	op2 = RT_CONSTANT(opline, opline->op2);
12146 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
12147 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12148 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12149 	ZEND_VM_NEXT_OPCODE();
12150 }
12151 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12153 {
12154 	USE_OPLINE
12155 	zval *op1, *op2;
12156 	int result;
12157 
12158 	op1 = EX_VAR(opline->op1.var);
12159 	op2 = RT_CONSTANT(opline, opline->op2);
12160 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12161 
12162 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12163 	ZEND_VM_NEXT_OPCODE();
12164 }
12165 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12166 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12167 {
12168 	USE_OPLINE
12169 	zval *op1, *op2;
12170 	int result;
12171 
12172 	op1 = EX_VAR(opline->op1.var);
12173 	op2 = RT_CONSTANT(opline, opline->op2);
12174 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12175 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12176 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12177 	ZEND_VM_NEXT_OPCODE();
12178 }
12179 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12180 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12181 {
12182 	USE_OPLINE
12183 	zval *op1, *op2;
12184 	int result;
12185 
12186 	op1 = EX_VAR(opline->op1.var);
12187 	op2 = RT_CONSTANT(opline, opline->op2);
12188 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
12189 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12190 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12191 	ZEND_VM_NEXT_OPCODE();
12192 }
12193 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12195 {
12196 	USE_OPLINE
12197 	zval *op1, *op2;
12198 	int result;
12199 
12200 	op1 = EX_VAR(opline->op1.var);
12201 	op2 = RT_CONSTANT(opline, opline->op2);
12202 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12203 
12204 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12205 	ZEND_VM_NEXT_OPCODE();
12206 }
12207 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12208 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12209 {
12210 	USE_OPLINE
12211 	zval *op1, *op2;
12212 	int result;
12213 
12214 	op1 = EX_VAR(opline->op1.var);
12215 	op2 = RT_CONSTANT(opline, opline->op2);
12216 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12217 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12218 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12219 	ZEND_VM_NEXT_OPCODE();
12220 }
12221 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12222 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12223 {
12224 	USE_OPLINE
12225 	zval *op1, *op2;
12226 	int result;
12227 
12228 	op1 = EX_VAR(opline->op1.var);
12229 	op2 = RT_CONSTANT(opline, opline->op2);
12230 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
12231 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12232 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12233 	ZEND_VM_NEXT_OPCODE();
12234 }
12235 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12237 {
12238 	USE_OPLINE
12239 	zval *op1, *op2;
12240 	int result;
12241 
12242 	op1 = EX_VAR(opline->op1.var);
12243 	op2 = RT_CONSTANT(opline, opline->op2);
12244 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12245 
12246 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12247 	ZEND_VM_NEXT_OPCODE();
12248 }
12249 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12250 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12251 {
12252 	USE_OPLINE
12253 	zval *op1, *op2;
12254 	int result;
12255 
12256 	op1 = EX_VAR(opline->op1.var);
12257 	op2 = RT_CONSTANT(opline, opline->op2);
12258 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12259 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12260 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12261 	ZEND_VM_NEXT_OPCODE();
12262 }
12263 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12264 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12265 {
12266 	USE_OPLINE
12267 	zval *op1, *op2;
12268 	int result;
12269 
12270 	op1 = EX_VAR(opline->op1.var);
12271 	op2 = RT_CONSTANT(opline, opline->op2);
12272 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
12273 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12274 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12275 	ZEND_VM_NEXT_OPCODE();
12276 }
12277 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12279 {
12280 	USE_OPLINE
12281 	zval *op1, *op2;
12282 	int result;
12283 
12284 	op1 = EX_VAR(opline->op1.var);
12285 	op2 = RT_CONSTANT(opline, opline->op2);
12286 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12287 
12288 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12289 	ZEND_VM_NEXT_OPCODE();
12290 }
12291 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12292 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12293 {
12294 	USE_OPLINE
12295 	zval *op1, *op2;
12296 	int result;
12297 
12298 	op1 = EX_VAR(opline->op1.var);
12299 	op2 = RT_CONSTANT(opline, opline->op2);
12300 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12301 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12302 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12303 	ZEND_VM_NEXT_OPCODE();
12304 }
12305 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12306 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12307 {
12308 	USE_OPLINE
12309 	zval *op1, *op2;
12310 	int result;
12311 
12312 	op1 = EX_VAR(opline->op1.var);
12313 	op2 = RT_CONSTANT(opline, opline->op2);
12314 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
12315 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
12316 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12317 	ZEND_VM_NEXT_OPCODE();
12318 }
12319 
ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12320 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12321 {
12322 	USE_OPLINE
12323 
12324 	zval *op1, *op2, *result;
12325 	double d1, d2;
12326 
12327 	op1 = EX_VAR(opline->op1.var);
12328 	op2 = EX_VAR(opline->op2.var);
12329 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12330 		/* pass */
12331 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12332 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12333 			result = EX_VAR(opline->result.var);
12334 			fast_long_add_function(result, op1, op2);
12335 			ZEND_VM_NEXT_OPCODE();
12336 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12337 			d1 = (double)Z_LVAL_P(op1);
12338 			d2 = Z_DVAL_P(op2);
12339 			goto add_double;
12340 		}
12341 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12342 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12343 			d1 = Z_DVAL_P(op1);
12344 			d2 = Z_DVAL_P(op2);
12345 add_double:
12346 			result = EX_VAR(opline->result.var);
12347 			ZVAL_DOUBLE(result, d1 + d2);
12348 			ZEND_VM_NEXT_OPCODE();
12349 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12350 			d1 = Z_DVAL_P(op1);
12351 			d2 = (double)Z_LVAL_P(op2);
12352 			goto add_double;
12353 		}
12354 	}
12355 
12356 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12357 }
12358 
ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12359 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12360 {
12361 	USE_OPLINE
12362 
12363 	zval *op1, *op2, *result;
12364 	double d1, d2;
12365 
12366 	op1 = EX_VAR(opline->op1.var);
12367 	op2 = EX_VAR(opline->op2.var);
12368 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12369 		/* pass */
12370 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12371 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12372 			result = EX_VAR(opline->result.var);
12373 			fast_long_sub_function(result, op1, op2);
12374 			ZEND_VM_NEXT_OPCODE();
12375 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12376 			d1 = (double)Z_LVAL_P(op1);
12377 			d2 = Z_DVAL_P(op2);
12378 			goto sub_double;
12379 		}
12380 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12381 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12382 			d1 = Z_DVAL_P(op1);
12383 			d2 = Z_DVAL_P(op2);
12384 sub_double:
12385 			result = EX_VAR(opline->result.var);
12386 			ZVAL_DOUBLE(result, d1 - d2);
12387 			ZEND_VM_NEXT_OPCODE();
12388 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12389 			d1 = Z_DVAL_P(op1);
12390 			d2 = (double)Z_LVAL_P(op2);
12391 			goto sub_double;
12392 		}
12393 	}
12394 
12395 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12396 }
12397 
ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12399 {
12400 	USE_OPLINE
12401 
12402 	zval *op1, *op2, *result;
12403 	double d1, d2;
12404 
12405 	op1 = EX_VAR(opline->op1.var);
12406 	op2 = EX_VAR(opline->op2.var);
12407 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12408 		/* pass */
12409 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12410 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12411 			zend_long overflow;
12412 
12413 			result = EX_VAR(opline->result.var);
12414 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12415 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12416 			ZEND_VM_NEXT_OPCODE();
12417 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12418 			d1 = (double)Z_LVAL_P(op1);
12419 			d2 = Z_DVAL_P(op2);
12420 			goto mul_double;
12421 		}
12422 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12423 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12424 			d1 = Z_DVAL_P(op1);
12425 			d2 = Z_DVAL_P(op2);
12426 mul_double:
12427 			result = EX_VAR(opline->result.var);
12428 			ZVAL_DOUBLE(result, d1 * d2);
12429 			ZEND_VM_NEXT_OPCODE();
12430 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12431 			d1 = Z_DVAL_P(op1);
12432 			d2 = (double)Z_LVAL_P(op2);
12433 			goto mul_double;
12434 		}
12435 	}
12436 
12437 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12438 }
12439 
ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12440 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12441 {
12442 	USE_OPLINE
12443 
12444 	zval *op1, *op2, *result;
12445 
12446 	op1 = EX_VAR(opline->op1.var);
12447 	op2 = EX_VAR(opline->op2.var);
12448 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12449 		/* pass */
12450 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12451 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12452 			result = EX_VAR(opline->result.var);
12453 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
12454 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12455 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
12456 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
12457 				ZVAL_LONG(result, 0);
12458 			} else {
12459 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
12460 			}
12461 			ZEND_VM_NEXT_OPCODE();
12462 		}
12463 	}
12464 
12465 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12466 }
12467 
ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12469 {
12470 	USE_OPLINE
12471 
12472 	zval *op1, *op2;
12473 
12474 	op1 = EX_VAR(opline->op1.var);
12475 	op2 = EX_VAR(opline->op2.var);
12476 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12477 		/* pass */
12478 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12479 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12480 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12481 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
12482 		ZVAL_LONG(EX_VAR(opline->result.var),
12483 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
12484 		ZEND_VM_NEXT_OPCODE();
12485 	}
12486 
12487 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12488 }
12489 
ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12490 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12491 {
12492 	USE_OPLINE
12493 
12494 	zval *op1, *op2;
12495 
12496 	op1 = EX_VAR(opline->op1.var);
12497 	op2 = EX_VAR(opline->op2.var);
12498 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12499 		/* pass */
12500 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12501 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12502 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12503 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
12504 		ZEND_VM_NEXT_OPCODE();
12505 	}
12506 
12507 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12508 }
12509 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12511 {
12512 	USE_OPLINE
12513 
12514 	zval *op1, *op2;
12515 	double d1, d2;
12516 
12517 	op1 = EX_VAR(opline->op1.var);
12518 	op2 = EX_VAR(opline->op2.var);
12519 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12520 		/* pass */
12521 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12522 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12523 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12524 is_smaller_true:
12525 
12526 				ZVAL_TRUE(EX_VAR(opline->result.var));
12527 				ZEND_VM_NEXT_OPCODE();
12528 			} else {
12529 is_smaller_false:
12530 
12531 				ZVAL_FALSE(EX_VAR(opline->result.var));
12532 				ZEND_VM_NEXT_OPCODE();
12533 			}
12534 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12535 			d1 = (double)Z_LVAL_P(op1);
12536 			d2 = Z_DVAL_P(op2);
12537 			goto is_smaller_double;
12538 		}
12539 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12540 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12541 			d1 = Z_DVAL_P(op1);
12542 			d2 = Z_DVAL_P(op2);
12543 is_smaller_double:
12544 			if (d1 < d2) {
12545 				goto is_smaller_true;
12546 			} else {
12547 				goto is_smaller_false;
12548 			}
12549 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12550 			d1 = Z_DVAL_P(op1);
12551 			d2 = (double)Z_LVAL_P(op2);
12552 			goto is_smaller_double;
12553 		}
12554 	}
12555 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12556 }
12557 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12558 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12559 {
12560 	USE_OPLINE
12561 
12562 	zval *op1, *op2;
12563 	double d1, d2;
12564 
12565 	op1 = EX_VAR(opline->op1.var);
12566 	op2 = EX_VAR(opline->op2.var);
12567 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12568 		/* pass */
12569 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12570 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12571 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12572 is_smaller_true:
12573 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12574 				ZVAL_TRUE(EX_VAR(opline->result.var));
12575 				ZEND_VM_NEXT_OPCODE();
12576 			} else {
12577 is_smaller_false:
12578 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12579 				ZVAL_FALSE(EX_VAR(opline->result.var));
12580 				ZEND_VM_NEXT_OPCODE();
12581 			}
12582 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12583 			d1 = (double)Z_LVAL_P(op1);
12584 			d2 = Z_DVAL_P(op2);
12585 			goto is_smaller_double;
12586 		}
12587 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12588 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12589 			d1 = Z_DVAL_P(op1);
12590 			d2 = Z_DVAL_P(op2);
12591 is_smaller_double:
12592 			if (d1 < d2) {
12593 				goto is_smaller_true;
12594 			} else {
12595 				goto is_smaller_false;
12596 			}
12597 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12598 			d1 = Z_DVAL_P(op1);
12599 			d2 = (double)Z_LVAL_P(op2);
12600 			goto is_smaller_double;
12601 		}
12602 	}
12603 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12604 }
12605 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12606 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12607 {
12608 	USE_OPLINE
12609 
12610 	zval *op1, *op2;
12611 	double d1, d2;
12612 
12613 	op1 = EX_VAR(opline->op1.var);
12614 	op2 = EX_VAR(opline->op2.var);
12615 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12616 		/* pass */
12617 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12618 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12619 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12620 is_smaller_true:
12621 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12622 				ZVAL_TRUE(EX_VAR(opline->result.var));
12623 				ZEND_VM_NEXT_OPCODE();
12624 			} else {
12625 is_smaller_false:
12626 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12627 				ZVAL_FALSE(EX_VAR(opline->result.var));
12628 				ZEND_VM_NEXT_OPCODE();
12629 			}
12630 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12631 			d1 = (double)Z_LVAL_P(op1);
12632 			d2 = Z_DVAL_P(op2);
12633 			goto is_smaller_double;
12634 		}
12635 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12636 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12637 			d1 = Z_DVAL_P(op1);
12638 			d2 = Z_DVAL_P(op2);
12639 is_smaller_double:
12640 			if (d1 < d2) {
12641 				goto is_smaller_true;
12642 			} else {
12643 				goto is_smaller_false;
12644 			}
12645 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12646 			d1 = Z_DVAL_P(op1);
12647 			d2 = (double)Z_LVAL_P(op2);
12648 			goto is_smaller_double;
12649 		}
12650 	}
12651 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12652 }
12653 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12654 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12655 {
12656 	USE_OPLINE
12657 
12658 	zval *op1, *op2;
12659 	double d1, d2;
12660 
12661 	op1 = EX_VAR(opline->op1.var);
12662 	op2 = EX_VAR(opline->op2.var);
12663 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12664 		/* pass */
12665 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12666 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12667 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12668 is_smaller_or_equal_true:
12669 
12670 				ZVAL_TRUE(EX_VAR(opline->result.var));
12671 				ZEND_VM_NEXT_OPCODE();
12672 			} else {
12673 is_smaller_or_equal_false:
12674 
12675 				ZVAL_FALSE(EX_VAR(opline->result.var));
12676 				ZEND_VM_NEXT_OPCODE();
12677 			}
12678 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12679 			d1 = (double)Z_LVAL_P(op1);
12680 			d2 = Z_DVAL_P(op2);
12681 			goto is_smaller_or_equal_double;
12682 		}
12683 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12684 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12685 			d1 = Z_DVAL_P(op1);
12686 			d2 = Z_DVAL_P(op2);
12687 is_smaller_or_equal_double:
12688 			if (d1 <= d2) {
12689 				goto is_smaller_or_equal_true;
12690 			} else {
12691 				goto is_smaller_or_equal_false;
12692 			}
12693 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12694 			d1 = Z_DVAL_P(op1);
12695 			d2 = (double)Z_LVAL_P(op2);
12696 			goto is_smaller_or_equal_double;
12697 		}
12698 	}
12699 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12700 }
12701 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12702 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12703 {
12704 	USE_OPLINE
12705 
12706 	zval *op1, *op2;
12707 	double d1, d2;
12708 
12709 	op1 = EX_VAR(opline->op1.var);
12710 	op2 = EX_VAR(opline->op2.var);
12711 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12712 		/* pass */
12713 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12714 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12715 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12716 is_smaller_or_equal_true:
12717 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12718 				ZVAL_TRUE(EX_VAR(opline->result.var));
12719 				ZEND_VM_NEXT_OPCODE();
12720 			} else {
12721 is_smaller_or_equal_false:
12722 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12723 				ZVAL_FALSE(EX_VAR(opline->result.var));
12724 				ZEND_VM_NEXT_OPCODE();
12725 			}
12726 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12727 			d1 = (double)Z_LVAL_P(op1);
12728 			d2 = Z_DVAL_P(op2);
12729 			goto is_smaller_or_equal_double;
12730 		}
12731 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12732 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12733 			d1 = Z_DVAL_P(op1);
12734 			d2 = Z_DVAL_P(op2);
12735 is_smaller_or_equal_double:
12736 			if (d1 <= d2) {
12737 				goto is_smaller_or_equal_true;
12738 			} else {
12739 				goto is_smaller_or_equal_false;
12740 			}
12741 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12742 			d1 = Z_DVAL_P(op1);
12743 			d2 = (double)Z_LVAL_P(op2);
12744 			goto is_smaller_or_equal_double;
12745 		}
12746 	}
12747 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12748 }
12749 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12750 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12751 {
12752 	USE_OPLINE
12753 
12754 	zval *op1, *op2;
12755 	double d1, d2;
12756 
12757 	op1 = EX_VAR(opline->op1.var);
12758 	op2 = EX_VAR(opline->op2.var);
12759 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12760 		/* pass */
12761 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12762 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12763 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12764 is_smaller_or_equal_true:
12765 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12766 				ZVAL_TRUE(EX_VAR(opline->result.var));
12767 				ZEND_VM_NEXT_OPCODE();
12768 			} else {
12769 is_smaller_or_equal_false:
12770 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12771 				ZVAL_FALSE(EX_VAR(opline->result.var));
12772 				ZEND_VM_NEXT_OPCODE();
12773 			}
12774 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12775 			d1 = (double)Z_LVAL_P(op1);
12776 			d2 = Z_DVAL_P(op2);
12777 			goto is_smaller_or_equal_double;
12778 		}
12779 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12780 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12781 			d1 = Z_DVAL_P(op1);
12782 			d2 = Z_DVAL_P(op2);
12783 is_smaller_or_equal_double:
12784 			if (d1 <= d2) {
12785 				goto is_smaller_or_equal_true;
12786 			} else {
12787 				goto is_smaller_or_equal_false;
12788 			}
12789 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12790 			d1 = Z_DVAL_P(op1);
12791 			d2 = (double)Z_LVAL_P(op2);
12792 			goto is_smaller_or_equal_double;
12793 		}
12794 	}
12795 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12796 }
12797 
ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12798 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12799 {
12800 	USE_OPLINE
12801 
12802 	zval *op1, *op2;
12803 
12804 	op1 = EX_VAR(opline->op1.var);
12805 	op2 = EX_VAR(opline->op2.var);
12806 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12807 		/* pass */
12808 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12809 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12810 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
12811 		ZEND_VM_NEXT_OPCODE();
12812 	}
12813 
12814 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12815 }
12816 
ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12818 {
12819 	USE_OPLINE
12820 
12821 	zval *op1, *op2;
12822 
12823 	op1 = EX_VAR(opline->op1.var);
12824 	op2 = EX_VAR(opline->op2.var);
12825 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12826 		/* pass */
12827 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12828 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12829 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
12830 		ZEND_VM_NEXT_OPCODE();
12831 	}
12832 
12833 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12834 }
12835 
ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12837 {
12838 	USE_OPLINE
12839 
12840 	zval *op1, *op2;
12841 
12842 	op1 = EX_VAR(opline->op1.var);
12843 	op2 = EX_VAR(opline->op2.var);
12844 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
12845 		/* pass */
12846 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12847 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12848 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
12849 		ZEND_VM_NEXT_OPCODE();
12850 	}
12851 
12852 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12853 }
12854 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12855 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12856 {
12857 	USE_OPLINE
12858 	zval *op1, *op2, *result;
12859 
12860 	op1 = EX_VAR(opline->op1.var);
12861 	op2 = EX_VAR(opline->op2.var);
12862 	result = EX_VAR(opline->result.var);
12863 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
12864 	ZEND_VM_NEXT_OPCODE();
12865 }
12866 
ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12867 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12868 {
12869 	USE_OPLINE
12870 	zval *op1, *op2, *result;
12871 
12872 	op1 = EX_VAR(opline->op1.var);
12873 	op2 = EX_VAR(opline->op2.var);
12874 	result = EX_VAR(opline->result.var);
12875 	fast_long_add_function(result, op1, op2);
12876 	ZEND_VM_NEXT_OPCODE();
12877 }
12878 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12879 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12880 {
12881 	USE_OPLINE
12882 	zval *op1, *op2, *result;
12883 
12884 	op1 = EX_VAR(opline->op1.var);
12885 	op2 = EX_VAR(opline->op2.var);
12886 	result = EX_VAR(opline->result.var);
12887 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
12888 	ZEND_VM_NEXT_OPCODE();
12889 }
12890 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12891 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12892 {
12893 	USE_OPLINE
12894 	zval *op1, *op2, *result;
12895 
12896 	op1 = EX_VAR(opline->op1.var);
12897 	op2 = EX_VAR(opline->op2.var);
12898 	result = EX_VAR(opline->result.var);
12899 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
12900 	ZEND_VM_NEXT_OPCODE();
12901 }
12902 
ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12903 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12904 {
12905 	USE_OPLINE
12906 	zval *op1, *op2, *result;
12907 
12908 	op1 = EX_VAR(opline->op1.var);
12909 	op2 = EX_VAR(opline->op2.var);
12910 	result = EX_VAR(opline->result.var);
12911 	fast_long_sub_function(result, op1, op2);
12912 	ZEND_VM_NEXT_OPCODE();
12913 }
12914 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12915 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12916 {
12917 	USE_OPLINE
12918 	zval *op1, *op2, *result;
12919 
12920 	op1 = EX_VAR(opline->op1.var);
12921 	op2 = EX_VAR(opline->op2.var);
12922 	result = EX_VAR(opline->result.var);
12923 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
12924 	ZEND_VM_NEXT_OPCODE();
12925 }
12926 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12927 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12928 {
12929 	USE_OPLINE
12930 	zval *op1, *op2, *result;
12931 
12932 	op1 = EX_VAR(opline->op1.var);
12933 	op2 = EX_VAR(opline->op2.var);
12934 	result = EX_VAR(opline->result.var);
12935 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
12936 	ZEND_VM_NEXT_OPCODE();
12937 }
12938 
ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12939 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12940 {
12941 	USE_OPLINE
12942 	zval *op1, *op2, *result;
12943 	zend_long overflow;
12944 
12945 	op1 = EX_VAR(opline->op1.var);
12946 	op2 = EX_VAR(opline->op2.var);
12947 	result = EX_VAR(opline->result.var);
12948 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12949 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12950 	ZEND_VM_NEXT_OPCODE();
12951 }
12952 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12953 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12954 {
12955 	USE_OPLINE
12956 	zval *op1, *op2, *result;
12957 
12958 	op1 = EX_VAR(opline->op1.var);
12959 	op2 = EX_VAR(opline->op2.var);
12960 	result = EX_VAR(opline->result.var);
12961 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
12962 	ZEND_VM_NEXT_OPCODE();
12963 }
12964 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12966 {
12967 	USE_OPLINE
12968 	zval *op1, *op2;
12969 	int result;
12970 
12971 	op1 = EX_VAR(opline->op1.var);
12972 	op2 = EX_VAR(opline->op2.var);
12973 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12974 
12975 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12976 	ZEND_VM_NEXT_OPCODE();
12977 }
12978 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12979 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12980 {
12981 	USE_OPLINE
12982 	zval *op1, *op2;
12983 	int result;
12984 
12985 	op1 = EX_VAR(opline->op1.var);
12986 	op2 = EX_VAR(opline->op2.var);
12987 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
12988 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
12989 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
12990 	ZEND_VM_NEXT_OPCODE();
12991 }
12992 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12993 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12994 {
12995 	USE_OPLINE
12996 	zval *op1, *op2;
12997 	int result;
12998 
12999 	op1 = EX_VAR(opline->op1.var);
13000 	op2 = EX_VAR(opline->op2.var);
13001 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13002 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13003 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13004 	ZEND_VM_NEXT_OPCODE();
13005 }
13006 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13008 {
13009 	USE_OPLINE
13010 	zval *op1, *op2;
13011 	int result;
13012 
13013 	op1 = EX_VAR(opline->op1.var);
13014 	op2 = EX_VAR(opline->op2.var);
13015 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13016 
13017 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13018 	ZEND_VM_NEXT_OPCODE();
13019 }
13020 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13021 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13022 {
13023 	USE_OPLINE
13024 	zval *op1, *op2;
13025 	int result;
13026 
13027 	op1 = EX_VAR(opline->op1.var);
13028 	op2 = EX_VAR(opline->op2.var);
13029 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13030 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13031 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13032 	ZEND_VM_NEXT_OPCODE();
13033 }
13034 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13035 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13036 {
13037 	USE_OPLINE
13038 	zval *op1, *op2;
13039 	int result;
13040 
13041 	op1 = EX_VAR(opline->op1.var);
13042 	op2 = EX_VAR(opline->op2.var);
13043 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13044 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13045 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13046 	ZEND_VM_NEXT_OPCODE();
13047 }
13048 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13049 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13050 {
13051 	USE_OPLINE
13052 	zval *op1, *op2;
13053 	int result;
13054 
13055 	op1 = EX_VAR(opline->op1.var);
13056 	op2 = EX_VAR(opline->op2.var);
13057 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13058 
13059 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13060 	ZEND_VM_NEXT_OPCODE();
13061 }
13062 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13063 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13064 {
13065 	USE_OPLINE
13066 	zval *op1, *op2;
13067 	int result;
13068 
13069 	op1 = EX_VAR(opline->op1.var);
13070 	op2 = EX_VAR(opline->op2.var);
13071 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13072 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13073 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13074 	ZEND_VM_NEXT_OPCODE();
13075 }
13076 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13077 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13078 {
13079 	USE_OPLINE
13080 	zval *op1, *op2;
13081 	int result;
13082 
13083 	op1 = EX_VAR(opline->op1.var);
13084 	op2 = EX_VAR(opline->op2.var);
13085 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13086 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13087 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13088 	ZEND_VM_NEXT_OPCODE();
13089 }
13090 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13091 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13092 {
13093 	USE_OPLINE
13094 	zval *op1, *op2;
13095 	int result;
13096 
13097 	op1 = EX_VAR(opline->op1.var);
13098 	op2 = EX_VAR(opline->op2.var);
13099 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13100 
13101 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13102 	ZEND_VM_NEXT_OPCODE();
13103 }
13104 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13105 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13106 {
13107 	USE_OPLINE
13108 	zval *op1, *op2;
13109 	int result;
13110 
13111 	op1 = EX_VAR(opline->op1.var);
13112 	op2 = EX_VAR(opline->op2.var);
13113 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13114 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13115 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13116 	ZEND_VM_NEXT_OPCODE();
13117 }
13118 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13119 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13120 {
13121 	USE_OPLINE
13122 	zval *op1, *op2;
13123 	int result;
13124 
13125 	op1 = EX_VAR(opline->op1.var);
13126 	op2 = EX_VAR(opline->op2.var);
13127 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13128 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13129 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13130 	ZEND_VM_NEXT_OPCODE();
13131 }
13132 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13134 {
13135 	USE_OPLINE
13136 	zval *op1, *op2;
13137 	int result;
13138 
13139 	op1 = EX_VAR(opline->op1.var);
13140 	op2 = EX_VAR(opline->op2.var);
13141 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13142 
13143 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13144 	ZEND_VM_NEXT_OPCODE();
13145 }
13146 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13147 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13148 {
13149 	USE_OPLINE
13150 	zval *op1, *op2;
13151 	int result;
13152 
13153 	op1 = EX_VAR(opline->op1.var);
13154 	op2 = EX_VAR(opline->op2.var);
13155 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13156 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13157 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13158 	ZEND_VM_NEXT_OPCODE();
13159 }
13160 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13161 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13162 {
13163 	USE_OPLINE
13164 	zval *op1, *op2;
13165 	int result;
13166 
13167 	op1 = EX_VAR(opline->op1.var);
13168 	op2 = EX_VAR(opline->op2.var);
13169 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13170 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13171 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13172 	ZEND_VM_NEXT_OPCODE();
13173 }
13174 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13175 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13176 {
13177 	USE_OPLINE
13178 	zval *op1, *op2;
13179 	int result;
13180 
13181 	op1 = EX_VAR(opline->op1.var);
13182 	op2 = EX_VAR(opline->op2.var);
13183 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13184 
13185 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13186 	ZEND_VM_NEXT_OPCODE();
13187 }
13188 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13189 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13190 {
13191 	USE_OPLINE
13192 	zval *op1, *op2;
13193 	int result;
13194 
13195 	op1 = EX_VAR(opline->op1.var);
13196 	op2 = EX_VAR(opline->op2.var);
13197 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13198 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13199 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13200 	ZEND_VM_NEXT_OPCODE();
13201 }
13202 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13203 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13204 {
13205 	USE_OPLINE
13206 	zval *op1, *op2;
13207 	int result;
13208 
13209 	op1 = EX_VAR(opline->op1.var);
13210 	op2 = EX_VAR(opline->op2.var);
13211 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13212 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13213 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13214 	ZEND_VM_NEXT_OPCODE();
13215 }
13216 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13217 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13218 {
13219 	USE_OPLINE
13220 	zval *op1, *op2;
13221 	int result;
13222 
13223 	op1 = EX_VAR(opline->op1.var);
13224 	op2 = EX_VAR(opline->op2.var);
13225 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13226 
13227 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13228 	ZEND_VM_NEXT_OPCODE();
13229 }
13230 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13231 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13232 {
13233 	USE_OPLINE
13234 	zval *op1, *op2;
13235 	int result;
13236 
13237 	op1 = EX_VAR(opline->op1.var);
13238 	op2 = EX_VAR(opline->op2.var);
13239 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13240 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13241 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13242 	ZEND_VM_NEXT_OPCODE();
13243 }
13244 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13245 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13246 {
13247 	USE_OPLINE
13248 	zval *op1, *op2;
13249 	int result;
13250 
13251 	op1 = EX_VAR(opline->op1.var);
13252 	op2 = EX_VAR(opline->op2.var);
13253 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13254 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13255 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13256 	ZEND_VM_NEXT_OPCODE();
13257 }
13258 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13259 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13260 {
13261 	USE_OPLINE
13262 	zval *op1, *op2;
13263 	int result;
13264 
13265 	op1 = EX_VAR(opline->op1.var);
13266 	op2 = EX_VAR(opline->op2.var);
13267 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13268 
13269 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13270 	ZEND_VM_NEXT_OPCODE();
13271 }
13272 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13273 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13274 {
13275 	USE_OPLINE
13276 	zval *op1, *op2;
13277 	int result;
13278 
13279 	op1 = EX_VAR(opline->op1.var);
13280 	op2 = EX_VAR(opline->op2.var);
13281 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13282 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13283 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13284 	ZEND_VM_NEXT_OPCODE();
13285 }
13286 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13287 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13288 {
13289 	USE_OPLINE
13290 	zval *op1, *op2;
13291 	int result;
13292 
13293 	op1 = EX_VAR(opline->op1.var);
13294 	op2 = EX_VAR(opline->op2.var);
13295 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13296 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13297 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
13298 	ZEND_VM_NEXT_OPCODE();
13299 }
13300 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13302 {
13303 	USE_OPLINE
13304 	zend_free_op free_op2;
13305 	zval *container;
13306 
13307 	SAVE_OPLINE();
13308 	container = EX_VAR(opline->op1.var);
13309 	zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
13310 	zval_ptr_dtor_nogc(free_op2);
13311 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13312 }
13313 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13315 {
13316 	USE_OPLINE
13317 
13318 	zval *container;
13319 
13320 	SAVE_OPLINE();
13321 	container = EX_VAR(opline->op1.var);
13322 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
13323 
13324 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13325 }
13326 
ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13327 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13328 {
13329 	USE_OPLINE
13330 	zend_free_op free_op1;
13331 	zval *op1;
13332 
13333 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13334 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13335 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
13336 		ZEND_VM_NEXT_OPCODE();
13337 	}
13338 
13339 	SAVE_OPLINE();
13340 	if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
13341 		op1 = ZVAL_UNDEFINED_OP1();
13342 	}
13343 	bitwise_not_function(EX_VAR(opline->result.var), op1);
13344 	zval_ptr_dtor_nogc(free_op1);
13345 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13346 }
13347 
ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13349 {
13350 	USE_OPLINE
13351 	zval *val;
13352 	zend_free_op free_op1;
13353 
13354 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13355 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13356 		ZVAL_FALSE(EX_VAR(opline->result.var));
13357 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13358 		/* The result and op1 can be the same cv zval */
13359 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
13360 		ZVAL_TRUE(EX_VAR(opline->result.var));
13361 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
13362 			SAVE_OPLINE();
13363 			ZVAL_UNDEFINED_OP1();
13364 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13365 		}
13366 	} else {
13367 		SAVE_OPLINE();
13368 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
13369 		zval_ptr_dtor_nogc(free_op1);
13370 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13371 	}
13372 	ZEND_VM_NEXT_OPCODE();
13373 }
13374 
ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13375 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13376 {
13377 	USE_OPLINE
13378 	zend_free_op free_op1;
13379 	zval *z;
13380 
13381 	SAVE_OPLINE();
13382 	z = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13383 
13384 	if (Z_TYPE_P(z) == IS_STRING) {
13385 		zend_string *str = Z_STR_P(z);
13386 
13387 		if (ZSTR_LEN(str) != 0) {
13388 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
13389 		}
13390 	} else {
13391 		zend_string *str = zval_get_string_func(z);
13392 
13393 		if (ZSTR_LEN(str) != 0) {
13394 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
13395 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
13396 			ZVAL_UNDEFINED_OP1();
13397 		}
13398 		zend_string_release_ex(str, 0);
13399 	}
13400 
13401 	zval_ptr_dtor_nogc(free_op1);
13402 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13403 }
13404 
ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13405 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13406 {
13407 	USE_OPLINE
13408 	zend_free_op free_op1;
13409 	zval *val;
13410 
13411 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13412 
13413 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13414 		ZEND_VM_NEXT_OPCODE();
13415 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13416 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13417 			SAVE_OPLINE();
13418 			ZVAL_UNDEFINED_OP1();
13419 			if (UNEXPECTED(EG(exception))) {
13420 				HANDLE_EXCEPTION();
13421 			}
13422 		}
13423 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13424 	}
13425 
13426 	SAVE_OPLINE();
13427 	if (i_zend_is_true(val)) {
13428 		opline++;
13429 	} else {
13430 		opline = OP_JMP_ADDR(opline, opline->op2);
13431 	}
13432 	zval_ptr_dtor_nogc(free_op1);
13433 	ZEND_VM_JMP(opline);
13434 }
13435 
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13436 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13437 {
13438 	USE_OPLINE
13439 	zend_free_op free_op1;
13440 	zval *val;
13441 
13442 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13443 
13444 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13445 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13446 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13447 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13448 			SAVE_OPLINE();
13449 			ZVAL_UNDEFINED_OP1();
13450 			if (UNEXPECTED(EG(exception))) {
13451 				HANDLE_EXCEPTION();
13452 			}
13453 		}
13454 		ZEND_VM_NEXT_OPCODE();
13455 	}
13456 
13457 	SAVE_OPLINE();
13458 	if (i_zend_is_true(val)) {
13459 		opline = OP_JMP_ADDR(opline, opline->op2);
13460 	} else {
13461 		opline++;
13462 	}
13463 	zval_ptr_dtor_nogc(free_op1);
13464 	ZEND_VM_JMP(opline);
13465 }
13466 
ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13468 {
13469 	USE_OPLINE
13470 	zend_free_op free_op1;
13471 	zval *val;
13472 
13473 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13474 
13475 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
13476 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13477 		ZEND_VM_CONTINUE();
13478 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13479 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13480 			SAVE_OPLINE();
13481 			ZVAL_UNDEFINED_OP1();
13482 			if (UNEXPECTED(EG(exception))) {
13483 				HANDLE_EXCEPTION();
13484 			}
13485 		}
13486 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13487 	}
13488 
13489 	SAVE_OPLINE();
13490 	if (i_zend_is_true(val)) {
13491 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
13492 	} else {
13493 		opline = OP_JMP_ADDR(opline, opline->op2);
13494 	}
13495 	zval_ptr_dtor_nogc(free_op1);
13496 	ZEND_VM_JMP(opline);
13497 }
13498 
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13499 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13500 {
13501 	USE_OPLINE
13502 	zend_free_op free_op1;
13503 	zval *val;
13504 	int ret;
13505 
13506 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13507 
13508 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13509 		ZVAL_TRUE(EX_VAR(opline->result.var));
13510 		ZEND_VM_NEXT_OPCODE();
13511 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13512 		ZVAL_FALSE(EX_VAR(opline->result.var));
13513 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13514 			SAVE_OPLINE();
13515 			ZVAL_UNDEFINED_OP1();
13516 			if (UNEXPECTED(EG(exception))) {
13517 				HANDLE_EXCEPTION();
13518 			}
13519 		}
13520 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13521 	}
13522 
13523 	SAVE_OPLINE();
13524 	ret = i_zend_is_true(val);
13525 	zval_ptr_dtor_nogc(free_op1);
13526 	if (ret) {
13527 		ZVAL_TRUE(EX_VAR(opline->result.var));
13528 		opline++;
13529 	} else {
13530 		ZVAL_FALSE(EX_VAR(opline->result.var));
13531 		opline = OP_JMP_ADDR(opline, opline->op2);
13532 	}
13533 	ZEND_VM_JMP(opline);
13534 }
13535 
ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13536 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13537 {
13538 	USE_OPLINE
13539 	zend_free_op free_op1;
13540 	zval *val;
13541 	int ret;
13542 
13543 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13544 
13545 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13546 		ZVAL_TRUE(EX_VAR(opline->result.var));
13547 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
13548 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13549 		ZVAL_FALSE(EX_VAR(opline->result.var));
13550 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
13551 			SAVE_OPLINE();
13552 			ZVAL_UNDEFINED_OP1();
13553 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13554 		} else {
13555 			ZEND_VM_NEXT_OPCODE();
13556 		}
13557 	}
13558 
13559 	SAVE_OPLINE();
13560 	ret = i_zend_is_true(val);
13561 	zval_ptr_dtor_nogc(free_op1);
13562 	if (ret) {
13563 		ZVAL_TRUE(EX_VAR(opline->result.var));
13564 		opline = OP_JMP_ADDR(opline, opline->op2);
13565 	} else {
13566 		ZVAL_FALSE(EX_VAR(opline->result.var));
13567 		opline++;
13568 	}
13569 	ZEND_VM_JMP(opline);
13570 }
13571 
ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13573 {
13574 	USE_OPLINE
13575 
13576 	SAVE_OPLINE();
13577 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
13578 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13579 }
13580 
ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13581 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13582 {
13583 	zval *var;
13584 	USE_OPLINE
13585 
13586 	SAVE_OPLINE();
13587 	var = EX_VAR(opline->op1.var);
13588 	if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) {
13589 		zend_hash_iterator_del(Z_FE_ITER_P(var));
13590 	}
13591 	zval_ptr_dtor_nogc(var);
13592 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13593 }
13594 
ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13595 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13596 {
13597 	USE_OPLINE
13598 	zval *value, *arg;
13599 	zend_free_op free_op1;
13600 
13601 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13602 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
13603 	ZVAL_COPY_VALUE(arg, value);
13604 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
13605 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
13606 			Z_ADDREF_P(arg);
13607 		}
13608 	}
13609 	ZEND_VM_NEXT_OPCODE();
13610 }
13611 
ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13612 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13613 {
13614 	USE_OPLINE
13615 	zval *val;
13616 	zend_free_op free_op1;
13617 
13618 	val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13619 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
13620 		ZVAL_TRUE(EX_VAR(opline->result.var));
13621 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
13622 		/* The result and op1 can be the same cv zval */
13623 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
13624 		ZVAL_FALSE(EX_VAR(opline->result.var));
13625 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
13626 			SAVE_OPLINE();
13627 			ZVAL_UNDEFINED_OP1();
13628 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13629 		}
13630 	} else {
13631 		SAVE_OPLINE();
13632 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
13633 		zval_ptr_dtor_nogc(free_op1);
13634 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13635 	}
13636 	ZEND_VM_NEXT_OPCODE();
13637 }
13638 
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13640 {
13641 	USE_OPLINE
13642 	zend_free_op free_op1;
13643 	zval *obj;
13644 	zend_class_entry *ce, *scope;
13645 	zend_function *clone;
13646 	zend_object_clone_obj_t clone_call;
13647 
13648 	SAVE_OPLINE();
13649 	obj = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13650 
13651 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
13652 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13653 	}
13654 
13655 	do {
13656 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
13657 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
13658 		    if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
13659 				obj = Z_REFVAL_P(obj);
13660 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
13661 					break;
13662 				}
13663 			}
13664 			ZVAL_UNDEF(EX_VAR(opline->result.var));
13665 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
13666 				ZVAL_UNDEFINED_OP1();
13667 				if (UNEXPECTED(EG(exception) != NULL)) {
13668 					HANDLE_EXCEPTION();
13669 				}
13670 			}
13671 			zend_throw_error(NULL, "__clone method called on non-object");
13672 			zval_ptr_dtor_nogc(free_op1);
13673 			HANDLE_EXCEPTION();
13674 		}
13675 	} while (0);
13676 
13677 	ce = Z_OBJCE_P(obj);
13678 	clone = ce->clone;
13679 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
13680 	if (UNEXPECTED(clone_call == NULL)) {
13681 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
13682 		zval_ptr_dtor_nogc(free_op1);
13683 		ZVAL_UNDEF(EX_VAR(opline->result.var));
13684 		HANDLE_EXCEPTION();
13685 	}
13686 
13687 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
13688 		scope = EX(func)->op_array.scope;
13689 		if (clone->common.scope != scope) {
13690 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
13691 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
13692 				zend_wrong_clone_call(clone, scope);
13693 				zval_ptr_dtor_nogc(free_op1);
13694 				ZVAL_UNDEF(EX_VAR(opline->result.var));
13695 				HANDLE_EXCEPTION();
13696 			}
13697 		}
13698 	}
13699 
13700 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
13701 
13702 	zval_ptr_dtor_nogc(free_op1);
13703 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13704 }
13705 
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13706 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13707 {
13708 	USE_OPLINE
13709 	zend_op_array *new_op_array;
13710 	zend_free_op free_op1;
13711 	zval *inc_filename;
13712 
13713 	SAVE_OPLINE();
13714 	inc_filename = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13715 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
13716 	zval_ptr_dtor_nogc(free_op1);
13717 	if (UNEXPECTED(EG(exception) != NULL)) {
13718 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
13719 			destroy_op_array(new_op_array);
13720 			efree_size(new_op_array, sizeof(zend_op_array));
13721 		}
13722 		UNDEF_RESULT();
13723 		HANDLE_EXCEPTION();
13724 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
13725 		if (RETURN_VALUE_USED(opline)) {
13726 			ZVAL_TRUE(EX_VAR(opline->result.var));
13727 		}
13728 	} else if (EXPECTED(new_op_array != NULL)) {
13729 		zval *return_value = NULL;
13730 		zend_execute_data *call;
13731 
13732 		if (RETURN_VALUE_USED(opline)) {
13733 			return_value = EX_VAR(opline->result.var);
13734 		}
13735 
13736 		new_op_array->scope = EX(func)->op_array.scope;
13737 
13738 		call = zend_vm_stack_push_call_frame(
13739 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
13740 			(zend_function*)new_op_array, 0,
13741 			Z_PTR(EX(This)));
13742 
13743 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
13744 			call->symbol_table = EX(symbol_table);
13745 		} else {
13746 			call->symbol_table = zend_rebuild_symbol_table();
13747 		}
13748 
13749 		call->prev_execute_data = execute_data;
13750 		i_init_code_execute_data(call, new_op_array, return_value);
13751 		if (EXPECTED(zend_execute_ex == execute_ex)) {
13752 			ZEND_VM_ENTER();
13753 		} else {
13754 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
13755 			zend_execute_ex(call);
13756 			zend_vm_stack_free_call_frame(call);
13757 		}
13758 
13759 		destroy_op_array(new_op_array);
13760 		efree_size(new_op_array, sizeof(zend_op_array));
13761 		if (UNEXPECTED(EG(exception) != NULL)) {
13762 			zend_rethrow_exception(execute_data);
13763 			UNDEF_RESULT();
13764 			HANDLE_EXCEPTION();
13765 		}
13766 	} else if (RETURN_VALUE_USED(opline)) {
13767 		ZVAL_FALSE(EX_VAR(opline->result.var));
13768 	}
13769 	ZEND_VM_NEXT_OPCODE();
13770 }
13771 
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13773 {
13774 	USE_OPLINE
13775 	zval *value;
13776 	zend_free_op free_op1;
13777 
13778 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13779 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
13780 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
13781 		zval_ptr_dtor_nogc(free_op1);
13782 		ZEND_VM_NEXT_OPCODE();
13783 	} else {
13784 		zend_bool strict;
13785 
13786 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
13787 			value = Z_REFVAL_P(value);
13788 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
13789 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
13790 				zval_ptr_dtor_nogc(free_op1);
13791 				ZEND_VM_NEXT_OPCODE();
13792 			}
13793 		}
13794 
13795 		SAVE_OPLINE();
13796 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
13797 			value = ZVAL_UNDEFINED_OP1();
13798 		}
13799 		strict = EX_USES_STRICT_TYPES();
13800 		do {
13801 			if (EXPECTED(!strict)) {
13802 				zend_string *str;
13803 				zval tmp;
13804 
13805 				ZVAL_COPY(&tmp, value);
13806 				if (zend_parse_arg_str_weak(&tmp, &str)) {
13807 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
13808 					zval_ptr_dtor(&tmp);
13809 					break;
13810 				}
13811 				zval_ptr_dtor(&tmp);
13812 			}
13813 			if (!EG(exception)) {
13814 				zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
13815 			}
13816 			ZVAL_NULL(EX_VAR(opline->result.var));
13817 		} while (0);
13818 	}
13819 	zval_ptr_dtor_nogc(free_op1);
13820 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13821 }
13822 
ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13823 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13824 {
13825 	USE_OPLINE
13826 	zval *value;
13827 	int result = 0;
13828 	zend_free_op free_op1;
13829 
13830 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13831 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
13832 type_check_resource:
13833 		if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
13834 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
13835 			result = 1;
13836 		}
13837 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
13838 		value = Z_REFVAL_P(value);
13839 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
13840 			goto type_check_resource;
13841 		}
13842 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
13843 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
13844 		SAVE_OPLINE();
13845 		ZVAL_UNDEFINED_OP1();
13846 		if (UNEXPECTED(EG(exception))) {
13847 			ZVAL_UNDEF(EX_VAR(opline->result.var));
13848 			HANDLE_EXCEPTION();
13849 		}
13850 	}
13851 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
13852 		SAVE_OPLINE();
13853 		zval_ptr_dtor_nogc(free_op1);
13854 		ZEND_VM_SMART_BRANCH(result, 1);
13855 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
13856 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13857 	} else {
13858 		ZEND_VM_SMART_BRANCH(result, 0);
13859 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
13860 		ZEND_VM_NEXT_OPCODE();
13861 	}
13862 }
13863 
ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13864 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13865 {
13866 	USE_OPLINE
13867 	zend_free_op free_op1;
13868 	zval *op1, *op2;
13869 
13870 	SAVE_OPLINE();
13871 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13872 	op2 = RT_CONSTANT(opline, opline->op2);
13873 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
13874 	zval_ptr_dtor_nogc(free_op1);
13875 
13876 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13877 }
13878 
ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13879 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13880 {
13881 	USE_OPLINE
13882 	zend_free_op free_op1;
13883 	zval *op1, *op2;
13884 
13885 	SAVE_OPLINE();
13886 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13887 	op2 = RT_CONSTANT(opline, opline->op2);
13888 	pow_function(EX_VAR(opline->result.var), op1, op2);
13889 	zval_ptr_dtor_nogc(free_op1);
13890 
13891 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13892 }
13893 
ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13895 {
13896 	USE_OPLINE
13897 	zend_free_op free_op1;
13898 	zval *op1, *op2;
13899 
13900 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13901 	op2 = RT_CONSTANT(opline, opline->op2);
13902 
13903 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
13904 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
13905 		zend_string *op1_str = Z_STR_P(op1);
13906 		zend_string *op2_str = Z_STR_P(op2);
13907 		zend_string *str;
13908 
13909 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
13910 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
13911 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
13912 			} else {
13913 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
13914 			}
13915 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
13916 				zend_string_release_ex(op1_str, 0);
13917 			}
13918 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
13919 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
13920 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
13921 			} else {
13922 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
13923 			}
13924 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
13925 				zend_string_release_ex(op2_str, 0);
13926 			}
13927 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
13928 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
13929 		    size_t len = ZSTR_LEN(op1_str);
13930 
13931 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
13932 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
13933 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
13934 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
13935 				zend_string_release_ex(op2_str, 0);
13936 			}
13937 		} else {
13938 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
13939 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
13940 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
13941 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
13942 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
13943 				zend_string_release_ex(op1_str, 0);
13944 			}
13945 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
13946 				zend_string_release_ex(op2_str, 0);
13947 			}
13948 		}
13949 		ZEND_VM_NEXT_OPCODE();
13950 	} else {
13951 		SAVE_OPLINE();
13952 
13953 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
13954 			op1 = ZVAL_UNDEFINED_OP1();
13955 		}
13956 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
13957 			op2 = ZVAL_UNDEFINED_OP2();
13958 		}
13959 		concat_function(EX_VAR(opline->result.var), op1, op2);
13960 		zval_ptr_dtor_nogc(free_op1);
13961 
13962 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13963 	}
13964 }
13965 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13967 {
13968 	USE_OPLINE
13969 	zend_free_op free_op1;
13970 	zval *op1, *op2;
13971 	double d1, d2;
13972 
13973 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
13974 	op2 = RT_CONSTANT(opline, opline->op2);
13975 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
13976 		/* pass */
13977 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
13978 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
13979 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
13980 is_equal_true:
13981 
13982 				ZVAL_TRUE(EX_VAR(opline->result.var));
13983 				ZEND_VM_NEXT_OPCODE();
13984 			} else {
13985 is_equal_false:
13986 
13987 				ZVAL_FALSE(EX_VAR(opline->result.var));
13988 				ZEND_VM_NEXT_OPCODE();
13989 			}
13990 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
13991 			d1 = (double)Z_LVAL_P(op1);
13992 			d2 = Z_DVAL_P(op2);
13993 			goto is_equal_double;
13994 		}
13995 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
13996 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
13997 			d1 = Z_DVAL_P(op1);
13998 			d2 = Z_DVAL_P(op2);
13999 is_equal_double:
14000 			if (d1 == d2) {
14001 				goto is_equal_true;
14002 			} else {
14003 				goto is_equal_false;
14004 			}
14005 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14006 			d1 = Z_DVAL_P(op1);
14007 			d2 = (double)Z_LVAL_P(op2);
14008 			goto is_equal_double;
14009 		}
14010 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14011 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14012 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14013 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14014 				zval_ptr_dtor_str(op1);
14015 			}
14016 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14017 				zval_ptr_dtor_str(op2);
14018 			}
14019 			if (result) {
14020 				goto is_equal_true;
14021 			} else {
14022 				goto is_equal_false;
14023 			}
14024 		}
14025 	}
14026 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14027 }
14028 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14030 {
14031 	USE_OPLINE
14032 	zend_free_op free_op1;
14033 	zval *op1, *op2;
14034 	double d1, d2;
14035 
14036 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14037 	op2 = RT_CONSTANT(opline, opline->op2);
14038 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14039 		/* pass */
14040 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14041 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14042 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14043 is_equal_true:
14044 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14045 				ZVAL_TRUE(EX_VAR(opline->result.var));
14046 				ZEND_VM_NEXT_OPCODE();
14047 			} else {
14048 is_equal_false:
14049 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14050 				ZVAL_FALSE(EX_VAR(opline->result.var));
14051 				ZEND_VM_NEXT_OPCODE();
14052 			}
14053 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14054 			d1 = (double)Z_LVAL_P(op1);
14055 			d2 = Z_DVAL_P(op2);
14056 			goto is_equal_double;
14057 		}
14058 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14059 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14060 			d1 = Z_DVAL_P(op1);
14061 			d2 = Z_DVAL_P(op2);
14062 is_equal_double:
14063 			if (d1 == d2) {
14064 				goto is_equal_true;
14065 			} else {
14066 				goto is_equal_false;
14067 			}
14068 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14069 			d1 = Z_DVAL_P(op1);
14070 			d2 = (double)Z_LVAL_P(op2);
14071 			goto is_equal_double;
14072 		}
14073 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14074 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14075 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14076 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14077 				zval_ptr_dtor_str(op1);
14078 			}
14079 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14080 				zval_ptr_dtor_str(op2);
14081 			}
14082 			if (result) {
14083 				goto is_equal_true;
14084 			} else {
14085 				goto is_equal_false;
14086 			}
14087 		}
14088 	}
14089 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14090 }
14091 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14092 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14093 {
14094 	USE_OPLINE
14095 	zend_free_op free_op1;
14096 	zval *op1, *op2;
14097 	double d1, d2;
14098 
14099 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14100 	op2 = RT_CONSTANT(opline, opline->op2);
14101 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14102 		/* pass */
14103 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14104 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14105 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14106 is_equal_true:
14107 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14108 				ZVAL_TRUE(EX_VAR(opline->result.var));
14109 				ZEND_VM_NEXT_OPCODE();
14110 			} else {
14111 is_equal_false:
14112 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14113 				ZVAL_FALSE(EX_VAR(opline->result.var));
14114 				ZEND_VM_NEXT_OPCODE();
14115 			}
14116 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14117 			d1 = (double)Z_LVAL_P(op1);
14118 			d2 = Z_DVAL_P(op2);
14119 			goto is_equal_double;
14120 		}
14121 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14122 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14123 			d1 = Z_DVAL_P(op1);
14124 			d2 = Z_DVAL_P(op2);
14125 is_equal_double:
14126 			if (d1 == d2) {
14127 				goto is_equal_true;
14128 			} else {
14129 				goto is_equal_false;
14130 			}
14131 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14132 			d1 = Z_DVAL_P(op1);
14133 			d2 = (double)Z_LVAL_P(op2);
14134 			goto is_equal_double;
14135 		}
14136 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14137 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14138 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14139 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14140 				zval_ptr_dtor_str(op1);
14141 			}
14142 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14143 				zval_ptr_dtor_str(op2);
14144 			}
14145 			if (result) {
14146 				goto is_equal_true;
14147 			} else {
14148 				goto is_equal_false;
14149 			}
14150 		}
14151 	}
14152 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14153 }
14154 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14155 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14156 {
14157 	USE_OPLINE
14158 	zend_free_op free_op1;
14159 	zval *op1, *op2;
14160 	double d1, d2;
14161 
14162 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14163 	op2 = RT_CONSTANT(opline, opline->op2);
14164 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14165 		/* pass */
14166 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14167 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14168 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14169 is_not_equal_true:
14170 
14171 				ZVAL_TRUE(EX_VAR(opline->result.var));
14172 				ZEND_VM_NEXT_OPCODE();
14173 			} else {
14174 is_not_equal_false:
14175 
14176 				ZVAL_FALSE(EX_VAR(opline->result.var));
14177 				ZEND_VM_NEXT_OPCODE();
14178 			}
14179 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14180 			d1 = (double)Z_LVAL_P(op1);
14181 			d2 = Z_DVAL_P(op2);
14182 			goto is_not_equal_double;
14183 		}
14184 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14185 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14186 			d1 = Z_DVAL_P(op1);
14187 			d2 = Z_DVAL_P(op2);
14188 is_not_equal_double:
14189 			if (d1 != d2) {
14190 				goto is_not_equal_true;
14191 			} else {
14192 				goto is_not_equal_false;
14193 			}
14194 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14195 			d1 = Z_DVAL_P(op1);
14196 			d2 = (double)Z_LVAL_P(op2);
14197 			goto is_not_equal_double;
14198 		}
14199 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14200 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14201 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14202 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14203 				zval_ptr_dtor_str(op1);
14204 			}
14205 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14206 				zval_ptr_dtor_str(op2);
14207 			}
14208 			if (!result) {
14209 				goto is_not_equal_true;
14210 			} else {
14211 				goto is_not_equal_false;
14212 			}
14213 		}
14214 	}
14215 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14216 }
14217 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14219 {
14220 	USE_OPLINE
14221 	zend_free_op free_op1;
14222 	zval *op1, *op2;
14223 	double d1, d2;
14224 
14225 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14226 	op2 = RT_CONSTANT(opline, opline->op2);
14227 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14228 		/* pass */
14229 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14230 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14231 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14232 is_not_equal_true:
14233 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
14234 				ZVAL_TRUE(EX_VAR(opline->result.var));
14235 				ZEND_VM_NEXT_OPCODE();
14236 			} else {
14237 is_not_equal_false:
14238 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
14239 				ZVAL_FALSE(EX_VAR(opline->result.var));
14240 				ZEND_VM_NEXT_OPCODE();
14241 			}
14242 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14243 			d1 = (double)Z_LVAL_P(op1);
14244 			d2 = Z_DVAL_P(op2);
14245 			goto is_not_equal_double;
14246 		}
14247 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14248 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14249 			d1 = Z_DVAL_P(op1);
14250 			d2 = Z_DVAL_P(op2);
14251 is_not_equal_double:
14252 			if (d1 != d2) {
14253 				goto is_not_equal_true;
14254 			} else {
14255 				goto is_not_equal_false;
14256 			}
14257 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14258 			d1 = Z_DVAL_P(op1);
14259 			d2 = (double)Z_LVAL_P(op2);
14260 			goto is_not_equal_double;
14261 		}
14262 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14263 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14264 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14265 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14266 				zval_ptr_dtor_str(op1);
14267 			}
14268 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14269 				zval_ptr_dtor_str(op2);
14270 			}
14271 			if (!result) {
14272 				goto is_not_equal_true;
14273 			} else {
14274 				goto is_not_equal_false;
14275 			}
14276 		}
14277 	}
14278 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14279 }
14280 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14281 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14282 {
14283 	USE_OPLINE
14284 	zend_free_op free_op1;
14285 	zval *op1, *op2;
14286 	double d1, d2;
14287 
14288 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14289 	op2 = RT_CONSTANT(opline, opline->op2);
14290 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
14291 		/* pass */
14292 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14293 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14294 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
14295 is_not_equal_true:
14296 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
14297 				ZVAL_TRUE(EX_VAR(opline->result.var));
14298 				ZEND_VM_NEXT_OPCODE();
14299 			} else {
14300 is_not_equal_false:
14301 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
14302 				ZVAL_FALSE(EX_VAR(opline->result.var));
14303 				ZEND_VM_NEXT_OPCODE();
14304 			}
14305 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14306 			d1 = (double)Z_LVAL_P(op1);
14307 			d2 = Z_DVAL_P(op2);
14308 			goto is_not_equal_double;
14309 		}
14310 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14311 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14312 			d1 = Z_DVAL_P(op1);
14313 			d2 = Z_DVAL_P(op2);
14314 is_not_equal_double:
14315 			if (d1 != d2) {
14316 				goto is_not_equal_true;
14317 			} else {
14318 				goto is_not_equal_false;
14319 			}
14320 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14321 			d1 = Z_DVAL_P(op1);
14322 			d2 = (double)Z_LVAL_P(op2);
14323 			goto is_not_equal_double;
14324 		}
14325 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14326 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14327 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14328 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14329 				zval_ptr_dtor_str(op1);
14330 			}
14331 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14332 				zval_ptr_dtor_str(op2);
14333 			}
14334 			if (!result) {
14335 				goto is_not_equal_true;
14336 			} else {
14337 				goto is_not_equal_false;
14338 			}
14339 		}
14340 	}
14341 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14342 }
14343 
ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14344 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14345 {
14346 	USE_OPLINE
14347 	zend_free_op free_op1;
14348 	zval *op1, *op2;
14349 
14350 	SAVE_OPLINE();
14351 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14352 	op2 = RT_CONSTANT(opline, opline->op2);
14353 	compare_function(EX_VAR(opline->result.var), op1, op2);
14354 	zval_ptr_dtor_nogc(free_op1);
14355 
14356 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14357 }
14358 
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14359 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14360 {
14361 	USE_OPLINE
14362 	zend_free_op free_op1;
14363 	zval *op1, *op2;
14364 
14365 	SAVE_OPLINE();
14366 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14367 	op2 = RT_CONSTANT(opline, opline->op2);
14368 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
14369 	zval_ptr_dtor_nogc(free_op1);
14370 
14371 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14372 }
14373 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14374 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14375 {
14376 	USE_OPLINE
14377 	zend_free_op free_op1;
14378 	zval *container, *dim, *value;
14379 
14380 	SAVE_OPLINE();
14381 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14382 	dim = RT_CONSTANT(opline, opline->op2);
14383 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
14384 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
14385 fetch_dim_r_array:
14386 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
14387 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
14388 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
14389 			container = Z_REFVAL_P(container);
14390 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
14391 				goto fetch_dim_r_array;
14392 			} else {
14393 				goto fetch_dim_r_slow;
14394 			}
14395 		} else {
14396 fetch_dim_r_slow:
14397 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
14398 				dim++;
14399 			}
14400 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
14401 		}
14402 	} else {
14403 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
14404 	}
14405 
14406 	zval_ptr_dtor_nogc(free_op1);
14407 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14408 }
14409 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14411 {
14412 	USE_OPLINE
14413 	zend_free_op free_op1;
14414 	zval *container;
14415 
14416 	SAVE_OPLINE();
14417 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14418 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
14419 
14420 	zval_ptr_dtor_nogc(free_op1);
14421 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14422 }
14423 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14425 {
14426 	USE_OPLINE
14427 	zend_free_op free_op1;
14428 	zval *container;
14429 
14430 	zval *offset;
14431 	void **cache_slot = NULL;
14432 
14433 	SAVE_OPLINE();
14434 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14435 
14436 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
14437 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14438 	}
14439 
14440 	offset = RT_CONSTANT(opline, opline->op2);
14441 
14442 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14443 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
14444 	    do {
14445 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
14446 				container = Z_REFVAL_P(container);
14447 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
14448 					break;
14449 				}
14450 			}
14451 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
14452 				ZVAL_UNDEFINED_OP1();
14453 			}
14454 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
14455 				ZVAL_UNDEFINED_OP2();
14456 			}
14457 			zend_wrong_property_read(offset);
14458 			ZVAL_NULL(EX_VAR(opline->result.var));
14459 			goto fetch_obj_r_finish;
14460 		} while (0);
14461 	}
14462 
14463 	/* here we are sure we are dealing with an object */
14464 	do {
14465 		zend_object *zobj = Z_OBJ_P(container);
14466 		zval *retval;
14467 
14468 		if (IS_CONST == IS_CONST) {
14469 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
14470 
14471 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
14472 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
14473 
14474 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
14475 					retval = OBJ_PROP(zobj, prop_offset);
14476 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
14477 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14478 							goto fetch_obj_r_copy;
14479 						} else {
14480 fetch_obj_r_fast_copy:
14481 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
14482 							ZEND_VM_NEXT_OPCODE();
14483 						}
14484 					}
14485 				} else if (EXPECTED(zobj->properties != NULL)) {
14486 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
14487 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
14488 
14489 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
14490 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
14491 
14492 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
14493 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
14494 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
14495 						          EXPECTED(p->key != NULL) &&
14496 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
14497 								retval = &p->val;
14498 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14499 									goto fetch_obj_r_copy;
14500 								} else {
14501 									goto fetch_obj_r_fast_copy;
14502 								}
14503 							}
14504 						}
14505 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
14506 					}
14507 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
14508 					if (EXPECTED(retval)) {
14509 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
14510 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
14511 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14512 							goto fetch_obj_r_copy;
14513 						} else {
14514 							goto fetch_obj_r_fast_copy;
14515 						}
14516 					}
14517 				}
14518 			}
14519 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
14520 			ZVAL_UNDEFINED_OP2();
14521 		}
14522 
14523 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
14524 
14525 		if (retval != EX_VAR(opline->result.var)) {
14526 fetch_obj_r_copy:
14527 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
14528 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
14529 			zend_unwrap_reference(retval);
14530 		}
14531 	} while (0);
14532 
14533 fetch_obj_r_finish:
14534 
14535 	zval_ptr_dtor_nogc(free_op1);
14536 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14537 }
14538 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14539 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14540 {
14541 	USE_OPLINE
14542 	zend_free_op free_op1;
14543 	zval *container;
14544 
14545 	zval *offset;
14546 	void **cache_slot = NULL;
14547 
14548 	SAVE_OPLINE();
14549 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14550 
14551 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
14552 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14553 	}
14554 
14555 	offset = RT_CONSTANT(opline, opline->op2);
14556 
14557 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14558 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
14559 		do {
14560 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
14561 				container = Z_REFVAL_P(container);
14562 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
14563 					break;
14564 				}
14565 			}
14566 			ZVAL_NULL(EX_VAR(opline->result.var));
14567 			goto fetch_obj_is_finish;
14568 		} while (0);
14569 	}
14570 
14571 	/* here we are sure we are dealing with an object */
14572 	do {
14573 		zend_object *zobj = Z_OBJ_P(container);
14574 		zval *retval;
14575 
14576 		if (IS_CONST == IS_CONST) {
14577 			cache_slot = CACHE_ADDR(opline->extended_value);
14578 
14579 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
14580 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
14581 
14582 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
14583 					retval = OBJ_PROP(zobj, prop_offset);
14584 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
14585 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14586 							goto fetch_obj_is_copy;
14587 						} else {
14588 fetch_obj_is_fast_copy:
14589 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
14590 							ZEND_VM_NEXT_OPCODE();
14591 						}
14592 					}
14593 				} else if (EXPECTED(zobj->properties != NULL)) {
14594 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
14595 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
14596 
14597 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
14598 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
14599 
14600 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
14601 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
14602 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
14603 						          EXPECTED(p->key != NULL) &&
14604 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
14605 								retval = &p->val;
14606 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14607 									goto fetch_obj_is_copy;
14608 								} else {
14609 									goto fetch_obj_is_fast_copy;
14610 								}
14611 							}
14612 						}
14613 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
14614 					}
14615 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
14616 					if (EXPECTED(retval)) {
14617 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
14618 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
14619 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
14620 							goto fetch_obj_is_copy;
14621 						} else {
14622 							goto fetch_obj_is_fast_copy;
14623 						}
14624 					}
14625 				}
14626 			}
14627 		}
14628 
14629 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
14630 
14631 		if (retval != EX_VAR(opline->result.var)) {
14632 fetch_obj_is_copy:
14633 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
14634 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
14635 			zend_unwrap_reference(retval);
14636 		}
14637 	} while (0);
14638 
14639 fetch_obj_is_finish:
14640 
14641 	zval_ptr_dtor_nogc(free_op1);
14642 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14643 }
14644 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14646 {
14647 	USE_OPLINE
14648 	zend_free_op free_op1;
14649 	zval *op1, *op2;
14650 	zend_string *op1_str, *op2_str, *str;
14651 
14652 
14653 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14654 	op2 = RT_CONSTANT(opline, opline->op2);
14655 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
14656 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
14657 		zend_string *op1_str = Z_STR_P(op1);
14658 		zend_string *op2_str = Z_STR_P(op2);
14659 		zend_string *str;
14660 
14661 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
14662 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
14663 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
14664 			} else {
14665 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
14666 			}
14667 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14668 				zend_string_release_ex(op1_str, 0);
14669 			}
14670 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
14671 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
14672 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
14673 			} else {
14674 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
14675 			}
14676 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14677 				zend_string_release_ex(op2_str, 0);
14678 			}
14679 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
14680 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
14681 		    size_t len = ZSTR_LEN(op1_str);
14682 
14683 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
14684 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
14685 			}
14686 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
14687 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14688 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14689 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14690 				zend_string_release_ex(op2_str, 0);
14691 			}
14692 		} else {
14693 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
14694 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
14695 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14696 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14697 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14698 				zend_string_release_ex(op1_str, 0);
14699 			}
14700 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
14701 				zend_string_release_ex(op2_str, 0);
14702 			}
14703 		}
14704 		ZEND_VM_NEXT_OPCODE();
14705 	}
14706 
14707 	SAVE_OPLINE();
14708 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
14709 		op1_str = Z_STR_P(op1);
14710 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14711 		op1_str = zend_string_copy(Z_STR_P(op1));
14712 	} else {
14713 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
14714 			ZVAL_UNDEFINED_OP1();
14715 		}
14716 		op1_str = zval_get_string_func(op1);
14717 	}
14718 	if (IS_CONST == IS_CONST) {
14719 		op2_str = Z_STR_P(op2);
14720 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14721 		op2_str = zend_string_copy(Z_STR_P(op2));
14722 	} else {
14723 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
14724 			ZVAL_UNDEFINED_OP2();
14725 		}
14726 		op2_str = zval_get_string_func(op2);
14727 	}
14728 	do {
14729 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
14730 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
14731 				if (IS_CONST == IS_CONST) {
14732 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
14733 						GC_ADDREF(op2_str);
14734 					}
14735 				}
14736 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
14737 				zend_string_release_ex(op1_str, 0);
14738 				break;
14739 			}
14740 		}
14741 		if (IS_CONST != IS_CONST) {
14742 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
14743 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
14744 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
14745 						GC_ADDREF(op1_str);
14746 					}
14747 				}
14748 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
14749 				zend_string_release_ex(op2_str, 0);
14750 				break;
14751 			}
14752 		}
14753 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
14754 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
14755 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
14756 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
14757 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
14758 			zend_string_release_ex(op1_str, 0);
14759 		}
14760 		if (IS_CONST != IS_CONST) {
14761 			zend_string_release_ex(op2_str, 0);
14762 		}
14763 	} while (0);
14764 	zval_ptr_dtor_nogc(free_op1);
14765 
14766 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14767 }
14768 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14769 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14770 {
14771 	USE_OPLINE
14772 	zval *function_name;
14773 	zend_free_op free_op1;
14774 	zval *object;
14775 	zend_function *fbc;
14776 	zend_class_entry *called_scope;
14777 	zend_object *obj;
14778 	zend_execute_data *call;
14779 	uint32_t call_info;
14780 
14781 	SAVE_OPLINE();
14782 
14783 	object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14784 
14785 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
14786 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
14787 	}
14788 
14789 	if (IS_CONST != IS_CONST) {
14790 		function_name = RT_CONSTANT(opline, opline->op2);
14791 	}
14792 
14793 	if (IS_CONST != IS_CONST &&
14794 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
14795 		do {
14796 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
14797 				function_name = Z_REFVAL_P(function_name);
14798 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
14799 					break;
14800 				}
14801 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
14802 				ZVAL_UNDEFINED_OP2();
14803 				if (UNEXPECTED(EG(exception) != NULL)) {
14804 					zval_ptr_dtor_nogc(free_op1);
14805 					HANDLE_EXCEPTION();
14806 				}
14807 			}
14808 			zend_throw_error(NULL, "Method name must be a string");
14809 
14810 			zval_ptr_dtor_nogc(free_op1);
14811 			HANDLE_EXCEPTION();
14812 		} while (0);
14813 	}
14814 
14815 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
14816 		do {
14817 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
14818 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
14819 					object = Z_REFVAL_P(object);
14820 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
14821 						break;
14822 					}
14823 				}
14824 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
14825 					object = ZVAL_UNDEFINED_OP1();
14826 					if (UNEXPECTED(EG(exception) != NULL)) {
14827 						if (IS_CONST != IS_CONST) {
14828 
14829 						}
14830 						HANDLE_EXCEPTION();
14831 					}
14832 				}
14833 				if (IS_CONST == IS_CONST) {
14834 					function_name = RT_CONSTANT(opline, opline->op2);
14835 				}
14836 				zend_invalid_method_call(object, function_name);
14837 
14838 				zval_ptr_dtor_nogc(free_op1);
14839 				HANDLE_EXCEPTION();
14840 			}
14841 		} while (0);
14842 	}
14843 
14844 	obj = Z_OBJ_P(object);
14845 	called_scope = obj->ce;
14846 
14847 	if (IS_CONST == IS_CONST &&
14848 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
14849 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
14850 	} else {
14851 	    zend_object *orig_obj = obj;
14852 
14853 		if (IS_CONST == IS_CONST) {
14854 			function_name = RT_CONSTANT(opline, opline->op2);
14855 		}
14856 
14857 		/* First, locate the function. */
14858 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
14859 		if (UNEXPECTED(fbc == NULL)) {
14860 			if (EXPECTED(!EG(exception))) {
14861 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
14862 			}
14863 
14864 			zval_ptr_dtor_nogc(free_op1);
14865 			HANDLE_EXCEPTION();
14866 		}
14867 		if (IS_CONST == IS_CONST &&
14868 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
14869 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
14870 		    EXPECTED(obj == orig_obj)) {
14871 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
14872 		}
14873 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
14874 			/* Reset "object" to trigger reference counting */
14875 			object = NULL;
14876 		}
14877 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
14878 			init_func_run_time_cache(&fbc->op_array);
14879 		}
14880 	}
14881 
14882 	if (IS_CONST != IS_CONST) {
14883 
14884 	}
14885 
14886 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
14887 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
14888 		zval_ptr_dtor_nogc(free_op1);
14889 
14890 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
14891 			HANDLE_EXCEPTION();
14892 		}
14893 		/* call static method */
14894 		obj = (zend_object*)called_scope;
14895 		call_info = ZEND_CALL_NESTED_FUNCTION;
14896 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
14897 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
14898 			GC_ADDREF(obj); /* For $this pointer */
14899 		} else if (free_op1 != object) {
14900 			GC_ADDREF(obj); /* For $this pointer */
14901 			zval_ptr_dtor_nogc(free_op1);
14902 		}
14903 		/* CV may be changed indirectly (e.g. when it's a reference) */
14904 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
14905 	}
14906 
14907 	call = zend_vm_stack_push_call_frame(call_info,
14908 		fbc, opline->extended_value, obj);
14909 	call->prev_execute_data = EX(call);
14910 	EX(call) = call;
14911 
14912 	ZEND_VM_NEXT_OPCODE();
14913 }
14914 
ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14916 {
14917 	USE_OPLINE
14918 	zend_free_op free_op1;
14919 	zval *op1, *op2;
14920 	double d1, d2;
14921 
14922 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14923 	op2 = RT_CONSTANT(opline, opline->op2);
14924 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
14925 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14926 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
14927 case_true:
14928 				ZEND_VM_SMART_BRANCH_TRUE();
14929 				ZVAL_TRUE(EX_VAR(opline->result.var));
14930 				ZEND_VM_NEXT_OPCODE();
14931 			} else {
14932 case_false:
14933 				ZEND_VM_SMART_BRANCH_FALSE();
14934 				ZVAL_FALSE(EX_VAR(opline->result.var));
14935 				ZEND_VM_NEXT_OPCODE();
14936 			}
14937 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14938 			d1 = (double)Z_LVAL_P(op1);
14939 			d2 = Z_DVAL_P(op2);
14940 			goto case_double;
14941 		}
14942 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
14943 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
14944 			d1 = Z_DVAL_P(op1);
14945 			d2 = Z_DVAL_P(op2);
14946 case_double:
14947 			if (d1 == d2) {
14948 				goto case_true;
14949 			} else {
14950 				goto case_false;
14951 			}
14952 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
14953 			d1 = Z_DVAL_P(op1);
14954 			d2 = (double)Z_LVAL_P(op2);
14955 			goto case_double;
14956 		}
14957 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
14958 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
14959 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
14960 
14961 			if (result) {
14962 				goto case_true;
14963 			} else {
14964 				goto case_false;
14965 			}
14966 		}
14967 	}
14968 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14969 }
14970 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14971 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14972 {
14973 	USE_OPLINE
14974 	zend_free_op free_op1;
14975 	zval *container;
14976 	int result;
14977 	zend_ulong hval;
14978 	zval *offset;
14979 
14980 	SAVE_OPLINE();
14981 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
14982 	offset = RT_CONSTANT(opline, opline->op2);
14983 
14984 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
14985 		HashTable *ht;
14986 		zval *value;
14987 		zend_string *str;
14988 
14989 isset_dim_obj_array:
14990 		ht = Z_ARRVAL_P(container);
14991 isset_again:
14992 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
14993 			str = Z_STR_P(offset);
14994 			if (IS_CONST != IS_CONST) {
14995 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
14996 					goto num_index_prop;
14997 				}
14998 			}
14999 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
15000 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
15001 			hval = Z_LVAL_P(offset);
15002 num_index_prop:
15003 			value = zend_hash_index_find(ht, hval);
15004 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
15005 			offset = Z_REFVAL_P(offset);
15006 			goto isset_again;
15007 		} else {
15008 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
15009 			if (UNEXPECTED(EG(exception))) {
15010 				result = 0;
15011 				goto isset_dim_obj_exit;
15012 			}
15013 		}
15014 
15015 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
15016 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
15017 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
15018 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
15019 
15020 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
15021 				/* avoid exception check */
15022 
15023 				ZEND_VM_SMART_BRANCH(result, 0);
15024 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
15025 				ZEND_VM_NEXT_OPCODE();
15026 			}
15027 		} else {
15028 			result = (value == NULL || !i_zend_is_true(value));
15029 		}
15030 		goto isset_dim_obj_exit;
15031 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
15032 		container = Z_REFVAL_P(container);
15033 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15034 			goto isset_dim_obj_array;
15035 		}
15036 	}
15037 
15038 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
15039 		offset++;
15040 	}
15041 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
15042 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
15043 	} else {
15044 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
15045 	}
15046 
15047 isset_dim_obj_exit:
15048 
15049 	zval_ptr_dtor_nogc(free_op1);
15050 	ZEND_VM_SMART_BRANCH(result, 1);
15051 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
15052 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15053 }
15054 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15056 {
15057 	USE_OPLINE
15058 	zend_free_op free_op1;
15059 	zval *container;
15060 	int result;
15061 	zval *offset;
15062 
15063 	SAVE_OPLINE();
15064 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15065 
15066 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15067 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15068 	}
15069 
15070 	offset = RT_CONSTANT(opline, opline->op2);
15071 
15072 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15073 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15074 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15075 			container = Z_REFVAL_P(container);
15076 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
15077 				result = (opline->extended_value & ZEND_ISEMPTY);
15078 				goto isset_object_finish;
15079 			}
15080 		} else {
15081 			result = (opline->extended_value & ZEND_ISEMPTY);
15082 			goto isset_object_finish;
15083 		}
15084 	}
15085 
15086 	result =
15087 		(opline->extended_value & ZEND_ISEMPTY) ^
15088 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
15089 
15090 isset_object_finish:
15091 
15092 	zval_ptr_dtor_nogc(free_op1);
15093 	ZEND_VM_SMART_BRANCH(result, 1);
15094 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
15095 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15096 }
15097 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15098 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15099 {
15100 	USE_OPLINE
15101 
15102 	zend_free_op free_op1;
15103 	zval *key, *subject;
15104 	HashTable *ht;
15105 	uint32_t result;
15106 
15107 	SAVE_OPLINE();
15108 
15109 	key = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15110 	subject = RT_CONSTANT(opline, opline->op2);
15111 
15112 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
15113 array_key_exists_array:
15114 		ht = Z_ARRVAL_P(subject);
15115 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
15116 	} else {
15117 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
15118 			subject = Z_REFVAL_P(subject);
15119 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
15120 				goto array_key_exists_array;
15121 			}
15122 		}
15123 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
15124 	}
15125 
15126 	zval_ptr_dtor_nogc(free_op1);
15127 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
15128 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
15129 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15130 }
15131 
15132 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15134 {
15135 	USE_OPLINE
15136 	zend_free_op free_op1;
15137 	zval *expr;
15138 	zend_bool result;
15139 
15140 	SAVE_OPLINE();
15141 	expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15142 
15143 try_instanceof:
15144 	if (Z_TYPE_P(expr) == IS_OBJECT) {
15145 		zend_class_entry *ce;
15146 
15147 		if (IS_CONST == IS_CONST) {
15148 			ce = CACHED_PTR(opline->extended_value);
15149 			if (UNEXPECTED(ce == NULL)) {
15150 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
15151 				if (EXPECTED(ce)) {
15152 					CACHE_PTR(opline->extended_value, ce);
15153 				}
15154 			}
15155 		} else if (IS_CONST == IS_UNUSED) {
15156 			ce = zend_fetch_class(NULL, opline->op2.num);
15157 			if (UNEXPECTED(ce == NULL)) {
15158 				ZEND_ASSERT(EG(exception));
15159 				zval_ptr_dtor_nogc(free_op1);
15160 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15161 				HANDLE_EXCEPTION();
15162 			}
15163 		} else {
15164 			ce = Z_CE_P(EX_VAR(opline->op2.var));
15165 		}
15166 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
15167 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
15168 		expr = Z_REFVAL_P(expr);
15169 		goto try_instanceof;
15170 	} else {
15171 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
15172 			ZVAL_UNDEFINED_OP1();
15173 		}
15174 		result = 0;
15175 	}
15176 	zval_ptr_dtor_nogc(free_op1);
15177 	ZEND_VM_SMART_BRANCH(result, 1);
15178 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
15179 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15180 }
15181 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15182 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15183 {
15184 	USE_OPLINE
15185 	zend_free_op free_op1;
15186 	zval *container, *dim, *value;
15187 	zend_long offset;
15188 	HashTable *ht;
15189 
15190 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15191 	dim = RT_CONSTANT(opline, opline->op2);
15192 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15193 fetch_dim_r_index_array:
15194 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
15195 			offset = Z_LVAL_P(dim);
15196 		} else {
15197 			offset = zval_get_long(dim);
15198 		}
15199 		ht = Z_ARRVAL_P(container);
15200 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
15201 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15202 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15203 			SAVE_OPLINE();
15204 			zval_ptr_dtor_nogc(free_op1);
15205 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15206 		} else {
15207 			ZEND_VM_NEXT_OPCODE();
15208 		}
15209 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15210 		container = Z_REFVAL_P(container);
15211 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15212 			goto fetch_dim_r_index_array;
15213 		} else {
15214 			goto fetch_dim_r_index_slow;
15215 		}
15216 	} else {
15217 fetch_dim_r_index_slow:
15218 		SAVE_OPLINE();
15219 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15220 			dim++;
15221 		}
15222 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15223 		zval_ptr_dtor_nogc(free_op1);
15224 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15225 	}
15226 
15227 fetch_dim_r_index_undef:
15228 	ZVAL_NULL(EX_VAR(opline->result.var));
15229 	SAVE_OPLINE();
15230 	zend_undefined_offset(offset);
15231 	zval_ptr_dtor_nogc(free_op1);
15232 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15233 }
15234 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15235 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15236 {
15237 	USE_OPLINE
15238 	zend_free_op free_op1;
15239 	zval *container, *dim, *value;
15240 	zend_long offset;
15241 	HashTable *ht;
15242 
15243 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15244 	dim = EX_VAR(opline->op2.var);
15245 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15246 fetch_dim_r_index_array:
15247 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
15248 			offset = Z_LVAL_P(dim);
15249 		} else {
15250 			offset = zval_get_long(dim);
15251 		}
15252 		ht = Z_ARRVAL_P(container);
15253 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
15254 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15255 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15256 			SAVE_OPLINE();
15257 			zval_ptr_dtor_nogc(free_op1);
15258 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15259 		} else {
15260 			ZEND_VM_NEXT_OPCODE();
15261 		}
15262 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15263 		container = Z_REFVAL_P(container);
15264 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15265 			goto fetch_dim_r_index_array;
15266 		} else {
15267 			goto fetch_dim_r_index_slow;
15268 		}
15269 	} else {
15270 fetch_dim_r_index_slow:
15271 		SAVE_OPLINE();
15272 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15273 			dim++;
15274 		}
15275 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15276 		zval_ptr_dtor_nogc(free_op1);
15277 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15278 	}
15279 
15280 fetch_dim_r_index_undef:
15281 	ZVAL_NULL(EX_VAR(opline->result.var));
15282 	SAVE_OPLINE();
15283 	zend_undefined_offset(offset);
15284 	zval_ptr_dtor_nogc(free_op1);
15285 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15286 }
15287 
ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15288 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15289 {
15290 	USE_OPLINE
15291 	zend_free_op free_op1, free_op2;
15292 	zval *op1, *op2;
15293 
15294 	SAVE_OPLINE();
15295 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15296 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15297 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
15298 	zval_ptr_dtor_nogc(free_op1);
15299 	zval_ptr_dtor_nogc(free_op2);
15300 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15301 }
15302 
ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15303 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15304 {
15305 	USE_OPLINE
15306 	zend_free_op free_op1, free_op2;
15307 	zval *op1, *op2;
15308 
15309 	SAVE_OPLINE();
15310 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15311 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15312 	pow_function(EX_VAR(opline->result.var), op1, op2);
15313 	zval_ptr_dtor_nogc(free_op1);
15314 	zval_ptr_dtor_nogc(free_op2);
15315 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15316 }
15317 
ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15319 {
15320 	USE_OPLINE
15321 	zend_free_op free_op1, free_op2;
15322 	zval *op1, *op2;
15323 
15324 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15325 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15326 
15327 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15328 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15329 		zend_string *op1_str = Z_STR_P(op1);
15330 		zend_string *op2_str = Z_STR_P(op2);
15331 		zend_string *str;
15332 
15333 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15334 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15335 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15336 			} else {
15337 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15338 			}
15339 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15340 				zend_string_release_ex(op1_str, 0);
15341 			}
15342 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15343 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15344 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15345 			} else {
15346 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15347 			}
15348 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15349 				zend_string_release_ex(op2_str, 0);
15350 			}
15351 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15352 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15353 		    size_t len = ZSTR_LEN(op1_str);
15354 
15355 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
15356 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
15357 			}
15358 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15359 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15360 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15361 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15362 				zend_string_release_ex(op2_str, 0);
15363 			}
15364 		} else {
15365 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15366 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15367 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15368 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15369 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15370 				zend_string_release_ex(op1_str, 0);
15371 			}
15372 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15373 				zend_string_release_ex(op2_str, 0);
15374 			}
15375 		}
15376 		ZEND_VM_NEXT_OPCODE();
15377 	} else {
15378 		SAVE_OPLINE();
15379 
15380 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15381 			op1 = ZVAL_UNDEFINED_OP1();
15382 		}
15383 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15384 			op2 = ZVAL_UNDEFINED_OP2();
15385 		}
15386 		concat_function(EX_VAR(opline->result.var), op1, op2);
15387 		zval_ptr_dtor_nogc(free_op1);
15388 		zval_ptr_dtor_nogc(free_op2);
15389 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15390 	}
15391 }
15392 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15394 {
15395 	USE_OPLINE
15396 	zend_free_op free_op1, free_op2;
15397 	zval *op1, *op2;
15398 	double d1, d2;
15399 
15400 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15401 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15402 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15403 		/* pass */
15404 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15405 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15406 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15407 is_equal_true:
15408 
15409 				ZVAL_TRUE(EX_VAR(opline->result.var));
15410 				ZEND_VM_NEXT_OPCODE();
15411 			} else {
15412 is_equal_false:
15413 
15414 				ZVAL_FALSE(EX_VAR(opline->result.var));
15415 				ZEND_VM_NEXT_OPCODE();
15416 			}
15417 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15418 			d1 = (double)Z_LVAL_P(op1);
15419 			d2 = Z_DVAL_P(op2);
15420 			goto is_equal_double;
15421 		}
15422 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15423 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15424 			d1 = Z_DVAL_P(op1);
15425 			d2 = Z_DVAL_P(op2);
15426 is_equal_double:
15427 			if (d1 == d2) {
15428 				goto is_equal_true;
15429 			} else {
15430 				goto is_equal_false;
15431 			}
15432 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15433 			d1 = Z_DVAL_P(op1);
15434 			d2 = (double)Z_LVAL_P(op2);
15435 			goto is_equal_double;
15436 		}
15437 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15438 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15439 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15440 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15441 				zval_ptr_dtor_str(op1);
15442 			}
15443 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15444 				zval_ptr_dtor_str(op2);
15445 			}
15446 			if (result) {
15447 				goto is_equal_true;
15448 			} else {
15449 				goto is_equal_false;
15450 			}
15451 		}
15452 	}
15453 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15454 }
15455 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15456 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15457 {
15458 	USE_OPLINE
15459 	zend_free_op free_op1, free_op2;
15460 	zval *op1, *op2;
15461 	double d1, d2;
15462 
15463 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15464 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15465 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15466 		/* pass */
15467 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15468 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15469 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15470 is_equal_true:
15471 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15472 				ZVAL_TRUE(EX_VAR(opline->result.var));
15473 				ZEND_VM_NEXT_OPCODE();
15474 			} else {
15475 is_equal_false:
15476 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15477 				ZVAL_FALSE(EX_VAR(opline->result.var));
15478 				ZEND_VM_NEXT_OPCODE();
15479 			}
15480 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15481 			d1 = (double)Z_LVAL_P(op1);
15482 			d2 = Z_DVAL_P(op2);
15483 			goto is_equal_double;
15484 		}
15485 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15486 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15487 			d1 = Z_DVAL_P(op1);
15488 			d2 = Z_DVAL_P(op2);
15489 is_equal_double:
15490 			if (d1 == d2) {
15491 				goto is_equal_true;
15492 			} else {
15493 				goto is_equal_false;
15494 			}
15495 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15496 			d1 = Z_DVAL_P(op1);
15497 			d2 = (double)Z_LVAL_P(op2);
15498 			goto is_equal_double;
15499 		}
15500 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15501 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15502 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15503 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15504 				zval_ptr_dtor_str(op1);
15505 			}
15506 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15507 				zval_ptr_dtor_str(op2);
15508 			}
15509 			if (result) {
15510 				goto is_equal_true;
15511 			} else {
15512 				goto is_equal_false;
15513 			}
15514 		}
15515 	}
15516 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15517 }
15518 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15519 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15520 {
15521 	USE_OPLINE
15522 	zend_free_op free_op1, free_op2;
15523 	zval *op1, *op2;
15524 	double d1, d2;
15525 
15526 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15527 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15528 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15529 		/* pass */
15530 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15531 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15532 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15533 is_equal_true:
15534 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15535 				ZVAL_TRUE(EX_VAR(opline->result.var));
15536 				ZEND_VM_NEXT_OPCODE();
15537 			} else {
15538 is_equal_false:
15539 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15540 				ZVAL_FALSE(EX_VAR(opline->result.var));
15541 				ZEND_VM_NEXT_OPCODE();
15542 			}
15543 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15544 			d1 = (double)Z_LVAL_P(op1);
15545 			d2 = Z_DVAL_P(op2);
15546 			goto is_equal_double;
15547 		}
15548 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15549 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15550 			d1 = Z_DVAL_P(op1);
15551 			d2 = Z_DVAL_P(op2);
15552 is_equal_double:
15553 			if (d1 == d2) {
15554 				goto is_equal_true;
15555 			} else {
15556 				goto is_equal_false;
15557 			}
15558 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15559 			d1 = Z_DVAL_P(op1);
15560 			d2 = (double)Z_LVAL_P(op2);
15561 			goto is_equal_double;
15562 		}
15563 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15564 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15565 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15566 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15567 				zval_ptr_dtor_str(op1);
15568 			}
15569 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15570 				zval_ptr_dtor_str(op2);
15571 			}
15572 			if (result) {
15573 				goto is_equal_true;
15574 			} else {
15575 				goto is_equal_false;
15576 			}
15577 		}
15578 	}
15579 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15580 }
15581 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15582 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15583 {
15584 	USE_OPLINE
15585 	zend_free_op free_op1, free_op2;
15586 	zval *op1, *op2;
15587 	double d1, d2;
15588 
15589 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15590 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15591 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15592 		/* pass */
15593 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15594 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15595 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15596 is_not_equal_true:
15597 
15598 				ZVAL_TRUE(EX_VAR(opline->result.var));
15599 				ZEND_VM_NEXT_OPCODE();
15600 			} else {
15601 is_not_equal_false:
15602 
15603 				ZVAL_FALSE(EX_VAR(opline->result.var));
15604 				ZEND_VM_NEXT_OPCODE();
15605 			}
15606 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15607 			d1 = (double)Z_LVAL_P(op1);
15608 			d2 = Z_DVAL_P(op2);
15609 			goto is_not_equal_double;
15610 		}
15611 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15612 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15613 			d1 = Z_DVAL_P(op1);
15614 			d2 = Z_DVAL_P(op2);
15615 is_not_equal_double:
15616 			if (d1 != d2) {
15617 				goto is_not_equal_true;
15618 			} else {
15619 				goto is_not_equal_false;
15620 			}
15621 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15622 			d1 = Z_DVAL_P(op1);
15623 			d2 = (double)Z_LVAL_P(op2);
15624 			goto is_not_equal_double;
15625 		}
15626 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15627 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15628 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15629 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15630 				zval_ptr_dtor_str(op1);
15631 			}
15632 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15633 				zval_ptr_dtor_str(op2);
15634 			}
15635 			if (!result) {
15636 				goto is_not_equal_true;
15637 			} else {
15638 				goto is_not_equal_false;
15639 			}
15640 		}
15641 	}
15642 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15643 }
15644 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15646 {
15647 	USE_OPLINE
15648 	zend_free_op free_op1, free_op2;
15649 	zval *op1, *op2;
15650 	double d1, d2;
15651 
15652 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15653 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15654 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15655 		/* pass */
15656 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15657 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15658 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15659 is_not_equal_true:
15660 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15661 				ZVAL_TRUE(EX_VAR(opline->result.var));
15662 				ZEND_VM_NEXT_OPCODE();
15663 			} else {
15664 is_not_equal_false:
15665 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15666 				ZVAL_FALSE(EX_VAR(opline->result.var));
15667 				ZEND_VM_NEXT_OPCODE();
15668 			}
15669 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15670 			d1 = (double)Z_LVAL_P(op1);
15671 			d2 = Z_DVAL_P(op2);
15672 			goto is_not_equal_double;
15673 		}
15674 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15675 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15676 			d1 = Z_DVAL_P(op1);
15677 			d2 = Z_DVAL_P(op2);
15678 is_not_equal_double:
15679 			if (d1 != d2) {
15680 				goto is_not_equal_true;
15681 			} else {
15682 				goto is_not_equal_false;
15683 			}
15684 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15685 			d1 = Z_DVAL_P(op1);
15686 			d2 = (double)Z_LVAL_P(op2);
15687 			goto is_not_equal_double;
15688 		}
15689 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15690 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15691 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15692 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15693 				zval_ptr_dtor_str(op1);
15694 			}
15695 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15696 				zval_ptr_dtor_str(op2);
15697 			}
15698 			if (!result) {
15699 				goto is_not_equal_true;
15700 			} else {
15701 				goto is_not_equal_false;
15702 			}
15703 		}
15704 	}
15705 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15706 }
15707 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15709 {
15710 	USE_OPLINE
15711 	zend_free_op free_op1, free_op2;
15712 	zval *op1, *op2;
15713 	double d1, d2;
15714 
15715 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15716 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15717 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
15718 		/* pass */
15719 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15720 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15721 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15722 is_not_equal_true:
15723 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15724 				ZVAL_TRUE(EX_VAR(opline->result.var));
15725 				ZEND_VM_NEXT_OPCODE();
15726 			} else {
15727 is_not_equal_false:
15728 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15729 				ZVAL_FALSE(EX_VAR(opline->result.var));
15730 				ZEND_VM_NEXT_OPCODE();
15731 			}
15732 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15733 			d1 = (double)Z_LVAL_P(op1);
15734 			d2 = Z_DVAL_P(op2);
15735 			goto is_not_equal_double;
15736 		}
15737 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15738 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15739 			d1 = Z_DVAL_P(op1);
15740 			d2 = Z_DVAL_P(op2);
15741 is_not_equal_double:
15742 			if (d1 != d2) {
15743 				goto is_not_equal_true;
15744 			} else {
15745 				goto is_not_equal_false;
15746 			}
15747 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15748 			d1 = Z_DVAL_P(op1);
15749 			d2 = (double)Z_LVAL_P(op2);
15750 			goto is_not_equal_double;
15751 		}
15752 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15753 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15754 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15755 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15756 				zval_ptr_dtor_str(op1);
15757 			}
15758 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15759 				zval_ptr_dtor_str(op2);
15760 			}
15761 			if (!result) {
15762 				goto is_not_equal_true;
15763 			} else {
15764 				goto is_not_equal_false;
15765 			}
15766 		}
15767 	}
15768 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15769 }
15770 
ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15772 {
15773 	USE_OPLINE
15774 	zend_free_op free_op1, free_op2;
15775 	zval *op1, *op2;
15776 
15777 	SAVE_OPLINE();
15778 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15779 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15780 	compare_function(EX_VAR(opline->result.var), op1, op2);
15781 	zval_ptr_dtor_nogc(free_op1);
15782 	zval_ptr_dtor_nogc(free_op2);
15783 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15784 }
15785 
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15786 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15787 {
15788 	USE_OPLINE
15789 	zend_free_op free_op1, free_op2;
15790 	zval *op1, *op2;
15791 
15792 	SAVE_OPLINE();
15793 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15794 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15795 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
15796 	zval_ptr_dtor_nogc(free_op1);
15797 	zval_ptr_dtor_nogc(free_op2);
15798 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15799 }
15800 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15801 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15802 {
15803 	USE_OPLINE
15804 	zend_free_op free_op1, free_op2;
15805 	zval *container, *dim, *value;
15806 
15807 	SAVE_OPLINE();
15808 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15809 	dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15810 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15811 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15812 fetch_dim_r_array:
15813 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
15814 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15815 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15816 			container = Z_REFVAL_P(container);
15817 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15818 				goto fetch_dim_r_array;
15819 			} else {
15820 				goto fetch_dim_r_slow;
15821 			}
15822 		} else {
15823 fetch_dim_r_slow:
15824 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15825 				dim++;
15826 			}
15827 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15828 		}
15829 	} else {
15830 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
15831 	}
15832 	zval_ptr_dtor_nogc(free_op2);
15833 	zval_ptr_dtor_nogc(free_op1);
15834 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15835 }
15836 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15838 {
15839 	USE_OPLINE
15840 	zend_free_op free_op1, free_op2;
15841 	zval *container;
15842 
15843 	SAVE_OPLINE();
15844 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15845 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
15846 	zval_ptr_dtor_nogc(free_op2);
15847 	zval_ptr_dtor_nogc(free_op1);
15848 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15849 }
15850 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15852 {
15853 	USE_OPLINE
15854 	zend_free_op free_op1;
15855 	zval *container;
15856 	zend_free_op free_op2;
15857 	zval *offset;
15858 	void **cache_slot = NULL;
15859 
15860 	SAVE_OPLINE();
15861 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15862 
15863 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15864 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15865 	}
15866 
15867 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15868 
15869 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15870 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15871 	    do {
15872 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15873 				container = Z_REFVAL_P(container);
15874 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15875 					break;
15876 				}
15877 			}
15878 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15879 				ZVAL_UNDEFINED_OP1();
15880 			}
15881 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
15882 				ZVAL_UNDEFINED_OP2();
15883 			}
15884 			zend_wrong_property_read(offset);
15885 			ZVAL_NULL(EX_VAR(opline->result.var));
15886 			goto fetch_obj_r_finish;
15887 		} while (0);
15888 	}
15889 
15890 	/* here we are sure we are dealing with an object */
15891 	do {
15892 		zend_object *zobj = Z_OBJ_P(container);
15893 		zval *retval;
15894 
15895 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15896 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
15897 
15898 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15899 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15900 
15901 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15902 					retval = OBJ_PROP(zobj, prop_offset);
15903 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
15904 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15905 							goto fetch_obj_r_copy;
15906 						} else {
15907 fetch_obj_r_fast_copy:
15908 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15909 							ZEND_VM_NEXT_OPCODE();
15910 						}
15911 					}
15912 				} else if (EXPECTED(zobj->properties != NULL)) {
15913 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15914 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15915 
15916 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15917 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15918 
15919 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
15920 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
15921 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
15922 						          EXPECTED(p->key != NULL) &&
15923 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
15924 								retval = &p->val;
15925 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15926 									goto fetch_obj_r_copy;
15927 								} else {
15928 									goto fetch_obj_r_fast_copy;
15929 								}
15930 							}
15931 						}
15932 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15933 					}
15934 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
15935 					if (EXPECTED(retval)) {
15936 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15937 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15938 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15939 							goto fetch_obj_r_copy;
15940 						} else {
15941 							goto fetch_obj_r_fast_copy;
15942 						}
15943 					}
15944 				}
15945 			}
15946 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
15947 			ZVAL_UNDEFINED_OP2();
15948 		}
15949 
15950 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
15951 
15952 		if (retval != EX_VAR(opline->result.var)) {
15953 fetch_obj_r_copy:
15954 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15955 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15956 			zend_unwrap_reference(retval);
15957 		}
15958 	} while (0);
15959 
15960 fetch_obj_r_finish:
15961 	zval_ptr_dtor_nogc(free_op2);
15962 	zval_ptr_dtor_nogc(free_op1);
15963 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15964 }
15965 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15966 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15967 {
15968 	USE_OPLINE
15969 	zend_free_op free_op1;
15970 	zval *container;
15971 	zend_free_op free_op2;
15972 	zval *offset;
15973 	void **cache_slot = NULL;
15974 
15975 	SAVE_OPLINE();
15976 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
15977 
15978 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15979 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
15980 	}
15981 
15982 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
15983 
15984 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15985 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15986 		do {
15987 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15988 				container = Z_REFVAL_P(container);
15989 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15990 					break;
15991 				}
15992 			}
15993 			ZVAL_NULL(EX_VAR(opline->result.var));
15994 			goto fetch_obj_is_finish;
15995 		} while (0);
15996 	}
15997 
15998 	/* here we are sure we are dealing with an object */
15999 	do {
16000 		zend_object *zobj = Z_OBJ_P(container);
16001 		zval *retval;
16002 
16003 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16004 			cache_slot = CACHE_ADDR(opline->extended_value);
16005 
16006 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
16007 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
16008 
16009 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
16010 					retval = OBJ_PROP(zobj, prop_offset);
16011 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
16012 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16013 							goto fetch_obj_is_copy;
16014 						} else {
16015 fetch_obj_is_fast_copy:
16016 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16017 							ZEND_VM_NEXT_OPCODE();
16018 						}
16019 					}
16020 				} else if (EXPECTED(zobj->properties != NULL)) {
16021 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
16022 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
16023 
16024 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
16025 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
16026 
16027 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
16028 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
16029 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
16030 						          EXPECTED(p->key != NULL) &&
16031 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
16032 								retval = &p->val;
16033 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16034 									goto fetch_obj_is_copy;
16035 								} else {
16036 									goto fetch_obj_is_fast_copy;
16037 								}
16038 							}
16039 						}
16040 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
16041 					}
16042 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
16043 					if (EXPECTED(retval)) {
16044 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
16045 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
16046 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
16047 							goto fetch_obj_is_copy;
16048 						} else {
16049 							goto fetch_obj_is_fast_copy;
16050 						}
16051 					}
16052 				}
16053 			}
16054 		}
16055 
16056 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
16057 
16058 		if (retval != EX_VAR(opline->result.var)) {
16059 fetch_obj_is_copy:
16060 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16061 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
16062 			zend_unwrap_reference(retval);
16063 		}
16064 	} while (0);
16065 
16066 fetch_obj_is_finish:
16067 	zval_ptr_dtor_nogc(free_op2);
16068 	zval_ptr_dtor_nogc(free_op1);
16069 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16070 }
16071 
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16072 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16073 {
16074 	USE_OPLINE
16075 	zend_free_op free_op1, free_op2;
16076 	zval *op1, *op2;
16077 	zend_string *op1_str, *op2_str, *str;
16078 
16079 
16080 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16081 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16082 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16083 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16084 		zend_string *op1_str = Z_STR_P(op1);
16085 		zend_string *op2_str = Z_STR_P(op2);
16086 		zend_string *str;
16087 
16088 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16089 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16090 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16091 			} else {
16092 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16093 			}
16094 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16095 				zend_string_release_ex(op1_str, 0);
16096 			}
16097 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16098 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16099 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16100 			} else {
16101 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16102 			}
16103 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16104 				zend_string_release_ex(op2_str, 0);
16105 			}
16106 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16107 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16108 		    size_t len = ZSTR_LEN(op1_str);
16109 
16110 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16111 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16112 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16113 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16114 				zend_string_release_ex(op2_str, 0);
16115 			}
16116 		} else {
16117 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16118 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16119 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16120 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16121 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16122 				zend_string_release_ex(op1_str, 0);
16123 			}
16124 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16125 				zend_string_release_ex(op2_str, 0);
16126 			}
16127 		}
16128 		ZEND_VM_NEXT_OPCODE();
16129 	}
16130 
16131 	SAVE_OPLINE();
16132 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16133 		op1_str = Z_STR_P(op1);
16134 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16135 		op1_str = zend_string_copy(Z_STR_P(op1));
16136 	} else {
16137 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16138 			ZVAL_UNDEFINED_OP1();
16139 		}
16140 		op1_str = zval_get_string_func(op1);
16141 	}
16142 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16143 		op2_str = Z_STR_P(op2);
16144 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16145 		op2_str = zend_string_copy(Z_STR_P(op2));
16146 	} else {
16147 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16148 			ZVAL_UNDEFINED_OP2();
16149 		}
16150 		op2_str = zval_get_string_func(op2);
16151 	}
16152 	do {
16153 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16154 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16155 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16156 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
16157 						GC_ADDREF(op2_str);
16158 					}
16159 				}
16160 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16161 				zend_string_release_ex(op1_str, 0);
16162 				break;
16163 			}
16164 		}
16165 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16166 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16167 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16168 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
16169 						GC_ADDREF(op1_str);
16170 					}
16171 				}
16172 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16173 				zend_string_release_ex(op2_str, 0);
16174 				break;
16175 			}
16176 		}
16177 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16178 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16179 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16180 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16181 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16182 			zend_string_release_ex(op1_str, 0);
16183 		}
16184 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16185 			zend_string_release_ex(op2_str, 0);
16186 		}
16187 	} while (0);
16188 	zval_ptr_dtor_nogc(free_op1);
16189 	zval_ptr_dtor_nogc(free_op2);
16190 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16191 }
16192 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16193 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16194 {
16195 	USE_OPLINE
16196 	zval *function_name;
16197 	zend_free_op free_op1, free_op2;
16198 	zval *object;
16199 	zend_function *fbc;
16200 	zend_class_entry *called_scope;
16201 	zend_object *obj;
16202 	zend_execute_data *call;
16203 	uint32_t call_info;
16204 
16205 	SAVE_OPLINE();
16206 
16207 	object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16208 
16209 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
16210 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16211 	}
16212 
16213 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16214 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16215 	}
16216 
16217 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
16218 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
16219 		do {
16220 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
16221 				function_name = Z_REFVAL_P(function_name);
16222 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
16223 					break;
16224 				}
16225 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
16226 				ZVAL_UNDEFINED_OP2();
16227 				if (UNEXPECTED(EG(exception) != NULL)) {
16228 					zval_ptr_dtor_nogc(free_op1);
16229 					HANDLE_EXCEPTION();
16230 				}
16231 			}
16232 			zend_throw_error(NULL, "Method name must be a string");
16233 			zval_ptr_dtor_nogc(free_op2);
16234 			zval_ptr_dtor_nogc(free_op1);
16235 			HANDLE_EXCEPTION();
16236 		} while (0);
16237 	}
16238 
16239 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
16240 		do {
16241 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
16242 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
16243 					object = Z_REFVAL_P(object);
16244 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16245 						break;
16246 					}
16247 				}
16248 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
16249 					object = ZVAL_UNDEFINED_OP1();
16250 					if (UNEXPECTED(EG(exception) != NULL)) {
16251 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16252 							zval_ptr_dtor_nogc(free_op2);
16253 						}
16254 						HANDLE_EXCEPTION();
16255 					}
16256 				}
16257 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16258 					function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16259 				}
16260 				zend_invalid_method_call(object, function_name);
16261 				zval_ptr_dtor_nogc(free_op2);
16262 				zval_ptr_dtor_nogc(free_op1);
16263 				HANDLE_EXCEPTION();
16264 			}
16265 		} while (0);
16266 	}
16267 
16268 	obj = Z_OBJ_P(object);
16269 	called_scope = obj->ce;
16270 
16271 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
16272 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
16273 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
16274 	} else {
16275 	    zend_object *orig_obj = obj;
16276 
16277 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16278 			function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16279 		}
16280 
16281 		/* First, locate the function. */
16282 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
16283 		if (UNEXPECTED(fbc == NULL)) {
16284 			if (EXPECTED(!EG(exception))) {
16285 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
16286 			}
16287 			zval_ptr_dtor_nogc(free_op2);
16288 			zval_ptr_dtor_nogc(free_op1);
16289 			HANDLE_EXCEPTION();
16290 		}
16291 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
16292 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
16293 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
16294 		    EXPECTED(obj == orig_obj)) {
16295 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
16296 		}
16297 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
16298 			/* Reset "object" to trigger reference counting */
16299 			object = NULL;
16300 		}
16301 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
16302 			init_func_run_time_cache(&fbc->op_array);
16303 		}
16304 	}
16305 
16306 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16307 		zval_ptr_dtor_nogc(free_op2);
16308 	}
16309 
16310 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
16311 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
16312 		zval_ptr_dtor_nogc(free_op1);
16313 
16314 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
16315 			HANDLE_EXCEPTION();
16316 		}
16317 		/* call static method */
16318 		obj = (zend_object*)called_scope;
16319 		call_info = ZEND_CALL_NESTED_FUNCTION;
16320 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
16321 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
16322 			GC_ADDREF(obj); /* For $this pointer */
16323 		} else if (free_op1 != object) {
16324 			GC_ADDREF(obj); /* For $this pointer */
16325 			zval_ptr_dtor_nogc(free_op1);
16326 		}
16327 		/* CV may be changed indirectly (e.g. when it's a reference) */
16328 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
16329 	}
16330 
16331 	call = zend_vm_stack_push_call_frame(call_info,
16332 		fbc, opline->extended_value, obj);
16333 	call->prev_execute_data = EX(call);
16334 	EX(call) = call;
16335 
16336 	ZEND_VM_NEXT_OPCODE();
16337 }
16338 
ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16340 {
16341 	USE_OPLINE
16342 	zend_free_op free_op1, free_op2;
16343 	zval *op1, *op2;
16344 	double d1, d2;
16345 
16346 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16347 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16348 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16349 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16350 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16351 case_true:
16352 				ZEND_VM_SMART_BRANCH_TRUE();
16353 				ZVAL_TRUE(EX_VAR(opline->result.var));
16354 				ZEND_VM_NEXT_OPCODE();
16355 			} else {
16356 case_false:
16357 				ZEND_VM_SMART_BRANCH_FALSE();
16358 				ZVAL_FALSE(EX_VAR(opline->result.var));
16359 				ZEND_VM_NEXT_OPCODE();
16360 			}
16361 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16362 			d1 = (double)Z_LVAL_P(op1);
16363 			d2 = Z_DVAL_P(op2);
16364 			goto case_double;
16365 		}
16366 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16367 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16368 			d1 = Z_DVAL_P(op1);
16369 			d2 = Z_DVAL_P(op2);
16370 case_double:
16371 			if (d1 == d2) {
16372 				goto case_true;
16373 			} else {
16374 				goto case_false;
16375 			}
16376 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16377 			d1 = Z_DVAL_P(op1);
16378 			d2 = (double)Z_LVAL_P(op2);
16379 			goto case_double;
16380 		}
16381 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16382 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16383 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16384 			zval_ptr_dtor_nogc(free_op2);
16385 			if (result) {
16386 				goto case_true;
16387 			} else {
16388 				goto case_false;
16389 			}
16390 		}
16391 	}
16392 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16393 }
16394 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16396 {
16397 	USE_OPLINE
16398 	zend_free_op free_op1, free_op2;
16399 	zval *container;
16400 	int result;
16401 	zend_ulong hval;
16402 	zval *offset;
16403 
16404 	SAVE_OPLINE();
16405 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16406 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16407 
16408 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16409 		HashTable *ht;
16410 		zval *value;
16411 		zend_string *str;
16412 
16413 isset_dim_obj_array:
16414 		ht = Z_ARRVAL_P(container);
16415 isset_again:
16416 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
16417 			str = Z_STR_P(offset);
16418 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16419 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
16420 					goto num_index_prop;
16421 				}
16422 			}
16423 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
16424 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
16425 			hval = Z_LVAL_P(offset);
16426 num_index_prop:
16427 			value = zend_hash_index_find(ht, hval);
16428 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
16429 			offset = Z_REFVAL_P(offset);
16430 			goto isset_again;
16431 		} else {
16432 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
16433 			if (UNEXPECTED(EG(exception))) {
16434 				result = 0;
16435 				goto isset_dim_obj_exit;
16436 			}
16437 		}
16438 
16439 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
16440 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
16441 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
16442 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
16443 
16444 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
16445 				/* avoid exception check */
16446 				zval_ptr_dtor_nogc(free_op2);
16447 				ZEND_VM_SMART_BRANCH(result, 0);
16448 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
16449 				ZEND_VM_NEXT_OPCODE();
16450 			}
16451 		} else {
16452 			result = (value == NULL || !i_zend_is_true(value));
16453 		}
16454 		goto isset_dim_obj_exit;
16455 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
16456 		container = Z_REFVAL_P(container);
16457 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16458 			goto isset_dim_obj_array;
16459 		}
16460 	}
16461 
16462 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
16463 		offset++;
16464 	}
16465 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
16466 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
16467 	} else {
16468 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
16469 	}
16470 
16471 isset_dim_obj_exit:
16472 	zval_ptr_dtor_nogc(free_op2);
16473 	zval_ptr_dtor_nogc(free_op1);
16474 	ZEND_VM_SMART_BRANCH(result, 1);
16475 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16476 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16477 }
16478 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16479 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16480 {
16481 	USE_OPLINE
16482 	zend_free_op free_op1, free_op2;
16483 	zval *container;
16484 	int result;
16485 	zval *offset;
16486 
16487 	SAVE_OPLINE();
16488 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16489 
16490 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
16491 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
16492 	}
16493 
16494 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16495 
16496 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16497 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16498 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16499 			container = Z_REFVAL_P(container);
16500 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
16501 				result = (opline->extended_value & ZEND_ISEMPTY);
16502 				goto isset_object_finish;
16503 			}
16504 		} else {
16505 			result = (opline->extended_value & ZEND_ISEMPTY);
16506 			goto isset_object_finish;
16507 		}
16508 	}
16509 
16510 	result =
16511 		(opline->extended_value & ZEND_ISEMPTY) ^
16512 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
16513 
16514 isset_object_finish:
16515 	zval_ptr_dtor_nogc(free_op2);
16516 	zval_ptr_dtor_nogc(free_op1);
16517 	ZEND_VM_SMART_BRANCH(result, 1);
16518 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16519 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16520 }
16521 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16522 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16523 {
16524 	USE_OPLINE
16525 
16526 	zend_free_op free_op1, free_op2;
16527 	zval *key, *subject;
16528 	HashTable *ht;
16529 	uint32_t result;
16530 
16531 	SAVE_OPLINE();
16532 
16533 	key = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16534 	subject = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
16535 
16536 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16537 array_key_exists_array:
16538 		ht = Z_ARRVAL_P(subject);
16539 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
16540 	} else {
16541 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
16542 			subject = Z_REFVAL_P(subject);
16543 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16544 				goto array_key_exists_array;
16545 			}
16546 		}
16547 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
16548 	}
16549 
16550 	zval_ptr_dtor_nogc(free_op2);
16551 	zval_ptr_dtor_nogc(free_op1);
16552 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
16553 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
16554 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16555 }
16556 
16557 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16559 {
16560 	USE_OPLINE
16561 	zend_free_op free_op1;
16562 	zval *expr;
16563 	zend_bool result;
16564 
16565 	SAVE_OPLINE();
16566 	expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16567 
16568 try_instanceof:
16569 	if (Z_TYPE_P(expr) == IS_OBJECT) {
16570 		zend_class_entry *ce;
16571 
16572 		if (IS_VAR == IS_CONST) {
16573 			ce = CACHED_PTR(opline->extended_value);
16574 			if (UNEXPECTED(ce == NULL)) {
16575 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
16576 				if (EXPECTED(ce)) {
16577 					CACHE_PTR(opline->extended_value, ce);
16578 				}
16579 			}
16580 		} else if (IS_VAR == IS_UNUSED) {
16581 			ce = zend_fetch_class(NULL, opline->op2.num);
16582 			if (UNEXPECTED(ce == NULL)) {
16583 				ZEND_ASSERT(EG(exception));
16584 				zval_ptr_dtor_nogc(free_op1);
16585 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16586 				HANDLE_EXCEPTION();
16587 			}
16588 		} else {
16589 			ce = Z_CE_P(EX_VAR(opline->op2.var));
16590 		}
16591 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
16592 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
16593 		expr = Z_REFVAL_P(expr);
16594 		goto try_instanceof;
16595 	} else {
16596 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
16597 			ZVAL_UNDEFINED_OP1();
16598 		}
16599 		result = 0;
16600 	}
16601 	zval_ptr_dtor_nogc(free_op1);
16602 	ZEND_VM_SMART_BRANCH(result, 1);
16603 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16604 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16605 }
16606 
zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)16607 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
16608 {
16609 	USE_OPLINE
16610 	zend_free_op free_op1;
16611 	zval *varname;
16612 	zval *retval;
16613 	zend_string *name, *tmp_name;
16614 	HashTable *target_symbol_table;
16615 
16616 	SAVE_OPLINE();
16617 	varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16618 
16619 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16620 		name = Z_STR_P(varname);
16621 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
16622 		name = Z_STR_P(varname);
16623 		tmp_name = NULL;
16624 	} else {
16625 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
16626 			ZVAL_UNDEFINED_OP1();
16627 		}
16628 		name = zval_try_get_tmp_string(varname, &tmp_name);
16629 		if (UNEXPECTED(!name)) {
16630 			zval_ptr_dtor_nogc(free_op1);
16631 			ZVAL_UNDEF(EX_VAR(opline->result.var));
16632 			HANDLE_EXCEPTION();
16633 		}
16634 	}
16635 
16636 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
16637 	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
16638 	if (retval == NULL) {
16639 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
16640 fetch_this:
16641 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
16642 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16643 				zend_tmp_string_release(tmp_name);
16644 			}
16645 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16646 		}
16647 		if (type == BP_VAR_W) {
16648 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
16649 		} else if (type == BP_VAR_IS) {
16650 			retval = &EG(uninitialized_zval);
16651 		} else {
16652 			zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
16653 			if (type == BP_VAR_RW) {
16654 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
16655 			} else {
16656 				retval = &EG(uninitialized_zval);
16657 			}
16658 		}
16659 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
16660 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
16661 		retval = Z_INDIRECT_P(retval);
16662 		if (Z_TYPE_P(retval) == IS_UNDEF) {
16663 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
16664 				goto fetch_this;
16665 			}
16666 			if (type == BP_VAR_W) {
16667 				ZVAL_NULL(retval);
16668 			} else if (type == BP_VAR_IS) {
16669 				retval = &EG(uninitialized_zval);
16670 			} else {
16671 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
16672 				if (type == BP_VAR_RW) {
16673 					ZVAL_NULL(retval);
16674 				} else {
16675 					retval = &EG(uninitialized_zval);
16676 				}
16677 			}
16678 		}
16679 	}
16680 
16681 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
16682 		zval_ptr_dtor_nogc(free_op1);
16683 	}
16684 
16685 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16686 		zend_tmp_string_release(tmp_name);
16687 	}
16688 
16689 	ZEND_ASSERT(retval != NULL);
16690 	if (type == BP_VAR_R || type == BP_VAR_IS) {
16691 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
16692 	} else {
16693 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
16694 	}
16695 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16696 }
16697 
ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16698 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16699 {
16700 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16701 }
16702 
ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16703 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16704 {
16705 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16706 }
16707 
ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16709 {
16710 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16711 }
16712 
ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16714 {
16715 	int fetch_type =
16716 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
16717 			BP_VAR_W : BP_VAR_R;
16718 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16719 }
16720 
ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16722 {
16723 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16724 }
16725 
ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16726 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16727 {
16728 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16729 }
16730 
16731 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16732 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16733 {
16734 	USE_OPLINE
16735 	zval *varname;
16736 	zend_string *name, *tmp_name;
16737 	HashTable *target_symbol_table;
16738 	zend_free_op free_op1;
16739 
16740 	SAVE_OPLINE();
16741 
16742 	varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16743 
16744 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16745 		name = Z_STR_P(varname);
16746 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
16747 		name = Z_STR_P(varname);
16748 		tmp_name = NULL;
16749 	} else {
16750 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
16751 			varname = ZVAL_UNDEFINED_OP1();
16752 		}
16753 		name = zval_try_get_tmp_string(varname, &tmp_name);
16754 		if (UNEXPECTED(!name)) {
16755 			zval_ptr_dtor_nogc(free_op1);
16756 			HANDLE_EXCEPTION();
16757 		}
16758 	}
16759 
16760 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
16761 	zend_hash_del_ind(target_symbol_table, name);
16762 
16763 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16764 		zend_tmp_string_release(tmp_name);
16765 	}
16766 	zval_ptr_dtor_nogc(free_op1);
16767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16768 }
16769 
16770 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16772 {
16773 	USE_OPLINE
16774 	zval *value;
16775 	int result;
16776 	zend_free_op free_op1;
16777 	zval *varname;
16778 	zend_string *name, *tmp_name;
16779 	HashTable *target_symbol_table;
16780 
16781 	SAVE_OPLINE();
16782 	varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16783 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16784 		name = Z_STR_P(varname);
16785 	} else {
16786 		name = zval_get_tmp_string(varname, &tmp_name);
16787 	}
16788 
16789 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
16790 	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
16791 
16792 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16793 		zend_tmp_string_release(tmp_name);
16794 	}
16795 	zval_ptr_dtor_nogc(free_op1);
16796 
16797 	if (!value) {
16798 		result = (opline->extended_value & ZEND_ISEMPTY);
16799 	} else {
16800 		if (Z_TYPE_P(value) == IS_INDIRECT) {
16801 			value = Z_INDIRECT_P(value);
16802 		}
16803 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
16804 			if (Z_ISREF_P(value)) {
16805 				value = Z_REFVAL_P(value);
16806 			}
16807 			result = Z_TYPE_P(value) > IS_NULL;
16808 		} else {
16809 			result = !i_zend_is_true(value);
16810 		}
16811 	}
16812 
16813 	ZEND_VM_SMART_BRANCH(result, 1);
16814 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16815 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16816 }
16817 
16818 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16820 {
16821 	USE_OPLINE
16822 	zend_free_op free_op1;
16823 	zval *expr;
16824 	zend_bool result;
16825 
16826 	SAVE_OPLINE();
16827 	expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16828 
16829 try_instanceof:
16830 	if (Z_TYPE_P(expr) == IS_OBJECT) {
16831 		zend_class_entry *ce;
16832 
16833 		if (IS_UNUSED == IS_CONST) {
16834 			ce = CACHED_PTR(opline->extended_value);
16835 			if (UNEXPECTED(ce == NULL)) {
16836 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
16837 				if (EXPECTED(ce)) {
16838 					CACHE_PTR(opline->extended_value, ce);
16839 				}
16840 			}
16841 		} else if (IS_UNUSED == IS_UNUSED) {
16842 			ce = zend_fetch_class(NULL, opline->op2.num);
16843 			if (UNEXPECTED(ce == NULL)) {
16844 				ZEND_ASSERT(EG(exception));
16845 				zval_ptr_dtor_nogc(free_op1);
16846 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16847 				HANDLE_EXCEPTION();
16848 			}
16849 		} else {
16850 			ce = Z_CE_P(EX_VAR(opline->op2.var));
16851 		}
16852 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
16853 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
16854 		expr = Z_REFVAL_P(expr);
16855 		goto try_instanceof;
16856 	} else {
16857 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
16858 			ZVAL_UNDEFINED_OP1();
16859 		}
16860 		result = 0;
16861 	}
16862 	zval_ptr_dtor_nogc(free_op1);
16863 	ZEND_VM_SMART_BRANCH(result, 1);
16864 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
16865 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16866 }
16867 
ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16868 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16869 {
16870 	USE_OPLINE
16871 	zend_free_op free_op1;
16872 	zval *op1;
16873 	zend_long count;
16874 
16875 	SAVE_OPLINE();
16876 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16877 	while (1) {
16878 		if (Z_TYPE_P(op1) == IS_ARRAY) {
16879 			count = zend_array_count(Z_ARRVAL_P(op1));
16880 			break;
16881 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
16882 			/* first, we check if the handler is defined */
16883 			if (Z_OBJ_HT_P(op1)->count_elements) {
16884 				if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
16885 					break;
16886 				}
16887 				if (UNEXPECTED(EG(exception))) {
16888 					count = 0;
16889 					break;
16890 				}
16891 			}
16892 
16893 			/* if not and the object implements Countable we call its count() method */
16894 			if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
16895 				zval retval;
16896 
16897 				zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
16898 				count = zval_get_long(&retval);
16899 				zval_ptr_dtor(&retval);
16900 				break;
16901 			}
16902 
16903 			/* If There's no handler and it doesn't implement Countable then add a warning */
16904 			count = 1;
16905 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16906 			op1 = Z_REFVAL_P(op1);
16907 			continue;
16908 		} else if (Z_TYPE_P(op1) <= IS_NULL) {
16909 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16910 				ZVAL_UNDEFINED_OP1();
16911 			}
16912 			count = 0;
16913 		} else {
16914 			count = 1;
16915 		}
16916 		zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
16917 		break;
16918 	}
16919 
16920 	ZVAL_LONG(EX_VAR(opline->result.var), count);
16921 	zval_ptr_dtor_nogc(free_op1);
16922 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16923 }
16924 
ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16925 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16926 {
16927 	USE_OPLINE
16928 
16929 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
16930 		if (UNEXPECTED(!EX(func)->common.scope)) {
16931 			SAVE_OPLINE();
16932 			zend_error(E_WARNING, "get_class() called without object from outside a class");
16933 			ZVAL_FALSE(EX_VAR(opline->result.var));
16934 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16935 		} else {
16936 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
16937 			ZEND_VM_NEXT_OPCODE();
16938 		}
16939 	} else {
16940 		zend_free_op free_op1;
16941 		zval *op1;
16942 
16943 		SAVE_OPLINE();
16944 		op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16945 		while (1) {
16946 			if (Z_TYPE_P(op1) == IS_OBJECT) {
16947 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
16948 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
16949 				op1 = Z_REFVAL_P(op1);
16950 				continue;
16951 			} else {
16952 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16953 					ZVAL_UNDEFINED_OP1();
16954 				}
16955 				zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
16956 				ZVAL_FALSE(EX_VAR(opline->result.var));
16957 			}
16958 			break;
16959 		}
16960 		zval_ptr_dtor_nogc(free_op1);
16961 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16962 	}
16963 }
16964 
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16966 {
16967 	USE_OPLINE
16968 	zend_free_op free_op1;
16969 	zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16970 	zval *result = EX_VAR(opline->result.var);
16971 	ZVAL_COPY(result, value);
16972 	ZEND_VM_NEXT_OPCODE();
16973 }
16974 
ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16975 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16976 {
16977 	USE_OPLINE
16978 	zend_free_op free_op1;
16979 	zval *op1, *op2;
16980 
16981 	SAVE_OPLINE();
16982 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16983 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
16984 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
16985 	zval_ptr_dtor_nogc(free_op1);
16986 
16987 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16988 }
16989 
ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16990 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16991 {
16992 	USE_OPLINE
16993 	zend_free_op free_op1;
16994 	zval *op1, *op2;
16995 
16996 	SAVE_OPLINE();
16997 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
16998 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
16999 	pow_function(EX_VAR(opline->result.var), op1, op2);
17000 	zval_ptr_dtor_nogc(free_op1);
17001 
17002 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17003 }
17004 
ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17006 {
17007 	USE_OPLINE
17008 	zend_free_op free_op1;
17009 	zval *op1, *op2;
17010 
17011 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17012 	op2 = EX_VAR(opline->op2.var);
17013 
17014 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17015 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17016 		zend_string *op1_str = Z_STR_P(op1);
17017 		zend_string *op2_str = Z_STR_P(op2);
17018 		zend_string *str;
17019 
17020 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17021 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
17022 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17023 			} else {
17024 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17025 			}
17026 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17027 				zend_string_release_ex(op1_str, 0);
17028 			}
17029 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17030 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17031 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17032 			} else {
17033 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17034 			}
17035 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17036 				zend_string_release_ex(op2_str, 0);
17037 			}
17038 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17039 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17040 		    size_t len = ZSTR_LEN(op1_str);
17041 
17042 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
17043 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
17044 			}
17045 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17046 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17047 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17048 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17049 				zend_string_release_ex(op2_str, 0);
17050 			}
17051 		} else {
17052 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17053 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17054 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17055 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17056 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17057 				zend_string_release_ex(op1_str, 0);
17058 			}
17059 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17060 				zend_string_release_ex(op2_str, 0);
17061 			}
17062 		}
17063 		ZEND_VM_NEXT_OPCODE();
17064 	} else {
17065 		SAVE_OPLINE();
17066 
17067 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17068 			op1 = ZVAL_UNDEFINED_OP1();
17069 		}
17070 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17071 			op2 = ZVAL_UNDEFINED_OP2();
17072 		}
17073 		concat_function(EX_VAR(opline->result.var), op1, op2);
17074 		zval_ptr_dtor_nogc(free_op1);
17075 
17076 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17077 	}
17078 }
17079 
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17081 {
17082 	USE_OPLINE
17083 	zend_free_op free_op1;
17084 	zval *op1, *op2;
17085 
17086 	SAVE_OPLINE();
17087 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17088 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17089 	compare_function(EX_VAR(opline->result.var), op1, op2);
17090 	zval_ptr_dtor_nogc(free_op1);
17091 
17092 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17093 }
17094 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17096 {
17097 	USE_OPLINE
17098 	zend_free_op free_op1;
17099 	zval *container, *dim, *value;
17100 
17101 	SAVE_OPLINE();
17102 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17103 	dim = EX_VAR(opline->op2.var);
17104 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17105 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17106 fetch_dim_r_array:
17107 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
17108 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
17109 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
17110 			container = Z_REFVAL_P(container);
17111 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17112 				goto fetch_dim_r_array;
17113 			} else {
17114 				goto fetch_dim_r_slow;
17115 			}
17116 		} else {
17117 fetch_dim_r_slow:
17118 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
17119 				dim++;
17120 			}
17121 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
17122 		}
17123 	} else {
17124 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
17125 	}
17126 
17127 	zval_ptr_dtor_nogc(free_op1);
17128 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17129 }
17130 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17132 {
17133 	USE_OPLINE
17134 	zend_free_op free_op1;
17135 	zval *container;
17136 
17137 	SAVE_OPLINE();
17138 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17139 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
17140 
17141 	zval_ptr_dtor_nogc(free_op1);
17142 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17143 }
17144 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17146 {
17147 	USE_OPLINE
17148 	zend_free_op free_op1;
17149 	zval *container;
17150 
17151 	zval *offset;
17152 	void **cache_slot = NULL;
17153 
17154 	SAVE_OPLINE();
17155 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17156 
17157 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17158 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17159 	}
17160 
17161 	offset = EX_VAR(opline->op2.var);
17162 
17163 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17164 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17165 	    do {
17166 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17167 				container = Z_REFVAL_P(container);
17168 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17169 					break;
17170 				}
17171 			}
17172 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17173 				ZVAL_UNDEFINED_OP1();
17174 			}
17175 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
17176 				ZVAL_UNDEFINED_OP2();
17177 			}
17178 			zend_wrong_property_read(offset);
17179 			ZVAL_NULL(EX_VAR(opline->result.var));
17180 			goto fetch_obj_r_finish;
17181 		} while (0);
17182 	}
17183 
17184 	/* here we are sure we are dealing with an object */
17185 	do {
17186 		zend_object *zobj = Z_OBJ_P(container);
17187 		zval *retval;
17188 
17189 		if (IS_CV == IS_CONST) {
17190 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
17191 
17192 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17193 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17194 
17195 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17196 					retval = OBJ_PROP(zobj, prop_offset);
17197 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
17198 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17199 							goto fetch_obj_r_copy;
17200 						} else {
17201 fetch_obj_r_fast_copy:
17202 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17203 							ZEND_VM_NEXT_OPCODE();
17204 						}
17205 					}
17206 				} else if (EXPECTED(zobj->properties != NULL)) {
17207 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17208 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17209 
17210 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17211 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17212 
17213 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
17214 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
17215 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
17216 						          EXPECTED(p->key != NULL) &&
17217 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
17218 								retval = &p->val;
17219 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17220 									goto fetch_obj_r_copy;
17221 								} else {
17222 									goto fetch_obj_r_fast_copy;
17223 								}
17224 							}
17225 						}
17226 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17227 					}
17228 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
17229 					if (EXPECTED(retval)) {
17230 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17231 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17232 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17233 							goto fetch_obj_r_copy;
17234 						} else {
17235 							goto fetch_obj_r_fast_copy;
17236 						}
17237 					}
17238 				}
17239 			}
17240 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
17241 			ZVAL_UNDEFINED_OP2();
17242 		}
17243 
17244 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
17245 
17246 		if (retval != EX_VAR(opline->result.var)) {
17247 fetch_obj_r_copy:
17248 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17249 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17250 			zend_unwrap_reference(retval);
17251 		}
17252 	} while (0);
17253 
17254 fetch_obj_r_finish:
17255 
17256 	zval_ptr_dtor_nogc(free_op1);
17257 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17258 }
17259 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17261 {
17262 	USE_OPLINE
17263 	zend_free_op free_op1;
17264 	zval *container;
17265 
17266 	zval *offset;
17267 	void **cache_slot = NULL;
17268 
17269 	SAVE_OPLINE();
17270 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17271 
17272 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17273 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17274 	}
17275 
17276 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17277 
17278 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17279 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17280 		do {
17281 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17282 				container = Z_REFVAL_P(container);
17283 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17284 					break;
17285 				}
17286 			}
17287 			ZVAL_NULL(EX_VAR(opline->result.var));
17288 			goto fetch_obj_is_finish;
17289 		} while (0);
17290 	}
17291 
17292 	/* here we are sure we are dealing with an object */
17293 	do {
17294 		zend_object *zobj = Z_OBJ_P(container);
17295 		zval *retval;
17296 
17297 		if (IS_CV == IS_CONST) {
17298 			cache_slot = CACHE_ADDR(opline->extended_value);
17299 
17300 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17301 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17302 
17303 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17304 					retval = OBJ_PROP(zobj, prop_offset);
17305 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
17306 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17307 							goto fetch_obj_is_copy;
17308 						} else {
17309 fetch_obj_is_fast_copy:
17310 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17311 							ZEND_VM_NEXT_OPCODE();
17312 						}
17313 					}
17314 				} else if (EXPECTED(zobj->properties != NULL)) {
17315 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17316 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17317 
17318 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17319 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17320 
17321 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
17322 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
17323 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
17324 						          EXPECTED(p->key != NULL) &&
17325 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
17326 								retval = &p->val;
17327 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17328 									goto fetch_obj_is_copy;
17329 								} else {
17330 									goto fetch_obj_is_fast_copy;
17331 								}
17332 							}
17333 						}
17334 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17335 					}
17336 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
17337 					if (EXPECTED(retval)) {
17338 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17339 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17340 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17341 							goto fetch_obj_is_copy;
17342 						} else {
17343 							goto fetch_obj_is_fast_copy;
17344 						}
17345 					}
17346 				}
17347 			}
17348 		}
17349 
17350 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
17351 
17352 		if (retval != EX_VAR(opline->result.var)) {
17353 fetch_obj_is_copy:
17354 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17355 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17356 			zend_unwrap_reference(retval);
17357 		}
17358 	} while (0);
17359 
17360 fetch_obj_is_finish:
17361 
17362 	zval_ptr_dtor_nogc(free_op1);
17363 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17364 }
17365 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17366 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17367 {
17368 	USE_OPLINE
17369 	zend_free_op free_op1;
17370 	zval *op1, *op2;
17371 	zend_string *op1_str, *op2_str, *str;
17372 
17373 
17374 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17375 	op2 = EX_VAR(opline->op2.var);
17376 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17377 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17378 		zend_string *op1_str = Z_STR_P(op1);
17379 		zend_string *op2_str = Z_STR_P(op2);
17380 		zend_string *str;
17381 
17382 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17383 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
17384 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17385 			} else {
17386 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17387 			}
17388 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17389 				zend_string_release_ex(op1_str, 0);
17390 			}
17391 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17392 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17393 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17394 			} else {
17395 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17396 			}
17397 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17398 				zend_string_release_ex(op2_str, 0);
17399 			}
17400 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17401 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17402 		    size_t len = ZSTR_LEN(op1_str);
17403 
17404 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17405 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17406 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17407 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17408 				zend_string_release_ex(op2_str, 0);
17409 			}
17410 		} else {
17411 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17412 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17413 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17414 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17415 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17416 				zend_string_release_ex(op1_str, 0);
17417 			}
17418 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
17419 				zend_string_release_ex(op2_str, 0);
17420 			}
17421 		}
17422 		ZEND_VM_NEXT_OPCODE();
17423 	}
17424 
17425 	SAVE_OPLINE();
17426 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17427 		op1_str = Z_STR_P(op1);
17428 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17429 		op1_str = zend_string_copy(Z_STR_P(op1));
17430 	} else {
17431 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17432 			ZVAL_UNDEFINED_OP1();
17433 		}
17434 		op1_str = zval_get_string_func(op1);
17435 	}
17436 	if (IS_CV == IS_CONST) {
17437 		op2_str = Z_STR_P(op2);
17438 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17439 		op2_str = zend_string_copy(Z_STR_P(op2));
17440 	} else {
17441 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17442 			ZVAL_UNDEFINED_OP2();
17443 		}
17444 		op2_str = zval_get_string_func(op2);
17445 	}
17446 	do {
17447 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17448 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17449 				if (IS_CV == IS_CONST) {
17450 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
17451 						GC_ADDREF(op2_str);
17452 					}
17453 				}
17454 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17455 				zend_string_release_ex(op1_str, 0);
17456 				break;
17457 			}
17458 		}
17459 		if (IS_CV != IS_CONST) {
17460 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17461 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17462 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
17463 						GC_ADDREF(op1_str);
17464 					}
17465 				}
17466 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17467 				zend_string_release_ex(op2_str, 0);
17468 				break;
17469 			}
17470 		}
17471 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17472 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17473 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17474 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17475 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17476 			zend_string_release_ex(op1_str, 0);
17477 		}
17478 		if (IS_CV != IS_CONST) {
17479 			zend_string_release_ex(op2_str, 0);
17480 		}
17481 	} while (0);
17482 	zval_ptr_dtor_nogc(free_op1);
17483 
17484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17485 }
17486 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17488 {
17489 	USE_OPLINE
17490 	zval *function_name;
17491 	zend_free_op free_op1;
17492 	zval *object;
17493 	zend_function *fbc;
17494 	zend_class_entry *called_scope;
17495 	zend_object *obj;
17496 	zend_execute_data *call;
17497 	uint32_t call_info;
17498 
17499 	SAVE_OPLINE();
17500 
17501 	object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17502 
17503 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17504 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17505 	}
17506 
17507 	if (IS_CV != IS_CONST) {
17508 		function_name = EX_VAR(opline->op2.var);
17509 	}
17510 
17511 	if (IS_CV != IS_CONST &&
17512 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
17513 		do {
17514 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
17515 				function_name = Z_REFVAL_P(function_name);
17516 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
17517 					break;
17518 				}
17519 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
17520 				ZVAL_UNDEFINED_OP2();
17521 				if (UNEXPECTED(EG(exception) != NULL)) {
17522 					zval_ptr_dtor_nogc(free_op1);
17523 					HANDLE_EXCEPTION();
17524 				}
17525 			}
17526 			zend_throw_error(NULL, "Method name must be a string");
17527 
17528 			zval_ptr_dtor_nogc(free_op1);
17529 			HANDLE_EXCEPTION();
17530 		} while (0);
17531 	}
17532 
17533 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
17534 		do {
17535 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
17536 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
17537 					object = Z_REFVAL_P(object);
17538 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17539 						break;
17540 					}
17541 				}
17542 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17543 					object = ZVAL_UNDEFINED_OP1();
17544 					if (UNEXPECTED(EG(exception) != NULL)) {
17545 						if (IS_CV != IS_CONST) {
17546 
17547 						}
17548 						HANDLE_EXCEPTION();
17549 					}
17550 				}
17551 				if (IS_CV == IS_CONST) {
17552 					function_name = EX_VAR(opline->op2.var);
17553 				}
17554 				zend_invalid_method_call(object, function_name);
17555 
17556 				zval_ptr_dtor_nogc(free_op1);
17557 				HANDLE_EXCEPTION();
17558 			}
17559 		} while (0);
17560 	}
17561 
17562 	obj = Z_OBJ_P(object);
17563 	called_scope = obj->ce;
17564 
17565 	if (IS_CV == IS_CONST &&
17566 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
17567 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
17568 	} else {
17569 	    zend_object *orig_obj = obj;
17570 
17571 		if (IS_CV == IS_CONST) {
17572 			function_name = EX_VAR(opline->op2.var);
17573 		}
17574 
17575 		/* First, locate the function. */
17576 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
17577 		if (UNEXPECTED(fbc == NULL)) {
17578 			if (EXPECTED(!EG(exception))) {
17579 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
17580 			}
17581 
17582 			zval_ptr_dtor_nogc(free_op1);
17583 			HANDLE_EXCEPTION();
17584 		}
17585 		if (IS_CV == IS_CONST &&
17586 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
17587 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
17588 		    EXPECTED(obj == orig_obj)) {
17589 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
17590 		}
17591 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
17592 			/* Reset "object" to trigger reference counting */
17593 			object = NULL;
17594 		}
17595 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
17596 			init_func_run_time_cache(&fbc->op_array);
17597 		}
17598 	}
17599 
17600 	if (IS_CV != IS_CONST) {
17601 
17602 	}
17603 
17604 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
17605 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
17606 		zval_ptr_dtor_nogc(free_op1);
17607 
17608 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
17609 			HANDLE_EXCEPTION();
17610 		}
17611 		/* call static method */
17612 		obj = (zend_object*)called_scope;
17613 		call_info = ZEND_CALL_NESTED_FUNCTION;
17614 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
17615 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17616 			GC_ADDREF(obj); /* For $this pointer */
17617 		} else if (free_op1 != object) {
17618 			GC_ADDREF(obj); /* For $this pointer */
17619 			zval_ptr_dtor_nogc(free_op1);
17620 		}
17621 		/* CV may be changed indirectly (e.g. when it's a reference) */
17622 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
17623 	}
17624 
17625 	call = zend_vm_stack_push_call_frame(call_info,
17626 		fbc, opline->extended_value, obj);
17627 	call->prev_execute_data = EX(call);
17628 	EX(call) = call;
17629 
17630 	ZEND_VM_NEXT_OPCODE();
17631 }
17632 
ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17633 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17634 {
17635 	USE_OPLINE
17636 	zend_free_op free_op1;
17637 	zval *op1, *op2;
17638 	double d1, d2;
17639 
17640 	op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17641 	op2 = EX_VAR(opline->op2.var);
17642 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17643 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17644 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17645 case_true:
17646 				ZEND_VM_SMART_BRANCH_TRUE();
17647 				ZVAL_TRUE(EX_VAR(opline->result.var));
17648 				ZEND_VM_NEXT_OPCODE();
17649 			} else {
17650 case_false:
17651 				ZEND_VM_SMART_BRANCH_FALSE();
17652 				ZVAL_FALSE(EX_VAR(opline->result.var));
17653 				ZEND_VM_NEXT_OPCODE();
17654 			}
17655 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17656 			d1 = (double)Z_LVAL_P(op1);
17657 			d2 = Z_DVAL_P(op2);
17658 			goto case_double;
17659 		}
17660 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17661 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17662 			d1 = Z_DVAL_P(op1);
17663 			d2 = Z_DVAL_P(op2);
17664 case_double:
17665 			if (d1 == d2) {
17666 				goto case_true;
17667 			} else {
17668 				goto case_false;
17669 			}
17670 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17671 			d1 = Z_DVAL_P(op1);
17672 			d2 = (double)Z_LVAL_P(op2);
17673 			goto case_double;
17674 		}
17675 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17676 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17677 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17678 
17679 			if (result) {
17680 				goto case_true;
17681 			} else {
17682 				goto case_false;
17683 			}
17684 		}
17685 	}
17686 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17687 }
17688 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17689 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17690 {
17691 	USE_OPLINE
17692 	zend_free_op free_op1;
17693 	zval *container;
17694 	int result;
17695 	zend_ulong hval;
17696 	zval *offset;
17697 
17698 	SAVE_OPLINE();
17699 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17700 	offset = EX_VAR(opline->op2.var);
17701 
17702 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17703 		HashTable *ht;
17704 		zval *value;
17705 		zend_string *str;
17706 
17707 isset_dim_obj_array:
17708 		ht = Z_ARRVAL_P(container);
17709 isset_again:
17710 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
17711 			str = Z_STR_P(offset);
17712 			if (IS_CV != IS_CONST) {
17713 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
17714 					goto num_index_prop;
17715 				}
17716 			}
17717 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
17718 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
17719 			hval = Z_LVAL_P(offset);
17720 num_index_prop:
17721 			value = zend_hash_index_find(ht, hval);
17722 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
17723 			offset = Z_REFVAL_P(offset);
17724 			goto isset_again;
17725 		} else {
17726 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
17727 			if (UNEXPECTED(EG(exception))) {
17728 				result = 0;
17729 				goto isset_dim_obj_exit;
17730 			}
17731 		}
17732 
17733 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17734 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
17735 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
17736 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17737 
17738 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17739 				/* avoid exception check */
17740 
17741 				ZEND_VM_SMART_BRANCH(result, 0);
17742 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
17743 				ZEND_VM_NEXT_OPCODE();
17744 			}
17745 		} else {
17746 			result = (value == NULL || !i_zend_is_true(value));
17747 		}
17748 		goto isset_dim_obj_exit;
17749 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
17750 		container = Z_REFVAL_P(container);
17751 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17752 			goto isset_dim_obj_array;
17753 		}
17754 	}
17755 
17756 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
17757 		offset++;
17758 	}
17759 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
17760 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
17761 	} else {
17762 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
17763 	}
17764 
17765 isset_dim_obj_exit:
17766 
17767 	zval_ptr_dtor_nogc(free_op1);
17768 	ZEND_VM_SMART_BRANCH(result, 1);
17769 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
17770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17771 }
17772 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17774 {
17775 	USE_OPLINE
17776 	zend_free_op free_op1;
17777 	zval *container;
17778 	int result;
17779 	zval *offset;
17780 
17781 	SAVE_OPLINE();
17782 	container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17783 
17784 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17785 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17786 	}
17787 
17788 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
17789 
17790 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17791 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17792 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17793 			container = Z_REFVAL_P(container);
17794 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
17795 				result = (opline->extended_value & ZEND_ISEMPTY);
17796 				goto isset_object_finish;
17797 			}
17798 		} else {
17799 			result = (opline->extended_value & ZEND_ISEMPTY);
17800 			goto isset_object_finish;
17801 		}
17802 	}
17803 
17804 	result =
17805 		(opline->extended_value & ZEND_ISEMPTY) ^
17806 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
17807 
17808 isset_object_finish:
17809 
17810 	zval_ptr_dtor_nogc(free_op1);
17811 	ZEND_VM_SMART_BRANCH(result, 1);
17812 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
17813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17814 }
17815 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17817 {
17818 	USE_OPLINE
17819 
17820 	zend_free_op free_op1;
17821 	zval *key, *subject;
17822 	HashTable *ht;
17823 	uint32_t result;
17824 
17825 	SAVE_OPLINE();
17826 
17827 	key = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17828 	subject = EX_VAR(opline->op2.var);
17829 
17830 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17831 array_key_exists_array:
17832 		ht = Z_ARRVAL_P(subject);
17833 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
17834 	} else {
17835 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
17836 			subject = Z_REFVAL_P(subject);
17837 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17838 				goto array_key_exists_array;
17839 			}
17840 		}
17841 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
17842 	}
17843 
17844 	zval_ptr_dtor_nogc(free_op1);
17845 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
17846 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
17847 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17848 }
17849 
17850 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17851 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17852 {
17853 	USE_OPLINE
17854 	zval *retval_ptr;
17855 	zval *return_value;
17856 	zend_free_op free_op1;
17857 
17858 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17859 	return_value = EX(return_value);
17860 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
17861 		SAVE_OPLINE();
17862 		retval_ptr = ZVAL_UNDEFINED_OP1();
17863 		if (return_value) {
17864 			ZVAL_NULL(return_value);
17865 		}
17866 	} else if (!return_value) {
17867 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
17868 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
17869 				SAVE_OPLINE();
17870 				rc_dtor_func(Z_COUNTED_P(free_op1));
17871 			}
17872 		}
17873 	} else {
17874 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
17875 			ZVAL_COPY_VALUE(return_value, retval_ptr);
17876 			if (IS_TMP_VAR == IS_CONST) {
17877 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
17878 					Z_ADDREF_P(return_value);
17879 				}
17880 			}
17881 		} else if (IS_TMP_VAR == IS_CV) {
17882 			do {
17883 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
17884 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
17885 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
17886 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
17887 							ZVAL_COPY_VALUE(return_value, retval_ptr);
17888 							if (GC_MAY_LEAK(ref)) {
17889 								gc_possible_root(ref);
17890 							}
17891 							ZVAL_NULL(retval_ptr);
17892 							break;
17893 						} else {
17894 							Z_ADDREF_P(retval_ptr);
17895 						}
17896 					} else {
17897 						retval_ptr = Z_REFVAL_P(retval_ptr);
17898 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
17899 							Z_ADDREF_P(retval_ptr);
17900 						}
17901 					}
17902 				}
17903 				ZVAL_COPY_VALUE(return_value, retval_ptr);
17904 			} while (0);
17905 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
17906 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
17907 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
17908 
17909 				retval_ptr = Z_REFVAL_P(retval_ptr);
17910 				ZVAL_COPY_VALUE(return_value, retval_ptr);
17911 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
17912 					efree_size(ref, sizeof(zend_reference));
17913 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
17914 					Z_ADDREF_P(retval_ptr);
17915 				}
17916 			} else {
17917 				ZVAL_COPY_VALUE(return_value, retval_ptr);
17918 			}
17919 		}
17920 	}
17921 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17922 }
17923 
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17925 {
17926 	USE_OPLINE
17927 	zval *retval_ptr;
17928 	zend_free_op free_op1;
17929 
17930 	SAVE_OPLINE();
17931 
17932 	do {
17933 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
17934 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
17935 			/* Not supposed to happen, but we'll allow it */
17936 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
17937 
17938 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17939 			if (!EX(return_value)) {
17940 				zval_ptr_dtor_nogc(free_op1);
17941 			} else {
17942 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
17943 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
17944 					break;
17945 				}
17946 
17947 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
17948 				if (IS_TMP_VAR == IS_CONST) {
17949 					Z_TRY_ADDREF_P(retval_ptr);
17950 				}
17951 			}
17952 			break;
17953 		}
17954 
17955 		retval_ptr = NULL;
17956 
17957 		if (IS_TMP_VAR == IS_VAR) {
17958 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
17959 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
17960 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
17961 				if (EX(return_value)) {
17962 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
17963 				} else {
17964 
17965 				}
17966 				break;
17967 			}
17968 		}
17969 
17970 		if (EX(return_value)) {
17971 			if (Z_ISREF_P(retval_ptr)) {
17972 				Z_ADDREF_P(retval_ptr);
17973 			} else {
17974 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
17975 			}
17976 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
17977 		}
17978 
17979 	} while (0);
17980 
17981 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
17982 }
17983 
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17984 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17985 {
17986 	USE_OPLINE
17987 	zval *retval;
17988 	zend_free_op free_op1;
17989 
17990 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
17991 
17992 	SAVE_OPLINE();
17993 	retval = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
17994 
17995 	/* Copy return value into generator->retval */
17996 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
17997 		ZVAL_COPY_VALUE(&generator->retval, retval);
17998 		if (IS_TMP_VAR == IS_CONST) {
17999 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
18000 				Z_ADDREF(generator->retval);
18001 			}
18002 		}
18003 	} else if (IS_TMP_VAR == IS_CV) {
18004 		ZVAL_COPY_DEREF(&generator->retval, retval);
18005 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
18006 		if (UNEXPECTED(Z_ISREF_P(retval))) {
18007 			zend_refcounted *ref = Z_COUNTED_P(retval);
18008 
18009 			retval = Z_REFVAL_P(retval);
18010 			ZVAL_COPY_VALUE(&generator->retval, retval);
18011 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18012 				efree_size(ref, sizeof(zend_reference));
18013 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
18014 				Z_ADDREF_P(retval);
18015 			}
18016 		} else {
18017 			ZVAL_COPY_VALUE(&generator->retval, retval);
18018 		}
18019 	}
18020 
18021 	/* Close the generator to free up resources */
18022 	zend_generator_close(generator, 1);
18023 
18024 	/* Pass execution back to handling code */
18025 	ZEND_VM_RETURN();
18026 }
18027 
ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18029 {
18030 	USE_OPLINE
18031 	zval *value;
18032 	zend_free_op free_op1;
18033 
18034 	SAVE_OPLINE();
18035 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18036 
18037 	do {
18038 		if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
18039 			if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
18040 				value = Z_REFVAL_P(value);
18041 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
18042 					break;
18043 				}
18044 			}
18045 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
18046 				ZVAL_UNDEFINED_OP1();
18047 				if (UNEXPECTED(EG(exception) != NULL)) {
18048 					HANDLE_EXCEPTION();
18049 				}
18050 			}
18051 			zend_throw_error(NULL, "Can only throw objects");
18052 			zval_ptr_dtor_nogc(free_op1);
18053 			HANDLE_EXCEPTION();
18054 		}
18055 	} while (0);
18056 
18057 	zend_exception_save();
18058 	if (IS_TMP_VAR != IS_TMP_VAR) {
18059 		Z_TRY_ADDREF_P(value);
18060 	}
18061 
18062 	zend_throw_exception_object(value);
18063 	zend_exception_restore();
18064 
18065 	HANDLE_EXCEPTION();
18066 }
18067 
ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18068 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18069 {
18070 	USE_OPLINE
18071 	zval *value, *arg;
18072 	zend_free_op free_op1;
18073 	uint32_t arg_num = opline->op2.num;
18074 
18075 	if (EXPECTED(0)) {
18076 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
18077 			goto send_val_by_ref;
18078 		}
18079 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
18080 send_val_by_ref:
18081 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18082 	}
18083 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18084 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
18085 	ZVAL_COPY_VALUE(arg, value);
18086 	if (IS_TMP_VAR == IS_CONST) {
18087 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
18088 			Z_ADDREF_P(arg);
18089 		}
18090 	}
18091 	ZEND_VM_NEXT_OPCODE();
18092 }
18093 
ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18094 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18095 {
18096 	USE_OPLINE
18097 	zval *value, *arg;
18098 	zend_free_op free_op1;
18099 	uint32_t arg_num = opline->op2.num;
18100 
18101 	if (EXPECTED(1)) {
18102 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
18103 			goto send_val_by_ref;
18104 		}
18105 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
18106 send_val_by_ref:
18107 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18108 	}
18109 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18110 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
18111 	ZVAL_COPY_VALUE(arg, value);
18112 	if (IS_TMP_VAR == IS_CONST) {
18113 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
18114 			Z_ADDREF_P(arg);
18115 		}
18116 	}
18117 	ZEND_VM_NEXT_OPCODE();
18118 }
18119 
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18121 {
18122 	USE_OPLINE
18123 	zval *arg, *param;
18124 	zend_free_op free_op1;
18125 
18126 	SAVE_OPLINE();
18127 
18128 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
18129 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
18130 	}
18131 
18132 	arg = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18133 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
18134 	ZVAL_COPY(param, arg);
18135 	zval_ptr_dtor_nogc(free_op1);
18136 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18137 }
18138 
ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18140 {
18141 	USE_OPLINE
18142 	zend_free_op free_op1;
18143 	zval *expr;
18144 	zval *result = EX_VAR(opline->result.var);
18145 	HashTable *ht;
18146 
18147 	SAVE_OPLINE();
18148 	expr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18149 
18150 	switch (opline->extended_value) {
18151 		case IS_NULL:
18152 			ZVAL_NULL(result);
18153 			break;
18154 		case _IS_BOOL:
18155 			ZVAL_BOOL(result, zend_is_true(expr));
18156 			break;
18157 		case IS_LONG:
18158 			ZVAL_LONG(result, zval_get_long(expr));
18159 			break;
18160 		case IS_DOUBLE:
18161 			ZVAL_DOUBLE(result, zval_get_double(expr));
18162 			break;
18163 		case IS_STRING:
18164 			ZVAL_STR(result, zval_get_string(expr));
18165 			break;
18166 		default:
18167 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
18168 				ZVAL_DEREF(expr);
18169 			}
18170 			/* If value is already of correct type, return it directly */
18171 			if (Z_TYPE_P(expr) == opline->extended_value) {
18172 				ZVAL_COPY_VALUE(result, expr);
18173 				if (IS_TMP_VAR == IS_CONST) {
18174 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
18175 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
18176 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
18177 				}
18178 
18179 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18180 			}
18181 
18182 			if (opline->extended_value == IS_ARRAY) {
18183 				if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
18184 					if (Z_TYPE_P(expr) != IS_NULL) {
18185 						ZVAL_ARR(result, zend_new_array(1));
18186 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
18187 						if (IS_TMP_VAR == IS_CONST) {
18188 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
18189 						} else {
18190 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
18191 						}
18192 					} else {
18193 						ZVAL_EMPTY_ARRAY(result);
18194 					}
18195 				} else {
18196 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
18197 					if (obj_ht) {
18198 						/* fast copy */
18199 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
18200 							(Z_OBJCE_P(expr)->default_properties_count ||
18201 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
18202 							 GC_IS_RECURSIVE(obj_ht))));
18203 						zend_release_properties(obj_ht);
18204 					} else {
18205 						ZVAL_EMPTY_ARRAY(result);
18206 					}
18207 				}
18208 			} else {
18209 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
18210 				if (Z_TYPE_P(expr) == IS_ARRAY) {
18211 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
18212 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
18213 						/* TODO: try not to duplicate immutable arrays as well ??? */
18214 						ht = zend_array_dup(ht);
18215 					}
18216 					Z_OBJ_P(result)->properties = ht;
18217 				} else if (Z_TYPE_P(expr) != IS_NULL) {
18218 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
18219 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
18220 					if (IS_TMP_VAR == IS_CONST) {
18221 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
18222 					} else {
18223 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
18224 					}
18225 				}
18226 			}
18227 	}
18228 
18229 	zval_ptr_dtor_nogc(free_op1);
18230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18231 }
18232 
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18234 {
18235 	USE_OPLINE
18236 	zend_free_op free_op1;
18237 	zval *array_ptr, *result;
18238 
18239 	SAVE_OPLINE();
18240 
18241 	array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18242 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
18243 		result = EX_VAR(opline->result.var);
18244 		ZVAL_COPY_VALUE(result, array_ptr);
18245 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
18246 			Z_ADDREF_P(array_ptr);
18247 		}
18248 		Z_FE_POS_P(result) = 0;
18249 
18250 		ZEND_VM_NEXT_OPCODE();
18251 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
18252 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
18253 			HashTable *properties;
18254 			if (Z_OBJ_P(array_ptr)->properties
18255 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
18256 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
18257 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
18258 				}
18259 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
18260 			}
18261 
18262 			properties = Z_OBJPROP_P(array_ptr);
18263 			result = EX_VAR(opline->result.var);
18264 			ZVAL_COPY_VALUE(result, array_ptr);
18265 			if (IS_TMP_VAR != IS_TMP_VAR) {
18266 				Z_ADDREF_P(array_ptr);
18267 			}
18268 
18269 			if (zend_hash_num_elements(properties) == 0) {
18270 				Z_FE_ITER_P(result) = (uint32_t) -1;
18271 
18272 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18273 			}
18274 
18275 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
18276 
18277 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18278 		} else {
18279 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
18280 
18281 			zval_ptr_dtor_nogc(free_op1);
18282 			if (UNEXPECTED(EG(exception))) {
18283 				HANDLE_EXCEPTION();
18284 			} else if (is_empty) {
18285 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18286 			} else {
18287 				ZEND_VM_NEXT_OPCODE();
18288 			}
18289 		}
18290 	} else {
18291 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
18292 		ZVAL_UNDEF(EX_VAR(opline->result.var));
18293 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
18294 		zval_ptr_dtor_nogc(free_op1);
18295 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18296 	}
18297 }
18298 
ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18299 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18300 {
18301 	USE_OPLINE
18302 	zend_free_op free_op1;
18303 	zval *array_ptr, *array_ref;
18304 
18305 	SAVE_OPLINE();
18306 
18307 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18308 		array_ref = array_ptr = NULL;
18309 		if (Z_ISREF_P(array_ref)) {
18310 			array_ptr = Z_REFVAL_P(array_ref);
18311 		}
18312 	} else {
18313 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18314 	}
18315 
18316 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
18317 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18318 			if (array_ptr == array_ref) {
18319 				ZVAL_NEW_REF(array_ref, array_ref);
18320 				array_ptr = Z_REFVAL_P(array_ref);
18321 			}
18322 			Z_ADDREF_P(array_ref);
18323 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
18324 		} else {
18325 			array_ref = EX_VAR(opline->result.var);
18326 			ZVAL_NEW_REF(array_ref, array_ptr);
18327 			array_ptr = Z_REFVAL_P(array_ref);
18328 		}
18329 		if (IS_TMP_VAR == IS_CONST) {
18330 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
18331 		} else {
18332 			SEPARATE_ARRAY(array_ptr);
18333 		}
18334 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
18335 
18336 		if (IS_TMP_VAR == IS_VAR) {
18337 
18338 		}
18339 		ZEND_VM_NEXT_OPCODE();
18340 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
18341 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
18342 			HashTable *properties;
18343 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
18344 				if (array_ptr == array_ref) {
18345 					ZVAL_NEW_REF(array_ref, array_ref);
18346 					array_ptr = Z_REFVAL_P(array_ref);
18347 				}
18348 				Z_ADDREF_P(array_ref);
18349 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
18350 			} else {
18351 				array_ptr = EX_VAR(opline->result.var);
18352 				ZVAL_COPY_VALUE(array_ptr, array_ref);
18353 			}
18354 			if (Z_OBJ_P(array_ptr)->properties
18355 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
18356 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
18357 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
18358 				}
18359 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
18360 			}
18361 
18362 			properties = Z_OBJPROP_P(array_ptr);
18363 			if (zend_hash_num_elements(properties) == 0) {
18364 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
18365 
18366 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18367 			}
18368 
18369 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
18370 
18371 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18372 		} else {
18373 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
18374 
18375 			if (IS_TMP_VAR == IS_VAR) {
18376 
18377 			} else {
18378 				zval_ptr_dtor_nogc(free_op1);
18379 			}
18380 			if (UNEXPECTED(EG(exception))) {
18381 				HANDLE_EXCEPTION();
18382 			} else if (is_empty) {
18383 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18384 			} else {
18385 				ZEND_VM_NEXT_OPCODE();
18386 			}
18387 		}
18388 	} else {
18389 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
18390 		ZVAL_UNDEF(EX_VAR(opline->result.var));
18391 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
18392 		if (IS_TMP_VAR == IS_VAR) {
18393 
18394 		} else {
18395 			zval_ptr_dtor_nogc(free_op1);
18396 		}
18397 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
18398 	}
18399 }
18400 
ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18401 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18402 {
18403 	USE_OPLINE
18404 
18405 	if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) {
18406 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
18407 	}
18408 	ZEND_VM_NEXT_OPCODE();
18409 }
18410 
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18412 {
18413 	USE_OPLINE
18414 	zend_free_op free_op1;
18415 	zval *value;
18416 	zval *ref = NULL;
18417 	int ret;
18418 
18419 	SAVE_OPLINE();
18420 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18421 
18422 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
18423 		if (IS_TMP_VAR == IS_VAR) {
18424 			ref = value;
18425 		}
18426 		value = Z_REFVAL_P(value);
18427 	}
18428 
18429 	ret = i_zend_is_true(value);
18430 
18431 	if (UNEXPECTED(EG(exception))) {
18432 		zval_ptr_dtor_nogc(free_op1);
18433 		ZVAL_UNDEF(EX_VAR(opline->result.var));
18434 		HANDLE_EXCEPTION();
18435 	}
18436 
18437 	if (ret) {
18438 		zval *result = EX_VAR(opline->result.var);
18439 
18440 		ZVAL_COPY_VALUE(result, value);
18441 		if (IS_TMP_VAR == IS_CONST) {
18442 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
18443 		} else if (IS_TMP_VAR == IS_CV) {
18444 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
18445 		} else if (IS_TMP_VAR == IS_VAR && ref) {
18446 			zend_reference *r = Z_REF_P(ref);
18447 
18448 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
18449 				efree_size(r, sizeof(zend_reference));
18450 			} else if (Z_OPT_REFCOUNTED_P(result)) {
18451 				Z_ADDREF_P(result);
18452 			}
18453 		}
18454 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18455 	}
18456 
18457 	zval_ptr_dtor_nogc(free_op1);
18458 	ZEND_VM_NEXT_OPCODE();
18459 }
18460 
ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18461 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18462 {
18463 	USE_OPLINE
18464 	zend_free_op free_op1;
18465 	zval *value;
18466 	zval *ref = NULL;
18467 
18468 	SAVE_OPLINE();
18469 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18470 
18471 	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
18472 		if (IS_TMP_VAR & IS_VAR) {
18473 			ref = value;
18474 		}
18475 		value = Z_REFVAL_P(value);
18476 	}
18477 
18478 	if (Z_TYPE_P(value) > IS_NULL) {
18479 		zval *result = EX_VAR(opline->result.var);
18480 		ZVAL_COPY_VALUE(result, value);
18481 		if (IS_TMP_VAR == IS_CONST) {
18482 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
18483 		} else if (IS_TMP_VAR == IS_CV) {
18484 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
18485 		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
18486 			zend_reference *r = Z_REF_P(ref);
18487 
18488 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
18489 				efree_size(r, sizeof(zend_reference));
18490 			} else if (Z_OPT_REFCOUNTED_P(result)) {
18491 				Z_ADDREF_P(result);
18492 			}
18493 		}
18494 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18495 	}
18496 
18497 	zval_ptr_dtor_nogc(free_op1);
18498 	ZEND_VM_NEXT_OPCODE();
18499 }
18500 
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18501 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18502 {
18503 	USE_OPLINE
18504 	zend_free_op free_op1;
18505 	zval *value;
18506 	zval *result = EX_VAR(opline->result.var);
18507 
18508 	value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18509 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
18510 		SAVE_OPLINE();
18511 		ZVAL_UNDEFINED_OP1();
18512 		ZVAL_NULL(result);
18513 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18514 	}
18515 
18516 	if (IS_TMP_VAR == IS_CV) {
18517 		ZVAL_COPY_DEREF(result, value);
18518 	} else if (IS_TMP_VAR == IS_VAR) {
18519 		if (UNEXPECTED(Z_ISREF_P(value))) {
18520 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
18521 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
18522 				efree_size(Z_REF_P(value), sizeof(zend_reference));
18523 			} else if (Z_OPT_REFCOUNTED_P(result)) {
18524 				Z_ADDREF_P(result);
18525 			}
18526 		} else {
18527 			ZVAL_COPY_VALUE(result, value);
18528 		}
18529 	} else {
18530 		ZVAL_COPY_VALUE(result, value);
18531 		if (IS_TMP_VAR == IS_CONST) {
18532 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
18533 				Z_ADDREF_P(result);
18534 			}
18535 		}
18536 	}
18537 	ZEND_VM_NEXT_OPCODE();
18538 }
18539 
ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18541 {
18542 	USE_OPLINE
18543 
18544 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
18545 
18546 	zval *val;
18547 	zend_free_op free_op1;
18548 
18549 	SAVE_OPLINE();
18550 	val = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18551 
18552 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
18553 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
18554 		zval_ptr_dtor_nogc(free_op1);
18555 		UNDEF_RESULT();
18556 		HANDLE_EXCEPTION();
18557 	}
18558 
18559 	if (Z_TYPE_P(val) == IS_ARRAY) {
18560 		ZVAL_COPY_VALUE(&generator->values, val);
18561 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
18562 			Z_ADDREF_P(val);
18563 		}
18564 		Z_FE_POS(generator->values) = 0;
18565 
18566 	} else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
18567 		zend_class_entry *ce = Z_OBJCE_P(val);
18568 		if (ce == zend_ce_generator) {
18569 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
18570 
18571 			if (IS_TMP_VAR != IS_TMP_VAR) {
18572 				Z_ADDREF_P(val);
18573 			}
18574 
18575 			if (Z_ISUNDEF(new_gen->retval)) {
18576 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
18577 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
18578 					zval_ptr_dtor(val);
18579 					UNDEF_RESULT();
18580 					HANDLE_EXCEPTION();
18581 				} else {
18582 					zend_generator_yield_from(generator, new_gen);
18583 				}
18584 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
18585 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
18586 				zval_ptr_dtor(val);
18587 				UNDEF_RESULT();
18588 				HANDLE_EXCEPTION();
18589 			} else {
18590 				if (RETURN_VALUE_USED(opline)) {
18591 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
18592 				}
18593 				ZEND_VM_NEXT_OPCODE();
18594 			}
18595 		} else {
18596 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
18597 			zval_ptr_dtor_nogc(free_op1);
18598 
18599 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
18600 				if (!EG(exception)) {
18601 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
18602 				}
18603 				UNDEF_RESULT();
18604 				HANDLE_EXCEPTION();
18605 			}
18606 
18607 			iter->index = 0;
18608 			if (iter->funcs->rewind) {
18609 				iter->funcs->rewind(iter);
18610 				if (UNEXPECTED(EG(exception) != NULL)) {
18611 					OBJ_RELEASE(&iter->std);
18612 					UNDEF_RESULT();
18613 					HANDLE_EXCEPTION();
18614 				}
18615 			}
18616 
18617 			ZVAL_OBJ(&generator->values, &iter->std);
18618 		}
18619 	} else {
18620 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
18621 		zval_ptr_dtor_nogc(free_op1);
18622 		UNDEF_RESULT();
18623 		HANDLE_EXCEPTION();
18624 	}
18625 
18626 	/* This is the default return value
18627 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
18628 	if (RETURN_VALUE_USED(opline)) {
18629 		ZVAL_NULL(EX_VAR(opline->result.var));
18630 	}
18631 
18632 	/* This generator has no send target (though the generator we delegate to might have one) */
18633 	generator->send_target = NULL;
18634 
18635 	/* We increment to the next op, so we are at the correct position when the
18636 	 * generator is resumed. */
18637 	ZEND_VM_INC_OPCODE();
18638 
18639 	/* The GOTO VM uses a local opline variable. We need to set the opline
18640 	 * variable in execute_data so we don't resume at an old position. */
18641 	SAVE_OPLINE();
18642 
18643 	ZEND_VM_RETURN();
18644 }
18645 
ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18647 {
18648 	USE_OPLINE
18649 	zend_free_op free_op1;
18650 	zval *op1, *op2;
18651 	zend_bool result;
18652 
18653 	SAVE_OPLINE();
18654 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18655 	op2 = RT_CONSTANT(opline, opline->op2);
18656 	result = fast_is_identical_function(op1, op2);
18657 	zval_ptr_dtor_nogc(free_op1);
18658 
18659 	ZEND_VM_SMART_BRANCH(result, 1);
18660 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18661 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18662 }
18663 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18664 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18665 {
18666 	USE_OPLINE
18667 	zend_free_op free_op1;
18668 	zval *op1, *op2;
18669 	zend_bool result;
18670 
18671 	SAVE_OPLINE();
18672 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18673 	op2 = RT_CONSTANT(opline, opline->op2);
18674 	result = fast_is_not_identical_function(op1, op2);
18675 	zval_ptr_dtor_nogc(free_op1);
18676 
18677 	ZEND_VM_SMART_BRANCH(result, 1);
18678 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
18679 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18680 }
18681 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18683 {
18684 #if 0
18685 	USE_OPLINE
18686 #endif
18687 
18688 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
18689         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18690 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18691         }
18692 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18693 	} else {
18694 		if (IS_CONST == IS_UNUSED) {
18695 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18696 		}
18697 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18698 	}
18699 }
18700 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18701 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18702 {
18703 #if 0
18704 	USE_OPLINE
18705 #endif
18706 
18707 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
18708 		/* Behave like FETCH_OBJ_W */
18709 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
18710 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18711 		}
18712 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18713 	} else {
18714 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18715 	}
18716 }
18717 
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18719 {
18720 	USE_OPLINE
18721 
18722 	zend_string **rope;
18723 	zval *var;
18724 
18725 	/* op1 and result are the same */
18726 	rope = (zend_string**)EX_VAR(opline->op1.var);
18727 	if (IS_CONST == IS_CONST) {
18728 		var = RT_CONSTANT(opline, opline->op2);
18729 		rope[opline->extended_value] = Z_STR_P(var);
18730 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
18731 			Z_ADDREF_P(var);
18732 		}
18733 	} else {
18734 		var = RT_CONSTANT(opline, opline->op2);
18735 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
18736 			if (IS_CONST == IS_CV) {
18737 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
18738 			} else {
18739 				rope[opline->extended_value] = Z_STR_P(var);
18740 			}
18741 		} else {
18742 			SAVE_OPLINE();
18743 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
18744 				ZVAL_UNDEFINED_OP2();
18745 			}
18746 			rope[opline->extended_value] = zval_get_string_func(var);
18747 
18748 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18749 		}
18750 	}
18751 	ZEND_VM_NEXT_OPCODE();
18752 }
18753 
ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18755 {
18756 	USE_OPLINE
18757 
18758 	zend_string **rope;
18759 	zval *var, *ret;
18760 	uint32_t i;
18761 	size_t len = 0;
18762 	char *target;
18763 
18764 	rope = (zend_string**)EX_VAR(opline->op1.var);
18765 	if (IS_CONST == IS_CONST) {
18766 		var = RT_CONSTANT(opline, opline->op2);
18767 		rope[opline->extended_value] = Z_STR_P(var);
18768 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
18769 			Z_ADDREF_P(var);
18770 		}
18771 	} else {
18772 		var = RT_CONSTANT(opline, opline->op2);
18773 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
18774 			if (IS_CONST == IS_CV) {
18775 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
18776 			} else {
18777 				rope[opline->extended_value] = Z_STR_P(var);
18778 			}
18779 		} else {
18780 			SAVE_OPLINE();
18781 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
18782 				ZVAL_UNDEFINED_OP2();
18783 			}
18784 			rope[opline->extended_value] = zval_get_string_func(var);
18785 
18786 			if (UNEXPECTED(EG(exception))) {
18787 				for (i = 0; i <= opline->extended_value; i++) {
18788 					zend_string_release_ex(rope[i], 0);
18789 				}
18790 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18791 				HANDLE_EXCEPTION();
18792 			}
18793 		}
18794 	}
18795 	for (i = 0; i <= opline->extended_value; i++) {
18796 		len += ZSTR_LEN(rope[i]);
18797 	}
18798 	ret = EX_VAR(opline->result.var);
18799 	ZVAL_STR(ret, zend_string_alloc(len, 0));
18800 	target = Z_STRVAL_P(ret);
18801 	for (i = 0; i <= opline->extended_value; i++) {
18802 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
18803 		target += ZSTR_LEN(rope[i]);
18804 		zend_string_release_ex(rope[i], 0);
18805 	}
18806 	*target = '\0';
18807 
18808 	ZEND_VM_NEXT_OPCODE();
18809 }
18810 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18811 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18812 {
18813 	USE_OPLINE
18814 	zend_free_op free_op1;
18815 	zval *expr_ptr, new_expr;
18816 
18817 	SAVE_OPLINE();
18818 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
18819 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
18820 		expr_ptr = NULL;
18821 		if (Z_ISREF_P(expr_ptr)) {
18822 			Z_ADDREF_P(expr_ptr);
18823 		} else {
18824 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
18825 		}
18826 
18827 	} else {
18828 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18829 		if (IS_TMP_VAR == IS_TMP_VAR) {
18830 			/* pass */
18831 		} else if (IS_TMP_VAR == IS_CONST) {
18832 			Z_TRY_ADDREF_P(expr_ptr);
18833 		} else if (IS_TMP_VAR == IS_CV) {
18834 			ZVAL_DEREF(expr_ptr);
18835 			Z_TRY_ADDREF_P(expr_ptr);
18836 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
18837 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
18838 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
18839 
18840 				expr_ptr = Z_REFVAL_P(expr_ptr);
18841 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18842 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
18843 					expr_ptr = &new_expr;
18844 					efree_size(ref, sizeof(zend_reference));
18845 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
18846 					Z_ADDREF_P(expr_ptr);
18847 				}
18848 			}
18849 		}
18850 	}
18851 
18852 	if (IS_CONST != IS_UNUSED) {
18853 
18854 		zval *offset = RT_CONSTANT(opline, opline->op2);
18855 		zend_string *str;
18856 		zend_ulong hval;
18857 
18858 add_again:
18859 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
18860 			str = Z_STR_P(offset);
18861 			if (IS_CONST != IS_CONST) {
18862 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
18863 					goto num_index;
18864 				}
18865 			}
18866 str_index:
18867 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
18868 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
18869 			hval = Z_LVAL_P(offset);
18870 num_index:
18871 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
18872 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
18873 			offset = Z_REFVAL_P(offset);
18874 			goto add_again;
18875 		} else if (Z_TYPE_P(offset) == IS_NULL) {
18876 			str = ZSTR_EMPTY_ALLOC();
18877 			goto str_index;
18878 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
18879 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
18880 			goto num_index;
18881 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
18882 			hval = 0;
18883 			goto num_index;
18884 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
18885 			hval = 1;
18886 			goto num_index;
18887 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
18888 			zend_use_resource_as_offset(offset);
18889 			hval = Z_RES_HANDLE_P(offset);
18890 			goto num_index;
18891 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
18892 			ZVAL_UNDEFINED_OP2();
18893 			str = ZSTR_EMPTY_ALLOC();
18894 			goto str_index;
18895 		} else {
18896 			zend_illegal_offset();
18897 			zval_ptr_dtor_nogc(expr_ptr);
18898 		}
18899 
18900 	} else {
18901 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
18902 			zend_cannot_add_element();
18903 			zval_ptr_dtor_nogc(expr_ptr);
18904 		}
18905 	}
18906 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18907 }
18908 
ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18909 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18910 {
18911 	zval *array;
18912 	uint32_t size;
18913 	USE_OPLINE
18914 
18915 	array = EX_VAR(opline->result.var);
18916 	if (IS_TMP_VAR != IS_UNUSED) {
18917 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
18918 		ZVAL_ARR(array, zend_new_array(size));
18919 		/* Explicitly initialize array as not-packed if flag is set */
18920 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
18921 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
18922 		}
18923 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18924 	} else {
18925 		ZVAL_ARR(array, zend_new_array(0));
18926 		ZEND_VM_NEXT_OPCODE();
18927 	}
18928 }
18929 
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18930 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18931 {
18932 	USE_OPLINE
18933 
18934 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
18935 
18936 	SAVE_OPLINE();
18937 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
18938 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
18939 	}
18940 
18941 	/* Destroy the previously yielded value */
18942 	zval_ptr_dtor(&generator->value);
18943 
18944 	/* Destroy the previously yielded key */
18945 	zval_ptr_dtor(&generator->key);
18946 
18947 	/* Set the new yielded value */
18948 	if (IS_TMP_VAR != IS_UNUSED) {
18949 		zend_free_op free_op1;
18950 
18951 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
18952 			/* Constants and temporary variables aren't yieldable by reference,
18953 			 * but we still allow them with a notice. */
18954 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
18955 				zval *value;
18956 
18957 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18958 
18959 				value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18960 				ZVAL_COPY_VALUE(&generator->value, value);
18961 				if (IS_TMP_VAR == IS_CONST) {
18962 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
18963 						Z_ADDREF(generator->value);
18964 					}
18965 				}
18966 			} else {
18967 				zval *value_ptr = NULL;
18968 
18969 				/* If a function call result is yielded and the function did
18970 				 * not return by reference we throw a notice. */
18971 				do {
18972 					if (IS_TMP_VAR == IS_VAR) {
18973 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
18974 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
18975 						 && !Z_ISREF_P(value_ptr)) {
18976 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
18977 							ZVAL_COPY(&generator->value, value_ptr);
18978 							break;
18979 						}
18980 					}
18981 					if (Z_ISREF_P(value_ptr)) {
18982 						Z_ADDREF_P(value_ptr);
18983 					} else {
18984 						ZVAL_MAKE_REF_EX(value_ptr, 2);
18985 					}
18986 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
18987 				} while (0);
18988 
18989 			}
18990 		} else {
18991 			zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18992 
18993 			/* Consts, temporary variables and references need copying */
18994 			if (IS_TMP_VAR == IS_CONST) {
18995 				ZVAL_COPY_VALUE(&generator->value, value);
18996 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
18997 					Z_ADDREF(generator->value);
18998 				}
18999 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19000 				ZVAL_COPY_VALUE(&generator->value, value);
19001             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19002 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19003 
19004 			} else {
19005 				ZVAL_COPY_VALUE(&generator->value, value);
19006 				if (IS_TMP_VAR == IS_CV) {
19007 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19008 				}
19009 			}
19010 		}
19011 	} else {
19012 		/* If no value was specified yield null */
19013 		ZVAL_NULL(&generator->value);
19014 	}
19015 
19016 	/* Set the new yielded key */
19017 	if (IS_CONST != IS_UNUSED) {
19018 
19019 		zval *key = RT_CONSTANT(opline, opline->op2);
19020 
19021 		/* Consts, temporary variables and references need copying */
19022 		if (IS_CONST == IS_CONST) {
19023 			ZVAL_COPY_VALUE(&generator->key, key);
19024 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
19025 				Z_ADDREF(generator->key);
19026 			}
19027 		} else if (IS_CONST == IS_TMP_VAR) {
19028 			ZVAL_COPY_VALUE(&generator->key, key);
19029 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
19030 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
19031 
19032 		} else {
19033 			ZVAL_COPY_VALUE(&generator->key, key);
19034 			if (IS_CONST == IS_CV) {
19035 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
19036 			}
19037 		}
19038 
19039 		if (Z_TYPE(generator->key) == IS_LONG
19040 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19041 		) {
19042 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19043 		}
19044 	} else {
19045 		/* If no key was specified we use auto-increment keys */
19046 		generator->largest_used_integer_key++;
19047 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19048 	}
19049 
19050 	if (RETURN_VALUE_USED(opline)) {
19051 		/* If the return value of yield is used set the send
19052 		 * target and initialize it to NULL */
19053 		generator->send_target = EX_VAR(opline->result.var);
19054 		ZVAL_NULL(generator->send_target);
19055 	} else {
19056 		generator->send_target = NULL;
19057 	}
19058 
19059 	/* We increment to the next op, so we are at the correct position when the
19060 	 * generator is resumed. */
19061 	ZEND_VM_INC_OPCODE();
19062 
19063 	/* The GOTO VM uses a local opline variable. We need to set the opline
19064 	 * variable in execute_data so we don't resume at an old position. */
19065 	SAVE_OPLINE();
19066 
19067 	ZEND_VM_RETURN();
19068 }
19069 
ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19071 {
19072 	USE_OPLINE
19073 	zend_free_op free_op1;
19074 	zval *op1;
19075 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
19076 	zval *result;
19077 
19078 	SAVE_OPLINE();
19079 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19080 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19081 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
19082 	} else if (opline->extended_value) {
19083 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19084 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
19085 		} else {
19086 			result = NULL;
19087 		}
19088 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
19089 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
19090 	} else {
19091 		zend_string *key;
19092 		zval key_tmp, result_tmp, *val;
19093 
19094 		result = NULL;
19095 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
19096 			ZVAL_STR(&key_tmp, key);
19097 			compare_function(&result_tmp, op1, &key_tmp);
19098 			if (Z_LVAL(result_tmp) == 0) {
19099 				result = val;
19100 				break;
19101 			}
19102 		} ZEND_HASH_FOREACH_END();
19103 	}
19104 	zval_ptr_dtor_nogc(free_op1);
19105 	ZEND_VM_SMART_BRANCH(result, 1);
19106 	ZVAL_BOOL(EX_VAR(opline->result.var), result != NULL);
19107 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19108 }
19109 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19111 {
19112 #if 0
19113 	USE_OPLINE
19114 #endif
19115 
19116 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19117         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19118 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19119         }
19120 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19121 	} else {
19122 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
19123 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19124 		}
19125 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19126 	}
19127 }
19128 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19130 {
19131 #if 0
19132 	USE_OPLINE
19133 #endif
19134 
19135 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19136 		/* Behave like FETCH_OBJ_W */
19137 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19138 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19139 		}
19140 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19141 	} else {
19142 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19143 	}
19144 }
19145 
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19146 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19147 {
19148 	USE_OPLINE
19149 	zend_free_op free_op2;
19150 	zend_string **rope;
19151 	zval *var;
19152 
19153 	/* op1 and result are the same */
19154 	rope = (zend_string**)EX_VAR(opline->op1.var);
19155 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19156 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19157 		rope[opline->extended_value] = Z_STR_P(var);
19158 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19159 			Z_ADDREF_P(var);
19160 		}
19161 	} else {
19162 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19163 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19164 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
19165 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19166 			} else {
19167 				rope[opline->extended_value] = Z_STR_P(var);
19168 			}
19169 		} else {
19170 			SAVE_OPLINE();
19171 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19172 				ZVAL_UNDEFINED_OP2();
19173 			}
19174 			rope[opline->extended_value] = zval_get_string_func(var);
19175 			zval_ptr_dtor_nogc(free_op2);
19176 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19177 		}
19178 	}
19179 	ZEND_VM_NEXT_OPCODE();
19180 }
19181 
ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19182 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19183 {
19184 	USE_OPLINE
19185 	zend_free_op free_op2;
19186 	zend_string **rope;
19187 	zval *var, *ret;
19188 	uint32_t i;
19189 	size_t len = 0;
19190 	char *target;
19191 
19192 	rope = (zend_string**)EX_VAR(opline->op1.var);
19193 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
19194 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19195 		rope[opline->extended_value] = Z_STR_P(var);
19196 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19197 			Z_ADDREF_P(var);
19198 		}
19199 	} else {
19200 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19201 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19202 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
19203 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19204 			} else {
19205 				rope[opline->extended_value] = Z_STR_P(var);
19206 			}
19207 		} else {
19208 			SAVE_OPLINE();
19209 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19210 				ZVAL_UNDEFINED_OP2();
19211 			}
19212 			rope[opline->extended_value] = zval_get_string_func(var);
19213 			zval_ptr_dtor_nogc(free_op2);
19214 			if (UNEXPECTED(EG(exception))) {
19215 				for (i = 0; i <= opline->extended_value; i++) {
19216 					zend_string_release_ex(rope[i], 0);
19217 				}
19218 				ZVAL_UNDEF(EX_VAR(opline->result.var));
19219 				HANDLE_EXCEPTION();
19220 			}
19221 		}
19222 	}
19223 	for (i = 0; i <= opline->extended_value; i++) {
19224 		len += ZSTR_LEN(rope[i]);
19225 	}
19226 	ret = EX_VAR(opline->result.var);
19227 	ZVAL_STR(ret, zend_string_alloc(len, 0));
19228 	target = Z_STRVAL_P(ret);
19229 	for (i = 0; i <= opline->extended_value; i++) {
19230 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
19231 		target += ZSTR_LEN(rope[i]);
19232 		zend_string_release_ex(rope[i], 0);
19233 	}
19234 	*target = '\0';
19235 
19236 	ZEND_VM_NEXT_OPCODE();
19237 }
19238 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19239 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19240 {
19241 	USE_OPLINE
19242 	zend_free_op free_op1;
19243 	zval *expr_ptr, new_expr;
19244 
19245 	SAVE_OPLINE();
19246 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
19247 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19248 		expr_ptr = NULL;
19249 		if (Z_ISREF_P(expr_ptr)) {
19250 			Z_ADDREF_P(expr_ptr);
19251 		} else {
19252 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
19253 		}
19254 
19255 	} else {
19256 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19257 		if (IS_TMP_VAR == IS_TMP_VAR) {
19258 			/* pass */
19259 		} else if (IS_TMP_VAR == IS_CONST) {
19260 			Z_TRY_ADDREF_P(expr_ptr);
19261 		} else if (IS_TMP_VAR == IS_CV) {
19262 			ZVAL_DEREF(expr_ptr);
19263 			Z_TRY_ADDREF_P(expr_ptr);
19264 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19265 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19266 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19267 
19268 				expr_ptr = Z_REFVAL_P(expr_ptr);
19269 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19270 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19271 					expr_ptr = &new_expr;
19272 					efree_size(ref, sizeof(zend_reference));
19273 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19274 					Z_ADDREF_P(expr_ptr);
19275 				}
19276 			}
19277 		}
19278 	}
19279 
19280 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
19281 		zend_free_op free_op2;
19282 		zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19283 		zend_string *str;
19284 		zend_ulong hval;
19285 
19286 add_again:
19287 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19288 			str = Z_STR_P(offset);
19289 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
19290 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19291 					goto num_index;
19292 				}
19293 			}
19294 str_index:
19295 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19296 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19297 			hval = Z_LVAL_P(offset);
19298 num_index:
19299 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19300 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19301 			offset = Z_REFVAL_P(offset);
19302 			goto add_again;
19303 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19304 			str = ZSTR_EMPTY_ALLOC();
19305 			goto str_index;
19306 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19307 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
19308 			goto num_index;
19309 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19310 			hval = 0;
19311 			goto num_index;
19312 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19313 			hval = 1;
19314 			goto num_index;
19315 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
19316 			zend_use_resource_as_offset(offset);
19317 			hval = Z_RES_HANDLE_P(offset);
19318 			goto num_index;
19319 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19320 			ZVAL_UNDEFINED_OP2();
19321 			str = ZSTR_EMPTY_ALLOC();
19322 			goto str_index;
19323 		} else {
19324 			zend_illegal_offset();
19325 			zval_ptr_dtor_nogc(expr_ptr);
19326 		}
19327 		zval_ptr_dtor_nogc(free_op2);
19328 	} else {
19329 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19330 			zend_cannot_add_element();
19331 			zval_ptr_dtor_nogc(expr_ptr);
19332 		}
19333 	}
19334 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19335 }
19336 
ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19337 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19338 {
19339 	zval *array;
19340 	uint32_t size;
19341 	USE_OPLINE
19342 
19343 	array = EX_VAR(opline->result.var);
19344 	if (IS_TMP_VAR != IS_UNUSED) {
19345 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19346 		ZVAL_ARR(array, zend_new_array(size));
19347 		/* Explicitly initialize array as not-packed if flag is set */
19348 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19349 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
19350 		}
19351 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19352 	} else {
19353 		ZVAL_ARR(array, zend_new_array(0));
19354 		ZEND_VM_NEXT_OPCODE();
19355 	}
19356 }
19357 
ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19359 {
19360 	USE_OPLINE
19361 	zend_free_op free_op1, free_op2;
19362 	zval *op1, *op2;
19363 	zend_bool result;
19364 
19365 	SAVE_OPLINE();
19366 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19367 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19368 	result = fast_is_identical_function(op1, op2);
19369 	zval_ptr_dtor_nogc(free_op1);
19370 	zval_ptr_dtor_nogc(free_op2);
19371 	ZEND_VM_SMART_BRANCH(result, 1);
19372 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
19373 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19374 }
19375 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19376 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19377 {
19378 	USE_OPLINE
19379 	zend_free_op free_op1, free_op2;
19380 	zval *op1, *op2;
19381 	zend_bool result;
19382 
19383 	SAVE_OPLINE();
19384 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19385 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19386 	result = fast_is_not_identical_function(op1, op2);
19387 	zval_ptr_dtor_nogc(free_op1);
19388 	zval_ptr_dtor_nogc(free_op2);
19389 	ZEND_VM_SMART_BRANCH(result, 1);
19390 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
19391 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19392 }
19393 
ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19395 {
19396 	USE_OPLINE
19397 
19398 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19399 
19400 	SAVE_OPLINE();
19401 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19402 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19403 	}
19404 
19405 	/* Destroy the previously yielded value */
19406 	zval_ptr_dtor(&generator->value);
19407 
19408 	/* Destroy the previously yielded key */
19409 	zval_ptr_dtor(&generator->key);
19410 
19411 	/* Set the new yielded value */
19412 	if (IS_TMP_VAR != IS_UNUSED) {
19413 		zend_free_op free_op1;
19414 
19415 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19416 			/* Constants and temporary variables aren't yieldable by reference,
19417 			 * but we still allow them with a notice. */
19418 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19419 				zval *value;
19420 
19421 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19422 
19423 				value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19424 				ZVAL_COPY_VALUE(&generator->value, value);
19425 				if (IS_TMP_VAR == IS_CONST) {
19426 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19427 						Z_ADDREF(generator->value);
19428 					}
19429 				}
19430 			} else {
19431 				zval *value_ptr = NULL;
19432 
19433 				/* If a function call result is yielded and the function did
19434 				 * not return by reference we throw a notice. */
19435 				do {
19436 					if (IS_TMP_VAR == IS_VAR) {
19437 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19438 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19439 						 && !Z_ISREF_P(value_ptr)) {
19440 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19441 							ZVAL_COPY(&generator->value, value_ptr);
19442 							break;
19443 						}
19444 					}
19445 					if (Z_ISREF_P(value_ptr)) {
19446 						Z_ADDREF_P(value_ptr);
19447 					} else {
19448 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19449 					}
19450 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19451 				} while (0);
19452 
19453 			}
19454 		} else {
19455 			zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19456 
19457 			/* Consts, temporary variables and references need copying */
19458 			if (IS_TMP_VAR == IS_CONST) {
19459 				ZVAL_COPY_VALUE(&generator->value, value);
19460 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19461 					Z_ADDREF(generator->value);
19462 				}
19463 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19464 				ZVAL_COPY_VALUE(&generator->value, value);
19465             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19466 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19467 
19468 			} else {
19469 				ZVAL_COPY_VALUE(&generator->value, value);
19470 				if (IS_TMP_VAR == IS_CV) {
19471 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19472 				}
19473 			}
19474 		}
19475 	} else {
19476 		/* If no value was specified yield null */
19477 		ZVAL_NULL(&generator->value);
19478 	}
19479 
19480 	/* Set the new yielded key */
19481 	if (IS_TMP_VAR != IS_UNUSED) {
19482 		zend_free_op free_op2;
19483 		zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19484 
19485 		/* Consts, temporary variables and references need copying */
19486 		if (IS_TMP_VAR == IS_CONST) {
19487 			ZVAL_COPY_VALUE(&generator->key, key);
19488 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
19489 				Z_ADDREF(generator->key);
19490 			}
19491 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
19492 			ZVAL_COPY_VALUE(&generator->key, key);
19493 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
19494 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
19495 
19496 		} else {
19497 			ZVAL_COPY_VALUE(&generator->key, key);
19498 			if (IS_TMP_VAR == IS_CV) {
19499 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
19500 			}
19501 		}
19502 
19503 		if (Z_TYPE(generator->key) == IS_LONG
19504 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19505 		) {
19506 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19507 		}
19508 	} else {
19509 		/* If no key was specified we use auto-increment keys */
19510 		generator->largest_used_integer_key++;
19511 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19512 	}
19513 
19514 	if (RETURN_VALUE_USED(opline)) {
19515 		/* If the return value of yield is used set the send
19516 		 * target and initialize it to NULL */
19517 		generator->send_target = EX_VAR(opline->result.var);
19518 		ZVAL_NULL(generator->send_target);
19519 	} else {
19520 		generator->send_target = NULL;
19521 	}
19522 
19523 	/* We increment to the next op, so we are at the correct position when the
19524 	 * generator is resumed. */
19525 	ZEND_VM_INC_OPCODE();
19526 
19527 	/* The GOTO VM uses a local opline variable. We need to set the opline
19528 	 * variable in execute_data so we don't resume at an old position. */
19529 	SAVE_OPLINE();
19530 
19531 	ZEND_VM_RETURN();
19532 }
19533 
ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19534 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19535 {
19536 	USE_OPLINE
19537 
19538 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19539 
19540 	SAVE_OPLINE();
19541 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19542 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19543 	}
19544 
19545 	/* Destroy the previously yielded value */
19546 	zval_ptr_dtor(&generator->value);
19547 
19548 	/* Destroy the previously yielded key */
19549 	zval_ptr_dtor(&generator->key);
19550 
19551 	/* Set the new yielded value */
19552 	if (IS_TMP_VAR != IS_UNUSED) {
19553 		zend_free_op free_op1;
19554 
19555 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19556 			/* Constants and temporary variables aren't yieldable by reference,
19557 			 * but we still allow them with a notice. */
19558 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19559 				zval *value;
19560 
19561 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19562 
19563 				value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19564 				ZVAL_COPY_VALUE(&generator->value, value);
19565 				if (IS_TMP_VAR == IS_CONST) {
19566 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19567 						Z_ADDREF(generator->value);
19568 					}
19569 				}
19570 			} else {
19571 				zval *value_ptr = NULL;
19572 
19573 				/* If a function call result is yielded and the function did
19574 				 * not return by reference we throw a notice. */
19575 				do {
19576 					if (IS_TMP_VAR == IS_VAR) {
19577 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19578 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19579 						 && !Z_ISREF_P(value_ptr)) {
19580 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19581 							ZVAL_COPY(&generator->value, value_ptr);
19582 							break;
19583 						}
19584 					}
19585 					if (Z_ISREF_P(value_ptr)) {
19586 						Z_ADDREF_P(value_ptr);
19587 					} else {
19588 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19589 					}
19590 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19591 				} while (0);
19592 
19593 			}
19594 		} else {
19595 			zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19596 
19597 			/* Consts, temporary variables and references need copying */
19598 			if (IS_TMP_VAR == IS_CONST) {
19599 				ZVAL_COPY_VALUE(&generator->value, value);
19600 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19601 					Z_ADDREF(generator->value);
19602 				}
19603 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19604 				ZVAL_COPY_VALUE(&generator->value, value);
19605             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19606 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19607 
19608 			} else {
19609 				ZVAL_COPY_VALUE(&generator->value, value);
19610 				if (IS_TMP_VAR == IS_CV) {
19611 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19612 				}
19613 			}
19614 		}
19615 	} else {
19616 		/* If no value was specified yield null */
19617 		ZVAL_NULL(&generator->value);
19618 	}
19619 
19620 	/* Set the new yielded key */
19621 	if (IS_VAR != IS_UNUSED) {
19622 		zend_free_op free_op2;
19623 		zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
19624 
19625 		/* Consts, temporary variables and references need copying */
19626 		if (IS_VAR == IS_CONST) {
19627 			ZVAL_COPY_VALUE(&generator->key, key);
19628 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
19629 				Z_ADDREF(generator->key);
19630 			}
19631 		} else if (IS_VAR == IS_TMP_VAR) {
19632 			ZVAL_COPY_VALUE(&generator->key, key);
19633 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
19634 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
19635 			zval_ptr_dtor_nogc(free_op2);
19636 		} else {
19637 			ZVAL_COPY_VALUE(&generator->key, key);
19638 			if (IS_VAR == IS_CV) {
19639 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
19640 			}
19641 		}
19642 
19643 		if (Z_TYPE(generator->key) == IS_LONG
19644 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19645 		) {
19646 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19647 		}
19648 	} else {
19649 		/* If no key was specified we use auto-increment keys */
19650 		generator->largest_used_integer_key++;
19651 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19652 	}
19653 
19654 	if (RETURN_VALUE_USED(opline)) {
19655 		/* If the return value of yield is used set the send
19656 		 * target and initialize it to NULL */
19657 		generator->send_target = EX_VAR(opline->result.var);
19658 		ZVAL_NULL(generator->send_target);
19659 	} else {
19660 		generator->send_target = NULL;
19661 	}
19662 
19663 	/* We increment to the next op, so we are at the correct position when the
19664 	 * generator is resumed. */
19665 	ZEND_VM_INC_OPCODE();
19666 
19667 	/* The GOTO VM uses a local opline variable. We need to set the opline
19668 	 * variable in execute_data so we don't resume at an old position. */
19669 	SAVE_OPLINE();
19670 
19671 	ZEND_VM_RETURN();
19672 }
19673 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19674 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19675 {
19676 #if 0
19677 	USE_OPLINE
19678 #endif
19679 
19680 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19681         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19682 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19683         }
19684 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19685 	} else {
19686 		if (IS_UNUSED == IS_UNUSED) {
19687 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19688 		}
19689 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19690 	}
19691 }
19692 
ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19694 {
19695 	USE_OPLINE
19696 
19697 	SAVE_OPLINE();
19698 	if (IS_TMP_VAR == IS_UNUSED) {
19699 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
19700 	} else {
19701 /* prevents "undefined variable opline" errors */
19702 #if 0 || (IS_TMP_VAR != IS_UNUSED)
19703 		zval *retval_ref, *retval_ptr;
19704 		zend_free_op free_op1;
19705 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
19706 
19707 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19708 
19709 		if (IS_TMP_VAR == IS_CONST) {
19710 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
19711 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
19712 		} else if (IS_TMP_VAR == IS_VAR) {
19713 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
19714 				retval_ptr = Z_INDIRECT_P(retval_ptr);
19715 			}
19716 			ZVAL_DEREF(retval_ptr);
19717 		} else if (IS_TMP_VAR == IS_CV) {
19718 			ZVAL_DEREF(retval_ptr);
19719 		}
19720 
19721 		if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
19722 			&& ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
19723 			&& ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
19724 			&& !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
19725 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
19726 			&& retval_ref != retval_ptr)
19727 		) {
19728 			/* A cast might happen - unwrap the reference if this is a by-value return */
19729 			if (Z_REFCOUNT_P(retval_ref) == 1) {
19730 				ZVAL_UNREF(retval_ref);
19731 			} else {
19732 				Z_DELREF_P(retval_ref);
19733 				ZVAL_COPY(retval_ref, retval_ptr);
19734 			}
19735 			retval_ptr = retval_ref;
19736 		}
19737 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
19738 #endif
19739 	}
19740 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19741 }
19742 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19744 {
19745 	USE_OPLINE
19746 	zend_free_op free_op1;
19747 	zval *expr_ptr, new_expr;
19748 
19749 	SAVE_OPLINE();
19750 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
19751 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
19752 		expr_ptr = NULL;
19753 		if (Z_ISREF_P(expr_ptr)) {
19754 			Z_ADDREF_P(expr_ptr);
19755 		} else {
19756 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
19757 		}
19758 
19759 	} else {
19760 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19761 		if (IS_TMP_VAR == IS_TMP_VAR) {
19762 			/* pass */
19763 		} else if (IS_TMP_VAR == IS_CONST) {
19764 			Z_TRY_ADDREF_P(expr_ptr);
19765 		} else if (IS_TMP_VAR == IS_CV) {
19766 			ZVAL_DEREF(expr_ptr);
19767 			Z_TRY_ADDREF_P(expr_ptr);
19768 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19769 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
19770 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
19771 
19772 				expr_ptr = Z_REFVAL_P(expr_ptr);
19773 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19774 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
19775 					expr_ptr = &new_expr;
19776 					efree_size(ref, sizeof(zend_reference));
19777 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
19778 					Z_ADDREF_P(expr_ptr);
19779 				}
19780 			}
19781 		}
19782 	}
19783 
19784 	if (IS_UNUSED != IS_UNUSED) {
19785 
19786 		zval *offset = NULL;
19787 		zend_string *str;
19788 		zend_ulong hval;
19789 
19790 add_again:
19791 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19792 			str = Z_STR_P(offset);
19793 			if (IS_UNUSED != IS_CONST) {
19794 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19795 					goto num_index;
19796 				}
19797 			}
19798 str_index:
19799 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
19800 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19801 			hval = Z_LVAL_P(offset);
19802 num_index:
19803 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
19804 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
19805 			offset = Z_REFVAL_P(offset);
19806 			goto add_again;
19807 		} else if (Z_TYPE_P(offset) == IS_NULL) {
19808 			str = ZSTR_EMPTY_ALLOC();
19809 			goto str_index;
19810 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
19811 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
19812 			goto num_index;
19813 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
19814 			hval = 0;
19815 			goto num_index;
19816 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
19817 			hval = 1;
19818 			goto num_index;
19819 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
19820 			zend_use_resource_as_offset(offset);
19821 			hval = Z_RES_HANDLE_P(offset);
19822 			goto num_index;
19823 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
19824 			ZVAL_UNDEFINED_OP2();
19825 			str = ZSTR_EMPTY_ALLOC();
19826 			goto str_index;
19827 		} else {
19828 			zend_illegal_offset();
19829 			zval_ptr_dtor_nogc(expr_ptr);
19830 		}
19831 
19832 	} else {
19833 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
19834 			zend_cannot_add_element();
19835 			zval_ptr_dtor_nogc(expr_ptr);
19836 		}
19837 	}
19838 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19839 }
19840 
ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19842 {
19843 	zval *array;
19844 	uint32_t size;
19845 	USE_OPLINE
19846 
19847 	array = EX_VAR(opline->result.var);
19848 	if (IS_TMP_VAR != IS_UNUSED) {
19849 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
19850 		ZVAL_ARR(array, zend_new_array(size));
19851 		/* Explicitly initialize array as not-packed if flag is set */
19852 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
19853 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
19854 		}
19855 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19856 	} else {
19857 		ZVAL_ARR(array, zend_new_array(0));
19858 		ZEND_VM_NEXT_OPCODE();
19859 	}
19860 }
19861 
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19862 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19863 {
19864 	USE_OPLINE
19865 
19866 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19867 
19868 	SAVE_OPLINE();
19869 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
19870 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19871 	}
19872 
19873 	/* Destroy the previously yielded value */
19874 	zval_ptr_dtor(&generator->value);
19875 
19876 	/* Destroy the previously yielded key */
19877 	zval_ptr_dtor(&generator->key);
19878 
19879 	/* Set the new yielded value */
19880 	if (IS_TMP_VAR != IS_UNUSED) {
19881 		zend_free_op free_op1;
19882 
19883 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
19884 			/* Constants and temporary variables aren't yieldable by reference,
19885 			 * but we still allow them with a notice. */
19886 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
19887 				zval *value;
19888 
19889 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19890 
19891 				value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19892 				ZVAL_COPY_VALUE(&generator->value, value);
19893 				if (IS_TMP_VAR == IS_CONST) {
19894 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19895 						Z_ADDREF(generator->value);
19896 					}
19897 				}
19898 			} else {
19899 				zval *value_ptr = NULL;
19900 
19901 				/* If a function call result is yielded and the function did
19902 				 * not return by reference we throw a notice. */
19903 				do {
19904 					if (IS_TMP_VAR == IS_VAR) {
19905 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
19906 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
19907 						 && !Z_ISREF_P(value_ptr)) {
19908 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
19909 							ZVAL_COPY(&generator->value, value_ptr);
19910 							break;
19911 						}
19912 					}
19913 					if (Z_ISREF_P(value_ptr)) {
19914 						Z_ADDREF_P(value_ptr);
19915 					} else {
19916 						ZVAL_MAKE_REF_EX(value_ptr, 2);
19917 					}
19918 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
19919 				} while (0);
19920 
19921 			}
19922 		} else {
19923 			zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
19924 
19925 			/* Consts, temporary variables and references need copying */
19926 			if (IS_TMP_VAR == IS_CONST) {
19927 				ZVAL_COPY_VALUE(&generator->value, value);
19928 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
19929 					Z_ADDREF(generator->value);
19930 				}
19931 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
19932 				ZVAL_COPY_VALUE(&generator->value, value);
19933             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19934 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
19935 
19936 			} else {
19937 				ZVAL_COPY_VALUE(&generator->value, value);
19938 				if (IS_TMP_VAR == IS_CV) {
19939 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
19940 				}
19941 			}
19942 		}
19943 	} else {
19944 		/* If no value was specified yield null */
19945 		ZVAL_NULL(&generator->value);
19946 	}
19947 
19948 	/* Set the new yielded key */
19949 	if (IS_UNUSED != IS_UNUSED) {
19950 
19951 		zval *key = NULL;
19952 
19953 		/* Consts, temporary variables and references need copying */
19954 		if (IS_UNUSED == IS_CONST) {
19955 			ZVAL_COPY_VALUE(&generator->key, key);
19956 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
19957 				Z_ADDREF(generator->key);
19958 			}
19959 		} else if (IS_UNUSED == IS_TMP_VAR) {
19960 			ZVAL_COPY_VALUE(&generator->key, key);
19961 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
19962 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
19963 
19964 		} else {
19965 			ZVAL_COPY_VALUE(&generator->key, key);
19966 			if (IS_UNUSED == IS_CV) {
19967 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
19968 			}
19969 		}
19970 
19971 		if (Z_TYPE(generator->key) == IS_LONG
19972 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
19973 		) {
19974 			generator->largest_used_integer_key = Z_LVAL(generator->key);
19975 		}
19976 	} else {
19977 		/* If no key was specified we use auto-increment keys */
19978 		generator->largest_used_integer_key++;
19979 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
19980 	}
19981 
19982 	if (RETURN_VALUE_USED(opline)) {
19983 		/* If the return value of yield is used set the send
19984 		 * target and initialize it to NULL */
19985 		generator->send_target = EX_VAR(opline->result.var);
19986 		ZVAL_NULL(generator->send_target);
19987 	} else {
19988 		generator->send_target = NULL;
19989 	}
19990 
19991 	/* We increment to the next op, so we are at the correct position when the
19992 	 * generator is resumed. */
19993 	ZEND_VM_INC_OPCODE();
19994 
19995 	/* The GOTO VM uses a local opline variable. We need to set the opline
19996 	 * variable in execute_data so we don't resume at an old position. */
19997 	SAVE_OPLINE();
19998 
19999 	ZEND_VM_RETURN();
20000 }
20001 
ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20002 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20003 {
20004 	USE_OPLINE
20005 	zend_free_op free_op1;
20006 	zval *op1;
20007 	zend_string *type;
20008 
20009 	SAVE_OPLINE();
20010 	op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20011 	type = zend_zval_get_type(op1);
20012 	if (EXPECTED(type)) {
20013 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
20014 	} else {
20015 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
20016 	}
20017 	zval_ptr_dtor_nogc(free_op1);
20018 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20019 }
20020 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20021 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20022 {
20023 #if 0
20024 	USE_OPLINE
20025 #endif
20026 
20027 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20028         if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20029 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20030         }
20031 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20032 	} else {
20033 		if (IS_CV == IS_UNUSED) {
20034 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20035 		}
20036 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20037 	}
20038 }
20039 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20041 {
20042 #if 0
20043 	USE_OPLINE
20044 #endif
20045 
20046 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20047 		/* Behave like FETCH_OBJ_W */
20048 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20049 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20050 		}
20051 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20052 	} else {
20053 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20054 	}
20055 }
20056 
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20058 {
20059 	USE_OPLINE
20060 
20061 	zend_string **rope;
20062 	zval *var;
20063 
20064 	/* op1 and result are the same */
20065 	rope = (zend_string**)EX_VAR(opline->op1.var);
20066 	if (IS_CV == IS_CONST) {
20067 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20068 		rope[opline->extended_value] = Z_STR_P(var);
20069 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20070 			Z_ADDREF_P(var);
20071 		}
20072 	} else {
20073 		var = EX_VAR(opline->op2.var);
20074 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20075 			if (IS_CV == IS_CV) {
20076 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20077 			} else {
20078 				rope[opline->extended_value] = Z_STR_P(var);
20079 			}
20080 		} else {
20081 			SAVE_OPLINE();
20082 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20083 				ZVAL_UNDEFINED_OP2();
20084 			}
20085 			rope[opline->extended_value] = zval_get_string_func(var);
20086 
20087 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20088 		}
20089 	}
20090 	ZEND_VM_NEXT_OPCODE();
20091 }
20092 
ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20094 {
20095 	USE_OPLINE
20096 
20097 	zend_string **rope;
20098 	zval *var, *ret;
20099 	uint32_t i;
20100 	size_t len = 0;
20101 	char *target;
20102 
20103 	rope = (zend_string**)EX_VAR(opline->op1.var);
20104 	if (IS_CV == IS_CONST) {
20105 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20106 		rope[opline->extended_value] = Z_STR_P(var);
20107 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20108 			Z_ADDREF_P(var);
20109 		}
20110 	} else {
20111 		var = EX_VAR(opline->op2.var);
20112 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20113 			if (IS_CV == IS_CV) {
20114 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20115 			} else {
20116 				rope[opline->extended_value] = Z_STR_P(var);
20117 			}
20118 		} else {
20119 			SAVE_OPLINE();
20120 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20121 				ZVAL_UNDEFINED_OP2();
20122 			}
20123 			rope[opline->extended_value] = zval_get_string_func(var);
20124 
20125 			if (UNEXPECTED(EG(exception))) {
20126 				for (i = 0; i <= opline->extended_value; i++) {
20127 					zend_string_release_ex(rope[i], 0);
20128 				}
20129 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20130 				HANDLE_EXCEPTION();
20131 			}
20132 		}
20133 	}
20134 	for (i = 0; i <= opline->extended_value; i++) {
20135 		len += ZSTR_LEN(rope[i]);
20136 	}
20137 	ret = EX_VAR(opline->result.var);
20138 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20139 	target = Z_STRVAL_P(ret);
20140 	for (i = 0; i <= opline->extended_value; i++) {
20141 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20142 		target += ZSTR_LEN(rope[i]);
20143 		zend_string_release_ex(rope[i], 0);
20144 	}
20145 	*target = '\0';
20146 
20147 	ZEND_VM_NEXT_OPCODE();
20148 }
20149 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20151 {
20152 	USE_OPLINE
20153 	zend_free_op free_op1;
20154 	zval *expr_ptr, new_expr;
20155 
20156 	SAVE_OPLINE();
20157 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20158 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20159 		expr_ptr = NULL;
20160 		if (Z_ISREF_P(expr_ptr)) {
20161 			Z_ADDREF_P(expr_ptr);
20162 		} else {
20163 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20164 		}
20165 
20166 	} else {
20167 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20168 		if (IS_TMP_VAR == IS_TMP_VAR) {
20169 			/* pass */
20170 		} else if (IS_TMP_VAR == IS_CONST) {
20171 			Z_TRY_ADDREF_P(expr_ptr);
20172 		} else if (IS_TMP_VAR == IS_CV) {
20173 			ZVAL_DEREF(expr_ptr);
20174 			Z_TRY_ADDREF_P(expr_ptr);
20175 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20176 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20177 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20178 
20179 				expr_ptr = Z_REFVAL_P(expr_ptr);
20180 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20181 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20182 					expr_ptr = &new_expr;
20183 					efree_size(ref, sizeof(zend_reference));
20184 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20185 					Z_ADDREF_P(expr_ptr);
20186 				}
20187 			}
20188 		}
20189 	}
20190 
20191 	if (IS_CV != IS_UNUSED) {
20192 
20193 		zval *offset = EX_VAR(opline->op2.var);
20194 		zend_string *str;
20195 		zend_ulong hval;
20196 
20197 add_again:
20198 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20199 			str = Z_STR_P(offset);
20200 			if (IS_CV != IS_CONST) {
20201 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20202 					goto num_index;
20203 				}
20204 			}
20205 str_index:
20206 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20207 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20208 			hval = Z_LVAL_P(offset);
20209 num_index:
20210 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20211 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20212 			offset = Z_REFVAL_P(offset);
20213 			goto add_again;
20214 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20215 			str = ZSTR_EMPTY_ALLOC();
20216 			goto str_index;
20217 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20218 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
20219 			goto num_index;
20220 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20221 			hval = 0;
20222 			goto num_index;
20223 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20224 			hval = 1;
20225 			goto num_index;
20226 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20227 			zend_use_resource_as_offset(offset);
20228 			hval = Z_RES_HANDLE_P(offset);
20229 			goto num_index;
20230 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20231 			ZVAL_UNDEFINED_OP2();
20232 			str = ZSTR_EMPTY_ALLOC();
20233 			goto str_index;
20234 		} else {
20235 			zend_illegal_offset();
20236 			zval_ptr_dtor_nogc(expr_ptr);
20237 		}
20238 
20239 	} else {
20240 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20241 			zend_cannot_add_element();
20242 			zval_ptr_dtor_nogc(expr_ptr);
20243 		}
20244 	}
20245 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20246 }
20247 
ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20248 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20249 {
20250 	zval *array;
20251 	uint32_t size;
20252 	USE_OPLINE
20253 
20254 	array = EX_VAR(opline->result.var);
20255 	if (IS_TMP_VAR != IS_UNUSED) {
20256 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20257 		ZVAL_ARR(array, zend_new_array(size));
20258 		/* Explicitly initialize array as not-packed if flag is set */
20259 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20260 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20261 		}
20262 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20263 	} else {
20264 		ZVAL_ARR(array, zend_new_array(0));
20265 		ZEND_VM_NEXT_OPCODE();
20266 	}
20267 }
20268 
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20270 {
20271 	USE_OPLINE
20272 
20273 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20274 
20275 	SAVE_OPLINE();
20276 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20277 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20278 	}
20279 
20280 	/* Destroy the previously yielded value */
20281 	zval_ptr_dtor(&generator->value);
20282 
20283 	/* Destroy the previously yielded key */
20284 	zval_ptr_dtor(&generator->key);
20285 
20286 	/* Set the new yielded value */
20287 	if (IS_TMP_VAR != IS_UNUSED) {
20288 		zend_free_op free_op1;
20289 
20290 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20291 			/* Constants and temporary variables aren't yieldable by reference,
20292 			 * but we still allow them with a notice. */
20293 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20294 				zval *value;
20295 
20296 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20297 
20298 				value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20299 				ZVAL_COPY_VALUE(&generator->value, value);
20300 				if (IS_TMP_VAR == IS_CONST) {
20301 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20302 						Z_ADDREF(generator->value);
20303 					}
20304 				}
20305 			} else {
20306 				zval *value_ptr = NULL;
20307 
20308 				/* If a function call result is yielded and the function did
20309 				 * not return by reference we throw a notice. */
20310 				do {
20311 					if (IS_TMP_VAR == IS_VAR) {
20312 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20313 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20314 						 && !Z_ISREF_P(value_ptr)) {
20315 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20316 							ZVAL_COPY(&generator->value, value_ptr);
20317 							break;
20318 						}
20319 					}
20320 					if (Z_ISREF_P(value_ptr)) {
20321 						Z_ADDREF_P(value_ptr);
20322 					} else {
20323 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20324 					}
20325 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20326 				} while (0);
20327 
20328 			}
20329 		} else {
20330 			zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20331 
20332 			/* Consts, temporary variables and references need copying */
20333 			if (IS_TMP_VAR == IS_CONST) {
20334 				ZVAL_COPY_VALUE(&generator->value, value);
20335 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20336 					Z_ADDREF(generator->value);
20337 				}
20338 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20339 				ZVAL_COPY_VALUE(&generator->value, value);
20340             } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20341 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20342 
20343 			} else {
20344 				ZVAL_COPY_VALUE(&generator->value, value);
20345 				if (IS_TMP_VAR == IS_CV) {
20346 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20347 				}
20348 			}
20349 		}
20350 	} else {
20351 		/* If no value was specified yield null */
20352 		ZVAL_NULL(&generator->value);
20353 	}
20354 
20355 	/* Set the new yielded key */
20356 	if (IS_CV != IS_UNUSED) {
20357 
20358 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
20359 
20360 		/* Consts, temporary variables and references need copying */
20361 		if (IS_CV == IS_CONST) {
20362 			ZVAL_COPY_VALUE(&generator->key, key);
20363 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
20364 				Z_ADDREF(generator->key);
20365 			}
20366 		} else if (IS_CV == IS_TMP_VAR) {
20367 			ZVAL_COPY_VALUE(&generator->key, key);
20368 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
20369 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
20370 
20371 		} else {
20372 			ZVAL_COPY_VALUE(&generator->key, key);
20373 			if (IS_CV == IS_CV) {
20374 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
20375 			}
20376 		}
20377 
20378 		if (Z_TYPE(generator->key) == IS_LONG
20379 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20380 		) {
20381 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20382 		}
20383 	} else {
20384 		/* If no key was specified we use auto-increment keys */
20385 		generator->largest_used_integer_key++;
20386 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20387 	}
20388 
20389 	if (RETURN_VALUE_USED(opline)) {
20390 		/* If the return value of yield is used set the send
20391 		 * target and initialize it to NULL */
20392 		generator->send_target = EX_VAR(opline->result.var);
20393 		ZVAL_NULL(generator->send_target);
20394 	} else {
20395 		generator->send_target = NULL;
20396 	}
20397 
20398 	/* We increment to the next op, so we are at the correct position when the
20399 	 * generator is resumed. */
20400 	ZEND_VM_INC_OPCODE();
20401 
20402 	/* The GOTO VM uses a local opline variable. We need to set the opline
20403 	 * variable in execute_data so we don't resume at an old position. */
20404 	SAVE_OPLINE();
20405 
20406 	ZEND_VM_RETURN();
20407 }
20408 
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20410 {
20411 	USE_OPLINE
20412 	zend_free_op free_op1;
20413 	zval *closure, *var;
20414 
20415 	closure = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20416 	if (opline->extended_value & ZEND_BIND_REF) {
20417 		/* By-ref binding */
20418 		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
20419 		if (Z_ISREF_P(var)) {
20420 			Z_ADDREF_P(var);
20421 		} else {
20422 			ZVAL_MAKE_REF_EX(var, 2);
20423 		}
20424 	} else {
20425 		var = EX_VAR(opline->op2.var);
20426 		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
20427 			SAVE_OPLINE();
20428 			var = ZVAL_UNDEFINED_OP2();
20429 			if (UNEXPECTED(EG(exception))) {
20430 				HANDLE_EXCEPTION();
20431 			}
20432 		}
20433 		ZVAL_DEREF(var);
20434 		Z_TRY_ADDREF_P(var);
20435 	}
20436 
20437 	zend_closure_bind_var_ex(closure,
20438 		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
20439 	ZEND_VM_NEXT_OPCODE();
20440 }
20441 
zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)20442 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
20443 {
20444 	USE_OPLINE
20445 	zend_free_op free_op1;
20446 	zval *var_ptr;
20447 
20448 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20449 
20450 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
20451 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20452 			ZVAL_NULL(EX_VAR(opline->result.var));
20453 		}
20454 		ZEND_VM_NEXT_OPCODE();
20455 	}
20456 
20457 	SAVE_OPLINE();
20458 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
20459 		ZVAL_NULL(var_ptr);
20460 		ZVAL_UNDEFINED_OP1();
20461 	}
20462 
20463 	do {
20464 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
20465 			zend_reference *ref = Z_REF_P(var_ptr);
20466 			var_ptr = Z_REFVAL_P(var_ptr);
20467 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
20468 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
20469 				break;
20470 			}
20471 		}
20472 		increment_function(var_ptr);
20473 	} while (0);
20474 
20475 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20476 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20477 	}
20478 
20479 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20480 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20481 }
20482 
ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20483 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20484 {
20485 	USE_OPLINE
20486 	zend_free_op free_op1;
20487 	zval *var_ptr;
20488 
20489 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20490 
20491 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20492 		fast_long_increment_function(var_ptr);
20493 		if (UNEXPECTED(0)) {
20494 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
20495 		}
20496 		ZEND_VM_NEXT_OPCODE();
20497 	}
20498 
20499 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20500 }
20501 
ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20502 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20503 {
20504 	USE_OPLINE
20505 	zend_free_op free_op1;
20506 	zval *var_ptr;
20507 
20508 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20509 
20510 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20511 		fast_long_increment_function(var_ptr);
20512 		if (UNEXPECTED(1)) {
20513 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
20514 		}
20515 		ZEND_VM_NEXT_OPCODE();
20516 	}
20517 
20518 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20519 }
20520 
zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)20521 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
20522 {
20523 	USE_OPLINE
20524 	zend_free_op free_op1;
20525 	zval *var_ptr;
20526 
20527 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20528 
20529 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
20530 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20531 			ZVAL_NULL(EX_VAR(opline->result.var));
20532 		}
20533 		ZEND_VM_NEXT_OPCODE();
20534 	}
20535 
20536 	SAVE_OPLINE();
20537 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
20538 		ZVAL_NULL(var_ptr);
20539 		ZVAL_UNDEFINED_OP1();
20540 	}
20541 
20542 	do {
20543 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
20544 			zend_reference *ref = Z_REF_P(var_ptr);
20545 			var_ptr = Z_REFVAL_P(var_ptr);
20546 
20547 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
20548 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
20549 				break;
20550 			}
20551 		}
20552 		decrement_function(var_ptr);
20553 	} while (0);
20554 
20555 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
20556 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20557 	}
20558 
20559 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20560 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20561 }
20562 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20563 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20564 {
20565 	USE_OPLINE
20566 	zend_free_op free_op1;
20567 	zval *var_ptr;
20568 
20569 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20570 
20571 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20572 		fast_long_decrement_function(var_ptr);
20573 		if (UNEXPECTED(0)) {
20574 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
20575 		}
20576 		ZEND_VM_NEXT_OPCODE();
20577 	}
20578 
20579 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20580 }
20581 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20582 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20583 {
20584 	USE_OPLINE
20585 	zend_free_op free_op1;
20586 	zval *var_ptr;
20587 
20588 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20589 
20590 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20591 		fast_long_decrement_function(var_ptr);
20592 		if (UNEXPECTED(1)) {
20593 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
20594 		}
20595 		ZEND_VM_NEXT_OPCODE();
20596 	}
20597 
20598 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20599 }
20600 
zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)20601 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
20602 {
20603 	USE_OPLINE
20604 	zend_free_op free_op1;
20605 	zval *var_ptr;
20606 
20607 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20608 
20609 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
20610 		ZVAL_NULL(EX_VAR(opline->result.var));
20611 		ZEND_VM_NEXT_OPCODE();
20612 	}
20613 
20614 	SAVE_OPLINE();
20615 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
20616 		ZVAL_NULL(var_ptr);
20617 		ZVAL_UNDEFINED_OP1();
20618 	}
20619 
20620 	do {
20621 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
20622 			zend_reference *ref = Z_REF_P(var_ptr);
20623 			var_ptr = Z_REFVAL_P(var_ptr);
20624 
20625 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
20626 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
20627 				break;
20628 			}
20629 		}
20630 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20631 
20632 		increment_function(var_ptr);
20633 	} while (0);
20634 
20635 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20636 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20637 }
20638 
ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20639 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20640 {
20641 	USE_OPLINE
20642 	zend_free_op free_op1;
20643 	zval *var_ptr;
20644 
20645 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20646 
20647 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20648 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
20649 		fast_long_increment_function(var_ptr);
20650 		ZEND_VM_NEXT_OPCODE();
20651 	}
20652 
20653 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20654 }
20655 
zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)20656 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
20657 {
20658 	USE_OPLINE
20659 	zend_free_op free_op1;
20660 	zval *var_ptr;
20661 
20662 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20663 
20664 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
20665 		ZVAL_NULL(EX_VAR(opline->result.var));
20666 		ZEND_VM_NEXT_OPCODE();
20667 	}
20668 
20669 	SAVE_OPLINE();
20670 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
20671 		ZVAL_NULL(var_ptr);
20672 		ZVAL_UNDEFINED_OP1();
20673 	}
20674 
20675 	do {
20676 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
20677 			zend_reference *ref = Z_REF_P(var_ptr);
20678 			var_ptr = Z_REFVAL_P(var_ptr);
20679 
20680 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
20681 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
20682 				break;
20683 			}
20684 		}
20685 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
20686 
20687 		decrement_function(var_ptr);
20688 	} while (0);
20689 
20690 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20691 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20692 }
20693 
ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20694 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20695 {
20696 	USE_OPLINE
20697 	zend_free_op free_op1;
20698 	zval *var_ptr;
20699 
20700 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20701 
20702 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
20703 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
20704 		fast_long_decrement_function(var_ptr);
20705 		ZEND_VM_NEXT_OPCODE();
20706 	}
20707 
20708 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20709 }
20710 
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20711 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20712 {
20713 	USE_OPLINE
20714 	zval *retval_ptr;
20715 	zval *return_value;
20716 	zend_free_op free_op1;
20717 
20718 	retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20719 	return_value = EX(return_value);
20720 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
20721 		SAVE_OPLINE();
20722 		retval_ptr = ZVAL_UNDEFINED_OP1();
20723 		if (return_value) {
20724 			ZVAL_NULL(return_value);
20725 		}
20726 	} else if (!return_value) {
20727 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
20728 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
20729 				SAVE_OPLINE();
20730 				rc_dtor_func(Z_COUNTED_P(free_op1));
20731 			}
20732 		}
20733 	} else {
20734 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
20735 			ZVAL_COPY_VALUE(return_value, retval_ptr);
20736 			if (IS_VAR == IS_CONST) {
20737 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
20738 					Z_ADDREF_P(return_value);
20739 				}
20740 			}
20741 		} else if (IS_VAR == IS_CV) {
20742 			do {
20743 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
20744 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
20745 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
20746 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
20747 							ZVAL_COPY_VALUE(return_value, retval_ptr);
20748 							if (GC_MAY_LEAK(ref)) {
20749 								gc_possible_root(ref);
20750 							}
20751 							ZVAL_NULL(retval_ptr);
20752 							break;
20753 						} else {
20754 							Z_ADDREF_P(retval_ptr);
20755 						}
20756 					} else {
20757 						retval_ptr = Z_REFVAL_P(retval_ptr);
20758 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
20759 							Z_ADDREF_P(retval_ptr);
20760 						}
20761 					}
20762 				}
20763 				ZVAL_COPY_VALUE(return_value, retval_ptr);
20764 			} while (0);
20765 		} else /* if (IS_VAR == IS_VAR) */ {
20766 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
20767 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
20768 
20769 				retval_ptr = Z_REFVAL_P(retval_ptr);
20770 				ZVAL_COPY_VALUE(return_value, retval_ptr);
20771 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20772 					efree_size(ref, sizeof(zend_reference));
20773 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
20774 					Z_ADDREF_P(retval_ptr);
20775 				}
20776 			} else {
20777 				ZVAL_COPY_VALUE(return_value, retval_ptr);
20778 			}
20779 		}
20780 	}
20781 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20782 }
20783 
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20785 {
20786 	USE_OPLINE
20787 	zval *retval_ptr;
20788 	zend_free_op free_op1;
20789 
20790 	SAVE_OPLINE();
20791 
20792 	do {
20793 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
20794 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
20795 			/* Not supposed to happen, but we'll allow it */
20796 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
20797 
20798 			retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20799 			if (!EX(return_value)) {
20800 				zval_ptr_dtor_nogc(free_op1);
20801 			} else {
20802 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
20803 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
20804 					break;
20805 				}
20806 
20807 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
20808 				if (IS_VAR == IS_CONST) {
20809 					Z_TRY_ADDREF_P(retval_ptr);
20810 				}
20811 			}
20812 			break;
20813 		}
20814 
20815 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20816 
20817 		if (IS_VAR == IS_VAR) {
20818 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
20819 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
20820 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
20821 				if (EX(return_value)) {
20822 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
20823 				} else {
20824 					if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20825 				}
20826 				break;
20827 			}
20828 		}
20829 
20830 		if (EX(return_value)) {
20831 			if (Z_ISREF_P(retval_ptr)) {
20832 				Z_ADDREF_P(retval_ptr);
20833 			} else {
20834 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
20835 			}
20836 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
20837 		}
20838 
20839 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
20840 	} while (0);
20841 
20842 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20843 }
20844 
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20846 {
20847 	USE_OPLINE
20848 	zval *retval;
20849 	zend_free_op free_op1;
20850 
20851 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20852 
20853 	SAVE_OPLINE();
20854 	retval = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20855 
20856 	/* Copy return value into generator->retval */
20857 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
20858 		ZVAL_COPY_VALUE(&generator->retval, retval);
20859 		if (IS_VAR == IS_CONST) {
20860 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
20861 				Z_ADDREF(generator->retval);
20862 			}
20863 		}
20864 	} else if (IS_VAR == IS_CV) {
20865 		ZVAL_COPY_DEREF(&generator->retval, retval);
20866 	} else /* if (IS_VAR == IS_VAR) */ {
20867 		if (UNEXPECTED(Z_ISREF_P(retval))) {
20868 			zend_refcounted *ref = Z_COUNTED_P(retval);
20869 
20870 			retval = Z_REFVAL_P(retval);
20871 			ZVAL_COPY_VALUE(&generator->retval, retval);
20872 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20873 				efree_size(ref, sizeof(zend_reference));
20874 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
20875 				Z_ADDREF_P(retval);
20876 			}
20877 		} else {
20878 			ZVAL_COPY_VALUE(&generator->retval, retval);
20879 		}
20880 	}
20881 
20882 	/* Close the generator to free up resources */
20883 	zend_generator_close(generator, 1);
20884 
20885 	/* Pass execution back to handling code */
20886 	ZEND_VM_RETURN();
20887 }
20888 
ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20889 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20890 {
20891 	USE_OPLINE
20892 	zval *value;
20893 	zend_free_op free_op1;
20894 
20895 	SAVE_OPLINE();
20896 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20897 
20898 	do {
20899 		if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
20900 			if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20901 				value = Z_REFVAL_P(value);
20902 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
20903 					break;
20904 				}
20905 			}
20906 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
20907 				ZVAL_UNDEFINED_OP1();
20908 				if (UNEXPECTED(EG(exception) != NULL)) {
20909 					HANDLE_EXCEPTION();
20910 				}
20911 			}
20912 			zend_throw_error(NULL, "Can only throw objects");
20913 			zval_ptr_dtor_nogc(free_op1);
20914 			HANDLE_EXCEPTION();
20915 		}
20916 	} while (0);
20917 
20918 	zend_exception_save();
20919 	if (IS_VAR != IS_TMP_VAR) {
20920 		Z_TRY_ADDREF_P(value);
20921 	}
20922 
20923 	zend_throw_exception_object(value);
20924 	zend_exception_restore();
20925 	zval_ptr_dtor_nogc(free_op1);
20926 	HANDLE_EXCEPTION();
20927 }
20928 
ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20929 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20930 {
20931 	USE_OPLINE
20932 	zval *varptr, *arg;
20933 	zend_free_op free_op1;
20934 
20935 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20936 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
20937 		SAVE_OPLINE();
20938 		ZVAL_UNDEFINED_OP1();
20939 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20940 		ZVAL_NULL(arg);
20941 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20942 	}
20943 
20944 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20945 
20946 	if (IS_VAR == IS_CV) {
20947 		ZVAL_COPY_DEREF(arg, varptr);
20948 	} else /* if (IS_VAR == IS_VAR) */ {
20949 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
20950 			zend_refcounted *ref = Z_COUNTED_P(varptr);
20951 
20952 			varptr = Z_REFVAL_P(varptr);
20953 			ZVAL_COPY_VALUE(arg, varptr);
20954 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20955 				efree_size(ref, sizeof(zend_reference));
20956 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
20957 				Z_ADDREF_P(arg);
20958 			}
20959 		} else {
20960 			ZVAL_COPY_VALUE(arg, varptr);
20961 		}
20962 	}
20963 
20964 	ZEND_VM_NEXT_OPCODE();
20965 }
20966 
ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20967 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20968 {
20969 	ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20970 }
20971 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20972 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20973 {
20974 	USE_OPLINE
20975 	zend_free_op free_op1;
20976 	zval *varptr, *arg;
20977 
20978 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
20979 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20980 	ZVAL_COPY_VALUE(arg, varptr);
20981 
20982 	if (EXPECTED(Z_ISREF_P(varptr))) {
20983 		ZEND_VM_NEXT_OPCODE();
20984 	}
20985 
20986 	SAVE_OPLINE();
20987 	ZVAL_NEW_REF(arg, arg);
20988 	zend_error(E_NOTICE, "Only variables should be passed by reference");
20989 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20990 }
20991 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20992 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20993 {
20994 	USE_OPLINE
20995 	zend_free_op free_op1;
20996 	zval *varptr, *arg;
20997 	uint32_t arg_num = opline->op2.num;
20998 
20999 	if (EXPECTED(0)) {
21000 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21001 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21002 		}
21003 
21004 		varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21005 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21006 		ZVAL_COPY_VALUE(arg, varptr);
21007 
21008 		if (EXPECTED(Z_ISREF_P(varptr) ||
21009 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
21010 			ZEND_VM_NEXT_OPCODE();
21011 		}
21012 	} else {
21013 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21014 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21015 		}
21016 
21017 		varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21018 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21019 		ZVAL_COPY_VALUE(arg, varptr);
21020 
21021 		if (EXPECTED(Z_ISREF_P(varptr) ||
21022 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
21023 			ZEND_VM_NEXT_OPCODE();
21024 		}
21025 	}
21026 
21027 	SAVE_OPLINE();
21028 	ZVAL_NEW_REF(arg, arg);
21029 	zend_error(E_NOTICE, "Only variables should be passed by reference");
21030 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21031 }
21032 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21033 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21034 {
21035 	USE_OPLINE
21036 	zend_free_op free_op1;
21037 	zval *varptr, *arg;
21038 	uint32_t arg_num = opline->op2.num;
21039 
21040 	if (EXPECTED(1)) {
21041 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21042 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21043 		}
21044 
21045 		varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21046 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21047 		ZVAL_COPY_VALUE(arg, varptr);
21048 
21049 		if (EXPECTED(Z_ISREF_P(varptr) ||
21050 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
21051 			ZEND_VM_NEXT_OPCODE();
21052 		}
21053 	} else {
21054 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21055 			ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21056 		}
21057 
21058 		varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21059 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21060 		ZVAL_COPY_VALUE(arg, varptr);
21061 
21062 		if (EXPECTED(Z_ISREF_P(varptr) ||
21063 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
21064 			ZEND_VM_NEXT_OPCODE();
21065 		}
21066 	}
21067 
21068 	SAVE_OPLINE();
21069 	ZVAL_NEW_REF(arg, arg);
21070 	zend_error(E_NOTICE, "Only variables should be passed by reference");
21071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21072 }
21073 
ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21075 {
21076 	USE_OPLINE
21077 	zend_free_op free_op1;
21078 	zval *varptr, *arg;
21079 
21080 	SAVE_OPLINE();
21081 	varptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21082 
21083 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21084 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
21085 		ZVAL_NEW_EMPTY_REF(arg);
21086 		ZVAL_NULL(Z_REFVAL_P(arg));
21087 		ZEND_VM_NEXT_OPCODE();
21088 	}
21089 
21090 	if (Z_ISREF_P(varptr)) {
21091 		Z_ADDREF_P(varptr);
21092 	} else {
21093 		ZVAL_MAKE_REF_EX(varptr, 2);
21094 	}
21095 	ZVAL_REF(arg, Z_REF_P(varptr));
21096 
21097 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21098 	ZEND_VM_NEXT_OPCODE();
21099 }
21100 
ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21102 {
21103 	USE_OPLINE
21104 	zval *varptr, *arg;
21105 	zend_free_op free_op1;
21106 	uint32_t arg_num = opline->op2.num;
21107 
21108 	if (EXPECTED(0)) {
21109 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21110 			goto send_var_by_ref;
21111 		}
21112 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21113 send_var_by_ref:
21114 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21115 	}
21116 
21117 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21118 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
21119 		SAVE_OPLINE();
21120 		ZVAL_UNDEFINED_OP1();
21121 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21122 		ZVAL_NULL(arg);
21123 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21124 	}
21125 
21126 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21127 
21128 	if (IS_VAR == IS_CV) {
21129 		ZVAL_COPY_DEREF(arg, varptr);
21130 	} else /* if (IS_VAR == IS_VAR) */ {
21131 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
21132 			zend_refcounted *ref = Z_COUNTED_P(varptr);
21133 
21134 			varptr = Z_REFVAL_P(varptr);
21135 			ZVAL_COPY_VALUE(arg, varptr);
21136 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21137 				efree_size(ref, sizeof(zend_reference));
21138 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
21139 				Z_ADDREF_P(arg);
21140 			}
21141 		} else {
21142 			ZVAL_COPY_VALUE(arg, varptr);
21143 		}
21144 	}
21145 
21146 	ZEND_VM_NEXT_OPCODE();
21147 }
21148 
ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21149 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21150 {
21151 	USE_OPLINE
21152 	zval *varptr, *arg;
21153 	zend_free_op free_op1;
21154 	uint32_t arg_num = opline->op2.num;
21155 
21156 	if (EXPECTED(1)) {
21157 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21158 			goto send_var_by_ref;
21159 		}
21160 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
21161 send_var_by_ref:
21162 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21163 	}
21164 
21165 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21166 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
21167 		SAVE_OPLINE();
21168 		ZVAL_UNDEFINED_OP1();
21169 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21170 		ZVAL_NULL(arg);
21171 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21172 	}
21173 
21174 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21175 
21176 	if (IS_VAR == IS_CV) {
21177 		ZVAL_COPY_DEREF(arg, varptr);
21178 	} else /* if (IS_VAR == IS_VAR) */ {
21179 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
21180 			zend_refcounted *ref = Z_COUNTED_P(varptr);
21181 
21182 			varptr = Z_REFVAL_P(varptr);
21183 			ZVAL_COPY_VALUE(arg, varptr);
21184 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21185 				efree_size(ref, sizeof(zend_reference));
21186 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
21187 				Z_ADDREF_P(arg);
21188 			}
21189 		} else {
21190 			ZVAL_COPY_VALUE(arg, varptr);
21191 		}
21192 	}
21193 
21194 	ZEND_VM_NEXT_OPCODE();
21195 }
21196 
ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21197 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21198 {
21199 	USE_OPLINE
21200 	zval *varptr, *arg;
21201 	zend_free_op free_op1;
21202 
21203 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21204 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21205 	}
21206 
21207 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21208 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
21209 
21210 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
21211 		zend_refcounted *ref = Z_COUNTED_P(varptr);
21212 
21213 		varptr = Z_REFVAL_P(varptr);
21214 		ZVAL_COPY_VALUE(arg, varptr);
21215 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21216 			efree_size(ref, sizeof(zend_reference));
21217 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
21218 			Z_ADDREF_P(arg);
21219 		}
21220 	} else {
21221 		ZVAL_COPY_VALUE(arg, varptr);
21222 	}
21223 
21224 	ZEND_VM_NEXT_OPCODE();
21225 }
21226 
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21228 {
21229 	USE_OPLINE
21230 	zval *arg, *param;
21231 	zend_free_op free_op1;
21232 
21233 	SAVE_OPLINE();
21234 
21235 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
21236 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
21237 	}
21238 
21239 	arg = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21240 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
21241 	ZVAL_COPY(param, arg);
21242 	zval_ptr_dtor_nogc(free_op1);
21243 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21244 }
21245 
ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21247 {
21248 	USE_OPLINE
21249 	zend_free_op free_op1;
21250 	zval *expr;
21251 	zval *result = EX_VAR(opline->result.var);
21252 	HashTable *ht;
21253 
21254 	SAVE_OPLINE();
21255 	expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21256 
21257 	switch (opline->extended_value) {
21258 		case IS_NULL:
21259 			ZVAL_NULL(result);
21260 			break;
21261 		case _IS_BOOL:
21262 			ZVAL_BOOL(result, zend_is_true(expr));
21263 			break;
21264 		case IS_LONG:
21265 			ZVAL_LONG(result, zval_get_long(expr));
21266 			break;
21267 		case IS_DOUBLE:
21268 			ZVAL_DOUBLE(result, zval_get_double(expr));
21269 			break;
21270 		case IS_STRING:
21271 			ZVAL_STR(result, zval_get_string(expr));
21272 			break;
21273 		default:
21274 			if (IS_VAR & (IS_VAR|IS_CV)) {
21275 				ZVAL_DEREF(expr);
21276 			}
21277 			/* If value is already of correct type, return it directly */
21278 			if (Z_TYPE_P(expr) == opline->extended_value) {
21279 				ZVAL_COPY_VALUE(result, expr);
21280 				if (IS_VAR == IS_CONST) {
21281 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21282 				} else if (IS_VAR != IS_TMP_VAR) {
21283 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21284 				}
21285 
21286 				zval_ptr_dtor_nogc(free_op1);
21287 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21288 			}
21289 
21290 			if (opline->extended_value == IS_ARRAY) {
21291 				if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
21292 					if (Z_TYPE_P(expr) != IS_NULL) {
21293 						ZVAL_ARR(result, zend_new_array(1));
21294 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
21295 						if (IS_VAR == IS_CONST) {
21296 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21297 						} else {
21298 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21299 						}
21300 					} else {
21301 						ZVAL_EMPTY_ARRAY(result);
21302 					}
21303 				} else {
21304 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
21305 					if (obj_ht) {
21306 						/* fast copy */
21307 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
21308 							(Z_OBJCE_P(expr)->default_properties_count ||
21309 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
21310 							 GC_IS_RECURSIVE(obj_ht))));
21311 						zend_release_properties(obj_ht);
21312 					} else {
21313 						ZVAL_EMPTY_ARRAY(result);
21314 					}
21315 				}
21316 			} else {
21317 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
21318 				if (Z_TYPE_P(expr) == IS_ARRAY) {
21319 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
21320 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
21321 						/* TODO: try not to duplicate immutable arrays as well ??? */
21322 						ht = zend_array_dup(ht);
21323 					}
21324 					Z_OBJ_P(result)->properties = ht;
21325 				} else if (Z_TYPE_P(expr) != IS_NULL) {
21326 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
21327 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
21328 					if (IS_VAR == IS_CONST) {
21329 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
21330 					} else {
21331 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
21332 					}
21333 				}
21334 			}
21335 	}
21336 
21337 	zval_ptr_dtor_nogc(free_op1);
21338 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21339 }
21340 
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21342 {
21343 	USE_OPLINE
21344 	zend_free_op free_op1;
21345 	zval *array_ptr, *result;
21346 
21347 	SAVE_OPLINE();
21348 
21349 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21350 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21351 		result = EX_VAR(opline->result.var);
21352 		ZVAL_COPY_VALUE(result, array_ptr);
21353 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
21354 			Z_ADDREF_P(array_ptr);
21355 		}
21356 		Z_FE_POS_P(result) = 0;
21357 
21358 		zval_ptr_dtor_nogc(free_op1);
21359 		ZEND_VM_NEXT_OPCODE();
21360 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21361 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
21362 			HashTable *properties;
21363 			if (Z_OBJ_P(array_ptr)->properties
21364 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
21365 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
21366 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
21367 				}
21368 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
21369 			}
21370 
21371 			properties = Z_OBJPROP_P(array_ptr);
21372 			result = EX_VAR(opline->result.var);
21373 			ZVAL_COPY_VALUE(result, array_ptr);
21374 			if (IS_VAR != IS_TMP_VAR) {
21375 				Z_ADDREF_P(array_ptr);
21376 			}
21377 
21378 			if (zend_hash_num_elements(properties) == 0) {
21379 				Z_FE_ITER_P(result) = (uint32_t) -1;
21380 				zval_ptr_dtor_nogc(free_op1);
21381 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21382 			}
21383 
21384 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
21385 			zval_ptr_dtor_nogc(free_op1);
21386 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21387 		} else {
21388 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
21389 
21390 			zval_ptr_dtor_nogc(free_op1);
21391 			if (UNEXPECTED(EG(exception))) {
21392 				HANDLE_EXCEPTION();
21393 			} else if (is_empty) {
21394 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21395 			} else {
21396 				ZEND_VM_NEXT_OPCODE();
21397 			}
21398 		}
21399 	} else {
21400 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
21401 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21402 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21403 		zval_ptr_dtor_nogc(free_op1);
21404 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21405 	}
21406 }
21407 
ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21409 {
21410 	USE_OPLINE
21411 	zend_free_op free_op1;
21412 	zval *array_ptr, *array_ref;
21413 
21414 	SAVE_OPLINE();
21415 
21416 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21417 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21418 		if (Z_ISREF_P(array_ref)) {
21419 			array_ptr = Z_REFVAL_P(array_ref);
21420 		}
21421 	} else {
21422 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21423 	}
21424 
21425 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
21426 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21427 			if (array_ptr == array_ref) {
21428 				ZVAL_NEW_REF(array_ref, array_ref);
21429 				array_ptr = Z_REFVAL_P(array_ref);
21430 			}
21431 			Z_ADDREF_P(array_ref);
21432 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21433 		} else {
21434 			array_ref = EX_VAR(opline->result.var);
21435 			ZVAL_NEW_REF(array_ref, array_ptr);
21436 			array_ptr = Z_REFVAL_P(array_ref);
21437 		}
21438 		if (IS_VAR == IS_CONST) {
21439 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
21440 		} else {
21441 			SEPARATE_ARRAY(array_ptr);
21442 		}
21443 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
21444 
21445 		if (IS_VAR == IS_VAR) {
21446 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21447 		}
21448 		ZEND_VM_NEXT_OPCODE();
21449 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
21450 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
21451 			HashTable *properties;
21452 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
21453 				if (array_ptr == array_ref) {
21454 					ZVAL_NEW_REF(array_ref, array_ref);
21455 					array_ptr = Z_REFVAL_P(array_ref);
21456 				}
21457 				Z_ADDREF_P(array_ref);
21458 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
21459 			} else {
21460 				array_ptr = EX_VAR(opline->result.var);
21461 				ZVAL_COPY_VALUE(array_ptr, array_ref);
21462 			}
21463 			if (Z_OBJ_P(array_ptr)->properties
21464 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
21465 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
21466 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
21467 				}
21468 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
21469 			}
21470 
21471 			properties = Z_OBJPROP_P(array_ptr);
21472 			if (zend_hash_num_elements(properties) == 0) {
21473 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
21474 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21475 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21476 			}
21477 
21478 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
21479 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21480 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21481 		} else {
21482 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
21483 
21484 			if (IS_VAR == IS_VAR) {
21485 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21486 			} else {
21487 				zval_ptr_dtor_nogc(free_op1);
21488 			}
21489 			if (UNEXPECTED(EG(exception))) {
21490 				HANDLE_EXCEPTION();
21491 			} else if (is_empty) {
21492 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21493 			} else {
21494 				ZEND_VM_NEXT_OPCODE();
21495 			}
21496 		}
21497 	} else {
21498 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
21499 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21500 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
21501 		if (IS_VAR == IS_VAR) {
21502 			if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
21503 		} else {
21504 			zval_ptr_dtor_nogc(free_op1);
21505 		}
21506 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
21507 	}
21508 }
21509 
ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21511 {
21512 	USE_OPLINE
21513 	zval *array;
21514 	zval *value;
21515 	uint32_t value_type;
21516 	HashTable *fe_ht;
21517 	HashPosition pos;
21518 	Bucket *p;
21519 
21520 	array = EX_VAR(opline->op1.var);
21521 	SAVE_OPLINE();
21522 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
21523 		fe_ht = Z_ARRVAL_P(array);
21524 		pos = Z_FE_POS_P(array);
21525 		p = fe_ht->arData + pos;
21526 		while (1) {
21527 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21528 				/* reached end of iteration */
21529 fe_fetch_r_exit:
21530 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
21531 				ZEND_VM_CONTINUE();
21532 			}
21533 			value = &p->val;
21534 			value_type = Z_TYPE_INFO_P(value);
21535 			if (EXPECTED(value_type != IS_UNDEF)) {
21536 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
21537 					value = Z_INDIRECT_P(value);
21538 					value_type = Z_TYPE_INFO_P(value);
21539 					if (EXPECTED(value_type != IS_UNDEF)) {
21540 						break;
21541 					}
21542 				} else {
21543 					break;
21544 				}
21545 			}
21546 			pos++;
21547 			p++;
21548 		}
21549 		Z_FE_POS_P(array) = pos + 1;
21550 		if (RETURN_VALUE_USED(opline)) {
21551 			if (!p->key) {
21552 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21553 			} else {
21554 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21555 			}
21556 		}
21557 	} else {
21558 		zend_object_iterator *iter;
21559 
21560 		ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
21561 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
21562 			/* plain object */
21563 
21564 			fe_ht = Z_OBJPROP_P(array);
21565 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
21566 			p = fe_ht->arData + pos;
21567 			while (1) {
21568 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21569 					/* reached end of iteration */
21570 					goto fe_fetch_r_exit;
21571 				}
21572 
21573 				value = &p->val;
21574 				value_type = Z_TYPE_INFO_P(value);
21575 				if (EXPECTED(value_type != IS_UNDEF)) {
21576 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
21577 						value = Z_INDIRECT_P(value);
21578 						value_type = Z_TYPE_INFO_P(value);
21579 						if (EXPECTED(value_type != IS_UNDEF)
21580 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
21581 							break;
21582 						}
21583 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
21584 							|| !p->key
21585 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
21586 						break;
21587 					}
21588 				}
21589 				pos++;
21590 				p++;
21591 			}
21592 			if (RETURN_VALUE_USED(opline)) {
21593 				if (UNEXPECTED(!p->key)) {
21594 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21595 				} else if (ZSTR_VAL(p->key)[0]) {
21596 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21597 				} else {
21598 					const char *class_name, *prop_name;
21599 					size_t prop_name_len;
21600 					zend_unmangle_property_name_ex(
21601 						p->key, &class_name, &prop_name, &prop_name_len);
21602 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
21603 				}
21604 			}
21605 			EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1;
21606 		} else {
21607 			if (EXPECTED(++iter->index > 0)) {
21608 				/* This could cause an endless loop if index becomes zero again.
21609 				 * In case that ever happens we need an additional flag. */
21610 				iter->funcs->move_forward(iter);
21611 				if (UNEXPECTED(EG(exception) != NULL)) {
21612 					UNDEF_RESULT();
21613 					HANDLE_EXCEPTION();
21614 				}
21615 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
21616 					/* reached end of iteration */
21617 					if (UNEXPECTED(EG(exception) != NULL)) {
21618 						UNDEF_RESULT();
21619 						HANDLE_EXCEPTION();
21620 					}
21621 					goto fe_fetch_r_exit;
21622 				}
21623 			}
21624 			value = iter->funcs->get_current_data(iter);
21625 			if (UNEXPECTED(EG(exception) != NULL)) {
21626 				UNDEF_RESULT();
21627 				HANDLE_EXCEPTION();
21628 			}
21629 			if (!value) {
21630 				/* failure in get_current_data */
21631 				goto fe_fetch_r_exit;
21632 			}
21633 			if (RETURN_VALUE_USED(opline)) {
21634 				if (iter->funcs->get_current_key) {
21635 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
21636 					if (UNEXPECTED(EG(exception) != NULL)) {
21637 						UNDEF_RESULT();
21638 						HANDLE_EXCEPTION();
21639 					}
21640 				} else {
21641 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
21642 				}
21643 			}
21644 			value_type = Z_TYPE_INFO_P(value);
21645 		}
21646 	}
21647 
21648 	if (EXPECTED(opline->op2_type == IS_CV)) {
21649 		zval *variable_ptr = EX_VAR(opline->op2.var);
21650 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
21651 	} else {
21652 		zval *res = EX_VAR(opline->op2.var);
21653 		zend_refcounted *gc = Z_COUNTED_P(value);
21654 
21655 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
21656 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
21657 			GC_ADDREF(gc);
21658 		}
21659 	}
21660 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21661 }
21662 
ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21664 {
21665 	USE_OPLINE
21666 	zval *array;
21667 	zval *value;
21668 	uint32_t value_type;
21669 	HashTable *fe_ht;
21670 	HashPosition pos;
21671 	Bucket *p;
21672 
21673 	array = EX_VAR(opline->op1.var);
21674 	SAVE_OPLINE();
21675 
21676 	ZVAL_DEREF(array);
21677 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
21678 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
21679 		fe_ht = Z_ARRVAL_P(array);
21680 		p = fe_ht->arData + pos;
21681 		while (1) {
21682 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21683 				/* reached end of iteration */
21684 				goto fe_fetch_w_exit;
21685 			}
21686 			value = &p->val;
21687 			value_type = Z_TYPE_INFO_P(value);
21688 			if (EXPECTED(value_type != IS_UNDEF)) {
21689 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
21690 					value = Z_INDIRECT_P(value);
21691 					value_type = Z_TYPE_INFO_P(value);
21692 					if (EXPECTED(value_type != IS_UNDEF)) {
21693 						break;
21694 					}
21695 				} else {
21696 					break;
21697 				}
21698 			}
21699 			pos++;
21700 			p++;
21701 		}
21702 		if (RETURN_VALUE_USED(opline)) {
21703 			if (!p->key) {
21704 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21705 			} else {
21706 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21707 			}
21708 		}
21709 		EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
21710 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
21711 		zend_object_iterator *iter;
21712 
21713 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
21714 			/* plain object */
21715 
21716 			fe_ht = Z_OBJPROP_P(array);
21717 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
21718 			p = fe_ht->arData + pos;
21719 			while (1) {
21720 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
21721 					/* reached end of iteration */
21722 					goto fe_fetch_w_exit;
21723 				}
21724 
21725 				value = &p->val;
21726 				value_type = Z_TYPE_INFO_P(value);
21727 				if (EXPECTED(value_type != IS_UNDEF)) {
21728 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
21729 						value = Z_INDIRECT_P(value);
21730 						value_type = Z_TYPE_INFO_P(value);
21731 						if (EXPECTED(value_type != IS_UNDEF)
21732 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
21733 							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
21734 								zend_property_info *prop_info =
21735 									zend_get_typed_property_info_for_slot(Z_OBJ_P(array), value);
21736 								if (UNEXPECTED(prop_info)) {
21737 									ZVAL_NEW_REF(value, value);
21738 									ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
21739 									value_type = IS_REFERENCE_EX;
21740 								}
21741 							}
21742 							break;
21743 						}
21744 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
21745 							|| !p->key
21746 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
21747 						break;
21748 					}
21749 				}
21750 				pos++;
21751 				p++;
21752 			}
21753 			if (RETURN_VALUE_USED(opline)) {
21754 				if (UNEXPECTED(!p->key)) {
21755 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
21756 				} else if (ZSTR_VAL(p->key)[0]) {
21757 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
21758 				} else {
21759 					const char *class_name, *prop_name;
21760 					size_t prop_name_len;
21761 					zend_unmangle_property_name_ex(
21762 						p->key, &class_name, &prop_name, &prop_name_len);
21763 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
21764 				}
21765 			}
21766 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
21767 		} else {
21768 			if (++iter->index > 0) {
21769 				/* This could cause an endless loop if index becomes zero again.
21770 				 * In case that ever happens we need an additional flag. */
21771 				iter->funcs->move_forward(iter);
21772 				if (UNEXPECTED(EG(exception) != NULL)) {
21773 					UNDEF_RESULT();
21774 					HANDLE_EXCEPTION();
21775 				}
21776 				if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
21777 					/* reached end of iteration */
21778 					if (UNEXPECTED(EG(exception) != NULL)) {
21779 						UNDEF_RESULT();
21780 						HANDLE_EXCEPTION();
21781 					}
21782 					goto fe_fetch_w_exit;
21783 				}
21784 			}
21785 			value = iter->funcs->get_current_data(iter);
21786 			if (UNEXPECTED(EG(exception) != NULL)) {
21787 				UNDEF_RESULT();
21788 				HANDLE_EXCEPTION();
21789 			}
21790 			if (!value) {
21791 				/* failure in get_current_data */
21792 				goto fe_fetch_w_exit;
21793 			}
21794 			if (RETURN_VALUE_USED(opline)) {
21795 				if (iter->funcs->get_current_key) {
21796 					iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
21797 					if (UNEXPECTED(EG(exception) != NULL)) {
21798 						UNDEF_RESULT();
21799 						HANDLE_EXCEPTION();
21800 					}
21801 				} else {
21802 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
21803 				}
21804 			}
21805 			value_type = Z_TYPE_INFO_P(value);
21806 		}
21807 	} else {
21808 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
21809 		if (UNEXPECTED(EG(exception))) {
21810 			UNDEF_RESULT();
21811 			HANDLE_EXCEPTION();
21812 		}
21813 fe_fetch_w_exit:
21814 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
21815 		ZEND_VM_CONTINUE();
21816 	}
21817 
21818 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
21819 		zend_refcounted *gc = Z_COUNTED_P(value);
21820 		zval *ref;
21821 		ZVAL_NEW_EMPTY_REF(value);
21822 		ref = Z_REFVAL_P(value);
21823 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
21824 	}
21825 	if (EXPECTED(opline->op2_type == IS_CV)) {
21826 		zval *variable_ptr = EX_VAR(opline->op2.var);
21827 		if (EXPECTED(variable_ptr != value)) {
21828 			zend_reference *ref;
21829 
21830 			ref = Z_REF_P(value);
21831 			GC_ADDREF(ref);
21832 			i_zval_ptr_dtor(variable_ptr);
21833 			ZVAL_REF(variable_ptr, ref);
21834 		}
21835 	} else {
21836 		Z_ADDREF_P(value);
21837 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
21838 	}
21839 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21840 }
21841 
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21842 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21843 {
21844 	USE_OPLINE
21845 	zend_free_op free_op1;
21846 	zval *value;
21847 	zval *ref = NULL;
21848 	int ret;
21849 
21850 	SAVE_OPLINE();
21851 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21852 
21853 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
21854 		if (IS_VAR == IS_VAR) {
21855 			ref = value;
21856 		}
21857 		value = Z_REFVAL_P(value);
21858 	}
21859 
21860 	ret = i_zend_is_true(value);
21861 
21862 	if (UNEXPECTED(EG(exception))) {
21863 		zval_ptr_dtor_nogc(free_op1);
21864 		ZVAL_UNDEF(EX_VAR(opline->result.var));
21865 		HANDLE_EXCEPTION();
21866 	}
21867 
21868 	if (ret) {
21869 		zval *result = EX_VAR(opline->result.var);
21870 
21871 		ZVAL_COPY_VALUE(result, value);
21872 		if (IS_VAR == IS_CONST) {
21873 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21874 		} else if (IS_VAR == IS_CV) {
21875 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21876 		} else if (IS_VAR == IS_VAR && ref) {
21877 			zend_reference *r = Z_REF_P(ref);
21878 
21879 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
21880 				efree_size(r, sizeof(zend_reference));
21881 			} else if (Z_OPT_REFCOUNTED_P(result)) {
21882 				Z_ADDREF_P(result);
21883 			}
21884 		}
21885 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21886 	}
21887 
21888 	zval_ptr_dtor_nogc(free_op1);
21889 	ZEND_VM_NEXT_OPCODE();
21890 }
21891 
ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21893 {
21894 	USE_OPLINE
21895 	zend_free_op free_op1;
21896 	zval *value;
21897 	zval *ref = NULL;
21898 
21899 	SAVE_OPLINE();
21900 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21901 
21902 	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21903 		if (IS_VAR & IS_VAR) {
21904 			ref = value;
21905 		}
21906 		value = Z_REFVAL_P(value);
21907 	}
21908 
21909 	if (Z_TYPE_P(value) > IS_NULL) {
21910 		zval *result = EX_VAR(opline->result.var);
21911 		ZVAL_COPY_VALUE(result, value);
21912 		if (IS_VAR == IS_CONST) {
21913 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21914 		} else if (IS_VAR == IS_CV) {
21915 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21916 		} else if ((IS_VAR & IS_VAR) && ref) {
21917 			zend_reference *r = Z_REF_P(ref);
21918 
21919 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
21920 				efree_size(r, sizeof(zend_reference));
21921 			} else if (Z_OPT_REFCOUNTED_P(result)) {
21922 				Z_ADDREF_P(result);
21923 			}
21924 		}
21925 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21926 	}
21927 
21928 	zval_ptr_dtor_nogc(free_op1);
21929 	ZEND_VM_NEXT_OPCODE();
21930 }
21931 
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21932 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21933 {
21934 	USE_OPLINE
21935 	zend_free_op free_op1;
21936 	zval *value;
21937 	zval *result = EX_VAR(opline->result.var);
21938 
21939 	value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21940 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
21941 		SAVE_OPLINE();
21942 		ZVAL_UNDEFINED_OP1();
21943 		ZVAL_NULL(result);
21944 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21945 	}
21946 
21947 	if (IS_VAR == IS_CV) {
21948 		ZVAL_COPY_DEREF(result, value);
21949 	} else if (IS_VAR == IS_VAR) {
21950 		if (UNEXPECTED(Z_ISREF_P(value))) {
21951 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
21952 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
21953 				efree_size(Z_REF_P(value), sizeof(zend_reference));
21954 			} else if (Z_OPT_REFCOUNTED_P(result)) {
21955 				Z_ADDREF_P(result);
21956 			}
21957 		} else {
21958 			ZVAL_COPY_VALUE(result, value);
21959 		}
21960 	} else {
21961 		ZVAL_COPY_VALUE(result, value);
21962 		if (IS_VAR == IS_CONST) {
21963 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
21964 				Z_ADDREF_P(result);
21965 			}
21966 		}
21967 	}
21968 	ZEND_VM_NEXT_OPCODE();
21969 }
21970 
ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21971 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21972 {
21973 	USE_OPLINE
21974 
21975 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21976 
21977 	zval *val;
21978 	zend_free_op free_op1;
21979 
21980 	SAVE_OPLINE();
21981 	val = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21982 
21983 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21984 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
21985 		zval_ptr_dtor_nogc(free_op1);
21986 		UNDEF_RESULT();
21987 		HANDLE_EXCEPTION();
21988 	}
21989 
21990 	if (Z_TYPE_P(val) == IS_ARRAY) {
21991 		ZVAL_COPY_VALUE(&generator->values, val);
21992 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
21993 			Z_ADDREF_P(val);
21994 		}
21995 		Z_FE_POS(generator->values) = 0;
21996 
21997 		zval_ptr_dtor_nogc(free_op1);
21998 	} else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
21999 		zend_class_entry *ce = Z_OBJCE_P(val);
22000 		if (ce == zend_ce_generator) {
22001 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
22002 
22003 			if (IS_VAR != IS_TMP_VAR) {
22004 				Z_ADDREF_P(val);
22005 			}
22006 			zval_ptr_dtor_nogc(free_op1);
22007 
22008 			if (Z_ISUNDEF(new_gen->retval)) {
22009 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
22010 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
22011 					zval_ptr_dtor(val);
22012 					UNDEF_RESULT();
22013 					HANDLE_EXCEPTION();
22014 				} else {
22015 					zend_generator_yield_from(generator, new_gen);
22016 				}
22017 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
22018 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
22019 				zval_ptr_dtor(val);
22020 				UNDEF_RESULT();
22021 				HANDLE_EXCEPTION();
22022 			} else {
22023 				if (RETURN_VALUE_USED(opline)) {
22024 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
22025 				}
22026 				ZEND_VM_NEXT_OPCODE();
22027 			}
22028 		} else {
22029 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
22030 			zval_ptr_dtor_nogc(free_op1);
22031 
22032 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
22033 				if (!EG(exception)) {
22034 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
22035 				}
22036 				UNDEF_RESULT();
22037 				HANDLE_EXCEPTION();
22038 			}
22039 
22040 			iter->index = 0;
22041 			if (iter->funcs->rewind) {
22042 				iter->funcs->rewind(iter);
22043 				if (UNEXPECTED(EG(exception) != NULL)) {
22044 					OBJ_RELEASE(&iter->std);
22045 					UNDEF_RESULT();
22046 					HANDLE_EXCEPTION();
22047 				}
22048 			}
22049 
22050 			ZVAL_OBJ(&generator->values, &iter->std);
22051 		}
22052 	} else {
22053 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
22054 		zval_ptr_dtor_nogc(free_op1);
22055 		UNDEF_RESULT();
22056 		HANDLE_EXCEPTION();
22057 	}
22058 
22059 	/* This is the default return value
22060 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
22061 	if (RETURN_VALUE_USED(opline)) {
22062 		ZVAL_NULL(EX_VAR(opline->result.var));
22063 	}
22064 
22065 	/* This generator has no send target (though the generator we delegate to might have one) */
22066 	generator->send_target = NULL;
22067 
22068 	/* We increment to the next op, so we are at the correct position when the
22069 	 * generator is resumed. */
22070 	ZEND_VM_INC_OPCODE();
22071 
22072 	/* The GOTO VM uses a local opline variable. We need to set the opline
22073 	 * variable in execute_data so we don't resume at an old position. */
22074 	SAVE_OPLINE();
22075 
22076 	ZEND_VM_RETURN();
22077 }
22078 
ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22079 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22080 {
22081 	USE_OPLINE
22082 	zval *varptr, *arg;
22083 	zend_free_op free_op1;
22084 
22085 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22086 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
22087 
22088 	if (IS_VAR == IS_CV) {
22089 		ZVAL_COPY(arg, varptr);
22090 	} else /* if (IS_VAR == IS_VAR) */ {
22091 		ZVAL_COPY_VALUE(arg, varptr);
22092 	}
22093 
22094 	ZEND_VM_NEXT_OPCODE();
22095 }
22096 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22097 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22098 {
22099 	USE_OPLINE
22100 	zval *varptr, *arg;
22101 	zend_free_op free_op1;
22102 	uint32_t arg_num = opline->op2.num;
22103 
22104 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
22105 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22106 	}
22107 
22108 	varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22109 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
22110 
22111 	if (IS_VAR == IS_CV) {
22112 		ZVAL_COPY(arg, varptr);
22113 	} else /* if (IS_VAR == IS_VAR) */ {
22114 		ZVAL_COPY_VALUE(arg, varptr);
22115 	}
22116 
22117 	ZEND_VM_NEXT_OPCODE();
22118 }
22119 
ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22120 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22121 {
22122 	USE_OPLINE
22123 	zend_free_op free_op1;
22124 	zval *op1, *op2;
22125 	zend_bool result;
22126 
22127 	SAVE_OPLINE();
22128 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22129 	op2 = RT_CONSTANT(opline, opline->op2);
22130 	result = fast_is_identical_function(op1, op2);
22131 	zval_ptr_dtor_nogc(free_op1);
22132 
22133 	ZEND_VM_SMART_BRANCH(result, 1);
22134 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
22135 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22136 }
22137 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22139 {
22140 	USE_OPLINE
22141 	zend_free_op free_op1;
22142 	zval *op1, *op2;
22143 	zend_bool result;
22144 
22145 	SAVE_OPLINE();
22146 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22147 	op2 = RT_CONSTANT(opline, opline->op2);
22148 	result = fast_is_not_identical_function(op1, op2);
22149 	zval_ptr_dtor_nogc(free_op1);
22150 
22151 	ZEND_VM_SMART_BRANCH(result, 1);
22152 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
22153 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22154 }
22155 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22157 {
22158 	USE_OPLINE
22159 	zend_free_op free_op1, free_op_data;
22160 	zval *object;
22161 	zval *property;
22162 	zval *value;
22163 	zval *zptr;
22164 	void **cache_slot;
22165 	zend_property_info *prop_info;
22166 
22167 	SAVE_OPLINE();
22168 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22169 
22170 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22171 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22172 	}
22173 
22174 	property = RT_CONSTANT(opline, opline->op2);
22175 
22176 	do {
22177 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
22178 
22179 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22180 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22181 				object = Z_REFVAL_P(object);
22182 				goto assign_op_object;
22183 			}
22184 			if (IS_VAR == IS_CV
22185 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22186 				ZVAL_UNDEFINED_OP1();
22187 			}
22188 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22189 			if (UNEXPECTED(!object)) {
22190 				break;
22191 			}
22192 		}
22193 
22194 assign_op_object:
22195 		/* here we are sure we are dealing with an object */
22196 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
22197 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
22198 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22199 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22200 					ZVAL_NULL(EX_VAR(opline->result.var));
22201 				}
22202 			} else {
22203 				zval *orig_zptr = zptr;
22204 				zend_reference *ref;
22205 
22206 				do {
22207 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
22208 						ref = Z_REF_P(zptr);
22209 						zptr = Z_REFVAL_P(zptr);
22210 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22211 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22212 							break;
22213 						}
22214 					}
22215 
22216 					if (IS_CONST == IS_CONST) {
22217 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22218 					} else {
22219 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
22220 					}
22221 					if (UNEXPECTED(prop_info)) {
22222 						/* special case for typed properties */
22223 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
22224 					} else {
22225 						zend_binary_op(zptr, zptr, value OPLINE_CC);
22226 					}
22227 				} while (0);
22228 
22229 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22230 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22231 				}
22232 			}
22233 		} else {
22234 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
22235 		}
22236 	} while (0);
22237 
22238 	FREE_OP(free_op_data);
22239 
22240 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22241 	/* assign_obj has two opcodes! */
22242 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22243 }
22244 
22245 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22247 {
22248 	USE_OPLINE
22249 	zend_free_op free_op1, free_op_data1;
22250 	zval *var_ptr;
22251 	zval *value, *container, *dim;
22252 
22253 	SAVE_OPLINE();
22254 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22255 
22256 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22257 assign_dim_op_array:
22258 		SEPARATE_ARRAY(container);
22259 assign_dim_op_new_array:
22260 		dim = RT_CONSTANT(opline, opline->op2);
22261 		if (IS_CONST == IS_UNUSED) {
22262 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
22263 			if (UNEXPECTED(!var_ptr)) {
22264 				zend_cannot_add_element();
22265 				goto assign_dim_op_ret_null;
22266 			}
22267 		} else {
22268 			if (IS_CONST == IS_CONST) {
22269 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
22270 			} else {
22271 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
22272 			}
22273 			if (UNEXPECTED(!var_ptr)) {
22274 				goto assign_dim_op_ret_null;
22275 			}
22276 		}
22277 
22278 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
22279 
22280 		do {
22281 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
22282 				zend_reference *ref = Z_REF_P(var_ptr);
22283 				var_ptr = Z_REFVAL_P(var_ptr);
22284 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22285 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22286 					break;
22287 				}
22288 			}
22289 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22290 		} while (0);
22291 
22292 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22293 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22294 		}
22295 		FREE_OP(free_op_data1);
22296 	} else {
22297 		if (EXPECTED(Z_ISREF_P(container))) {
22298 			container = Z_REFVAL_P(container);
22299 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22300 				goto assign_dim_op_array;
22301 			}
22302 		}
22303 
22304 		dim = RT_CONSTANT(opline, opline->op2);
22305 
22306 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22307 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
22308 				dim++;
22309 			}
22310 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
22311 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
22312 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
22313 				ZVAL_UNDEFINED_OP1();
22314 			}
22315 			ZVAL_ARR(container, zend_new_array(8));
22316 			goto assign_dim_op_new_array;
22317 		} else {
22318 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
22319 assign_dim_op_ret_null:
22320 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
22321 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22322 				ZVAL_NULL(EX_VAR(opline->result.var));
22323 			}
22324 		}
22325 	}
22326 
22327 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22328 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22329 }
22330 
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22331 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22332 {
22333 	USE_OPLINE
22334 	zend_free_op free_op1;
22335 	zval *var_ptr;
22336 	zval *value;
22337 
22338 	SAVE_OPLINE();
22339 	value = RT_CONSTANT(opline, opline->op2);
22340 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22341 
22342 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
22343 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22344 			ZVAL_NULL(EX_VAR(opline->result.var));
22345 		}
22346 	} else {
22347 		do {
22348 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
22349 				zend_reference *ref = Z_REF_P(var_ptr);
22350 				var_ptr = Z_REFVAL_P(var_ptr);
22351 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22352 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22353 					break;
22354 				}
22355 			}
22356 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22357 		} while (0);
22358 
22359 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22360 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22361 		}
22362 	}
22363 
22364 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22365 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22366 }
22367 
ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22369 {
22370 	USE_OPLINE
22371 	zend_free_op free_op1;
22372 	zval *object;
22373 	zval *property;
22374 	zval *zptr;
22375 	void **cache_slot;
22376 	zend_property_info *prop_info;
22377 
22378 	SAVE_OPLINE();
22379 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22380 
22381 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22382 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22383 	}
22384 
22385 	property = RT_CONSTANT(opline, opline->op2);
22386 
22387 	do {
22388 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22389 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22390 				object = Z_REFVAL_P(object);
22391 				goto pre_incdec_object;
22392 			}
22393 			if (IS_VAR == IS_CV
22394 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22395 				ZVAL_UNDEFINED_OP1();
22396 			}
22397 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22398 			if (UNEXPECTED(!object)) {
22399 				break;
22400 			}
22401 		}
22402 
22403 pre_incdec_object:
22404 		/* here we are sure we are dealing with an object */
22405 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22406 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
22407 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22408 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22409 					ZVAL_NULL(EX_VAR(opline->result.var));
22410 				}
22411 			} else {
22412 				if (IS_CONST == IS_CONST) {
22413 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
22414 				} else {
22415 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22416 				}
22417 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22418 			}
22419 		} else {
22420 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22421 		}
22422 	} while (0);
22423 
22424 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22426 }
22427 
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22429 {
22430 	USE_OPLINE
22431 	zend_free_op free_op1;
22432 	zval *object;
22433 	zval *property;
22434 	zval *zptr;
22435 	void **cache_slot;
22436 	zend_property_info *prop_info;
22437 
22438 	SAVE_OPLINE();
22439 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22440 
22441 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22442 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22443 	}
22444 
22445 	property = RT_CONSTANT(opline, opline->op2);
22446 
22447 	do {
22448 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22449 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22450 				object = Z_REFVAL_P(object);
22451 				goto post_incdec_object;
22452 			}
22453 			if (IS_VAR == IS_CV
22454 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22455 				ZVAL_UNDEFINED_OP1();
22456 			}
22457 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22458 			if (UNEXPECTED(!object)) {
22459 				break;
22460 			}
22461 		}
22462 
22463 post_incdec_object:
22464 		/* here we are sure we are dealing with an object */
22465 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
22466 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
22467 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22468 				ZVAL_NULL(EX_VAR(opline->result.var));
22469 			} else {
22470 				if (IS_CONST == IS_CONST) {
22471 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22472 				} else {
22473 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
22474 				}
22475 
22476 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
22477 			}
22478 		} else {
22479 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
22480 		}
22481 	} while (0);
22482 
22483 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22484 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22485 }
22486 
ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22488 {
22489 	USE_OPLINE
22490 	zend_free_op free_op1;
22491 	zval *container;
22492 
22493 	SAVE_OPLINE();
22494 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22495 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22496 
22497 	if (IS_VAR == IS_VAR) {
22498 		zval *result = EX_VAR(opline->result.var);
22499 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22500 	}
22501 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22502 }
22503 
ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22505 {
22506 	USE_OPLINE
22507 	zend_free_op free_op1;
22508 	zval *container;
22509 
22510 	SAVE_OPLINE();
22511 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22512 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22513 
22514 	if (IS_VAR == IS_VAR) {
22515 		zval *result = EX_VAR(opline->result.var);
22516 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22517 	}
22518 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22519 }
22520 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22521 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22522 {
22523 #if 0
22524 	USE_OPLINE
22525 #endif
22526 
22527 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22528         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22529 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22530         }
22531 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22532 	} else {
22533 		if (IS_CONST == IS_UNUSED) {
22534 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22535 		}
22536 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22537 	}
22538 }
22539 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22540 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22541 {
22542 	USE_OPLINE
22543 	zend_free_op free_op1;
22544 	zval *container;
22545 
22546 	SAVE_OPLINE();
22547 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22548 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22549 
22550 	if (IS_VAR == IS_VAR) {
22551 		zval *result = EX_VAR(opline->result.var);
22552 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22553 	}
22554 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22555 }
22556 
ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22558 {
22559 	USE_OPLINE
22560 	zend_free_op free_op1;
22561 	zval *property, *container, *result;
22562 
22563 	SAVE_OPLINE();
22564 
22565 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22566 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
22567 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22568 	}
22569 
22570 	property = RT_CONSTANT(opline, opline->op2);
22571 	result = EX_VAR(opline->result.var);
22572 	zend_fetch_property_address(
22573 		result, container, IS_VAR, property, IS_CONST,
22574 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
22575 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
22576 
22577 	if (IS_VAR == IS_VAR) {
22578 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22579 	}
22580 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22581 }
22582 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22584 {
22585 	USE_OPLINE
22586 	zend_free_op free_op1;
22587 	zval *property, *container, *result;
22588 
22589 	SAVE_OPLINE();
22590 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22591 
22592 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
22593 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22594 	}
22595 	property = RT_CONSTANT(opline, opline->op2);
22596 	result = EX_VAR(opline->result.var);
22597 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
22598 
22599 	if (IS_VAR == IS_VAR) {
22600 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22601 	}
22602 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22603 }
22604 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22605 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22606 {
22607 #if 0
22608 	USE_OPLINE
22609 #endif
22610 
22611 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
22612 		/* Behave like FETCH_OBJ_W */
22613 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22614 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22615 		}
22616 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22617 	} else {
22618 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22619 	}
22620 }
22621 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22623 {
22624 	USE_OPLINE
22625 	zend_free_op free_op1;
22626 	zval *container, *property, *result;
22627 
22628 	SAVE_OPLINE();
22629 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22630 
22631 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
22632 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22633 	}
22634 
22635 	property = RT_CONSTANT(opline, opline->op2);
22636 	result = EX_VAR(opline->result.var);
22637 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
22638 
22639 	if (IS_VAR == IS_VAR) {
22640 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
22641 	}
22642 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22643 }
22644 
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22646 {
22647 	USE_OPLINE
22648 	zend_free_op free_op1;
22649 	zval *container, *dim;
22650 
22651 	SAVE_OPLINE();
22652 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22653 	dim = RT_CONSTANT(opline, opline->op2);
22654 
22655 	if (IS_VAR == IS_VAR
22656 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
22657 		&& UNEXPECTED(!Z_ISREF_P(container))
22658 	) {
22659 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
22660 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22661 	} else {
22662 		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
22663 	}
22664 
22665 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22666 }
22667 
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22669 {
22670 	USE_OPLINE
22671 	zend_free_op free_op1;
22672 	zval *object, *property, *value, tmp;
22673 
22674 	SAVE_OPLINE();
22675 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22676 
22677 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22678 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22679 	}
22680 
22681 	property = RT_CONSTANT(opline, opline->op2);
22682 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
22683 
22684 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22685 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22686 			object = Z_REFVAL_P(object);
22687 			goto assign_object;
22688 		}
22689 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22690 		if (UNEXPECTED(!object)) {
22691 			value = &EG(uninitialized_zval);
22692 			goto free_and_exit_assign_obj;
22693 		}
22694 	}
22695 
22696 assign_object:
22697 	if (IS_CONST == IS_CONST &&
22698 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
22699 		void **cache_slot = CACHE_ADDR(opline->extended_value);
22700 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22701 		zend_object *zobj = Z_OBJ_P(object);
22702 		zval *property_val;
22703 
22704 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22705 			property_val = OBJ_PROP(zobj, prop_offset);
22706 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
22707 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22708 
22709 				if (UNEXPECTED(prop_info != NULL)) {
22710 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22711 					goto free_and_exit_assign_obj;
22712 				} else {
22713 fast_assign_obj:
22714 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
22715 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22716 						ZVAL_COPY(EX_VAR(opline->result.var), value);
22717 					}
22718 					goto exit_assign_obj;
22719 				}
22720 			}
22721 		} else {
22722 			if (EXPECTED(zobj->properties != NULL)) {
22723 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22724 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22725 						GC_DELREF(zobj->properties);
22726 					}
22727 					zobj->properties = zend_array_dup(zobj->properties);
22728 				}
22729 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
22730 				if (property_val) {
22731 					goto fast_assign_obj;
22732 				}
22733 			}
22734 
22735 			if (!zobj->ce->__set) {
22736 
22737 				if (EXPECTED(zobj->properties == NULL)) {
22738 					rebuild_object_properties(zobj);
22739 				}
22740 				if (IS_CONST == IS_CONST) {
22741 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22742 						Z_ADDREF_P(value);
22743 					}
22744 				} else if (IS_CONST != IS_TMP_VAR) {
22745 					if (Z_ISREF_P(value)) {
22746 						if (IS_CONST == IS_VAR) {
22747 							zend_reference *ref = Z_REF_P(value);
22748 							if (GC_DELREF(ref) == 0) {
22749 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22750 								efree_size(ref, sizeof(zend_reference));
22751 								value = &tmp;
22752 							} else {
22753 								value = Z_REFVAL_P(value);
22754 								Z_TRY_ADDREF_P(value);
22755 							}
22756 						} else {
22757 							value = Z_REFVAL_P(value);
22758 							Z_TRY_ADDREF_P(value);
22759 						}
22760 					} else if (IS_CONST == IS_CV) {
22761 						Z_TRY_ADDREF_P(value);
22762 					}
22763 				}
22764 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
22765 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22766 					ZVAL_COPY(EX_VAR(opline->result.var), value);
22767 				}
22768 				goto exit_assign_obj;
22769 			}
22770 		}
22771 	}
22772 
22773 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
22774 		ZVAL_DEREF(value);
22775 	}
22776 
22777 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
22778 
22779 free_and_exit_assign_obj:
22780 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22781 		ZVAL_COPY(EX_VAR(opline->result.var), value);
22782 	}
22783 
22784 exit_assign_obj:
22785 
22786 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22787 	/* assign_obj has two opcodes! */
22788 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22789 }
22790 
22791 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22793 {
22794 	USE_OPLINE
22795 	zend_free_op free_op1, free_op_data;
22796 	zval *object, *property, *value, tmp;
22797 
22798 	SAVE_OPLINE();
22799 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22800 
22801 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22802 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22803 	}
22804 
22805 	property = RT_CONSTANT(opline, opline->op2);
22806 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
22807 
22808 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22809 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22810 			object = Z_REFVAL_P(object);
22811 			goto assign_object;
22812 		}
22813 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22814 		if (UNEXPECTED(!object)) {
22815 			value = &EG(uninitialized_zval);
22816 			goto free_and_exit_assign_obj;
22817 		}
22818 	}
22819 
22820 assign_object:
22821 	if (IS_CONST == IS_CONST &&
22822 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
22823 		void **cache_slot = CACHE_ADDR(opline->extended_value);
22824 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22825 		zend_object *zobj = Z_OBJ_P(object);
22826 		zval *property_val;
22827 
22828 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22829 			property_val = OBJ_PROP(zobj, prop_offset);
22830 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
22831 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22832 
22833 				if (UNEXPECTED(prop_info != NULL)) {
22834 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22835 					goto free_and_exit_assign_obj;
22836 				} else {
22837 fast_assign_obj:
22838 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
22839 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22840 						ZVAL_COPY(EX_VAR(opline->result.var), value);
22841 					}
22842 					goto exit_assign_obj;
22843 				}
22844 			}
22845 		} else {
22846 			if (EXPECTED(zobj->properties != NULL)) {
22847 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22848 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22849 						GC_DELREF(zobj->properties);
22850 					}
22851 					zobj->properties = zend_array_dup(zobj->properties);
22852 				}
22853 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
22854 				if (property_val) {
22855 					goto fast_assign_obj;
22856 				}
22857 			}
22858 
22859 			if (!zobj->ce->__set) {
22860 
22861 				if (EXPECTED(zobj->properties == NULL)) {
22862 					rebuild_object_properties(zobj);
22863 				}
22864 				if (IS_TMP_VAR == IS_CONST) {
22865 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22866 						Z_ADDREF_P(value);
22867 					}
22868 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
22869 					if (Z_ISREF_P(value)) {
22870 						if (IS_TMP_VAR == IS_VAR) {
22871 							zend_reference *ref = Z_REF_P(value);
22872 							if (GC_DELREF(ref) == 0) {
22873 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22874 								efree_size(ref, sizeof(zend_reference));
22875 								value = &tmp;
22876 							} else {
22877 								value = Z_REFVAL_P(value);
22878 								Z_TRY_ADDREF_P(value);
22879 							}
22880 						} else {
22881 							value = Z_REFVAL_P(value);
22882 							Z_TRY_ADDREF_P(value);
22883 						}
22884 					} else if (IS_TMP_VAR == IS_CV) {
22885 						Z_TRY_ADDREF_P(value);
22886 					}
22887 				}
22888 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
22889 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22890 					ZVAL_COPY(EX_VAR(opline->result.var), value);
22891 				}
22892 				goto exit_assign_obj;
22893 			}
22894 		}
22895 	}
22896 
22897 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
22898 		ZVAL_DEREF(value);
22899 	}
22900 
22901 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
22902 
22903 free_and_exit_assign_obj:
22904 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22905 		ZVAL_COPY(EX_VAR(opline->result.var), value);
22906 	}
22907 	zval_ptr_dtor_nogc(free_op_data);
22908 exit_assign_obj:
22909 
22910 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
22911 	/* assign_obj has two opcodes! */
22912 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22913 }
22914 
22915 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22917 {
22918 	USE_OPLINE
22919 	zend_free_op free_op1, free_op_data;
22920 	zval *object, *property, *value, tmp;
22921 
22922 	SAVE_OPLINE();
22923 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
22924 
22925 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22926 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22927 	}
22928 
22929 	property = RT_CONSTANT(opline, opline->op2);
22930 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
22931 
22932 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22933 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22934 			object = Z_REFVAL_P(object);
22935 			goto assign_object;
22936 		}
22937 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
22938 		if (UNEXPECTED(!object)) {
22939 			value = &EG(uninitialized_zval);
22940 			goto free_and_exit_assign_obj;
22941 		}
22942 	}
22943 
22944 assign_object:
22945 	if (IS_CONST == IS_CONST &&
22946 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
22947 		void **cache_slot = CACHE_ADDR(opline->extended_value);
22948 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
22949 		zend_object *zobj = Z_OBJ_P(object);
22950 		zval *property_val;
22951 
22952 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
22953 			property_val = OBJ_PROP(zobj, prop_offset);
22954 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
22955 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
22956 
22957 				if (UNEXPECTED(prop_info != NULL)) {
22958 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
22959 					goto free_and_exit_assign_obj;
22960 				} else {
22961 fast_assign_obj:
22962 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
22963 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22964 						ZVAL_COPY(EX_VAR(opline->result.var), value);
22965 					}
22966 					goto exit_assign_obj;
22967 				}
22968 			}
22969 		} else {
22970 			if (EXPECTED(zobj->properties != NULL)) {
22971 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
22972 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
22973 						GC_DELREF(zobj->properties);
22974 					}
22975 					zobj->properties = zend_array_dup(zobj->properties);
22976 				}
22977 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
22978 				if (property_val) {
22979 					goto fast_assign_obj;
22980 				}
22981 			}
22982 
22983 			if (!zobj->ce->__set) {
22984 
22985 				if (EXPECTED(zobj->properties == NULL)) {
22986 					rebuild_object_properties(zobj);
22987 				}
22988 				if (IS_VAR == IS_CONST) {
22989 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
22990 						Z_ADDREF_P(value);
22991 					}
22992 				} else if (IS_VAR != IS_TMP_VAR) {
22993 					if (Z_ISREF_P(value)) {
22994 						if (IS_VAR == IS_VAR) {
22995 							zend_reference *ref = Z_REF_P(value);
22996 							if (GC_DELREF(ref) == 0) {
22997 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
22998 								efree_size(ref, sizeof(zend_reference));
22999 								value = &tmp;
23000 							} else {
23001 								value = Z_REFVAL_P(value);
23002 								Z_TRY_ADDREF_P(value);
23003 							}
23004 						} else {
23005 							value = Z_REFVAL_P(value);
23006 							Z_TRY_ADDREF_P(value);
23007 						}
23008 					} else if (IS_VAR == IS_CV) {
23009 						Z_TRY_ADDREF_P(value);
23010 					}
23011 				}
23012 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
23013 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23014 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23015 				}
23016 				goto exit_assign_obj;
23017 			}
23018 		}
23019 	}
23020 
23021 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23022 		ZVAL_DEREF(value);
23023 	}
23024 
23025 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23026 
23027 free_and_exit_assign_obj:
23028 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23029 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23030 	}
23031 	zval_ptr_dtor_nogc(free_op_data);
23032 exit_assign_obj:
23033 
23034 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23035 	/* assign_obj has two opcodes! */
23036 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23037 }
23038 
23039 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23041 {
23042 	USE_OPLINE
23043 	zend_free_op free_op1;
23044 	zval *object, *property, *value, tmp;
23045 
23046 	SAVE_OPLINE();
23047 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23048 
23049 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23050 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23051 	}
23052 
23053 	property = RT_CONSTANT(opline, opline->op2);
23054 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23055 
23056 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23057 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23058 			object = Z_REFVAL_P(object);
23059 			goto assign_object;
23060 		}
23061 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
23062 		if (UNEXPECTED(!object)) {
23063 			value = &EG(uninitialized_zval);
23064 			goto free_and_exit_assign_obj;
23065 		}
23066 	}
23067 
23068 assign_object:
23069 	if (IS_CONST == IS_CONST &&
23070 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
23071 		void **cache_slot = CACHE_ADDR(opline->extended_value);
23072 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23073 		zend_object *zobj = Z_OBJ_P(object);
23074 		zval *property_val;
23075 
23076 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23077 			property_val = OBJ_PROP(zobj, prop_offset);
23078 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
23079 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23080 
23081 				if (UNEXPECTED(prop_info != NULL)) {
23082 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
23083 					goto free_and_exit_assign_obj;
23084 				} else {
23085 fast_assign_obj:
23086 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
23087 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23088 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23089 					}
23090 					goto exit_assign_obj;
23091 				}
23092 			}
23093 		} else {
23094 			if (EXPECTED(zobj->properties != NULL)) {
23095 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23096 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23097 						GC_DELREF(zobj->properties);
23098 					}
23099 					zobj->properties = zend_array_dup(zobj->properties);
23100 				}
23101 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
23102 				if (property_val) {
23103 					goto fast_assign_obj;
23104 				}
23105 			}
23106 
23107 			if (!zobj->ce->__set) {
23108 
23109 				if (EXPECTED(zobj->properties == NULL)) {
23110 					rebuild_object_properties(zobj);
23111 				}
23112 				if (IS_CV == IS_CONST) {
23113 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23114 						Z_ADDREF_P(value);
23115 					}
23116 				} else if (IS_CV != IS_TMP_VAR) {
23117 					if (Z_ISREF_P(value)) {
23118 						if (IS_CV == IS_VAR) {
23119 							zend_reference *ref = Z_REF_P(value);
23120 							if (GC_DELREF(ref) == 0) {
23121 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23122 								efree_size(ref, sizeof(zend_reference));
23123 								value = &tmp;
23124 							} else {
23125 								value = Z_REFVAL_P(value);
23126 								Z_TRY_ADDREF_P(value);
23127 							}
23128 						} else {
23129 							value = Z_REFVAL_P(value);
23130 							Z_TRY_ADDREF_P(value);
23131 						}
23132 					} else if (IS_CV == IS_CV) {
23133 						Z_TRY_ADDREF_P(value);
23134 					}
23135 				}
23136 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
23137 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23138 					ZVAL_COPY(EX_VAR(opline->result.var), value);
23139 				}
23140 				goto exit_assign_obj;
23141 			}
23142 		}
23143 	}
23144 
23145 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23146 		ZVAL_DEREF(value);
23147 	}
23148 
23149 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23150 
23151 free_and_exit_assign_obj:
23152 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23153 		ZVAL_COPY(EX_VAR(opline->result.var), value);
23154 	}
23155 
23156 exit_assign_obj:
23157 
23158 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23159 	/* assign_obj has two opcodes! */
23160 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23161 }
23162 
23163 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23164 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23165 {
23166 	USE_OPLINE
23167 	zend_free_op free_op1;
23168 	zval *object_ptr, *orig_object_ptr;
23169 	zend_free_op free_op_data;
23170 	zval *value;
23171 	zval *variable_ptr;
23172 	zval *dim;
23173 
23174 	SAVE_OPLINE();
23175 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23176 
23177 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23178 try_assign_dim_array:
23179 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
23180 		SEPARATE_ARRAY(object_ptr);
23181 		if (IS_CONST == IS_UNUSED) {
23182 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23183 				ZVAL_DEREF(value);
23184 			}
23185 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23186 			if (UNEXPECTED(variable_ptr == NULL)) {
23187 				zend_cannot_add_element();
23188 				goto assign_dim_error;
23189 			} else if (IS_CONST == IS_CV) {
23190 				if (Z_REFCOUNTED_P(value)) {
23191 					Z_ADDREF_P(value);
23192 				}
23193 			} else if (IS_CONST == IS_VAR) {
23194 				if (value != free_op_data) {
23195 					if (Z_REFCOUNTED_P(value)) {
23196 						Z_ADDREF_P(value);
23197 					}
23198 
23199 				}
23200 			} else if (IS_CONST == IS_CONST) {
23201 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23202 					Z_ADDREF_P(value);
23203 				}
23204 			}
23205 		} else {
23206 			dim = RT_CONSTANT(opline, opline->op2);
23207 			if (IS_CONST == IS_CONST) {
23208 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23209 			} else {
23210 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23211 			}
23212 			if (UNEXPECTED(variable_ptr == NULL)) {
23213 				goto assign_dim_error;
23214 			}
23215 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23216 		}
23217 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23218 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23219 		}
23220 	} else {
23221 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23222 			object_ptr = Z_REFVAL_P(object_ptr);
23223 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23224 				goto try_assign_dim_array;
23225 			}
23226 		}
23227 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23228 			dim = RT_CONSTANT(opline, opline->op2);
23229 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23230 
23231 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23232 				dim++;
23233 			}
23234 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23235 
23236 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23237 			if (IS_CONST == IS_UNUSED) {
23238 				zend_use_new_element_for_string();
23239 
23240 				UNDEF_RESULT();
23241 			} else {
23242 				dim = RT_CONSTANT(opline, opline->op2);
23243 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
23244 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23245 
23246 			}
23247 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23248 			if (Z_ISREF_P(orig_object_ptr)
23249 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23250 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23251 				dim = RT_CONSTANT(opline, opline->op2);
23252 
23253 				UNDEF_RESULT();
23254 			} else {
23255 				ZVAL_ARR(object_ptr, zend_new_array(8));
23256 				goto try_assign_dim_array;
23257 			}
23258 		} else {
23259 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
23260 				zend_use_scalar_as_array();
23261 			}
23262 			dim = RT_CONSTANT(opline, opline->op2);
23263 assign_dim_error:
23264 
23265 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23266 				ZVAL_NULL(EX_VAR(opline->result.var));
23267 			}
23268 		}
23269 	}
23270 	if (IS_CONST != IS_UNUSED) {
23271 
23272 	}
23273 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23274 	/* assign_dim has two opcodes! */
23275 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23276 }
23277 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23279 {
23280 	USE_OPLINE
23281 	zend_free_op free_op1;
23282 	zval *object_ptr, *orig_object_ptr;
23283 	zend_free_op free_op_data;
23284 	zval *value;
23285 	zval *variable_ptr;
23286 	zval *dim;
23287 
23288 	SAVE_OPLINE();
23289 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23290 
23291 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23292 try_assign_dim_array:
23293 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23294 		SEPARATE_ARRAY(object_ptr);
23295 		if (IS_CONST == IS_UNUSED) {
23296 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23297 				ZVAL_DEREF(value);
23298 			}
23299 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23300 			if (UNEXPECTED(variable_ptr == NULL)) {
23301 				zend_cannot_add_element();
23302 				goto assign_dim_error;
23303 			} else if (IS_TMP_VAR == IS_CV) {
23304 				if (Z_REFCOUNTED_P(value)) {
23305 					Z_ADDREF_P(value);
23306 				}
23307 			} else if (IS_TMP_VAR == IS_VAR) {
23308 				if (value != free_op_data) {
23309 					if (Z_REFCOUNTED_P(value)) {
23310 						Z_ADDREF_P(value);
23311 					}
23312 					zval_ptr_dtor_nogc(free_op_data);
23313 				}
23314 			} else if (IS_TMP_VAR == IS_CONST) {
23315 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23316 					Z_ADDREF_P(value);
23317 				}
23318 			}
23319 		} else {
23320 			dim = RT_CONSTANT(opline, opline->op2);
23321 			if (IS_CONST == IS_CONST) {
23322 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23323 			} else {
23324 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23325 			}
23326 			if (UNEXPECTED(variable_ptr == NULL)) {
23327 				goto assign_dim_error;
23328 			}
23329 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
23330 		}
23331 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23332 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23333 		}
23334 	} else {
23335 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23336 			object_ptr = Z_REFVAL_P(object_ptr);
23337 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23338 				goto try_assign_dim_array;
23339 			}
23340 		}
23341 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23342 			dim = RT_CONSTANT(opline, opline->op2);
23343 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23344 
23345 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23346 				dim++;
23347 			}
23348 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23349 
23350 			zval_ptr_dtor_nogc(free_op_data);
23351 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23352 			if (IS_CONST == IS_UNUSED) {
23353 				zend_use_new_element_for_string();
23354 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23355 				UNDEF_RESULT();
23356 			} else {
23357 				dim = RT_CONSTANT(opline, opline->op2);
23358 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23359 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23360 				zval_ptr_dtor_nogc(free_op_data);
23361 			}
23362 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23363 			if (Z_ISREF_P(orig_object_ptr)
23364 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23365 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23366 				dim = RT_CONSTANT(opline, opline->op2);
23367 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23368 				UNDEF_RESULT();
23369 			} else {
23370 				ZVAL_ARR(object_ptr, zend_new_array(8));
23371 				goto try_assign_dim_array;
23372 			}
23373 		} else {
23374 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
23375 				zend_use_scalar_as_array();
23376 			}
23377 			dim = RT_CONSTANT(opline, opline->op2);
23378 assign_dim_error:
23379 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23380 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23381 				ZVAL_NULL(EX_VAR(opline->result.var));
23382 			}
23383 		}
23384 	}
23385 	if (IS_CONST != IS_UNUSED) {
23386 
23387 	}
23388 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23389 	/* assign_dim has two opcodes! */
23390 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23391 }
23392 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23394 {
23395 	USE_OPLINE
23396 	zend_free_op free_op1;
23397 	zval *object_ptr, *orig_object_ptr;
23398 	zend_free_op free_op_data;
23399 	zval *value;
23400 	zval *variable_ptr;
23401 	zval *dim;
23402 
23403 	SAVE_OPLINE();
23404 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23405 
23406 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23407 try_assign_dim_array:
23408 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23409 		SEPARATE_ARRAY(object_ptr);
23410 		if (IS_CONST == IS_UNUSED) {
23411 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23412 				ZVAL_DEREF(value);
23413 			}
23414 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23415 			if (UNEXPECTED(variable_ptr == NULL)) {
23416 				zend_cannot_add_element();
23417 				goto assign_dim_error;
23418 			} else if (IS_VAR == IS_CV) {
23419 				if (Z_REFCOUNTED_P(value)) {
23420 					Z_ADDREF_P(value);
23421 				}
23422 			} else if (IS_VAR == IS_VAR) {
23423 				if (value != free_op_data) {
23424 					if (Z_REFCOUNTED_P(value)) {
23425 						Z_ADDREF_P(value);
23426 					}
23427 					zval_ptr_dtor_nogc(free_op_data);
23428 				}
23429 			} else if (IS_VAR == IS_CONST) {
23430 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23431 					Z_ADDREF_P(value);
23432 				}
23433 			}
23434 		} else {
23435 			dim = RT_CONSTANT(opline, opline->op2);
23436 			if (IS_CONST == IS_CONST) {
23437 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23438 			} else {
23439 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23440 			}
23441 			if (UNEXPECTED(variable_ptr == NULL)) {
23442 				goto assign_dim_error;
23443 			}
23444 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
23445 		}
23446 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23447 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23448 		}
23449 	} else {
23450 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23451 			object_ptr = Z_REFVAL_P(object_ptr);
23452 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23453 				goto try_assign_dim_array;
23454 			}
23455 		}
23456 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23457 			dim = RT_CONSTANT(opline, opline->op2);
23458 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23459 
23460 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23461 				dim++;
23462 			}
23463 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23464 
23465 			zval_ptr_dtor_nogc(free_op_data);
23466 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23467 			if (IS_CONST == IS_UNUSED) {
23468 				zend_use_new_element_for_string();
23469 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23470 				UNDEF_RESULT();
23471 			} else {
23472 				dim = RT_CONSTANT(opline, opline->op2);
23473 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23474 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23475 				zval_ptr_dtor_nogc(free_op_data);
23476 			}
23477 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23478 			if (Z_ISREF_P(orig_object_ptr)
23479 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23480 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23481 				dim = RT_CONSTANT(opline, opline->op2);
23482 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23483 				UNDEF_RESULT();
23484 			} else {
23485 				ZVAL_ARR(object_ptr, zend_new_array(8));
23486 				goto try_assign_dim_array;
23487 			}
23488 		} else {
23489 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
23490 				zend_use_scalar_as_array();
23491 			}
23492 			dim = RT_CONSTANT(opline, opline->op2);
23493 assign_dim_error:
23494 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23495 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23496 				ZVAL_NULL(EX_VAR(opline->result.var));
23497 			}
23498 		}
23499 	}
23500 	if (IS_CONST != IS_UNUSED) {
23501 
23502 	}
23503 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23504 	/* assign_dim has two opcodes! */
23505 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23506 }
23507 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23508 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23509 {
23510 	USE_OPLINE
23511 	zend_free_op free_op1;
23512 	zval *object_ptr, *orig_object_ptr;
23513 	zend_free_op free_op_data;
23514 	zval *value;
23515 	zval *variable_ptr;
23516 	zval *dim;
23517 
23518 	SAVE_OPLINE();
23519 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23520 
23521 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23522 try_assign_dim_array:
23523 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23524 		SEPARATE_ARRAY(object_ptr);
23525 		if (IS_CONST == IS_UNUSED) {
23526 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23527 				ZVAL_DEREF(value);
23528 			}
23529 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23530 			if (UNEXPECTED(variable_ptr == NULL)) {
23531 				zend_cannot_add_element();
23532 				goto assign_dim_error;
23533 			} else if (IS_CV == IS_CV) {
23534 				if (Z_REFCOUNTED_P(value)) {
23535 					Z_ADDREF_P(value);
23536 				}
23537 			} else if (IS_CV == IS_VAR) {
23538 				if (value != free_op_data) {
23539 					if (Z_REFCOUNTED_P(value)) {
23540 						Z_ADDREF_P(value);
23541 					}
23542 
23543 				}
23544 			} else if (IS_CV == IS_CONST) {
23545 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23546 					Z_ADDREF_P(value);
23547 				}
23548 			}
23549 		} else {
23550 			dim = RT_CONSTANT(opline, opline->op2);
23551 			if (IS_CONST == IS_CONST) {
23552 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23553 			} else {
23554 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23555 			}
23556 			if (UNEXPECTED(variable_ptr == NULL)) {
23557 				goto assign_dim_error;
23558 			}
23559 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
23560 		}
23561 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23562 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23563 		}
23564 	} else {
23565 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23566 			object_ptr = Z_REFVAL_P(object_ptr);
23567 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23568 				goto try_assign_dim_array;
23569 			}
23570 		}
23571 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23572 			dim = RT_CONSTANT(opline, opline->op2);
23573 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23574 
23575 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23576 				dim++;
23577 			}
23578 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23579 
23580 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
23581 			if (IS_CONST == IS_UNUSED) {
23582 				zend_use_new_element_for_string();
23583 
23584 				UNDEF_RESULT();
23585 			} else {
23586 				dim = RT_CONSTANT(opline, opline->op2);
23587 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23588 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
23589 
23590 			}
23591 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
23592 			if (Z_ISREF_P(orig_object_ptr)
23593 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
23594 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
23595 				dim = RT_CONSTANT(opline, opline->op2);
23596 
23597 				UNDEF_RESULT();
23598 			} else {
23599 				ZVAL_ARR(object_ptr, zend_new_array(8));
23600 				goto try_assign_dim_array;
23601 			}
23602 		} else {
23603 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
23604 				zend_use_scalar_as_array();
23605 			}
23606 			dim = RT_CONSTANT(opline, opline->op2);
23607 assign_dim_error:
23608 
23609 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23610 				ZVAL_NULL(EX_VAR(opline->result.var));
23611 			}
23612 		}
23613 	}
23614 	if (IS_CONST != IS_UNUSED) {
23615 
23616 	}
23617 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23618 	/* assign_dim has two opcodes! */
23619 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23620 }
23621 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23623 {
23624 	USE_OPLINE
23625 	zend_free_op free_op1;
23626 	zval *value;
23627 	zval *variable_ptr;
23628 
23629 	SAVE_OPLINE();
23630 	value = RT_CONSTANT(opline, opline->op2);
23631 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23632 
23633 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
23634 
23635 		if (UNEXPECTED(0)) {
23636 			ZVAL_NULL(EX_VAR(opline->result.var));
23637 		}
23638 	} else {
23639 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23640 		if (UNEXPECTED(0)) {
23641 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23642 		}
23643 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23644 		/* zend_assign_to_variable() always takes care of op2, never free it! */
23645 	}
23646 
23647 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23648 }
23649 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23650 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23651 {
23652 	USE_OPLINE
23653 	zend_free_op free_op1;
23654 	zval *value;
23655 	zval *variable_ptr;
23656 
23657 	SAVE_OPLINE();
23658 	value = RT_CONSTANT(opline, opline->op2);
23659 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23660 
23661 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
23662 
23663 		if (UNEXPECTED(1)) {
23664 			ZVAL_NULL(EX_VAR(opline->result.var));
23665 		}
23666 	} else {
23667 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
23668 		if (UNEXPECTED(1)) {
23669 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23670 		}
23671 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23672 		/* zend_assign_to_variable() always takes care of op2, never free it! */
23673 	}
23674 
23675 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23676 }
23677 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23679 {
23680 	USE_OPLINE
23681 	zend_free_op free_op1, free_op_data;
23682 	zval *property, *container, *value_ptr;
23683 
23684 	SAVE_OPLINE();
23685 
23686 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23687 
23688 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23689 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23690 	}
23691 
23692 	property = RT_CONSTANT(opline, opline->op2);
23693 
23694 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
23695 
23696 	if (1) {
23697 		if (IS_VAR == IS_UNUSED) {
23698 			if (IS_CONST == IS_CONST) {
23699 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23700 			} else {
23701 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23702 			}
23703 		} else {
23704 			if (IS_CONST == IS_CONST) {
23705 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23706 			} else {
23707 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23708 			}
23709 		}
23710 	} else {
23711 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23712 	}
23713 
23714 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23715 
23716 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
23717 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23718 }
23719 
23720 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23722 {
23723 	USE_OPLINE
23724 	zend_free_op free_op1;
23725 	zval *property, *container, *value_ptr;
23726 
23727 	SAVE_OPLINE();
23728 
23729 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23730 
23731 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
23732 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23733 	}
23734 
23735 	property = RT_CONSTANT(opline, opline->op2);
23736 
23737 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
23738 
23739 	if (1) {
23740 		if (IS_VAR == IS_UNUSED) {
23741 			if (IS_CONST == IS_CONST) {
23742 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23743 			} else {
23744 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23745 			}
23746 		} else {
23747 			if (IS_CONST == IS_CONST) {
23748 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23749 			} else {
23750 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23751 			}
23752 		}
23753 	} else {
23754 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
23755 	}
23756 
23757 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23758 
23759 
23760 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23761 }
23762 
23763 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23765 {
23766 	USE_OPLINE
23767 	zval *function_name;
23768 	zend_class_entry *ce;
23769 	uint32_t call_info;
23770 	zend_function *fbc;
23771 	zend_execute_data *call;
23772 
23773 	SAVE_OPLINE();
23774 
23775 	if (IS_VAR == IS_CONST) {
23776 		/* no function found. try a static method in class */
23777 		ce = CACHED_PTR(opline->result.num);
23778 		if (UNEXPECTED(ce == NULL)) {
23779 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
23780 			if (UNEXPECTED(ce == NULL)) {
23781 				ZEND_ASSERT(EG(exception));
23782 
23783 				HANDLE_EXCEPTION();
23784 			}
23785 			if (IS_CONST != IS_CONST) {
23786 				CACHE_PTR(opline->result.num, ce);
23787 			}
23788 		}
23789 	} else if (IS_VAR == IS_UNUSED) {
23790 		ce = zend_fetch_class(NULL, opline->op1.num);
23791 		if (UNEXPECTED(ce == NULL)) {
23792 			ZEND_ASSERT(EG(exception));
23793 
23794 			HANDLE_EXCEPTION();
23795 		}
23796 	} else {
23797 		ce = Z_CE_P(EX_VAR(opline->op1.var));
23798 	}
23799 
23800 	if (IS_VAR == IS_CONST &&
23801 	    IS_CONST == IS_CONST &&
23802 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
23803 		/* nothing to do */
23804 	} else if (IS_VAR != IS_CONST &&
23805 	           IS_CONST == IS_CONST &&
23806 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
23807 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
23808 	} else if (IS_CONST != IS_UNUSED) {
23809 
23810 
23811 		function_name = RT_CONSTANT(opline, opline->op2);
23812 		if (IS_CONST != IS_CONST) {
23813 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
23814 				do {
23815 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
23816 						function_name = Z_REFVAL_P(function_name);
23817 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
23818 							break;
23819 						}
23820 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
23821 						ZVAL_UNDEFINED_OP2();
23822 						if (UNEXPECTED(EG(exception) != NULL)) {
23823 							HANDLE_EXCEPTION();
23824 						}
23825 					}
23826 					zend_throw_error(NULL, "Function name must be a string");
23827 
23828 					HANDLE_EXCEPTION();
23829 				} while (0);
23830 			}
23831 		}
23832 
23833 		if (ce->get_static_method) {
23834 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
23835 		} else {
23836 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
23837 		}
23838 		if (UNEXPECTED(fbc == NULL)) {
23839 			if (EXPECTED(!EG(exception))) {
23840 				zend_undefined_method(ce, Z_STR_P(function_name));
23841 			}
23842 
23843 			HANDLE_EXCEPTION();
23844 		}
23845 		if (IS_CONST == IS_CONST &&
23846 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
23847 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
23848 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
23849 		}
23850 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
23851 			init_func_run_time_cache(&fbc->op_array);
23852 		}
23853 		if (IS_CONST != IS_CONST) {
23854 
23855 		}
23856 	} else {
23857 		if (UNEXPECTED(ce->constructor == NULL)) {
23858 			zend_throw_error(NULL, "Cannot call constructor");
23859 			HANDLE_EXCEPTION();
23860 		}
23861 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
23862 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
23863 			HANDLE_EXCEPTION();
23864 		}
23865 		fbc = ce->constructor;
23866 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
23867 			init_func_run_time_cache(&fbc->op_array);
23868 		}
23869 	}
23870 
23871 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
23872 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
23873 			ce = (zend_class_entry*)Z_OBJ(EX(This));
23874 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
23875 		} else {
23876 			zend_non_static_method_call(fbc);
23877 			if (UNEXPECTED(EG(exception) != NULL)) {
23878 				HANDLE_EXCEPTION();
23879 			}
23880 			goto check_parent_and_self;
23881 		}
23882 	} else {
23883 check_parent_and_self:
23884 		/* previous opcode is ZEND_FETCH_CLASS */
23885 		if (IS_VAR == IS_UNUSED
23886 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
23887 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
23888 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
23889 				ce = Z_OBJCE(EX(This));
23890 			} else {
23891 				ce = Z_CE(EX(This));
23892 			}
23893 		}
23894 		call_info = ZEND_CALL_NESTED_FUNCTION;
23895 	}
23896 
23897 	call = zend_vm_stack_push_call_frame(call_info,
23898 		fbc, opline->extended_value, ce);
23899 	call->prev_execute_data = EX(call);
23900 	EX(call) = call;
23901 
23902 	ZEND_VM_NEXT_OPCODE();
23903 }
23904 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23906 {
23907 	zend_class_entry *ce, *scope;
23908 	zend_class_constant *c;
23909 	zval *value, *zv;
23910 	USE_OPLINE
23911 
23912 	SAVE_OPLINE();
23913 
23914 	do {
23915 		if (IS_VAR == IS_CONST) {
23916 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
23917 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
23918 				break;
23919 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
23920 				ce = CACHED_PTR(opline->extended_value);
23921 			} else {
23922 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
23923 				if (UNEXPECTED(ce == NULL)) {
23924 					ZEND_ASSERT(EG(exception));
23925 					ZVAL_UNDEF(EX_VAR(opline->result.var));
23926 					HANDLE_EXCEPTION();
23927 				}
23928 			}
23929 		} else {
23930 			if (IS_VAR == IS_UNUSED) {
23931 				ce = zend_fetch_class(NULL, opline->op1.num);
23932 				if (UNEXPECTED(ce == NULL)) {
23933 					ZEND_ASSERT(EG(exception));
23934 					ZVAL_UNDEF(EX_VAR(opline->result.var));
23935 					HANDLE_EXCEPTION();
23936 				}
23937 			} else {
23938 				ce = Z_CE_P(EX_VAR(opline->op1.var));
23939 			}
23940 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
23941 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
23942 				break;
23943 			}
23944 		}
23945 
23946 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
23947 		if (EXPECTED(zv != NULL)) {
23948 			c = Z_PTR_P(zv);
23949 			scope = EX(func)->op_array.scope;
23950 			if (!zend_verify_const_access(c, scope)) {
23951 				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(RT_CONSTANT(opline, opline->op2)));
23952 				ZVAL_UNDEF(EX_VAR(opline->result.var));
23953 				HANDLE_EXCEPTION();
23954 			}
23955 			value = &c->value;
23956 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
23957 				zval_update_constant_ex(value, c->ce);
23958 				if (UNEXPECTED(EG(exception) != NULL)) {
23959 					ZVAL_UNDEF(EX_VAR(opline->result.var));
23960 					HANDLE_EXCEPTION();
23961 				}
23962 			}
23963 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
23964 		} else {
23965 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
23966 			ZVAL_UNDEF(EX_VAR(opline->result.var));
23967 			HANDLE_EXCEPTION();
23968 		}
23969 	} while (0);
23970 
23971 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
23972 
23973 	ZEND_VM_NEXT_OPCODE();
23974 }
23975 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23976 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23977 {
23978 	USE_OPLINE
23979 	zend_free_op free_op1;
23980 	zval *expr_ptr, new_expr;
23981 
23982 	SAVE_OPLINE();
23983 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
23984 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
23985 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23986 		if (Z_ISREF_P(expr_ptr)) {
23987 			Z_ADDREF_P(expr_ptr);
23988 		} else {
23989 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
23990 		}
23991 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
23992 	} else {
23993 		expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
23994 		if (IS_VAR == IS_TMP_VAR) {
23995 			/* pass */
23996 		} else if (IS_VAR == IS_CONST) {
23997 			Z_TRY_ADDREF_P(expr_ptr);
23998 		} else if (IS_VAR == IS_CV) {
23999 			ZVAL_DEREF(expr_ptr);
24000 			Z_TRY_ADDREF_P(expr_ptr);
24001 		} else /* if (IS_VAR == IS_VAR) */ {
24002 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
24003 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
24004 
24005 				expr_ptr = Z_REFVAL_P(expr_ptr);
24006 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24007 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
24008 					expr_ptr = &new_expr;
24009 					efree_size(ref, sizeof(zend_reference));
24010 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
24011 					Z_ADDREF_P(expr_ptr);
24012 				}
24013 			}
24014 		}
24015 	}
24016 
24017 	if (IS_CONST != IS_UNUSED) {
24018 
24019 		zval *offset = RT_CONSTANT(opline, opline->op2);
24020 		zend_string *str;
24021 		zend_ulong hval;
24022 
24023 add_again:
24024 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24025 			str = Z_STR_P(offset);
24026 			if (IS_CONST != IS_CONST) {
24027 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
24028 					goto num_index;
24029 				}
24030 			}
24031 str_index:
24032 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
24033 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24034 			hval = Z_LVAL_P(offset);
24035 num_index:
24036 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
24037 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24038 			offset = Z_REFVAL_P(offset);
24039 			goto add_again;
24040 		} else if (Z_TYPE_P(offset) == IS_NULL) {
24041 			str = ZSTR_EMPTY_ALLOC();
24042 			goto str_index;
24043 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24044 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
24045 			goto num_index;
24046 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
24047 			hval = 0;
24048 			goto num_index;
24049 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
24050 			hval = 1;
24051 			goto num_index;
24052 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24053 			zend_use_resource_as_offset(offset);
24054 			hval = Z_RES_HANDLE_P(offset);
24055 			goto num_index;
24056 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24057 			ZVAL_UNDEFINED_OP2();
24058 			str = ZSTR_EMPTY_ALLOC();
24059 			goto str_index;
24060 		} else {
24061 			zend_illegal_offset();
24062 			zval_ptr_dtor_nogc(expr_ptr);
24063 		}
24064 
24065 	} else {
24066 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
24067 			zend_cannot_add_element();
24068 			zval_ptr_dtor_nogc(expr_ptr);
24069 		}
24070 	}
24071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24072 }
24073 
ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24075 {
24076 	zval *array;
24077 	uint32_t size;
24078 	USE_OPLINE
24079 
24080 	array = EX_VAR(opline->result.var);
24081 	if (IS_VAR != IS_UNUSED) {
24082 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
24083 		ZVAL_ARR(array, zend_new_array(size));
24084 		/* Explicitly initialize array as not-packed if flag is set */
24085 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
24086 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
24087 		}
24088 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24089 	} else {
24090 		ZVAL_ARR(array, zend_new_array(0));
24091 		ZEND_VM_NEXT_OPCODE();
24092 	}
24093 }
24094 
ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24095 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24096 {
24097 	USE_OPLINE
24098 	zend_free_op free_op1;
24099 	zval *container;
24100 	zval *offset;
24101 	zend_ulong hval;
24102 	zend_string *key;
24103 
24104 	SAVE_OPLINE();
24105 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24106 	offset = RT_CONSTANT(opline, opline->op2);
24107 
24108 	do {
24109 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24110 			HashTable *ht;
24111 
24112 unset_dim_array:
24113 			SEPARATE_ARRAY(container);
24114 			ht = Z_ARRVAL_P(container);
24115 offset_again:
24116 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
24117 				key = Z_STR_P(offset);
24118 				if (IS_CONST != IS_CONST) {
24119 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
24120 						goto num_index_dim;
24121 					}
24122 				}
24123 str_index_dim:
24124 				if (ht == &EG(symbol_table)) {
24125 					zend_delete_global_variable(key);
24126 				} else {
24127 					zend_hash_del(ht, key);
24128 				}
24129 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
24130 				hval = Z_LVAL_P(offset);
24131 num_index_dim:
24132 				zend_hash_index_del(ht, hval);
24133 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
24134 				offset = Z_REFVAL_P(offset);
24135 				goto offset_again;
24136 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
24137 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
24138 				goto num_index_dim;
24139 			} else if (Z_TYPE_P(offset) == IS_NULL) {
24140 				key = ZSTR_EMPTY_ALLOC();
24141 				goto str_index_dim;
24142 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
24143 				hval = 0;
24144 				goto num_index_dim;
24145 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
24146 				hval = 1;
24147 				goto num_index_dim;
24148 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
24149 				hval = Z_RES_HANDLE_P(offset);
24150 				goto num_index_dim;
24151 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
24152 				ZVAL_UNDEFINED_OP2();
24153 				key = ZSTR_EMPTY_ALLOC();
24154 				goto str_index_dim;
24155 			} else {
24156 				zend_error(E_WARNING, "Illegal offset type in unset");
24157 			}
24158 			break;
24159 		} else if (Z_ISREF_P(container)) {
24160 			container = Z_REFVAL_P(container);
24161 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24162 				goto unset_dim_array;
24163 			}
24164 		}
24165 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24166 			container = ZVAL_UNDEFINED_OP1();
24167 		}
24168 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
24169 			offset = ZVAL_UNDEFINED_OP2();
24170 		}
24171 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24172 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
24173 				offset++;
24174 			}
24175 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
24176 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
24177 			zend_throw_error(NULL, "Cannot unset string offsets");
24178 		}
24179 	} while (0);
24180 
24181 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24182 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24183 }
24184 
ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24186 {
24187 	USE_OPLINE
24188 	zend_free_op free_op1;
24189 	zval *container;
24190 	zval *offset;
24191 
24192 	SAVE_OPLINE();
24193 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24194 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24195 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24196 	}
24197 	offset = RT_CONSTANT(opline, opline->op2);
24198 
24199 	do {
24200 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
24201 			if (Z_ISREF_P(container)) {
24202 				container = Z_REFVAL_P(container);
24203 				if (Z_TYPE_P(container) != IS_OBJECT) {
24204 					if (IS_VAR == IS_CV
24205 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24206 						ZVAL_UNDEFINED_OP1();
24207 					}
24208 					break;
24209 				}
24210 			} else {
24211 				break;
24212 			}
24213 		}
24214 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
24215 	} while (0);
24216 
24217 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24218 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24219 }
24220 
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24221 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24222 {
24223 	USE_OPLINE
24224 
24225 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
24226 
24227 	SAVE_OPLINE();
24228 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
24229 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24230 	}
24231 
24232 	/* Destroy the previously yielded value */
24233 	zval_ptr_dtor(&generator->value);
24234 
24235 	/* Destroy the previously yielded key */
24236 	zval_ptr_dtor(&generator->key);
24237 
24238 	/* Set the new yielded value */
24239 	if (IS_VAR != IS_UNUSED) {
24240 		zend_free_op free_op1;
24241 
24242 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
24243 			/* Constants and temporary variables aren't yieldable by reference,
24244 			 * but we still allow them with a notice. */
24245 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
24246 				zval *value;
24247 
24248 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24249 
24250 				value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24251 				ZVAL_COPY_VALUE(&generator->value, value);
24252 				if (IS_VAR == IS_CONST) {
24253 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24254 						Z_ADDREF(generator->value);
24255 					}
24256 				}
24257 			} else {
24258 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24259 
24260 				/* If a function call result is yielded and the function did
24261 				 * not return by reference we throw a notice. */
24262 				do {
24263 					if (IS_VAR == IS_VAR) {
24264 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
24265 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
24266 						 && !Z_ISREF_P(value_ptr)) {
24267 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
24268 							ZVAL_COPY(&generator->value, value_ptr);
24269 							break;
24270 						}
24271 					}
24272 					if (Z_ISREF_P(value_ptr)) {
24273 						Z_ADDREF_P(value_ptr);
24274 					} else {
24275 						ZVAL_MAKE_REF_EX(value_ptr, 2);
24276 					}
24277 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
24278 				} while (0);
24279 
24280 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24281 			}
24282 		} else {
24283 			zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24284 
24285 			/* Consts, temporary variables and references need copying */
24286 			if (IS_VAR == IS_CONST) {
24287 				ZVAL_COPY_VALUE(&generator->value, value);
24288 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
24289 					Z_ADDREF(generator->value);
24290 				}
24291 			} else if (IS_VAR == IS_TMP_VAR) {
24292 				ZVAL_COPY_VALUE(&generator->value, value);
24293             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
24294 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
24295 				zval_ptr_dtor_nogc(free_op1);
24296 			} else {
24297 				ZVAL_COPY_VALUE(&generator->value, value);
24298 				if (IS_VAR == IS_CV) {
24299 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
24300 				}
24301 			}
24302 		}
24303 	} else {
24304 		/* If no value was specified yield null */
24305 		ZVAL_NULL(&generator->value);
24306 	}
24307 
24308 	/* Set the new yielded key */
24309 	if (IS_CONST != IS_UNUSED) {
24310 
24311 		zval *key = RT_CONSTANT(opline, opline->op2);
24312 
24313 		/* Consts, temporary variables and references need copying */
24314 		if (IS_CONST == IS_CONST) {
24315 			ZVAL_COPY_VALUE(&generator->key, key);
24316 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
24317 				Z_ADDREF(generator->key);
24318 			}
24319 		} else if (IS_CONST == IS_TMP_VAR) {
24320 			ZVAL_COPY_VALUE(&generator->key, key);
24321 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
24322 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
24323 
24324 		} else {
24325 			ZVAL_COPY_VALUE(&generator->key, key);
24326 			if (IS_CONST == IS_CV) {
24327 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
24328 			}
24329 		}
24330 
24331 		if (Z_TYPE(generator->key) == IS_LONG
24332 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
24333 		) {
24334 			generator->largest_used_integer_key = Z_LVAL(generator->key);
24335 		}
24336 	} else {
24337 		/* If no key was specified we use auto-increment keys */
24338 		generator->largest_used_integer_key++;
24339 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
24340 	}
24341 
24342 	if (RETURN_VALUE_USED(opline)) {
24343 		/* If the return value of yield is used set the send
24344 		 * target and initialize it to NULL */
24345 		generator->send_target = EX_VAR(opline->result.var);
24346 		ZVAL_NULL(generator->send_target);
24347 	} else {
24348 		generator->send_target = NULL;
24349 	}
24350 
24351 	/* We increment to the next op, so we are at the correct position when the
24352 	 * generator is resumed. */
24353 	ZEND_VM_INC_OPCODE();
24354 
24355 	/* The GOTO VM uses a local opline variable. We need to set the opline
24356 	 * variable in execute_data so we don't resume at an old position. */
24357 	SAVE_OPLINE();
24358 
24359 	ZEND_VM_RETURN();
24360 }
24361 
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24362 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24363 {
24364 	USE_OPLINE
24365 	zend_free_op free_op1;
24366 	zval *op1;
24367 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
24368 	zval *result;
24369 
24370 	SAVE_OPLINE();
24371 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24372 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
24373 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
24374 	} else if (opline->extended_value) {
24375 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
24376 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
24377 		} else {
24378 			result = NULL;
24379 		}
24380 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
24381 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
24382 	} else {
24383 		zend_string *key;
24384 		zval key_tmp, result_tmp, *val;
24385 
24386 		result = NULL;
24387 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
24388 			ZVAL_STR(&key_tmp, key);
24389 			compare_function(&result_tmp, op1, &key_tmp);
24390 			if (Z_LVAL(result_tmp) == 0) {
24391 				result = val;
24392 				break;
24393 			}
24394 		} ZEND_HASH_FOREACH_END();
24395 	}
24396 	zval_ptr_dtor_nogc(free_op1);
24397 	ZEND_VM_SMART_BRANCH(result, 1);
24398 	ZVAL_BOOL(EX_VAR(opline->result.var), result != NULL);
24399 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24400 }
24401 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24402 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24403 {
24404 	USE_OPLINE
24405 	zend_free_op free_op1, free_op2, free_op_data;
24406 	zval *object;
24407 	zval *property;
24408 	zval *value;
24409 	zval *zptr;
24410 	void **cache_slot;
24411 	zend_property_info *prop_info;
24412 
24413 	SAVE_OPLINE();
24414 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24415 
24416 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24417 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24418 	}
24419 
24420 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24421 
24422 	do {
24423 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
24424 
24425 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24426 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24427 				object = Z_REFVAL_P(object);
24428 				goto assign_op_object;
24429 			}
24430 			if (IS_VAR == IS_CV
24431 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24432 				ZVAL_UNDEFINED_OP1();
24433 			}
24434 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
24435 			if (UNEXPECTED(!object)) {
24436 				break;
24437 			}
24438 		}
24439 
24440 assign_op_object:
24441 		/* here we are sure we are dealing with an object */
24442 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
24443 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
24444 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
24445 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24446 					ZVAL_NULL(EX_VAR(opline->result.var));
24447 				}
24448 			} else {
24449 				zval *orig_zptr = zptr;
24450 				zend_reference *ref;
24451 
24452 				do {
24453 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
24454 						ref = Z_REF_P(zptr);
24455 						zptr = Z_REFVAL_P(zptr);
24456 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
24457 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
24458 							break;
24459 						}
24460 					}
24461 
24462 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24463 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
24464 					} else {
24465 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
24466 					}
24467 					if (UNEXPECTED(prop_info)) {
24468 						/* special case for typed properties */
24469 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
24470 					} else {
24471 						zend_binary_op(zptr, zptr, value OPLINE_CC);
24472 					}
24473 				} while (0);
24474 
24475 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24476 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
24477 				}
24478 			}
24479 		} else {
24480 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
24481 		}
24482 	} while (0);
24483 
24484 	FREE_OP(free_op_data);
24485 	zval_ptr_dtor_nogc(free_op2);
24486 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24487 	/* assign_obj has two opcodes! */
24488 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24489 }
24490 
24491 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24493 {
24494 	USE_OPLINE
24495 	zend_free_op free_op1, free_op2, free_op_data1;
24496 	zval *var_ptr;
24497 	zval *value, *container, *dim;
24498 
24499 	SAVE_OPLINE();
24500 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24501 
24502 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24503 assign_dim_op_array:
24504 		SEPARATE_ARRAY(container);
24505 assign_dim_op_new_array:
24506 		dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24507 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
24508 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
24509 			if (UNEXPECTED(!var_ptr)) {
24510 				zend_cannot_add_element();
24511 				goto assign_dim_op_ret_null;
24512 			}
24513 		} else {
24514 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24515 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
24516 			} else {
24517 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
24518 			}
24519 			if (UNEXPECTED(!var_ptr)) {
24520 				goto assign_dim_op_ret_null;
24521 			}
24522 		}
24523 
24524 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
24525 
24526 		do {
24527 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
24528 				zend_reference *ref = Z_REF_P(var_ptr);
24529 				var_ptr = Z_REFVAL_P(var_ptr);
24530 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
24531 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
24532 					break;
24533 				}
24534 			}
24535 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
24536 		} while (0);
24537 
24538 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24539 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
24540 		}
24541 		FREE_OP(free_op_data1);
24542 	} else {
24543 		if (EXPECTED(Z_ISREF_P(container))) {
24544 			container = Z_REFVAL_P(container);
24545 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
24546 				goto assign_dim_op_array;
24547 			}
24548 		}
24549 
24550 		dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24551 
24552 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24553 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24554 				dim++;
24555 			}
24556 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
24557 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
24558 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
24559 				ZVAL_UNDEFINED_OP1();
24560 			}
24561 			ZVAL_ARR(container, zend_new_array(8));
24562 			goto assign_dim_op_new_array;
24563 		} else {
24564 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
24565 assign_dim_op_ret_null:
24566 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
24567 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24568 				ZVAL_NULL(EX_VAR(opline->result.var));
24569 			}
24570 		}
24571 	}
24572 
24573 	zval_ptr_dtor_nogc(free_op2);
24574 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24575 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24576 }
24577 
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24579 {
24580 	USE_OPLINE
24581 	zend_free_op free_op1, free_op2;
24582 	zval *var_ptr;
24583 	zval *value;
24584 
24585 	SAVE_OPLINE();
24586 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24587 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24588 
24589 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
24590 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24591 			ZVAL_NULL(EX_VAR(opline->result.var));
24592 		}
24593 	} else {
24594 		do {
24595 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
24596 				zend_reference *ref = Z_REF_P(var_ptr);
24597 				var_ptr = Z_REFVAL_P(var_ptr);
24598 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
24599 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
24600 					break;
24601 				}
24602 			}
24603 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
24604 		} while (0);
24605 
24606 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24607 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
24608 		}
24609 	}
24610 
24611 	zval_ptr_dtor_nogc(free_op2);
24612 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24613 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24614 }
24615 
ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24617 {
24618 	USE_OPLINE
24619 	zend_free_op free_op1, free_op2;
24620 	zval *object;
24621 	zval *property;
24622 	zval *zptr;
24623 	void **cache_slot;
24624 	zend_property_info *prop_info;
24625 
24626 	SAVE_OPLINE();
24627 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24628 
24629 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24630 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24631 	}
24632 
24633 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24634 
24635 	do {
24636 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24637 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24638 				object = Z_REFVAL_P(object);
24639 				goto pre_incdec_object;
24640 			}
24641 			if (IS_VAR == IS_CV
24642 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24643 				ZVAL_UNDEFINED_OP1();
24644 			}
24645 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
24646 			if (UNEXPECTED(!object)) {
24647 				break;
24648 			}
24649 		}
24650 
24651 pre_incdec_object:
24652 		/* here we are sure we are dealing with an object */
24653 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
24654 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
24655 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
24656 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24657 					ZVAL_NULL(EX_VAR(opline->result.var));
24658 				}
24659 			} else {
24660 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24661 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
24662 				} else {
24663 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
24664 				}
24665 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
24666 			}
24667 		} else {
24668 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
24669 		}
24670 	} while (0);
24671 
24672 	zval_ptr_dtor_nogc(free_op2);
24673 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24674 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24675 }
24676 
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24678 {
24679 	USE_OPLINE
24680 	zend_free_op free_op1, free_op2;
24681 	zval *object;
24682 	zval *property;
24683 	zval *zptr;
24684 	void **cache_slot;
24685 	zend_property_info *prop_info;
24686 
24687 	SAVE_OPLINE();
24688 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24689 
24690 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24691 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24692 	}
24693 
24694 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24695 
24696 	do {
24697 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24698 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24699 				object = Z_REFVAL_P(object);
24700 				goto post_incdec_object;
24701 			}
24702 			if (IS_VAR == IS_CV
24703 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24704 				ZVAL_UNDEFINED_OP1();
24705 			}
24706 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
24707 			if (UNEXPECTED(!object)) {
24708 				break;
24709 			}
24710 		}
24711 
24712 post_incdec_object:
24713 		/* here we are sure we are dealing with an object */
24714 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
24715 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
24716 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
24717 				ZVAL_NULL(EX_VAR(opline->result.var));
24718 			} else {
24719 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
24720 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
24721 				} else {
24722 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
24723 				}
24724 
24725 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
24726 			}
24727 		} else {
24728 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
24729 		}
24730 	} while (0);
24731 
24732 	zval_ptr_dtor_nogc(free_op2);
24733 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
24734 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24735 }
24736 
ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24737 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24738 {
24739 	USE_OPLINE
24740 	zend_free_op free_op1, free_op2;
24741 	zval *container;
24742 
24743 	SAVE_OPLINE();
24744 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24745 	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
24746 	zval_ptr_dtor_nogc(free_op2);
24747 	if (IS_VAR == IS_VAR) {
24748 		zval *result = EX_VAR(opline->result.var);
24749 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24750 	}
24751 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24752 }
24753 
ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24755 {
24756 	USE_OPLINE
24757 	zend_free_op free_op1, free_op2;
24758 	zval *container;
24759 
24760 	SAVE_OPLINE();
24761 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24762 	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
24763 	zval_ptr_dtor_nogc(free_op2);
24764 	if (IS_VAR == IS_VAR) {
24765 		zval *result = EX_VAR(opline->result.var);
24766 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24767 	}
24768 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24769 }
24770 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24772 {
24773 #if 0
24774 	USE_OPLINE
24775 #endif
24776 
24777 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
24778         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
24779 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24780         }
24781 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24782 	} else {
24783 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
24784 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24785 		}
24786 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24787 	}
24788 }
24789 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24791 {
24792 	USE_OPLINE
24793 	zend_free_op free_op1, free_op2;
24794 	zval *container;
24795 
24796 	SAVE_OPLINE();
24797 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24798 	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
24799 	zval_ptr_dtor_nogc(free_op2);
24800 	if (IS_VAR == IS_VAR) {
24801 		zval *result = EX_VAR(opline->result.var);
24802 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24803 	}
24804 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24805 }
24806 
ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24808 {
24809 	USE_OPLINE
24810 	zend_free_op free_op1, free_op2;
24811 	zval *property, *container, *result;
24812 
24813 	SAVE_OPLINE();
24814 
24815 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24816 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24817 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24818 	}
24819 
24820 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24821 	result = EX_VAR(opline->result.var);
24822 	zend_fetch_property_address(
24823 		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
24824 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
24825 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
24826 	zval_ptr_dtor_nogc(free_op2);
24827 	if (IS_VAR == IS_VAR) {
24828 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24829 	}
24830 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24831 }
24832 
ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24833 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24834 {
24835 	USE_OPLINE
24836 	zend_free_op free_op1, free_op2;
24837 	zval *property, *container, *result;
24838 
24839 	SAVE_OPLINE();
24840 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24841 
24842 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24843 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24844 	}
24845 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24846 	result = EX_VAR(opline->result.var);
24847 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
24848 	zval_ptr_dtor_nogc(free_op2);
24849 	if (IS_VAR == IS_VAR) {
24850 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24851 	}
24852 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24853 }
24854 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24856 {
24857 #if 0
24858 	USE_OPLINE
24859 #endif
24860 
24861 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
24862 		/* Behave like FETCH_OBJ_W */
24863 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
24864 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24865 		}
24866 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24867 	} else {
24868 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24869 	}
24870 }
24871 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24873 {
24874 	USE_OPLINE
24875 	zend_free_op free_op1, free_op2;
24876 	zval *container, *property, *result;
24877 
24878 	SAVE_OPLINE();
24879 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24880 
24881 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
24882 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24883 	}
24884 
24885 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24886 	result = EX_VAR(opline->result.var);
24887 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
24888 	zval_ptr_dtor_nogc(free_op2);
24889 	if (IS_VAR == IS_VAR) {
24890 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
24891 	}
24892 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24893 }
24894 
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24896 {
24897 	USE_OPLINE
24898 	zend_free_op free_op1, free_op2;
24899 	zval *container, *dim;
24900 
24901 	SAVE_OPLINE();
24902 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24903 	dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24904 
24905 	if (IS_VAR == IS_VAR
24906 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
24907 		&& UNEXPECTED(!Z_ISREF_P(container))
24908 	) {
24909 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
24910 		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
24911 	} else {
24912 		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
24913 	}
24914 
24915 	zval_ptr_dtor_nogc(free_op2);
24916 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24917 }
24918 
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24919 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24920 {
24921 	USE_OPLINE
24922 	zend_free_op free_op1, free_op2;
24923 	zval *object, *property, *value, tmp;
24924 
24925 	SAVE_OPLINE();
24926 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
24927 
24928 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
24929 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
24930 	}
24931 
24932 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
24933 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
24934 
24935 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
24936 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
24937 			object = Z_REFVAL_P(object);
24938 			goto assign_object;
24939 		}
24940 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
24941 		if (UNEXPECTED(!object)) {
24942 			value = &EG(uninitialized_zval);
24943 			goto free_and_exit_assign_obj;
24944 		}
24945 	}
24946 
24947 assign_object:
24948 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
24949 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
24950 		void **cache_slot = CACHE_ADDR(opline->extended_value);
24951 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
24952 		zend_object *zobj = Z_OBJ_P(object);
24953 		zval *property_val;
24954 
24955 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
24956 			property_val = OBJ_PROP(zobj, prop_offset);
24957 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
24958 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
24959 
24960 				if (UNEXPECTED(prop_info != NULL)) {
24961 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
24962 					goto free_and_exit_assign_obj;
24963 				} else {
24964 fast_assign_obj:
24965 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
24966 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24967 						ZVAL_COPY(EX_VAR(opline->result.var), value);
24968 					}
24969 					goto exit_assign_obj;
24970 				}
24971 			}
24972 		} else {
24973 			if (EXPECTED(zobj->properties != NULL)) {
24974 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
24975 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
24976 						GC_DELREF(zobj->properties);
24977 					}
24978 					zobj->properties = zend_array_dup(zobj->properties);
24979 				}
24980 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
24981 				if (property_val) {
24982 					goto fast_assign_obj;
24983 				}
24984 			}
24985 
24986 			if (!zobj->ce->__set) {
24987 
24988 				if (EXPECTED(zobj->properties == NULL)) {
24989 					rebuild_object_properties(zobj);
24990 				}
24991 				if (IS_CONST == IS_CONST) {
24992 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
24993 						Z_ADDREF_P(value);
24994 					}
24995 				} else if (IS_CONST != IS_TMP_VAR) {
24996 					if (Z_ISREF_P(value)) {
24997 						if (IS_CONST == IS_VAR) {
24998 							zend_reference *ref = Z_REF_P(value);
24999 							if (GC_DELREF(ref) == 0) {
25000 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25001 								efree_size(ref, sizeof(zend_reference));
25002 								value = &tmp;
25003 							} else {
25004 								value = Z_REFVAL_P(value);
25005 								Z_TRY_ADDREF_P(value);
25006 							}
25007 						} else {
25008 							value = Z_REFVAL_P(value);
25009 							Z_TRY_ADDREF_P(value);
25010 						}
25011 					} else if (IS_CONST == IS_CV) {
25012 						Z_TRY_ADDREF_P(value);
25013 					}
25014 				}
25015 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25016 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25017 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25018 				}
25019 				goto exit_assign_obj;
25020 			}
25021 		}
25022 	}
25023 
25024 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
25025 		ZVAL_DEREF(value);
25026 	}
25027 
25028 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25029 
25030 free_and_exit_assign_obj:
25031 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25032 		ZVAL_COPY(EX_VAR(opline->result.var), value);
25033 	}
25034 
25035 exit_assign_obj:
25036 	zval_ptr_dtor_nogc(free_op2);
25037 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25038 	/* assign_obj has two opcodes! */
25039 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25040 }
25041 
25042 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25043 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25044 {
25045 	USE_OPLINE
25046 	zend_free_op free_op1, free_op2, free_op_data;
25047 	zval *object, *property, *value, tmp;
25048 
25049 	SAVE_OPLINE();
25050 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25051 
25052 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25053 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25054 	}
25055 
25056 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25057 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25058 
25059 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25060 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25061 			object = Z_REFVAL_P(object);
25062 			goto assign_object;
25063 		}
25064 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
25065 		if (UNEXPECTED(!object)) {
25066 			value = &EG(uninitialized_zval);
25067 			goto free_and_exit_assign_obj;
25068 		}
25069 	}
25070 
25071 assign_object:
25072 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25073 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
25074 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25075 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25076 		zend_object *zobj = Z_OBJ_P(object);
25077 		zval *property_val;
25078 
25079 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25080 			property_val = OBJ_PROP(zobj, prop_offset);
25081 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25082 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25083 
25084 				if (UNEXPECTED(prop_info != NULL)) {
25085 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25086 					goto free_and_exit_assign_obj;
25087 				} else {
25088 fast_assign_obj:
25089 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
25090 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25091 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25092 					}
25093 					goto exit_assign_obj;
25094 				}
25095 			}
25096 		} else {
25097 			if (EXPECTED(zobj->properties != NULL)) {
25098 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25099 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25100 						GC_DELREF(zobj->properties);
25101 					}
25102 					zobj->properties = zend_array_dup(zobj->properties);
25103 				}
25104 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25105 				if (property_val) {
25106 					goto fast_assign_obj;
25107 				}
25108 			}
25109 
25110 			if (!zobj->ce->__set) {
25111 
25112 				if (EXPECTED(zobj->properties == NULL)) {
25113 					rebuild_object_properties(zobj);
25114 				}
25115 				if (IS_TMP_VAR == IS_CONST) {
25116 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25117 						Z_ADDREF_P(value);
25118 					}
25119 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
25120 					if (Z_ISREF_P(value)) {
25121 						if (IS_TMP_VAR == IS_VAR) {
25122 							zend_reference *ref = Z_REF_P(value);
25123 							if (GC_DELREF(ref) == 0) {
25124 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25125 								efree_size(ref, sizeof(zend_reference));
25126 								value = &tmp;
25127 							} else {
25128 								value = Z_REFVAL_P(value);
25129 								Z_TRY_ADDREF_P(value);
25130 							}
25131 						} else {
25132 							value = Z_REFVAL_P(value);
25133 							Z_TRY_ADDREF_P(value);
25134 						}
25135 					} else if (IS_TMP_VAR == IS_CV) {
25136 						Z_TRY_ADDREF_P(value);
25137 					}
25138 				}
25139 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25140 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25141 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25142 				}
25143 				goto exit_assign_obj;
25144 			}
25145 		}
25146 	}
25147 
25148 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
25149 		ZVAL_DEREF(value);
25150 	}
25151 
25152 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25153 
25154 free_and_exit_assign_obj:
25155 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25156 		ZVAL_COPY(EX_VAR(opline->result.var), value);
25157 	}
25158 	zval_ptr_dtor_nogc(free_op_data);
25159 exit_assign_obj:
25160 	zval_ptr_dtor_nogc(free_op2);
25161 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25162 	/* assign_obj has two opcodes! */
25163 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25164 }
25165 
25166 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25167 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25168 {
25169 	USE_OPLINE
25170 	zend_free_op free_op1, free_op2, free_op_data;
25171 	zval *object, *property, *value, tmp;
25172 
25173 	SAVE_OPLINE();
25174 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25175 
25176 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25177 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25178 	}
25179 
25180 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25181 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25182 
25183 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25184 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25185 			object = Z_REFVAL_P(object);
25186 			goto assign_object;
25187 		}
25188 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
25189 		if (UNEXPECTED(!object)) {
25190 			value = &EG(uninitialized_zval);
25191 			goto free_and_exit_assign_obj;
25192 		}
25193 	}
25194 
25195 assign_object:
25196 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25197 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
25198 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25199 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25200 		zend_object *zobj = Z_OBJ_P(object);
25201 		zval *property_val;
25202 
25203 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25204 			property_val = OBJ_PROP(zobj, prop_offset);
25205 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25206 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25207 
25208 				if (UNEXPECTED(prop_info != NULL)) {
25209 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25210 					goto free_and_exit_assign_obj;
25211 				} else {
25212 fast_assign_obj:
25213 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
25214 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25215 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25216 					}
25217 					goto exit_assign_obj;
25218 				}
25219 			}
25220 		} else {
25221 			if (EXPECTED(zobj->properties != NULL)) {
25222 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25223 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25224 						GC_DELREF(zobj->properties);
25225 					}
25226 					zobj->properties = zend_array_dup(zobj->properties);
25227 				}
25228 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25229 				if (property_val) {
25230 					goto fast_assign_obj;
25231 				}
25232 			}
25233 
25234 			if (!zobj->ce->__set) {
25235 
25236 				if (EXPECTED(zobj->properties == NULL)) {
25237 					rebuild_object_properties(zobj);
25238 				}
25239 				if (IS_VAR == IS_CONST) {
25240 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25241 						Z_ADDREF_P(value);
25242 					}
25243 				} else if (IS_VAR != IS_TMP_VAR) {
25244 					if (Z_ISREF_P(value)) {
25245 						if (IS_VAR == IS_VAR) {
25246 							zend_reference *ref = Z_REF_P(value);
25247 							if (GC_DELREF(ref) == 0) {
25248 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25249 								efree_size(ref, sizeof(zend_reference));
25250 								value = &tmp;
25251 							} else {
25252 								value = Z_REFVAL_P(value);
25253 								Z_TRY_ADDREF_P(value);
25254 							}
25255 						} else {
25256 							value = Z_REFVAL_P(value);
25257 							Z_TRY_ADDREF_P(value);
25258 						}
25259 					} else if (IS_VAR == IS_CV) {
25260 						Z_TRY_ADDREF_P(value);
25261 					}
25262 				}
25263 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25264 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25265 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25266 				}
25267 				goto exit_assign_obj;
25268 			}
25269 		}
25270 	}
25271 
25272 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
25273 		ZVAL_DEREF(value);
25274 	}
25275 
25276 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25277 
25278 free_and_exit_assign_obj:
25279 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25280 		ZVAL_COPY(EX_VAR(opline->result.var), value);
25281 	}
25282 	zval_ptr_dtor_nogc(free_op_data);
25283 exit_assign_obj:
25284 	zval_ptr_dtor_nogc(free_op2);
25285 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25286 	/* assign_obj has two opcodes! */
25287 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25288 }
25289 
25290 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25291 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25292 {
25293 	USE_OPLINE
25294 	zend_free_op free_op1, free_op2;
25295 	zval *object, *property, *value, tmp;
25296 
25297 	SAVE_OPLINE();
25298 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25299 
25300 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25301 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25302 	}
25303 
25304 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25305 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
25306 
25307 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25308 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25309 			object = Z_REFVAL_P(object);
25310 			goto assign_object;
25311 		}
25312 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
25313 		if (UNEXPECTED(!object)) {
25314 			value = &EG(uninitialized_zval);
25315 			goto free_and_exit_assign_obj;
25316 		}
25317 	}
25318 
25319 assign_object:
25320 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
25321 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
25322 		void **cache_slot = CACHE_ADDR(opline->extended_value);
25323 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
25324 		zend_object *zobj = Z_OBJ_P(object);
25325 		zval *property_val;
25326 
25327 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
25328 			property_val = OBJ_PROP(zobj, prop_offset);
25329 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
25330 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
25331 
25332 				if (UNEXPECTED(prop_info != NULL)) {
25333 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
25334 					goto free_and_exit_assign_obj;
25335 				} else {
25336 fast_assign_obj:
25337 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
25338 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25339 						ZVAL_COPY(EX_VAR(opline->result.var), value);
25340 					}
25341 					goto exit_assign_obj;
25342 				}
25343 			}
25344 		} else {
25345 			if (EXPECTED(zobj->properties != NULL)) {
25346 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
25347 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
25348 						GC_DELREF(zobj->properties);
25349 					}
25350 					zobj->properties = zend_array_dup(zobj->properties);
25351 				}
25352 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
25353 				if (property_val) {
25354 					goto fast_assign_obj;
25355 				}
25356 			}
25357 
25358 			if (!zobj->ce->__set) {
25359 
25360 				if (EXPECTED(zobj->properties == NULL)) {
25361 					rebuild_object_properties(zobj);
25362 				}
25363 				if (IS_CV == IS_CONST) {
25364 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
25365 						Z_ADDREF_P(value);
25366 					}
25367 				} else if (IS_CV != IS_TMP_VAR) {
25368 					if (Z_ISREF_P(value)) {
25369 						if (IS_CV == IS_VAR) {
25370 							zend_reference *ref = Z_REF_P(value);
25371 							if (GC_DELREF(ref) == 0) {
25372 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
25373 								efree_size(ref, sizeof(zend_reference));
25374 								value = &tmp;
25375 							} else {
25376 								value = Z_REFVAL_P(value);
25377 								Z_TRY_ADDREF_P(value);
25378 							}
25379 						} else {
25380 							value = Z_REFVAL_P(value);
25381 							Z_TRY_ADDREF_P(value);
25382 						}
25383 					} else if (IS_CV == IS_CV) {
25384 						Z_TRY_ADDREF_P(value);
25385 					}
25386 				}
25387 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
25388 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25389 					ZVAL_COPY(EX_VAR(opline->result.var), value);
25390 				}
25391 				goto exit_assign_obj;
25392 			}
25393 		}
25394 	}
25395 
25396 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
25397 		ZVAL_DEREF(value);
25398 	}
25399 
25400 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
25401 
25402 free_and_exit_assign_obj:
25403 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25404 		ZVAL_COPY(EX_VAR(opline->result.var), value);
25405 	}
25406 
25407 exit_assign_obj:
25408 	zval_ptr_dtor_nogc(free_op2);
25409 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25410 	/* assign_obj has two opcodes! */
25411 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25412 }
25413 
25414 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25415 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25416 {
25417 	USE_OPLINE
25418 	zend_free_op free_op1;
25419 	zval *object_ptr, *orig_object_ptr;
25420 	zend_free_op free_op2, free_op_data;
25421 	zval *value;
25422 	zval *variable_ptr;
25423 	zval *dim;
25424 
25425 	SAVE_OPLINE();
25426 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25427 
25428 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25429 try_assign_dim_array:
25430 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
25431 		SEPARATE_ARRAY(object_ptr);
25432 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25433 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
25434 				ZVAL_DEREF(value);
25435 			}
25436 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25437 			if (UNEXPECTED(variable_ptr == NULL)) {
25438 				zend_cannot_add_element();
25439 				goto assign_dim_error;
25440 			} else if (IS_CONST == IS_CV) {
25441 				if (Z_REFCOUNTED_P(value)) {
25442 					Z_ADDREF_P(value);
25443 				}
25444 			} else if (IS_CONST == IS_VAR) {
25445 				if (value != free_op_data) {
25446 					if (Z_REFCOUNTED_P(value)) {
25447 						Z_ADDREF_P(value);
25448 					}
25449 
25450 				}
25451 			} else if (IS_CONST == IS_CONST) {
25452 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
25453 					Z_ADDREF_P(value);
25454 				}
25455 			}
25456 		} else {
25457 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25458 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25459 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25460 			} else {
25461 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25462 			}
25463 			if (UNEXPECTED(variable_ptr == NULL)) {
25464 				goto assign_dim_error;
25465 			}
25466 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
25467 		}
25468 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25469 			ZVAL_COPY(EX_VAR(opline->result.var), value);
25470 		}
25471 	} else {
25472 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
25473 			object_ptr = Z_REFVAL_P(object_ptr);
25474 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25475 				goto try_assign_dim_array;
25476 			}
25477 		}
25478 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
25479 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25480 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
25481 
25482 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25483 				dim++;
25484 			}
25485 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25486 
25487 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25488 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25489 				zend_use_new_element_for_string();
25490 
25491 				UNDEF_RESULT();
25492 			} else {
25493 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25494 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
25495 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25496 
25497 			}
25498 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
25499 			if (Z_ISREF_P(orig_object_ptr)
25500 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25501 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25502 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25503 
25504 				UNDEF_RESULT();
25505 			} else {
25506 				ZVAL_ARR(object_ptr, zend_new_array(8));
25507 				goto try_assign_dim_array;
25508 			}
25509 		} else {
25510 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
25511 				zend_use_scalar_as_array();
25512 			}
25513 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25514 assign_dim_error:
25515 
25516 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25517 				ZVAL_NULL(EX_VAR(opline->result.var));
25518 			}
25519 		}
25520 	}
25521 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
25522 		zval_ptr_dtor_nogc(free_op2);
25523 	}
25524 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25525 	/* assign_dim has two opcodes! */
25526 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25527 }
25528 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25530 {
25531 	USE_OPLINE
25532 	zend_free_op free_op1;
25533 	zval *object_ptr, *orig_object_ptr;
25534 	zend_free_op free_op2, free_op_data;
25535 	zval *value;
25536 	zval *variable_ptr;
25537 	zval *dim;
25538 
25539 	SAVE_OPLINE();
25540 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25541 
25542 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25543 try_assign_dim_array:
25544 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25545 		SEPARATE_ARRAY(object_ptr);
25546 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25547 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
25548 				ZVAL_DEREF(value);
25549 			}
25550 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25551 			if (UNEXPECTED(variable_ptr == NULL)) {
25552 				zend_cannot_add_element();
25553 				goto assign_dim_error;
25554 			} else if (IS_TMP_VAR == IS_CV) {
25555 				if (Z_REFCOUNTED_P(value)) {
25556 					Z_ADDREF_P(value);
25557 				}
25558 			} else if (IS_TMP_VAR == IS_VAR) {
25559 				if (value != free_op_data) {
25560 					if (Z_REFCOUNTED_P(value)) {
25561 						Z_ADDREF_P(value);
25562 					}
25563 					zval_ptr_dtor_nogc(free_op_data);
25564 				}
25565 			} else if (IS_TMP_VAR == IS_CONST) {
25566 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
25567 					Z_ADDREF_P(value);
25568 				}
25569 			}
25570 		} else {
25571 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25572 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25573 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25574 			} else {
25575 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25576 			}
25577 			if (UNEXPECTED(variable_ptr == NULL)) {
25578 				goto assign_dim_error;
25579 			}
25580 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
25581 		}
25582 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25583 			ZVAL_COPY(EX_VAR(opline->result.var), value);
25584 		}
25585 	} else {
25586 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
25587 			object_ptr = Z_REFVAL_P(object_ptr);
25588 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25589 				goto try_assign_dim_array;
25590 			}
25591 		}
25592 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
25593 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25594 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25595 
25596 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25597 				dim++;
25598 			}
25599 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25600 
25601 			zval_ptr_dtor_nogc(free_op_data);
25602 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25603 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25604 				zend_use_new_element_for_string();
25605 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25606 				UNDEF_RESULT();
25607 			} else {
25608 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25609 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25610 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25611 				zval_ptr_dtor_nogc(free_op_data);
25612 			}
25613 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
25614 			if (Z_ISREF_P(orig_object_ptr)
25615 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25616 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25617 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25618 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25619 				UNDEF_RESULT();
25620 			} else {
25621 				ZVAL_ARR(object_ptr, zend_new_array(8));
25622 				goto try_assign_dim_array;
25623 			}
25624 		} else {
25625 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
25626 				zend_use_scalar_as_array();
25627 			}
25628 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25629 assign_dim_error:
25630 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25631 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25632 				ZVAL_NULL(EX_VAR(opline->result.var));
25633 			}
25634 		}
25635 	}
25636 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
25637 		zval_ptr_dtor_nogc(free_op2);
25638 	}
25639 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25640 	/* assign_dim has two opcodes! */
25641 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25642 }
25643 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25645 {
25646 	USE_OPLINE
25647 	zend_free_op free_op1;
25648 	zval *object_ptr, *orig_object_ptr;
25649 	zend_free_op free_op2, free_op_data;
25650 	zval *value;
25651 	zval *variable_ptr;
25652 	zval *dim;
25653 
25654 	SAVE_OPLINE();
25655 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25656 
25657 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25658 try_assign_dim_array:
25659 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25660 		SEPARATE_ARRAY(object_ptr);
25661 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25662 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
25663 				ZVAL_DEREF(value);
25664 			}
25665 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25666 			if (UNEXPECTED(variable_ptr == NULL)) {
25667 				zend_cannot_add_element();
25668 				goto assign_dim_error;
25669 			} else if (IS_VAR == IS_CV) {
25670 				if (Z_REFCOUNTED_P(value)) {
25671 					Z_ADDREF_P(value);
25672 				}
25673 			} else if (IS_VAR == IS_VAR) {
25674 				if (value != free_op_data) {
25675 					if (Z_REFCOUNTED_P(value)) {
25676 						Z_ADDREF_P(value);
25677 					}
25678 					zval_ptr_dtor_nogc(free_op_data);
25679 				}
25680 			} else if (IS_VAR == IS_CONST) {
25681 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
25682 					Z_ADDREF_P(value);
25683 				}
25684 			}
25685 		} else {
25686 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25687 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25688 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25689 			} else {
25690 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25691 			}
25692 			if (UNEXPECTED(variable_ptr == NULL)) {
25693 				goto assign_dim_error;
25694 			}
25695 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
25696 		}
25697 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25698 			ZVAL_COPY(EX_VAR(opline->result.var), value);
25699 		}
25700 	} else {
25701 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
25702 			object_ptr = Z_REFVAL_P(object_ptr);
25703 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25704 				goto try_assign_dim_array;
25705 			}
25706 		}
25707 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
25708 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25709 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25710 
25711 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25712 				dim++;
25713 			}
25714 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25715 
25716 			zval_ptr_dtor_nogc(free_op_data);
25717 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25718 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25719 				zend_use_new_element_for_string();
25720 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25721 				UNDEF_RESULT();
25722 			} else {
25723 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25724 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25725 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25726 				zval_ptr_dtor_nogc(free_op_data);
25727 			}
25728 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
25729 			if (Z_ISREF_P(orig_object_ptr)
25730 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25731 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25732 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25733 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25734 				UNDEF_RESULT();
25735 			} else {
25736 				ZVAL_ARR(object_ptr, zend_new_array(8));
25737 				goto try_assign_dim_array;
25738 			}
25739 		} else {
25740 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
25741 				zend_use_scalar_as_array();
25742 			}
25743 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25744 assign_dim_error:
25745 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
25746 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25747 				ZVAL_NULL(EX_VAR(opline->result.var));
25748 			}
25749 		}
25750 	}
25751 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
25752 		zval_ptr_dtor_nogc(free_op2);
25753 	}
25754 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25755 	/* assign_dim has two opcodes! */
25756 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25757 }
25758 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25760 {
25761 	USE_OPLINE
25762 	zend_free_op free_op1;
25763 	zval *object_ptr, *orig_object_ptr;
25764 	zend_free_op free_op2, free_op_data;
25765 	zval *value;
25766 	zval *variable_ptr;
25767 	zval *dim;
25768 
25769 	SAVE_OPLINE();
25770 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25771 
25772 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25773 try_assign_dim_array:
25774 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
25775 		SEPARATE_ARRAY(object_ptr);
25776 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25777 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
25778 				ZVAL_DEREF(value);
25779 			}
25780 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
25781 			if (UNEXPECTED(variable_ptr == NULL)) {
25782 				zend_cannot_add_element();
25783 				goto assign_dim_error;
25784 			} else if (IS_CV == IS_CV) {
25785 				if (Z_REFCOUNTED_P(value)) {
25786 					Z_ADDREF_P(value);
25787 				}
25788 			} else if (IS_CV == IS_VAR) {
25789 				if (value != free_op_data) {
25790 					if (Z_REFCOUNTED_P(value)) {
25791 						Z_ADDREF_P(value);
25792 					}
25793 
25794 				}
25795 			} else if (IS_CV == IS_CONST) {
25796 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
25797 					Z_ADDREF_P(value);
25798 				}
25799 			}
25800 		} else {
25801 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25802 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25803 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25804 			} else {
25805 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
25806 			}
25807 			if (UNEXPECTED(variable_ptr == NULL)) {
25808 				goto assign_dim_error;
25809 			}
25810 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
25811 		}
25812 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25813 			ZVAL_COPY(EX_VAR(opline->result.var), value);
25814 		}
25815 	} else {
25816 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
25817 			object_ptr = Z_REFVAL_P(object_ptr);
25818 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
25819 				goto try_assign_dim_array;
25820 			}
25821 		}
25822 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
25823 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25824 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
25825 
25826 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25827 				dim++;
25828 			}
25829 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25830 
25831 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25832 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25833 				zend_use_new_element_for_string();
25834 
25835 				UNDEF_RESULT();
25836 			} else {
25837 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25838 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
25839 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
25840 
25841 			}
25842 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
25843 			if (Z_ISREF_P(orig_object_ptr)
25844 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25845 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25846 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25847 
25848 				UNDEF_RESULT();
25849 			} else {
25850 				ZVAL_ARR(object_ptr, zend_new_array(8));
25851 				goto try_assign_dim_array;
25852 			}
25853 		} else {
25854 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
25855 				zend_use_scalar_as_array();
25856 			}
25857 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25858 assign_dim_error:
25859 
25860 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25861 				ZVAL_NULL(EX_VAR(opline->result.var));
25862 			}
25863 		}
25864 	}
25865 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
25866 		zval_ptr_dtor_nogc(free_op2);
25867 	}
25868 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25869 	/* assign_dim has two opcodes! */
25870 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25871 }
25872 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25873 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25874 {
25875 	USE_OPLINE
25876 	zend_free_op free_op1, free_op2, free_op_data;
25877 	zval *property, *container, *value_ptr;
25878 
25879 	SAVE_OPLINE();
25880 
25881 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25882 
25883 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25884 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25885 	}
25886 
25887 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25888 
25889 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
25890 
25891 	if (1) {
25892 		if (IS_VAR == IS_UNUSED) {
25893 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25894 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25895 			} else {
25896 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25897 			}
25898 		} else {
25899 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25900 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25901 			} else {
25902 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25903 			}
25904 		}
25905 	} else {
25906 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
25907 	}
25908 
25909 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25910 	zval_ptr_dtor_nogc(free_op2);
25911 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
25912 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25913 }
25914 
25915 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25917 {
25918 	USE_OPLINE
25919 	zend_free_op free_op1, free_op2;
25920 	zval *property, *container, *value_ptr;
25921 
25922 	SAVE_OPLINE();
25923 
25924 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
25925 
25926 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25927 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25928 	}
25929 
25930 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
25931 
25932 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
25933 
25934 	if (1) {
25935 		if (IS_VAR == IS_UNUSED) {
25936 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25937 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25938 			} else {
25939 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25940 			}
25941 		} else {
25942 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25943 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25944 			} else {
25945 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
25946 			}
25947 		}
25948 	} else {
25949 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
25950 	}
25951 
25952 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
25953 	zval_ptr_dtor_nogc(free_op2);
25954 
25955 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25956 }
25957 
25958 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25959 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25960 {
25961 	USE_OPLINE
25962 	zval *function_name;
25963 	zend_class_entry *ce;
25964 	uint32_t call_info;
25965 	zend_function *fbc;
25966 	zend_execute_data *call;
25967 
25968 	SAVE_OPLINE();
25969 
25970 	if (IS_VAR == IS_CONST) {
25971 		/* no function found. try a static method in class */
25972 		ce = CACHED_PTR(opline->result.num);
25973 		if (UNEXPECTED(ce == NULL)) {
25974 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
25975 			if (UNEXPECTED(ce == NULL)) {
25976 				ZEND_ASSERT(EG(exception));
25977 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25978 				HANDLE_EXCEPTION();
25979 			}
25980 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25981 				CACHE_PTR(opline->result.num, ce);
25982 			}
25983 		}
25984 	} else if (IS_VAR == IS_UNUSED) {
25985 		ce = zend_fetch_class(NULL, opline->op1.num);
25986 		if (UNEXPECTED(ce == NULL)) {
25987 			ZEND_ASSERT(EG(exception));
25988 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25989 			HANDLE_EXCEPTION();
25990 		}
25991 	} else {
25992 		ce = Z_CE_P(EX_VAR(opline->op1.var));
25993 	}
25994 
25995 	if (IS_VAR == IS_CONST &&
25996 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
25997 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
25998 		/* nothing to do */
25999 	} else if (IS_VAR != IS_CONST &&
26000 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
26001 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
26002 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
26003 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26004 		zend_free_op free_op2;
26005 
26006 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26007 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26008 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
26009 				do {
26010 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
26011 						function_name = Z_REFVAL_P(function_name);
26012 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
26013 							break;
26014 						}
26015 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
26016 						ZVAL_UNDEFINED_OP2();
26017 						if (UNEXPECTED(EG(exception) != NULL)) {
26018 							HANDLE_EXCEPTION();
26019 						}
26020 					}
26021 					zend_throw_error(NULL, "Function name must be a string");
26022 					zval_ptr_dtor_nogc(free_op2);
26023 					HANDLE_EXCEPTION();
26024 				} while (0);
26025 			}
26026 		}
26027 
26028 		if (ce->get_static_method) {
26029 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
26030 		} else {
26031 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
26032 		}
26033 		if (UNEXPECTED(fbc == NULL)) {
26034 			if (EXPECTED(!EG(exception))) {
26035 				zend_undefined_method(ce, Z_STR_P(function_name));
26036 			}
26037 			zval_ptr_dtor_nogc(free_op2);
26038 			HANDLE_EXCEPTION();
26039 		}
26040 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
26041 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
26042 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
26043 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
26044 		}
26045 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26046 			init_func_run_time_cache(&fbc->op_array);
26047 		}
26048 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26049 			zval_ptr_dtor_nogc(free_op2);
26050 		}
26051 	} else {
26052 		if (UNEXPECTED(ce->constructor == NULL)) {
26053 			zend_throw_error(NULL, "Cannot call constructor");
26054 			HANDLE_EXCEPTION();
26055 		}
26056 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
26057 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
26058 			HANDLE_EXCEPTION();
26059 		}
26060 		fbc = ce->constructor;
26061 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
26062 			init_func_run_time_cache(&fbc->op_array);
26063 		}
26064 	}
26065 
26066 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
26067 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
26068 			ce = (zend_class_entry*)Z_OBJ(EX(This));
26069 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
26070 		} else {
26071 			zend_non_static_method_call(fbc);
26072 			if (UNEXPECTED(EG(exception) != NULL)) {
26073 				HANDLE_EXCEPTION();
26074 			}
26075 			goto check_parent_and_self;
26076 		}
26077 	} else {
26078 check_parent_and_self:
26079 		/* previous opcode is ZEND_FETCH_CLASS */
26080 		if (IS_VAR == IS_UNUSED
26081 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
26082 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
26083 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
26084 				ce = Z_OBJCE(EX(This));
26085 			} else {
26086 				ce = Z_CE(EX(This));
26087 			}
26088 		}
26089 		call_info = ZEND_CALL_NESTED_FUNCTION;
26090 	}
26091 
26092 	call = zend_vm_stack_push_call_frame(call_info,
26093 		fbc, opline->extended_value, ce);
26094 	call->prev_execute_data = EX(call);
26095 	EX(call) = call;
26096 
26097 	ZEND_VM_NEXT_OPCODE();
26098 }
26099 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26101 {
26102 	USE_OPLINE
26103 	zend_free_op free_op1;
26104 	zval *expr_ptr, new_expr;
26105 
26106 	SAVE_OPLINE();
26107 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
26108 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
26109 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26110 		if (Z_ISREF_P(expr_ptr)) {
26111 			Z_ADDREF_P(expr_ptr);
26112 		} else {
26113 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
26114 		}
26115 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26116 	} else {
26117 		expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26118 		if (IS_VAR == IS_TMP_VAR) {
26119 			/* pass */
26120 		} else if (IS_VAR == IS_CONST) {
26121 			Z_TRY_ADDREF_P(expr_ptr);
26122 		} else if (IS_VAR == IS_CV) {
26123 			ZVAL_DEREF(expr_ptr);
26124 			Z_TRY_ADDREF_P(expr_ptr);
26125 		} else /* if (IS_VAR == IS_VAR) */ {
26126 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
26127 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
26128 
26129 				expr_ptr = Z_REFVAL_P(expr_ptr);
26130 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
26131 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
26132 					expr_ptr = &new_expr;
26133 					efree_size(ref, sizeof(zend_reference));
26134 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
26135 					Z_ADDREF_P(expr_ptr);
26136 				}
26137 			}
26138 		}
26139 	}
26140 
26141 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26142 		zend_free_op free_op2;
26143 		zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26144 		zend_string *str;
26145 		zend_ulong hval;
26146 
26147 add_again:
26148 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26149 			str = Z_STR_P(offset);
26150 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26151 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
26152 					goto num_index;
26153 				}
26154 			}
26155 str_index:
26156 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
26157 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26158 			hval = Z_LVAL_P(offset);
26159 num_index:
26160 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
26161 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
26162 			offset = Z_REFVAL_P(offset);
26163 			goto add_again;
26164 		} else if (Z_TYPE_P(offset) == IS_NULL) {
26165 			str = ZSTR_EMPTY_ALLOC();
26166 			goto str_index;
26167 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26168 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
26169 			goto num_index;
26170 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
26171 			hval = 0;
26172 			goto num_index;
26173 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
26174 			hval = 1;
26175 			goto num_index;
26176 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26177 			zend_use_resource_as_offset(offset);
26178 			hval = Z_RES_HANDLE_P(offset);
26179 			goto num_index;
26180 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26181 			ZVAL_UNDEFINED_OP2();
26182 			str = ZSTR_EMPTY_ALLOC();
26183 			goto str_index;
26184 		} else {
26185 			zend_illegal_offset();
26186 			zval_ptr_dtor_nogc(expr_ptr);
26187 		}
26188 		zval_ptr_dtor_nogc(free_op2);
26189 	} else {
26190 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
26191 			zend_cannot_add_element();
26192 			zval_ptr_dtor_nogc(expr_ptr);
26193 		}
26194 	}
26195 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26196 }
26197 
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26199 {
26200 	zval *array;
26201 	uint32_t size;
26202 	USE_OPLINE
26203 
26204 	array = EX_VAR(opline->result.var);
26205 	if (IS_VAR != IS_UNUSED) {
26206 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
26207 		ZVAL_ARR(array, zend_new_array(size));
26208 		/* Explicitly initialize array as not-packed if flag is set */
26209 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
26210 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
26211 		}
26212 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26213 	} else {
26214 		ZVAL_ARR(array, zend_new_array(0));
26215 		ZEND_VM_NEXT_OPCODE();
26216 	}
26217 }
26218 
ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26220 {
26221 	USE_OPLINE
26222 	zend_free_op free_op1, free_op2;
26223 	zval *container;
26224 	zval *offset;
26225 	zend_ulong hval;
26226 	zend_string *key;
26227 
26228 	SAVE_OPLINE();
26229 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26230 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26231 
26232 	do {
26233 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26234 			HashTable *ht;
26235 
26236 unset_dim_array:
26237 			SEPARATE_ARRAY(container);
26238 			ht = Z_ARRVAL_P(container);
26239 offset_again:
26240 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
26241 				key = Z_STR_P(offset);
26242 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26243 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
26244 						goto num_index_dim;
26245 					}
26246 				}
26247 str_index_dim:
26248 				if (ht == &EG(symbol_table)) {
26249 					zend_delete_global_variable(key);
26250 				} else {
26251 					zend_hash_del(ht, key);
26252 				}
26253 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
26254 				hval = Z_LVAL_P(offset);
26255 num_index_dim:
26256 				zend_hash_index_del(ht, hval);
26257 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
26258 				offset = Z_REFVAL_P(offset);
26259 				goto offset_again;
26260 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
26261 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
26262 				goto num_index_dim;
26263 			} else if (Z_TYPE_P(offset) == IS_NULL) {
26264 				key = ZSTR_EMPTY_ALLOC();
26265 				goto str_index_dim;
26266 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
26267 				hval = 0;
26268 				goto num_index_dim;
26269 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
26270 				hval = 1;
26271 				goto num_index_dim;
26272 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
26273 				hval = Z_RES_HANDLE_P(offset);
26274 				goto num_index_dim;
26275 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
26276 				ZVAL_UNDEFINED_OP2();
26277 				key = ZSTR_EMPTY_ALLOC();
26278 				goto str_index_dim;
26279 			} else {
26280 				zend_error(E_WARNING, "Illegal offset type in unset");
26281 			}
26282 			break;
26283 		} else if (Z_ISREF_P(container)) {
26284 			container = Z_REFVAL_P(container);
26285 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26286 				goto unset_dim_array;
26287 			}
26288 		}
26289 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26290 			container = ZVAL_UNDEFINED_OP1();
26291 		}
26292 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
26293 			offset = ZVAL_UNDEFINED_OP2();
26294 		}
26295 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
26296 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
26297 				offset++;
26298 			}
26299 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
26300 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
26301 			zend_throw_error(NULL, "Cannot unset string offsets");
26302 		}
26303 	} while (0);
26304 
26305 	zval_ptr_dtor_nogc(free_op2);
26306 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26307 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26308 }
26309 
ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26310 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26311 {
26312 	USE_OPLINE
26313 	zend_free_op free_op1, free_op2;
26314 	zval *container;
26315 	zval *offset;
26316 
26317 	SAVE_OPLINE();
26318 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26319 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26320 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26321 	}
26322 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26323 
26324 	do {
26325 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
26326 			if (Z_ISREF_P(container)) {
26327 				container = Z_REFVAL_P(container);
26328 				if (Z_TYPE_P(container) != IS_OBJECT) {
26329 					if (IS_VAR == IS_CV
26330 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
26331 						ZVAL_UNDEFINED_OP1();
26332 					}
26333 					break;
26334 				}
26335 			} else {
26336 				break;
26337 			}
26338 		}
26339 		Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
26340 	} while (0);
26341 
26342 	zval_ptr_dtor_nogc(free_op2);
26343 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26344 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26345 }
26346 
ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26348 {
26349 	USE_OPLINE
26350 	zend_free_op free_op1, free_op2;
26351 	zval *op1, *op2;
26352 	zend_bool result;
26353 
26354 	SAVE_OPLINE();
26355 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26356 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26357 	result = fast_is_identical_function(op1, op2);
26358 	zval_ptr_dtor_nogc(free_op1);
26359 	zval_ptr_dtor_nogc(free_op2);
26360 	ZEND_VM_SMART_BRANCH(result, 1);
26361 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26362 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26363 }
26364 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26365 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26366 {
26367 	USE_OPLINE
26368 	zend_free_op free_op1, free_op2;
26369 	zval *op1, *op2;
26370 	zend_bool result;
26371 
26372 	SAVE_OPLINE();
26373 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26374 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26375 	result = fast_is_not_identical_function(op1, op2);
26376 	zval_ptr_dtor_nogc(free_op1);
26377 	zval_ptr_dtor_nogc(free_op2);
26378 	ZEND_VM_SMART_BRANCH(result, 1);
26379 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26380 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26381 }
26382 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26383 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26384 {
26385 	USE_OPLINE
26386 	zend_free_op free_op1, free_op2;
26387 	zval *value;
26388 	zval *variable_ptr;
26389 
26390 	SAVE_OPLINE();
26391 	value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26392 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26393 
26394 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
26395 		zval_ptr_dtor_nogc(free_op2);
26396 		if (UNEXPECTED(0)) {
26397 			ZVAL_NULL(EX_VAR(opline->result.var));
26398 		}
26399 	} else {
26400 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
26401 		if (UNEXPECTED(0)) {
26402 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26403 		}
26404 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26405 		/* zend_assign_to_variable() always takes care of op2, never free it! */
26406 	}
26407 
26408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26409 }
26410 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26412 {
26413 	USE_OPLINE
26414 	zend_free_op free_op1, free_op2;
26415 	zval *value;
26416 	zval *variable_ptr;
26417 
26418 	SAVE_OPLINE();
26419 	value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26420 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26421 
26422 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
26423 		zval_ptr_dtor_nogc(free_op2);
26424 		if (UNEXPECTED(1)) {
26425 			ZVAL_NULL(EX_VAR(opline->result.var));
26426 		}
26427 	} else {
26428 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
26429 		if (UNEXPECTED(1)) {
26430 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26431 		}
26432 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26433 		/* zend_assign_to_variable() always takes care of op2, never free it! */
26434 	}
26435 
26436 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26437 }
26438 
ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26440 {
26441 	USE_OPLINE
26442 
26443 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
26444 
26445 	SAVE_OPLINE();
26446 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
26447 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26448 	}
26449 
26450 	/* Destroy the previously yielded value */
26451 	zval_ptr_dtor(&generator->value);
26452 
26453 	/* Destroy the previously yielded key */
26454 	zval_ptr_dtor(&generator->key);
26455 
26456 	/* Set the new yielded value */
26457 	if (IS_VAR != IS_UNUSED) {
26458 		zend_free_op free_op1;
26459 
26460 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
26461 			/* Constants and temporary variables aren't yieldable by reference,
26462 			 * but we still allow them with a notice. */
26463 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
26464 				zval *value;
26465 
26466 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26467 
26468 				value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26469 				ZVAL_COPY_VALUE(&generator->value, value);
26470 				if (IS_VAR == IS_CONST) {
26471 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26472 						Z_ADDREF(generator->value);
26473 					}
26474 				}
26475 			} else {
26476 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26477 
26478 				/* If a function call result is yielded and the function did
26479 				 * not return by reference we throw a notice. */
26480 				do {
26481 					if (IS_VAR == IS_VAR) {
26482 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
26483 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
26484 						 && !Z_ISREF_P(value_ptr)) {
26485 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26486 							ZVAL_COPY(&generator->value, value_ptr);
26487 							break;
26488 						}
26489 					}
26490 					if (Z_ISREF_P(value_ptr)) {
26491 						Z_ADDREF_P(value_ptr);
26492 					} else {
26493 						ZVAL_MAKE_REF_EX(value_ptr, 2);
26494 					}
26495 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
26496 				} while (0);
26497 
26498 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26499 			}
26500 		} else {
26501 			zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26502 
26503 			/* Consts, temporary variables and references need copying */
26504 			if (IS_VAR == IS_CONST) {
26505 				ZVAL_COPY_VALUE(&generator->value, value);
26506 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26507 					Z_ADDREF(generator->value);
26508 				}
26509 			} else if (IS_VAR == IS_TMP_VAR) {
26510 				ZVAL_COPY_VALUE(&generator->value, value);
26511             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
26512 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
26513 				zval_ptr_dtor_nogc(free_op1);
26514 			} else {
26515 				ZVAL_COPY_VALUE(&generator->value, value);
26516 				if (IS_VAR == IS_CV) {
26517 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
26518 				}
26519 			}
26520 		}
26521 	} else {
26522 		/* If no value was specified yield null */
26523 		ZVAL_NULL(&generator->value);
26524 	}
26525 
26526 	/* Set the new yielded key */
26527 	if (IS_TMP_VAR != IS_UNUSED) {
26528 		zend_free_op free_op2;
26529 		zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26530 
26531 		/* Consts, temporary variables and references need copying */
26532 		if (IS_TMP_VAR == IS_CONST) {
26533 			ZVAL_COPY_VALUE(&generator->key, key);
26534 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
26535 				Z_ADDREF(generator->key);
26536 			}
26537 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
26538 			ZVAL_COPY_VALUE(&generator->key, key);
26539 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
26540 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
26541 
26542 		} else {
26543 			ZVAL_COPY_VALUE(&generator->key, key);
26544 			if (IS_TMP_VAR == IS_CV) {
26545 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
26546 			}
26547 		}
26548 
26549 		if (Z_TYPE(generator->key) == IS_LONG
26550 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
26551 		) {
26552 			generator->largest_used_integer_key = Z_LVAL(generator->key);
26553 		}
26554 	} else {
26555 		/* If no key was specified we use auto-increment keys */
26556 		generator->largest_used_integer_key++;
26557 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
26558 	}
26559 
26560 	if (RETURN_VALUE_USED(opline)) {
26561 		/* If the return value of yield is used set the send
26562 		 * target and initialize it to NULL */
26563 		generator->send_target = EX_VAR(opline->result.var);
26564 		ZVAL_NULL(generator->send_target);
26565 	} else {
26566 		generator->send_target = NULL;
26567 	}
26568 
26569 	/* We increment to the next op, so we are at the correct position when the
26570 	 * generator is resumed. */
26571 	ZEND_VM_INC_OPCODE();
26572 
26573 	/* The GOTO VM uses a local opline variable. We need to set the opline
26574 	 * variable in execute_data so we don't resume at an old position. */
26575 	SAVE_OPLINE();
26576 
26577 	ZEND_VM_RETURN();
26578 }
26579 
ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26580 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26581 {
26582 	USE_OPLINE
26583 	zend_free_op free_op1, free_op2;
26584 	zval *op1, *op2;
26585 	zend_bool result;
26586 
26587 	SAVE_OPLINE();
26588 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26589 	op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26590 	result = fast_is_identical_function(op1, op2);
26591 	zval_ptr_dtor_nogc(free_op1);
26592 	zval_ptr_dtor_nogc(free_op2);
26593 	ZEND_VM_SMART_BRANCH(result, 1);
26594 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26595 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26596 }
26597 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26599 {
26600 	USE_OPLINE
26601 	zend_free_op free_op1, free_op2;
26602 	zval *op1, *op2;
26603 	zend_bool result;
26604 
26605 	SAVE_OPLINE();
26606 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26607 	op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26608 	result = fast_is_not_identical_function(op1, op2);
26609 	zval_ptr_dtor_nogc(free_op1);
26610 	zval_ptr_dtor_nogc(free_op2);
26611 	ZEND_VM_SMART_BRANCH(result, 1);
26612 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
26613 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26614 }
26615 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26617 {
26618 	USE_OPLINE
26619 	zend_free_op free_op1, free_op2;
26620 	zval *value;
26621 	zval *variable_ptr;
26622 
26623 	SAVE_OPLINE();
26624 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26625 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26626 
26627 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
26628 		zval_ptr_dtor_nogc(free_op2);
26629 		if (UNEXPECTED(0)) {
26630 			ZVAL_NULL(EX_VAR(opline->result.var));
26631 		}
26632 	} else {
26633 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
26634 		if (UNEXPECTED(0)) {
26635 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26636 		}
26637 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26638 		/* zend_assign_to_variable() always takes care of op2, never free it! */
26639 	}
26640 
26641 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26642 }
26643 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26644 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26645 {
26646 	USE_OPLINE
26647 	zend_free_op free_op1, free_op2;
26648 	zval *value;
26649 	zval *variable_ptr;
26650 
26651 	SAVE_OPLINE();
26652 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26653 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26654 
26655 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
26656 		zval_ptr_dtor_nogc(free_op2);
26657 		if (UNEXPECTED(1)) {
26658 			ZVAL_NULL(EX_VAR(opline->result.var));
26659 		}
26660 	} else {
26661 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
26662 		if (UNEXPECTED(1)) {
26663 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26664 		}
26665 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26666 		/* zend_assign_to_variable() always takes care of op2, never free it! */
26667 	}
26668 
26669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26670 }
26671 
ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26673 {
26674 	USE_OPLINE
26675 	zend_free_op free_op1, free_op2;
26676 	zval *variable_ptr;
26677 	zval *value_ptr;
26678 
26679 	SAVE_OPLINE();
26680 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26681 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26682 
26683 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
26684 		variable_ptr = &EG(uninitialized_zval);
26685 	} else if (IS_VAR == IS_VAR &&
26686 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
26687 
26688 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
26689 		variable_ptr = &EG(uninitialized_zval);
26690 	} else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
26691 		variable_ptr = &EG(uninitialized_zval);
26692 	} else if (IS_VAR == IS_VAR &&
26693 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
26694 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
26695 
26696 		variable_ptr = zend_wrong_assign_to_variable_reference(
26697 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
26698 	} else {
26699 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
26700 	}
26701 
26702 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26703 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
26704 	}
26705 
26706 	if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
26707 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26708 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26709 }
26710 
ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26712 {
26713 	USE_OPLINE
26714 
26715 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
26716 
26717 	SAVE_OPLINE();
26718 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
26719 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26720 	}
26721 
26722 	/* Destroy the previously yielded value */
26723 	zval_ptr_dtor(&generator->value);
26724 
26725 	/* Destroy the previously yielded key */
26726 	zval_ptr_dtor(&generator->key);
26727 
26728 	/* Set the new yielded value */
26729 	if (IS_VAR != IS_UNUSED) {
26730 		zend_free_op free_op1;
26731 
26732 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
26733 			/* Constants and temporary variables aren't yieldable by reference,
26734 			 * but we still allow them with a notice. */
26735 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
26736 				zval *value;
26737 
26738 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26739 
26740 				value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26741 				ZVAL_COPY_VALUE(&generator->value, value);
26742 				if (IS_VAR == IS_CONST) {
26743 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26744 						Z_ADDREF(generator->value);
26745 					}
26746 				}
26747 			} else {
26748 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26749 
26750 				/* If a function call result is yielded and the function did
26751 				 * not return by reference we throw a notice. */
26752 				do {
26753 					if (IS_VAR == IS_VAR) {
26754 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
26755 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
26756 						 && !Z_ISREF_P(value_ptr)) {
26757 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
26758 							ZVAL_COPY(&generator->value, value_ptr);
26759 							break;
26760 						}
26761 					}
26762 					if (Z_ISREF_P(value_ptr)) {
26763 						Z_ADDREF_P(value_ptr);
26764 					} else {
26765 						ZVAL_MAKE_REF_EX(value_ptr, 2);
26766 					}
26767 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
26768 				} while (0);
26769 
26770 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26771 			}
26772 		} else {
26773 			zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26774 
26775 			/* Consts, temporary variables and references need copying */
26776 			if (IS_VAR == IS_CONST) {
26777 				ZVAL_COPY_VALUE(&generator->value, value);
26778 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
26779 					Z_ADDREF(generator->value);
26780 				}
26781 			} else if (IS_VAR == IS_TMP_VAR) {
26782 				ZVAL_COPY_VALUE(&generator->value, value);
26783             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
26784 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
26785 				zval_ptr_dtor_nogc(free_op1);
26786 			} else {
26787 				ZVAL_COPY_VALUE(&generator->value, value);
26788 				if (IS_VAR == IS_CV) {
26789 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
26790 				}
26791 			}
26792 		}
26793 	} else {
26794 		/* If no value was specified yield null */
26795 		ZVAL_NULL(&generator->value);
26796 	}
26797 
26798 	/* Set the new yielded key */
26799 	if (IS_VAR != IS_UNUSED) {
26800 		zend_free_op free_op2;
26801 		zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
26802 
26803 		/* Consts, temporary variables and references need copying */
26804 		if (IS_VAR == IS_CONST) {
26805 			ZVAL_COPY_VALUE(&generator->key, key);
26806 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
26807 				Z_ADDREF(generator->key);
26808 			}
26809 		} else if (IS_VAR == IS_TMP_VAR) {
26810 			ZVAL_COPY_VALUE(&generator->key, key);
26811 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
26812 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
26813 			zval_ptr_dtor_nogc(free_op2);
26814 		} else {
26815 			ZVAL_COPY_VALUE(&generator->key, key);
26816 			if (IS_VAR == IS_CV) {
26817 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
26818 			}
26819 		}
26820 
26821 		if (Z_TYPE(generator->key) == IS_LONG
26822 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
26823 		) {
26824 			generator->largest_used_integer_key = Z_LVAL(generator->key);
26825 		}
26826 	} else {
26827 		/* If no key was specified we use auto-increment keys */
26828 		generator->largest_used_integer_key++;
26829 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
26830 	}
26831 
26832 	if (RETURN_VALUE_USED(opline)) {
26833 		/* If the return value of yield is used set the send
26834 		 * target and initialize it to NULL */
26835 		generator->send_target = EX_VAR(opline->result.var);
26836 		ZVAL_NULL(generator->send_target);
26837 	} else {
26838 		generator->send_target = NULL;
26839 	}
26840 
26841 	/* We increment to the next op, so we are at the correct position when the
26842 	 * generator is resumed. */
26843 	ZEND_VM_INC_OPCODE();
26844 
26845 	/* The GOTO VM uses a local opline variable. We need to set the opline
26846 	 * variable in execute_data so we don't resume at an old position. */
26847 	SAVE_OPLINE();
26848 
26849 	ZEND_VM_RETURN();
26850 }
26851 
ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26852 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26853 {
26854 	USE_OPLINE
26855 	zend_free_op free_op1, free_op_data1;
26856 	zval *var_ptr;
26857 	zval *value, *container, *dim;
26858 
26859 	SAVE_OPLINE();
26860 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26861 
26862 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26863 assign_dim_op_array:
26864 		SEPARATE_ARRAY(container);
26865 assign_dim_op_new_array:
26866 		dim = NULL;
26867 		if (IS_UNUSED == IS_UNUSED) {
26868 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
26869 			if (UNEXPECTED(!var_ptr)) {
26870 				zend_cannot_add_element();
26871 				goto assign_dim_op_ret_null;
26872 			}
26873 		} else {
26874 			if (IS_UNUSED == IS_CONST) {
26875 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
26876 			} else {
26877 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
26878 			}
26879 			if (UNEXPECTED(!var_ptr)) {
26880 				goto assign_dim_op_ret_null;
26881 			}
26882 		}
26883 
26884 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
26885 
26886 		do {
26887 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
26888 				zend_reference *ref = Z_REF_P(var_ptr);
26889 				var_ptr = Z_REFVAL_P(var_ptr);
26890 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
26891 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
26892 					break;
26893 				}
26894 			}
26895 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
26896 		} while (0);
26897 
26898 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26899 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
26900 		}
26901 		FREE_OP(free_op_data1);
26902 	} else {
26903 		if (EXPECTED(Z_ISREF_P(container))) {
26904 			container = Z_REFVAL_P(container);
26905 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
26906 				goto assign_dim_op_array;
26907 			}
26908 		}
26909 
26910 		dim = NULL;
26911 
26912 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
26913 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26914 				dim++;
26915 			}
26916 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
26917 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
26918 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
26919 				ZVAL_UNDEFINED_OP1();
26920 			}
26921 			ZVAL_ARR(container, zend_new_array(8));
26922 			goto assign_dim_op_new_array;
26923 		} else {
26924 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
26925 assign_dim_op_ret_null:
26926 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
26927 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26928 				ZVAL_NULL(EX_VAR(opline->result.var));
26929 			}
26930 		}
26931 	}
26932 
26933 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
26934 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26935 }
26936 
ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26937 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26938 {
26939 	USE_OPLINE
26940 	zend_free_op free_op1;
26941 	zval *container;
26942 
26943 	SAVE_OPLINE();
26944 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26945 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
26946 
26947 	if (IS_VAR == IS_VAR) {
26948 		zval *result = EX_VAR(opline->result.var);
26949 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
26950 	}
26951 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26952 }
26953 
ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26954 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26955 {
26956 	USE_OPLINE
26957 	zend_free_op free_op1;
26958 	zval *container;
26959 
26960 	SAVE_OPLINE();
26961 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
26962 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
26963 
26964 	if (IS_VAR == IS_VAR) {
26965 		zval *result = EX_VAR(opline->result.var);
26966 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
26967 	}
26968 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26969 }
26970 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26971 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26972 {
26973 #if 0
26974 	USE_OPLINE
26975 #endif
26976 
26977 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
26978         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26979 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26980         }
26981 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26982 	} else {
26983 		if (IS_UNUSED == IS_UNUSED) {
26984 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26985 		}
26986 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26987 	}
26988 }
26989 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26990 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26991 {
26992 	USE_OPLINE
26993 	zend_free_op free_op1;
26994 	zval *object_ptr, *orig_object_ptr;
26995 	zend_free_op free_op_data;
26996 	zval *value;
26997 	zval *variable_ptr;
26998 	zval *dim;
26999 
27000 	SAVE_OPLINE();
27001 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27002 
27003 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27004 try_assign_dim_array:
27005 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
27006 		SEPARATE_ARRAY(object_ptr);
27007 		if (IS_UNUSED == IS_UNUSED) {
27008 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
27009 				ZVAL_DEREF(value);
27010 			}
27011 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27012 			if (UNEXPECTED(variable_ptr == NULL)) {
27013 				zend_cannot_add_element();
27014 				goto assign_dim_error;
27015 			} else if (IS_CONST == IS_CV) {
27016 				if (Z_REFCOUNTED_P(value)) {
27017 					Z_ADDREF_P(value);
27018 				}
27019 			} else if (IS_CONST == IS_VAR) {
27020 				if (value != free_op_data) {
27021 					if (Z_REFCOUNTED_P(value)) {
27022 						Z_ADDREF_P(value);
27023 					}
27024 
27025 				}
27026 			} else if (IS_CONST == IS_CONST) {
27027 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27028 					Z_ADDREF_P(value);
27029 				}
27030 			}
27031 		} else {
27032 			dim = NULL;
27033 			if (IS_UNUSED == IS_CONST) {
27034 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27035 			} else {
27036 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27037 			}
27038 			if (UNEXPECTED(variable_ptr == NULL)) {
27039 				goto assign_dim_error;
27040 			}
27041 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
27042 		}
27043 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27044 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27045 		}
27046 	} else {
27047 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27048 			object_ptr = Z_REFVAL_P(object_ptr);
27049 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27050 				goto try_assign_dim_array;
27051 			}
27052 		}
27053 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27054 			dim = NULL;
27055 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
27056 
27057 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27058 				dim++;
27059 			}
27060 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27061 
27062 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27063 			if (IS_UNUSED == IS_UNUSED) {
27064 				zend_use_new_element_for_string();
27065 
27066 				UNDEF_RESULT();
27067 			} else {
27068 				dim = NULL;
27069 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
27070 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27071 
27072 			}
27073 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27074 			if (Z_ISREF_P(orig_object_ptr)
27075 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27076 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27077 				dim = NULL;
27078 
27079 				UNDEF_RESULT();
27080 			} else {
27081 				ZVAL_ARR(object_ptr, zend_new_array(8));
27082 				goto try_assign_dim_array;
27083 			}
27084 		} else {
27085 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27086 				zend_use_scalar_as_array();
27087 			}
27088 			dim = NULL;
27089 assign_dim_error:
27090 
27091 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27092 				ZVAL_NULL(EX_VAR(opline->result.var));
27093 			}
27094 		}
27095 	}
27096 	if (IS_UNUSED != IS_UNUSED) {
27097 
27098 	}
27099 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27100 	/* assign_dim has two opcodes! */
27101 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27102 }
27103 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27104 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27105 {
27106 	USE_OPLINE
27107 	zend_free_op free_op1;
27108 	zval *object_ptr, *orig_object_ptr;
27109 	zend_free_op free_op_data;
27110 	zval *value;
27111 	zval *variable_ptr;
27112 	zval *dim;
27113 
27114 	SAVE_OPLINE();
27115 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27116 
27117 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27118 try_assign_dim_array:
27119 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27120 		SEPARATE_ARRAY(object_ptr);
27121 		if (IS_UNUSED == IS_UNUSED) {
27122 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
27123 				ZVAL_DEREF(value);
27124 			}
27125 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27126 			if (UNEXPECTED(variable_ptr == NULL)) {
27127 				zend_cannot_add_element();
27128 				goto assign_dim_error;
27129 			} else if (IS_TMP_VAR == IS_CV) {
27130 				if (Z_REFCOUNTED_P(value)) {
27131 					Z_ADDREF_P(value);
27132 				}
27133 			} else if (IS_TMP_VAR == IS_VAR) {
27134 				if (value != free_op_data) {
27135 					if (Z_REFCOUNTED_P(value)) {
27136 						Z_ADDREF_P(value);
27137 					}
27138 					zval_ptr_dtor_nogc(free_op_data);
27139 				}
27140 			} else if (IS_TMP_VAR == IS_CONST) {
27141 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27142 					Z_ADDREF_P(value);
27143 				}
27144 			}
27145 		} else {
27146 			dim = NULL;
27147 			if (IS_UNUSED == IS_CONST) {
27148 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27149 			} else {
27150 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27151 			}
27152 			if (UNEXPECTED(variable_ptr == NULL)) {
27153 				goto assign_dim_error;
27154 			}
27155 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
27156 		}
27157 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27158 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27159 		}
27160 	} else {
27161 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27162 			object_ptr = Z_REFVAL_P(object_ptr);
27163 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27164 				goto try_assign_dim_array;
27165 			}
27166 		}
27167 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27168 			dim = NULL;
27169 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27170 
27171 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27172 				dim++;
27173 			}
27174 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27175 
27176 			zval_ptr_dtor_nogc(free_op_data);
27177 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27178 			if (IS_UNUSED == IS_UNUSED) {
27179 				zend_use_new_element_for_string();
27180 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27181 				UNDEF_RESULT();
27182 			} else {
27183 				dim = NULL;
27184 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27185 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27186 				zval_ptr_dtor_nogc(free_op_data);
27187 			}
27188 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27189 			if (Z_ISREF_P(orig_object_ptr)
27190 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27191 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27192 				dim = NULL;
27193 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27194 				UNDEF_RESULT();
27195 			} else {
27196 				ZVAL_ARR(object_ptr, zend_new_array(8));
27197 				goto try_assign_dim_array;
27198 			}
27199 		} else {
27200 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27201 				zend_use_scalar_as_array();
27202 			}
27203 			dim = NULL;
27204 assign_dim_error:
27205 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27206 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27207 				ZVAL_NULL(EX_VAR(opline->result.var));
27208 			}
27209 		}
27210 	}
27211 	if (IS_UNUSED != IS_UNUSED) {
27212 
27213 	}
27214 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27215 	/* assign_dim has two opcodes! */
27216 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27217 }
27218 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27220 {
27221 	USE_OPLINE
27222 	zend_free_op free_op1;
27223 	zval *object_ptr, *orig_object_ptr;
27224 	zend_free_op free_op_data;
27225 	zval *value;
27226 	zval *variable_ptr;
27227 	zval *dim;
27228 
27229 	SAVE_OPLINE();
27230 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27231 
27232 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27233 try_assign_dim_array:
27234 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27235 		SEPARATE_ARRAY(object_ptr);
27236 		if (IS_UNUSED == IS_UNUSED) {
27237 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
27238 				ZVAL_DEREF(value);
27239 			}
27240 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27241 			if (UNEXPECTED(variable_ptr == NULL)) {
27242 				zend_cannot_add_element();
27243 				goto assign_dim_error;
27244 			} else if (IS_VAR == IS_CV) {
27245 				if (Z_REFCOUNTED_P(value)) {
27246 					Z_ADDREF_P(value);
27247 				}
27248 			} else if (IS_VAR == IS_VAR) {
27249 				if (value != free_op_data) {
27250 					if (Z_REFCOUNTED_P(value)) {
27251 						Z_ADDREF_P(value);
27252 					}
27253 					zval_ptr_dtor_nogc(free_op_data);
27254 				}
27255 			} else if (IS_VAR == IS_CONST) {
27256 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27257 					Z_ADDREF_P(value);
27258 				}
27259 			}
27260 		} else {
27261 			dim = NULL;
27262 			if (IS_UNUSED == IS_CONST) {
27263 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27264 			} else {
27265 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27266 			}
27267 			if (UNEXPECTED(variable_ptr == NULL)) {
27268 				goto assign_dim_error;
27269 			}
27270 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
27271 		}
27272 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27273 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27274 		}
27275 	} else {
27276 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27277 			object_ptr = Z_REFVAL_P(object_ptr);
27278 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27279 				goto try_assign_dim_array;
27280 			}
27281 		}
27282 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27283 			dim = NULL;
27284 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27285 
27286 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27287 				dim++;
27288 			}
27289 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27290 
27291 			zval_ptr_dtor_nogc(free_op_data);
27292 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27293 			if (IS_UNUSED == IS_UNUSED) {
27294 				zend_use_new_element_for_string();
27295 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27296 				UNDEF_RESULT();
27297 			} else {
27298 				dim = NULL;
27299 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
27300 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27301 				zval_ptr_dtor_nogc(free_op_data);
27302 			}
27303 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27304 			if (Z_ISREF_P(orig_object_ptr)
27305 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27306 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27307 				dim = NULL;
27308 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27309 				UNDEF_RESULT();
27310 			} else {
27311 				ZVAL_ARR(object_ptr, zend_new_array(8));
27312 				goto try_assign_dim_array;
27313 			}
27314 		} else {
27315 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27316 				zend_use_scalar_as_array();
27317 			}
27318 			dim = NULL;
27319 assign_dim_error:
27320 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27321 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27322 				ZVAL_NULL(EX_VAR(opline->result.var));
27323 			}
27324 		}
27325 	}
27326 	if (IS_UNUSED != IS_UNUSED) {
27327 
27328 	}
27329 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27330 	/* assign_dim has two opcodes! */
27331 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27332 }
27333 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27335 {
27336 	USE_OPLINE
27337 	zend_free_op free_op1;
27338 	zval *object_ptr, *orig_object_ptr;
27339 	zend_free_op free_op_data;
27340 	zval *value;
27341 	zval *variable_ptr;
27342 	zval *dim;
27343 
27344 	SAVE_OPLINE();
27345 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27346 
27347 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27348 try_assign_dim_array:
27349 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27350 		SEPARATE_ARRAY(object_ptr);
27351 		if (IS_UNUSED == IS_UNUSED) {
27352 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27353 				ZVAL_DEREF(value);
27354 			}
27355 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27356 			if (UNEXPECTED(variable_ptr == NULL)) {
27357 				zend_cannot_add_element();
27358 				goto assign_dim_error;
27359 			} else if (IS_CV == IS_CV) {
27360 				if (Z_REFCOUNTED_P(value)) {
27361 					Z_ADDREF_P(value);
27362 				}
27363 			} else if (IS_CV == IS_VAR) {
27364 				if (value != free_op_data) {
27365 					if (Z_REFCOUNTED_P(value)) {
27366 						Z_ADDREF_P(value);
27367 					}
27368 
27369 				}
27370 			} else if (IS_CV == IS_CONST) {
27371 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27372 					Z_ADDREF_P(value);
27373 				}
27374 			}
27375 		} else {
27376 			dim = NULL;
27377 			if (IS_UNUSED == IS_CONST) {
27378 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27379 			} else {
27380 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27381 			}
27382 			if (UNEXPECTED(variable_ptr == NULL)) {
27383 				goto assign_dim_error;
27384 			}
27385 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
27386 		}
27387 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27388 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27389 		}
27390 	} else {
27391 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27392 			object_ptr = Z_REFVAL_P(object_ptr);
27393 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27394 				goto try_assign_dim_array;
27395 			}
27396 		}
27397 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27398 			dim = NULL;
27399 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27400 
27401 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27402 				dim++;
27403 			}
27404 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27405 
27406 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27407 			if (IS_UNUSED == IS_UNUSED) {
27408 				zend_use_new_element_for_string();
27409 
27410 				UNDEF_RESULT();
27411 			} else {
27412 				dim = NULL;
27413 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27414 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27415 
27416 			}
27417 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27418 			if (Z_ISREF_P(orig_object_ptr)
27419 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27420 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27421 				dim = NULL;
27422 
27423 				UNDEF_RESULT();
27424 			} else {
27425 				ZVAL_ARR(object_ptr, zend_new_array(8));
27426 				goto try_assign_dim_array;
27427 			}
27428 		} else {
27429 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
27430 				zend_use_scalar_as_array();
27431 			}
27432 			dim = NULL;
27433 assign_dim_error:
27434 
27435 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27436 				ZVAL_NULL(EX_VAR(opline->result.var));
27437 			}
27438 		}
27439 	}
27440 	if (IS_UNUSED != IS_UNUSED) {
27441 
27442 	}
27443 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27444 	/* assign_dim has two opcodes! */
27445 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27446 }
27447 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27448 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27449 {
27450 	USE_OPLINE
27451 	zval *function_name;
27452 	zend_class_entry *ce;
27453 	uint32_t call_info;
27454 	zend_function *fbc;
27455 	zend_execute_data *call;
27456 
27457 	SAVE_OPLINE();
27458 
27459 	if (IS_VAR == IS_CONST) {
27460 		/* no function found. try a static method in class */
27461 		ce = CACHED_PTR(opline->result.num);
27462 		if (UNEXPECTED(ce == NULL)) {
27463 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
27464 			if (UNEXPECTED(ce == NULL)) {
27465 				ZEND_ASSERT(EG(exception));
27466 
27467 				HANDLE_EXCEPTION();
27468 			}
27469 			if (IS_UNUSED != IS_CONST) {
27470 				CACHE_PTR(opline->result.num, ce);
27471 			}
27472 		}
27473 	} else if (IS_VAR == IS_UNUSED) {
27474 		ce = zend_fetch_class(NULL, opline->op1.num);
27475 		if (UNEXPECTED(ce == NULL)) {
27476 			ZEND_ASSERT(EG(exception));
27477 
27478 			HANDLE_EXCEPTION();
27479 		}
27480 	} else {
27481 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27482 	}
27483 
27484 	if (IS_VAR == IS_CONST &&
27485 	    IS_UNUSED == IS_CONST &&
27486 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
27487 		/* nothing to do */
27488 	} else if (IS_VAR != IS_CONST &&
27489 	           IS_UNUSED == IS_CONST &&
27490 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
27491 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
27492 	} else if (IS_UNUSED != IS_UNUSED) {
27493 
27494 
27495 		function_name = NULL;
27496 		if (IS_UNUSED != IS_CONST) {
27497 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27498 				do {
27499 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
27500 						function_name = Z_REFVAL_P(function_name);
27501 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27502 							break;
27503 						}
27504 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
27505 						ZVAL_UNDEFINED_OP2();
27506 						if (UNEXPECTED(EG(exception) != NULL)) {
27507 							HANDLE_EXCEPTION();
27508 						}
27509 					}
27510 					zend_throw_error(NULL, "Function name must be a string");
27511 
27512 					HANDLE_EXCEPTION();
27513 				} while (0);
27514 			}
27515 		}
27516 
27517 		if (ce->get_static_method) {
27518 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
27519 		} else {
27520 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
27521 		}
27522 		if (UNEXPECTED(fbc == NULL)) {
27523 			if (EXPECTED(!EG(exception))) {
27524 				zend_undefined_method(ce, Z_STR_P(function_name));
27525 			}
27526 
27527 			HANDLE_EXCEPTION();
27528 		}
27529 		if (IS_UNUSED == IS_CONST &&
27530 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
27531 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
27532 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
27533 		}
27534 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27535 			init_func_run_time_cache(&fbc->op_array);
27536 		}
27537 		if (IS_UNUSED != IS_CONST) {
27538 
27539 		}
27540 	} else {
27541 		if (UNEXPECTED(ce->constructor == NULL)) {
27542 			zend_throw_error(NULL, "Cannot call constructor");
27543 			HANDLE_EXCEPTION();
27544 		}
27545 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
27546 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
27547 			HANDLE_EXCEPTION();
27548 		}
27549 		fbc = ce->constructor;
27550 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27551 			init_func_run_time_cache(&fbc->op_array);
27552 		}
27553 	}
27554 
27555 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
27556 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
27557 			ce = (zend_class_entry*)Z_OBJ(EX(This));
27558 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
27559 		} else {
27560 			zend_non_static_method_call(fbc);
27561 			if (UNEXPECTED(EG(exception) != NULL)) {
27562 				HANDLE_EXCEPTION();
27563 			}
27564 			goto check_parent_and_self;
27565 		}
27566 	} else {
27567 check_parent_and_self:
27568 		/* previous opcode is ZEND_FETCH_CLASS */
27569 		if (IS_VAR == IS_UNUSED
27570 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
27571 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
27572 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
27573 				ce = Z_OBJCE(EX(This));
27574 			} else {
27575 				ce = Z_CE(EX(This));
27576 			}
27577 		}
27578 		call_info = ZEND_CALL_NESTED_FUNCTION;
27579 	}
27580 
27581 	call = zend_vm_stack_push_call_frame(call_info,
27582 		fbc, opline->extended_value, ce);
27583 	call->prev_execute_data = EX(call);
27584 	EX(call) = call;
27585 
27586 	ZEND_VM_NEXT_OPCODE();
27587 }
27588 
ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27590 {
27591 	USE_OPLINE
27592 
27593 	SAVE_OPLINE();
27594 	if (IS_VAR == IS_UNUSED) {
27595 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
27596 	} else {
27597 /* prevents "undefined variable opline" errors */
27598 #if 0 || (IS_VAR != IS_UNUSED)
27599 		zval *retval_ref, *retval_ptr;
27600 		zend_free_op free_op1;
27601 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
27602 
27603 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27604 
27605 		if (IS_VAR == IS_CONST) {
27606 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
27607 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
27608 		} else if (IS_VAR == IS_VAR) {
27609 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
27610 				retval_ptr = Z_INDIRECT_P(retval_ptr);
27611 			}
27612 			ZVAL_DEREF(retval_ptr);
27613 		} else if (IS_VAR == IS_CV) {
27614 			ZVAL_DEREF(retval_ptr);
27615 		}
27616 
27617 		if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
27618 			&& ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
27619 			&& ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
27620 			&& !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
27621 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
27622 			&& retval_ref != retval_ptr)
27623 		) {
27624 			/* A cast might happen - unwrap the reference if this is a by-value return */
27625 			if (Z_REFCOUNT_P(retval_ref) == 1) {
27626 				ZVAL_UNREF(retval_ref);
27627 			} else {
27628 				Z_DELREF_P(retval_ref);
27629 				ZVAL_COPY(retval_ref, retval_ptr);
27630 			}
27631 			retval_ptr = retval_ref;
27632 		}
27633 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
27634 #endif
27635 	}
27636 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27637 }
27638 
ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27640 {
27641 	USE_OPLINE
27642 	zval *result;
27643 	zend_function *constructor;
27644 	zend_class_entry *ce;
27645 	zend_execute_data *call;
27646 
27647 	SAVE_OPLINE();
27648 	if (IS_VAR == IS_CONST) {
27649 		ce = CACHED_PTR(opline->op2.num);
27650 		if (UNEXPECTED(ce == NULL)) {
27651 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
27652 			if (UNEXPECTED(ce == NULL)) {
27653 				ZEND_ASSERT(EG(exception));
27654 				ZVAL_UNDEF(EX_VAR(opline->result.var));
27655 				HANDLE_EXCEPTION();
27656 			}
27657 			CACHE_PTR(opline->op2.num, ce);
27658 		}
27659 	} else if (IS_VAR == IS_UNUSED) {
27660 		ce = zend_fetch_class(NULL, opline->op1.num);
27661 		if (UNEXPECTED(ce == NULL)) {
27662 			ZEND_ASSERT(EG(exception));
27663 			ZVAL_UNDEF(EX_VAR(opline->result.var));
27664 			HANDLE_EXCEPTION();
27665 		}
27666 	} else {
27667 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27668 	}
27669 
27670 	result = EX_VAR(opline->result.var);
27671 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
27672 		ZVAL_UNDEF(result);
27673 		HANDLE_EXCEPTION();
27674 	}
27675 
27676 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
27677 	if (constructor == NULL) {
27678 		if (UNEXPECTED(EG(exception))) {
27679 			HANDLE_EXCEPTION();
27680 		}
27681 
27682 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
27683 		 * opcode is DO_FCALL in case EXT instructions are used. */
27684 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
27685 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
27686 		}
27687 
27688 		/* Perform a dummy function call */
27689 		call = zend_vm_stack_push_call_frame(
27690 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
27691 			opline->extended_value, NULL);
27692 	} else {
27693 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
27694 			init_func_run_time_cache(&constructor->op_array);
27695 		}
27696 		/* We are not handling overloaded classes right now */
27697 		call = zend_vm_stack_push_call_frame(
27698 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
27699 			constructor,
27700 			opline->extended_value,
27701 			Z_OBJ_P(result));
27702 		Z_ADDREF_P(result);
27703 	}
27704 
27705 	call->prev_execute_data = EX(call);
27706 	EX(call) = call;
27707 	ZEND_VM_NEXT_OPCODE();
27708 }
27709 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27710 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27711 {
27712 	USE_OPLINE
27713 	zend_free_op free_op1;
27714 	zval *expr_ptr, new_expr;
27715 
27716 	SAVE_OPLINE();
27717 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
27718 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
27719 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27720 		if (Z_ISREF_P(expr_ptr)) {
27721 			Z_ADDREF_P(expr_ptr);
27722 		} else {
27723 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
27724 		}
27725 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27726 	} else {
27727 		expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27728 		if (IS_VAR == IS_TMP_VAR) {
27729 			/* pass */
27730 		} else if (IS_VAR == IS_CONST) {
27731 			Z_TRY_ADDREF_P(expr_ptr);
27732 		} else if (IS_VAR == IS_CV) {
27733 			ZVAL_DEREF(expr_ptr);
27734 			Z_TRY_ADDREF_P(expr_ptr);
27735 		} else /* if (IS_VAR == IS_VAR) */ {
27736 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
27737 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
27738 
27739 				expr_ptr = Z_REFVAL_P(expr_ptr);
27740 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
27741 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
27742 					expr_ptr = &new_expr;
27743 					efree_size(ref, sizeof(zend_reference));
27744 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
27745 					Z_ADDREF_P(expr_ptr);
27746 				}
27747 			}
27748 		}
27749 	}
27750 
27751 	if (IS_UNUSED != IS_UNUSED) {
27752 
27753 		zval *offset = NULL;
27754 		zend_string *str;
27755 		zend_ulong hval;
27756 
27757 add_again:
27758 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27759 			str = Z_STR_P(offset);
27760 			if (IS_UNUSED != IS_CONST) {
27761 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
27762 					goto num_index;
27763 				}
27764 			}
27765 str_index:
27766 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
27767 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27768 			hval = Z_LVAL_P(offset);
27769 num_index:
27770 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
27771 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27772 			offset = Z_REFVAL_P(offset);
27773 			goto add_again;
27774 		} else if (Z_TYPE_P(offset) == IS_NULL) {
27775 			str = ZSTR_EMPTY_ALLOC();
27776 			goto str_index;
27777 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27778 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
27779 			goto num_index;
27780 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
27781 			hval = 0;
27782 			goto num_index;
27783 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
27784 			hval = 1;
27785 			goto num_index;
27786 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27787 			zend_use_resource_as_offset(offset);
27788 			hval = Z_RES_HANDLE_P(offset);
27789 			goto num_index;
27790 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27791 			ZVAL_UNDEFINED_OP2();
27792 			str = ZSTR_EMPTY_ALLOC();
27793 			goto str_index;
27794 		} else {
27795 			zend_illegal_offset();
27796 			zval_ptr_dtor_nogc(expr_ptr);
27797 		}
27798 
27799 	} else {
27800 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
27801 			zend_cannot_add_element();
27802 			zval_ptr_dtor_nogc(expr_ptr);
27803 		}
27804 	}
27805 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27806 }
27807 
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27809 {
27810 	zval *array;
27811 	uint32_t size;
27812 	USE_OPLINE
27813 
27814 	array = EX_VAR(opline->result.var);
27815 	if (IS_VAR != IS_UNUSED) {
27816 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
27817 		ZVAL_ARR(array, zend_new_array(size));
27818 		/* Explicitly initialize array as not-packed if flag is set */
27819 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
27820 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
27821 		}
27822 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27823 	} else {
27824 		ZVAL_ARR(array, zend_new_array(0));
27825 		ZEND_VM_NEXT_OPCODE();
27826 	}
27827 }
27828 
ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27829 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27830 {
27831 	USE_OPLINE
27832 	zval *var_ptr;
27833 
27834 	var_ptr = EX_VAR(opline->op1.var);
27835 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
27836 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
27837 			ZVAL_UNREF(var_ptr);
27838 		}
27839 	}
27840 
27841 	ZEND_VM_NEXT_OPCODE();
27842 }
27843 
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27844 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27845 {
27846 	USE_OPLINE
27847 
27848 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
27849 
27850 	SAVE_OPLINE();
27851 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
27852 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27853 	}
27854 
27855 	/* Destroy the previously yielded value */
27856 	zval_ptr_dtor(&generator->value);
27857 
27858 	/* Destroy the previously yielded key */
27859 	zval_ptr_dtor(&generator->key);
27860 
27861 	/* Set the new yielded value */
27862 	if (IS_VAR != IS_UNUSED) {
27863 		zend_free_op free_op1;
27864 
27865 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
27866 			/* Constants and temporary variables aren't yieldable by reference,
27867 			 * but we still allow them with a notice. */
27868 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
27869 				zval *value;
27870 
27871 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27872 
27873 				value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27874 				ZVAL_COPY_VALUE(&generator->value, value);
27875 				if (IS_VAR == IS_CONST) {
27876 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27877 						Z_ADDREF(generator->value);
27878 					}
27879 				}
27880 			} else {
27881 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27882 
27883 				/* If a function call result is yielded and the function did
27884 				 * not return by reference we throw a notice. */
27885 				do {
27886 					if (IS_VAR == IS_VAR) {
27887 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
27888 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
27889 						 && !Z_ISREF_P(value_ptr)) {
27890 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27891 							ZVAL_COPY(&generator->value, value_ptr);
27892 							break;
27893 						}
27894 					}
27895 					if (Z_ISREF_P(value_ptr)) {
27896 						Z_ADDREF_P(value_ptr);
27897 					} else {
27898 						ZVAL_MAKE_REF_EX(value_ptr, 2);
27899 					}
27900 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
27901 				} while (0);
27902 
27903 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
27904 			}
27905 		} else {
27906 			zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
27907 
27908 			/* Consts, temporary variables and references need copying */
27909 			if (IS_VAR == IS_CONST) {
27910 				ZVAL_COPY_VALUE(&generator->value, value);
27911 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27912 					Z_ADDREF(generator->value);
27913 				}
27914 			} else if (IS_VAR == IS_TMP_VAR) {
27915 				ZVAL_COPY_VALUE(&generator->value, value);
27916             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
27917 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
27918 				zval_ptr_dtor_nogc(free_op1);
27919 			} else {
27920 				ZVAL_COPY_VALUE(&generator->value, value);
27921 				if (IS_VAR == IS_CV) {
27922 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
27923 				}
27924 			}
27925 		}
27926 	} else {
27927 		/* If no value was specified yield null */
27928 		ZVAL_NULL(&generator->value);
27929 	}
27930 
27931 	/* Set the new yielded key */
27932 	if (IS_UNUSED != IS_UNUSED) {
27933 
27934 		zval *key = NULL;
27935 
27936 		/* Consts, temporary variables and references need copying */
27937 		if (IS_UNUSED == IS_CONST) {
27938 			ZVAL_COPY_VALUE(&generator->key, key);
27939 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
27940 				Z_ADDREF(generator->key);
27941 			}
27942 		} else if (IS_UNUSED == IS_TMP_VAR) {
27943 			ZVAL_COPY_VALUE(&generator->key, key);
27944 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
27945 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
27946 
27947 		} else {
27948 			ZVAL_COPY_VALUE(&generator->key, key);
27949 			if (IS_UNUSED == IS_CV) {
27950 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
27951 			}
27952 		}
27953 
27954 		if (Z_TYPE(generator->key) == IS_LONG
27955 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
27956 		) {
27957 			generator->largest_used_integer_key = Z_LVAL(generator->key);
27958 		}
27959 	} else {
27960 		/* If no key was specified we use auto-increment keys */
27961 		generator->largest_used_integer_key++;
27962 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
27963 	}
27964 
27965 	if (RETURN_VALUE_USED(opline)) {
27966 		/* If the return value of yield is used set the send
27967 		 * target and initialize it to NULL */
27968 		generator->send_target = EX_VAR(opline->result.var);
27969 		ZVAL_NULL(generator->send_target);
27970 	} else {
27971 		generator->send_target = NULL;
27972 	}
27973 
27974 	/* We increment to the next op, so we are at the correct position when the
27975 	 * generator is resumed. */
27976 	ZEND_VM_INC_OPCODE();
27977 
27978 	/* The GOTO VM uses a local opline variable. We need to set the opline
27979 	 * variable in execute_data so we don't resume at an old position. */
27980 	SAVE_OPLINE();
27981 
27982 	ZEND_VM_RETURN();
27983 }
27984 
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27985 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27986 {
27987 	USE_OPLINE
27988 	zval *op1 = EX_VAR(opline->op1.var);
27989 
27990 	if (IS_VAR == IS_CV) {
27991 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
27992 			ZVAL_NEW_EMPTY_REF(op1);
27993 			Z_SET_REFCOUNT_P(op1, 2);
27994 			ZVAL_NULL(Z_REFVAL_P(op1));
27995 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
27996 		} else {
27997 			if (Z_ISREF_P(op1)) {
27998 				Z_ADDREF_P(op1);
27999 			} else {
28000 				ZVAL_MAKE_REF_EX(op1, 2);
28001 			}
28002 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
28003 		}
28004 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
28005 		op1 = Z_INDIRECT_P(op1);
28006 		if (EXPECTED(!Z_ISREF_P(op1))) {
28007 			ZVAL_MAKE_REF_EX(op1, 2);
28008 		} else {
28009 			GC_ADDREF(Z_REF_P(op1));
28010 		}
28011 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
28012 	} else {
28013 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
28014 	}
28015 	ZEND_VM_NEXT_OPCODE();
28016 }
28017 
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28019 {
28020 	USE_OPLINE
28021 	zend_free_op free_op1;
28022 	zval *op1;
28023 	zend_string *type;
28024 
28025 	SAVE_OPLINE();
28026 	op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28027 	type = zend_zval_get_type(op1);
28028 	if (EXPECTED(type)) {
28029 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
28030 	} else {
28031 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
28032 	}
28033 	zval_ptr_dtor_nogc(free_op1);
28034 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28035 }
28036 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28037 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28038 {
28039 	USE_OPLINE
28040 	zend_free_op free_op1, free_op_data;
28041 	zval *object;
28042 	zval *property;
28043 	zval *value;
28044 	zval *zptr;
28045 	void **cache_slot;
28046 	zend_property_info *prop_info;
28047 
28048 	SAVE_OPLINE();
28049 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28050 
28051 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28052 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28053 	}
28054 
28055 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28056 
28057 	do {
28058 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
28059 
28060 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28061 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28062 				object = Z_REFVAL_P(object);
28063 				goto assign_op_object;
28064 			}
28065 			if (IS_VAR == IS_CV
28066 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28067 				ZVAL_UNDEFINED_OP1();
28068 			}
28069 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28070 			if (UNEXPECTED(!object)) {
28071 				break;
28072 			}
28073 		}
28074 
28075 assign_op_object:
28076 		/* here we are sure we are dealing with an object */
28077 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
28078 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
28079 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28080 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28081 					ZVAL_NULL(EX_VAR(opline->result.var));
28082 				}
28083 			} else {
28084 				zval *orig_zptr = zptr;
28085 				zend_reference *ref;
28086 
28087 				do {
28088 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
28089 						ref = Z_REF_P(zptr);
28090 						zptr = Z_REFVAL_P(zptr);
28091 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28092 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28093 							break;
28094 						}
28095 					}
28096 
28097 					if (IS_CV == IS_CONST) {
28098 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
28099 					} else {
28100 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
28101 					}
28102 					if (UNEXPECTED(prop_info)) {
28103 						/* special case for typed properties */
28104 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
28105 					} else {
28106 						zend_binary_op(zptr, zptr, value OPLINE_CC);
28107 					}
28108 				} while (0);
28109 
28110 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28111 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
28112 				}
28113 			}
28114 		} else {
28115 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
28116 		}
28117 	} while (0);
28118 
28119 	FREE_OP(free_op_data);
28120 
28121 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28122 	/* assign_obj has two opcodes! */
28123 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28124 }
28125 
28126 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28127 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28128 {
28129 	USE_OPLINE
28130 	zend_free_op free_op1, free_op_data1;
28131 	zval *var_ptr;
28132 	zval *value, *container, *dim;
28133 
28134 	SAVE_OPLINE();
28135 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28136 
28137 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28138 assign_dim_op_array:
28139 		SEPARATE_ARRAY(container);
28140 assign_dim_op_new_array:
28141 		dim = EX_VAR(opline->op2.var);
28142 		if (IS_CV == IS_UNUSED) {
28143 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
28144 			if (UNEXPECTED(!var_ptr)) {
28145 				zend_cannot_add_element();
28146 				goto assign_dim_op_ret_null;
28147 			}
28148 		} else {
28149 			if (IS_CV == IS_CONST) {
28150 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
28151 			} else {
28152 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
28153 			}
28154 			if (UNEXPECTED(!var_ptr)) {
28155 				goto assign_dim_op_ret_null;
28156 			}
28157 		}
28158 
28159 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
28160 
28161 		do {
28162 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
28163 				zend_reference *ref = Z_REF_P(var_ptr);
28164 				var_ptr = Z_REFVAL_P(var_ptr);
28165 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28166 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28167 					break;
28168 				}
28169 			}
28170 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
28171 		} while (0);
28172 
28173 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28174 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28175 		}
28176 		FREE_OP(free_op_data1);
28177 	} else {
28178 		if (EXPECTED(Z_ISREF_P(container))) {
28179 			container = Z_REFVAL_P(container);
28180 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28181 				goto assign_dim_op_array;
28182 			}
28183 		}
28184 
28185 		dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28186 
28187 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28188 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28189 				dim++;
28190 			}
28191 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
28192 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
28193 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
28194 				ZVAL_UNDEFINED_OP1();
28195 			}
28196 			ZVAL_ARR(container, zend_new_array(8));
28197 			goto assign_dim_op_new_array;
28198 		} else {
28199 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
28200 assign_dim_op_ret_null:
28201 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
28202 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28203 				ZVAL_NULL(EX_VAR(opline->result.var));
28204 			}
28205 		}
28206 	}
28207 
28208 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28209 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28210 }
28211 
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28212 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28213 {
28214 	USE_OPLINE
28215 	zend_free_op free_op1;
28216 	zval *var_ptr;
28217 	zval *value;
28218 
28219 	SAVE_OPLINE();
28220 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28221 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28222 
28223 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
28224 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28225 			ZVAL_NULL(EX_VAR(opline->result.var));
28226 		}
28227 	} else {
28228 		do {
28229 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
28230 				zend_reference *ref = Z_REF_P(var_ptr);
28231 				var_ptr = Z_REFVAL_P(var_ptr);
28232 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28233 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28234 					break;
28235 				}
28236 			}
28237 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
28238 		} while (0);
28239 
28240 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28241 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28242 		}
28243 	}
28244 
28245 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28246 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28247 }
28248 
ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28250 {
28251 	USE_OPLINE
28252 	zend_free_op free_op1;
28253 	zval *object;
28254 	zval *property;
28255 	zval *zptr;
28256 	void **cache_slot;
28257 	zend_property_info *prop_info;
28258 
28259 	SAVE_OPLINE();
28260 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28261 
28262 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28263 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28264 	}
28265 
28266 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28267 
28268 	do {
28269 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28270 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28271 				object = Z_REFVAL_P(object);
28272 				goto pre_incdec_object;
28273 			}
28274 			if (IS_VAR == IS_CV
28275 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28276 				ZVAL_UNDEFINED_OP1();
28277 			}
28278 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28279 			if (UNEXPECTED(!object)) {
28280 				break;
28281 			}
28282 		}
28283 
28284 pre_incdec_object:
28285 		/* here we are sure we are dealing with an object */
28286 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
28287 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
28288 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28289 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28290 					ZVAL_NULL(EX_VAR(opline->result.var));
28291 				}
28292 			} else {
28293 				if (IS_CV == IS_CONST) {
28294 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
28295 				} else {
28296 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
28297 				}
28298 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
28299 			}
28300 		} else {
28301 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
28302 		}
28303 	} while (0);
28304 
28305 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28306 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28307 }
28308 
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28310 {
28311 	USE_OPLINE
28312 	zend_free_op free_op1;
28313 	zval *object;
28314 	zval *property;
28315 	zval *zptr;
28316 	void **cache_slot;
28317 	zend_property_info *prop_info;
28318 
28319 	SAVE_OPLINE();
28320 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28321 
28322 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28323 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28324 	}
28325 
28326 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28327 
28328 	do {
28329 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28330 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28331 				object = Z_REFVAL_P(object);
28332 				goto post_incdec_object;
28333 			}
28334 			if (IS_VAR == IS_CV
28335 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28336 				ZVAL_UNDEFINED_OP1();
28337 			}
28338 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28339 			if (UNEXPECTED(!object)) {
28340 				break;
28341 			}
28342 		}
28343 
28344 post_incdec_object:
28345 		/* here we are sure we are dealing with an object */
28346 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
28347 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
28348 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
28349 				ZVAL_NULL(EX_VAR(opline->result.var));
28350 			} else {
28351 				if (IS_CV == IS_CONST) {
28352 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
28353 				} else {
28354 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
28355 				}
28356 
28357 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
28358 			}
28359 		} else {
28360 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
28361 		}
28362 	} while (0);
28363 
28364 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28365 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28366 }
28367 
ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28369 {
28370 	USE_OPLINE
28371 	zend_free_op free_op1;
28372 	zval *container;
28373 
28374 	SAVE_OPLINE();
28375 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28376 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
28377 
28378 	if (IS_VAR == IS_VAR) {
28379 		zval *result = EX_VAR(opline->result.var);
28380 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28381 	}
28382 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28383 }
28384 
ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28386 {
28387 	USE_OPLINE
28388 	zend_free_op free_op1;
28389 	zval *container;
28390 
28391 	SAVE_OPLINE();
28392 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28393 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
28394 
28395 	if (IS_VAR == IS_VAR) {
28396 		zval *result = EX_VAR(opline->result.var);
28397 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28398 	}
28399 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28400 }
28401 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28402 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28403 {
28404 #if 0
28405 	USE_OPLINE
28406 #endif
28407 
28408 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28409         if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
28410 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28411         }
28412 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28413 	} else {
28414 		if (IS_CV == IS_UNUSED) {
28415 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28416 		}
28417 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28418 	}
28419 }
28420 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28422 {
28423 	USE_OPLINE
28424 	zend_free_op free_op1;
28425 	zval *container;
28426 
28427 	SAVE_OPLINE();
28428 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28429 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
28430 
28431 	if (IS_VAR == IS_VAR) {
28432 		zval *result = EX_VAR(opline->result.var);
28433 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28434 	}
28435 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28436 }
28437 
ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28439 {
28440 	USE_OPLINE
28441 	zend_free_op free_op1;
28442 	zval *property, *container, *result;
28443 
28444 	SAVE_OPLINE();
28445 
28446 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28447 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28448 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28449 	}
28450 
28451 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28452 	result = EX_VAR(opline->result.var);
28453 	zend_fetch_property_address(
28454 		result, container, IS_VAR, property, IS_CV,
28455 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
28456 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
28457 
28458 	if (IS_VAR == IS_VAR) {
28459 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28460 	}
28461 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28462 }
28463 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28464 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28465 {
28466 	USE_OPLINE
28467 	zend_free_op free_op1;
28468 	zval *property, *container, *result;
28469 
28470 	SAVE_OPLINE();
28471 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28472 
28473 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28474 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28475 	}
28476 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28477 	result = EX_VAR(opline->result.var);
28478 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
28479 
28480 	if (IS_VAR == IS_VAR) {
28481 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28482 	}
28483 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28484 }
28485 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28486 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28487 {
28488 #if 0
28489 	USE_OPLINE
28490 #endif
28491 
28492 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28493 		/* Behave like FETCH_OBJ_W */
28494 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
28495 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28496 		}
28497 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28498 	} else {
28499 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28500 	}
28501 }
28502 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28504 {
28505 	USE_OPLINE
28506 	zend_free_op free_op1;
28507 	zval *container, *property, *result;
28508 
28509 	SAVE_OPLINE();
28510 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28511 
28512 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
28513 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28514 	}
28515 
28516 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28517 	result = EX_VAR(opline->result.var);
28518 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
28519 
28520 	if (IS_VAR == IS_VAR) {
28521 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
28522 	}
28523 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28524 }
28525 
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28526 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28527 {
28528 	USE_OPLINE
28529 	zend_free_op free_op1;
28530 	zval *container, *dim;
28531 
28532 	SAVE_OPLINE();
28533 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28534 	dim = EX_VAR(opline->op2.var);
28535 
28536 	if (IS_VAR == IS_VAR
28537 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
28538 		&& UNEXPECTED(!Z_ISREF_P(container))
28539 	) {
28540 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
28541 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
28542 	} else {
28543 		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
28544 	}
28545 
28546 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28547 }
28548 
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28549 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28550 {
28551 	USE_OPLINE
28552 	zend_free_op free_op1;
28553 	zval *object, *property, *value, tmp;
28554 
28555 	SAVE_OPLINE();
28556 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28557 
28558 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28559 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28560 	}
28561 
28562 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28563 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
28564 
28565 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28566 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28567 			object = Z_REFVAL_P(object);
28568 			goto assign_object;
28569 		}
28570 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28571 		if (UNEXPECTED(!object)) {
28572 			value = &EG(uninitialized_zval);
28573 			goto free_and_exit_assign_obj;
28574 		}
28575 	}
28576 
28577 assign_object:
28578 	if (IS_CV == IS_CONST &&
28579 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
28580 		void **cache_slot = CACHE_ADDR(opline->extended_value);
28581 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
28582 		zend_object *zobj = Z_OBJ_P(object);
28583 		zval *property_val;
28584 
28585 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
28586 			property_val = OBJ_PROP(zobj, prop_offset);
28587 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
28588 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
28589 
28590 				if (UNEXPECTED(prop_info != NULL)) {
28591 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
28592 					goto free_and_exit_assign_obj;
28593 				} else {
28594 fast_assign_obj:
28595 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
28596 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28597 						ZVAL_COPY(EX_VAR(opline->result.var), value);
28598 					}
28599 					goto exit_assign_obj;
28600 				}
28601 			}
28602 		} else {
28603 			if (EXPECTED(zobj->properties != NULL)) {
28604 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
28605 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
28606 						GC_DELREF(zobj->properties);
28607 					}
28608 					zobj->properties = zend_array_dup(zobj->properties);
28609 				}
28610 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
28611 				if (property_val) {
28612 					goto fast_assign_obj;
28613 				}
28614 			}
28615 
28616 			if (!zobj->ce->__set) {
28617 
28618 				if (EXPECTED(zobj->properties == NULL)) {
28619 					rebuild_object_properties(zobj);
28620 				}
28621 				if (IS_CONST == IS_CONST) {
28622 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
28623 						Z_ADDREF_P(value);
28624 					}
28625 				} else if (IS_CONST != IS_TMP_VAR) {
28626 					if (Z_ISREF_P(value)) {
28627 						if (IS_CONST == IS_VAR) {
28628 							zend_reference *ref = Z_REF_P(value);
28629 							if (GC_DELREF(ref) == 0) {
28630 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
28631 								efree_size(ref, sizeof(zend_reference));
28632 								value = &tmp;
28633 							} else {
28634 								value = Z_REFVAL_P(value);
28635 								Z_TRY_ADDREF_P(value);
28636 							}
28637 						} else {
28638 							value = Z_REFVAL_P(value);
28639 							Z_TRY_ADDREF_P(value);
28640 						}
28641 					} else if (IS_CONST == IS_CV) {
28642 						Z_TRY_ADDREF_P(value);
28643 					}
28644 				}
28645 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
28646 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28647 					ZVAL_COPY(EX_VAR(opline->result.var), value);
28648 				}
28649 				goto exit_assign_obj;
28650 			}
28651 		}
28652 	}
28653 
28654 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
28655 		ZVAL_DEREF(value);
28656 	}
28657 
28658 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
28659 
28660 free_and_exit_assign_obj:
28661 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28662 		ZVAL_COPY(EX_VAR(opline->result.var), value);
28663 	}
28664 
28665 exit_assign_obj:
28666 
28667 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28668 	/* assign_obj has two opcodes! */
28669 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28670 }
28671 
28672 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28674 {
28675 	USE_OPLINE
28676 	zend_free_op free_op1, free_op_data;
28677 	zval *object, *property, *value, tmp;
28678 
28679 	SAVE_OPLINE();
28680 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28681 
28682 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28683 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28684 	}
28685 
28686 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28687 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
28688 
28689 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28690 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28691 			object = Z_REFVAL_P(object);
28692 			goto assign_object;
28693 		}
28694 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28695 		if (UNEXPECTED(!object)) {
28696 			value = &EG(uninitialized_zval);
28697 			goto free_and_exit_assign_obj;
28698 		}
28699 	}
28700 
28701 assign_object:
28702 	if (IS_CV == IS_CONST &&
28703 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
28704 		void **cache_slot = CACHE_ADDR(opline->extended_value);
28705 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
28706 		zend_object *zobj = Z_OBJ_P(object);
28707 		zval *property_val;
28708 
28709 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
28710 			property_val = OBJ_PROP(zobj, prop_offset);
28711 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
28712 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
28713 
28714 				if (UNEXPECTED(prop_info != NULL)) {
28715 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
28716 					goto free_and_exit_assign_obj;
28717 				} else {
28718 fast_assign_obj:
28719 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
28720 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28721 						ZVAL_COPY(EX_VAR(opline->result.var), value);
28722 					}
28723 					goto exit_assign_obj;
28724 				}
28725 			}
28726 		} else {
28727 			if (EXPECTED(zobj->properties != NULL)) {
28728 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
28729 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
28730 						GC_DELREF(zobj->properties);
28731 					}
28732 					zobj->properties = zend_array_dup(zobj->properties);
28733 				}
28734 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
28735 				if (property_val) {
28736 					goto fast_assign_obj;
28737 				}
28738 			}
28739 
28740 			if (!zobj->ce->__set) {
28741 
28742 				if (EXPECTED(zobj->properties == NULL)) {
28743 					rebuild_object_properties(zobj);
28744 				}
28745 				if (IS_TMP_VAR == IS_CONST) {
28746 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
28747 						Z_ADDREF_P(value);
28748 					}
28749 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
28750 					if (Z_ISREF_P(value)) {
28751 						if (IS_TMP_VAR == IS_VAR) {
28752 							zend_reference *ref = Z_REF_P(value);
28753 							if (GC_DELREF(ref) == 0) {
28754 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
28755 								efree_size(ref, sizeof(zend_reference));
28756 								value = &tmp;
28757 							} else {
28758 								value = Z_REFVAL_P(value);
28759 								Z_TRY_ADDREF_P(value);
28760 							}
28761 						} else {
28762 							value = Z_REFVAL_P(value);
28763 							Z_TRY_ADDREF_P(value);
28764 						}
28765 					} else if (IS_TMP_VAR == IS_CV) {
28766 						Z_TRY_ADDREF_P(value);
28767 					}
28768 				}
28769 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
28770 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28771 					ZVAL_COPY(EX_VAR(opline->result.var), value);
28772 				}
28773 				goto exit_assign_obj;
28774 			}
28775 		}
28776 	}
28777 
28778 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
28779 		ZVAL_DEREF(value);
28780 	}
28781 
28782 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
28783 
28784 free_and_exit_assign_obj:
28785 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28786 		ZVAL_COPY(EX_VAR(opline->result.var), value);
28787 	}
28788 	zval_ptr_dtor_nogc(free_op_data);
28789 exit_assign_obj:
28790 
28791 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28792 	/* assign_obj has two opcodes! */
28793 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28794 }
28795 
28796 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28797 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28798 {
28799 	USE_OPLINE
28800 	zend_free_op free_op1, free_op_data;
28801 	zval *object, *property, *value, tmp;
28802 
28803 	SAVE_OPLINE();
28804 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28805 
28806 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28807 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28808 	}
28809 
28810 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28811 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
28812 
28813 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28814 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28815 			object = Z_REFVAL_P(object);
28816 			goto assign_object;
28817 		}
28818 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28819 		if (UNEXPECTED(!object)) {
28820 			value = &EG(uninitialized_zval);
28821 			goto free_and_exit_assign_obj;
28822 		}
28823 	}
28824 
28825 assign_object:
28826 	if (IS_CV == IS_CONST &&
28827 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
28828 		void **cache_slot = CACHE_ADDR(opline->extended_value);
28829 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
28830 		zend_object *zobj = Z_OBJ_P(object);
28831 		zval *property_val;
28832 
28833 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
28834 			property_val = OBJ_PROP(zobj, prop_offset);
28835 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
28836 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
28837 
28838 				if (UNEXPECTED(prop_info != NULL)) {
28839 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
28840 					goto free_and_exit_assign_obj;
28841 				} else {
28842 fast_assign_obj:
28843 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
28844 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28845 						ZVAL_COPY(EX_VAR(opline->result.var), value);
28846 					}
28847 					goto exit_assign_obj;
28848 				}
28849 			}
28850 		} else {
28851 			if (EXPECTED(zobj->properties != NULL)) {
28852 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
28853 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
28854 						GC_DELREF(zobj->properties);
28855 					}
28856 					zobj->properties = zend_array_dup(zobj->properties);
28857 				}
28858 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
28859 				if (property_val) {
28860 					goto fast_assign_obj;
28861 				}
28862 			}
28863 
28864 			if (!zobj->ce->__set) {
28865 
28866 				if (EXPECTED(zobj->properties == NULL)) {
28867 					rebuild_object_properties(zobj);
28868 				}
28869 				if (IS_VAR == IS_CONST) {
28870 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
28871 						Z_ADDREF_P(value);
28872 					}
28873 				} else if (IS_VAR != IS_TMP_VAR) {
28874 					if (Z_ISREF_P(value)) {
28875 						if (IS_VAR == IS_VAR) {
28876 							zend_reference *ref = Z_REF_P(value);
28877 							if (GC_DELREF(ref) == 0) {
28878 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
28879 								efree_size(ref, sizeof(zend_reference));
28880 								value = &tmp;
28881 							} else {
28882 								value = Z_REFVAL_P(value);
28883 								Z_TRY_ADDREF_P(value);
28884 							}
28885 						} else {
28886 							value = Z_REFVAL_P(value);
28887 							Z_TRY_ADDREF_P(value);
28888 						}
28889 					} else if (IS_VAR == IS_CV) {
28890 						Z_TRY_ADDREF_P(value);
28891 					}
28892 				}
28893 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
28894 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28895 					ZVAL_COPY(EX_VAR(opline->result.var), value);
28896 				}
28897 				goto exit_assign_obj;
28898 			}
28899 		}
28900 	}
28901 
28902 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
28903 		ZVAL_DEREF(value);
28904 	}
28905 
28906 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
28907 
28908 free_and_exit_assign_obj:
28909 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28910 		ZVAL_COPY(EX_VAR(opline->result.var), value);
28911 	}
28912 	zval_ptr_dtor_nogc(free_op_data);
28913 exit_assign_obj:
28914 
28915 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
28916 	/* assign_obj has two opcodes! */
28917 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28918 }
28919 
28920 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28921 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28922 {
28923 	USE_OPLINE
28924 	zend_free_op free_op1;
28925 	zval *object, *property, *value, tmp;
28926 
28927 	SAVE_OPLINE();
28928 	object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
28929 
28930 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
28931 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28932 	}
28933 
28934 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
28935 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
28936 
28937 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
28938 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
28939 			object = Z_REFVAL_P(object);
28940 			goto assign_object;
28941 		}
28942 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
28943 		if (UNEXPECTED(!object)) {
28944 			value = &EG(uninitialized_zval);
28945 			goto free_and_exit_assign_obj;
28946 		}
28947 	}
28948 
28949 assign_object:
28950 	if (IS_CV == IS_CONST &&
28951 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
28952 		void **cache_slot = CACHE_ADDR(opline->extended_value);
28953 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
28954 		zend_object *zobj = Z_OBJ_P(object);
28955 		zval *property_val;
28956 
28957 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
28958 			property_val = OBJ_PROP(zobj, prop_offset);
28959 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
28960 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
28961 
28962 				if (UNEXPECTED(prop_info != NULL)) {
28963 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
28964 					goto free_and_exit_assign_obj;
28965 				} else {
28966 fast_assign_obj:
28967 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
28968 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28969 						ZVAL_COPY(EX_VAR(opline->result.var), value);
28970 					}
28971 					goto exit_assign_obj;
28972 				}
28973 			}
28974 		} else {
28975 			if (EXPECTED(zobj->properties != NULL)) {
28976 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
28977 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
28978 						GC_DELREF(zobj->properties);
28979 					}
28980 					zobj->properties = zend_array_dup(zobj->properties);
28981 				}
28982 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
28983 				if (property_val) {
28984 					goto fast_assign_obj;
28985 				}
28986 			}
28987 
28988 			if (!zobj->ce->__set) {
28989 
28990 				if (EXPECTED(zobj->properties == NULL)) {
28991 					rebuild_object_properties(zobj);
28992 				}
28993 				if (IS_CV == IS_CONST) {
28994 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
28995 						Z_ADDREF_P(value);
28996 					}
28997 				} else if (IS_CV != IS_TMP_VAR) {
28998 					if (Z_ISREF_P(value)) {
28999 						if (IS_CV == IS_VAR) {
29000 							zend_reference *ref = Z_REF_P(value);
29001 							if (GC_DELREF(ref) == 0) {
29002 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
29003 								efree_size(ref, sizeof(zend_reference));
29004 								value = &tmp;
29005 							} else {
29006 								value = Z_REFVAL_P(value);
29007 								Z_TRY_ADDREF_P(value);
29008 							}
29009 						} else {
29010 							value = Z_REFVAL_P(value);
29011 							Z_TRY_ADDREF_P(value);
29012 						}
29013 					} else if (IS_CV == IS_CV) {
29014 						Z_TRY_ADDREF_P(value);
29015 					}
29016 				}
29017 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
29018 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29019 					ZVAL_COPY(EX_VAR(opline->result.var), value);
29020 				}
29021 				goto exit_assign_obj;
29022 			}
29023 		}
29024 	}
29025 
29026 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
29027 		ZVAL_DEREF(value);
29028 	}
29029 
29030 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
29031 
29032 free_and_exit_assign_obj:
29033 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29034 		ZVAL_COPY(EX_VAR(opline->result.var), value);
29035 	}
29036 
29037 exit_assign_obj:
29038 
29039 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29040 	/* assign_obj has two opcodes! */
29041 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29042 }
29043 
29044 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29046 {
29047 	USE_OPLINE
29048 	zend_free_op free_op1;
29049 	zval *object_ptr, *orig_object_ptr;
29050 	zend_free_op free_op_data;
29051 	zval *value;
29052 	zval *variable_ptr;
29053 	zval *dim;
29054 
29055 	SAVE_OPLINE();
29056 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29057 
29058 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29059 try_assign_dim_array:
29060 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
29061 		SEPARATE_ARRAY(object_ptr);
29062 		if (IS_CV == IS_UNUSED) {
29063 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
29064 				ZVAL_DEREF(value);
29065 			}
29066 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29067 			if (UNEXPECTED(variable_ptr == NULL)) {
29068 				zend_cannot_add_element();
29069 				goto assign_dim_error;
29070 			} else if (IS_CONST == IS_CV) {
29071 				if (Z_REFCOUNTED_P(value)) {
29072 					Z_ADDREF_P(value);
29073 				}
29074 			} else if (IS_CONST == IS_VAR) {
29075 				if (value != free_op_data) {
29076 					if (Z_REFCOUNTED_P(value)) {
29077 						Z_ADDREF_P(value);
29078 					}
29079 
29080 				}
29081 			} else if (IS_CONST == IS_CONST) {
29082 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29083 					Z_ADDREF_P(value);
29084 				}
29085 			}
29086 		} else {
29087 			dim = EX_VAR(opline->op2.var);
29088 			if (IS_CV == IS_CONST) {
29089 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29090 			} else {
29091 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29092 			}
29093 			if (UNEXPECTED(variable_ptr == NULL)) {
29094 				goto assign_dim_error;
29095 			}
29096 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
29097 		}
29098 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29099 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29100 		}
29101 	} else {
29102 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29103 			object_ptr = Z_REFVAL_P(object_ptr);
29104 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29105 				goto try_assign_dim_array;
29106 			}
29107 		}
29108 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29109 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29110 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
29111 
29112 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29113 				dim++;
29114 			}
29115 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29116 
29117 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29118 			if (IS_CV == IS_UNUSED) {
29119 				zend_use_new_element_for_string();
29120 
29121 				UNDEF_RESULT();
29122 			} else {
29123 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29124 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
29125 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29126 
29127 			}
29128 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
29129 			if (Z_ISREF_P(orig_object_ptr)
29130 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
29131 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
29132 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29133 
29134 				UNDEF_RESULT();
29135 			} else {
29136 				ZVAL_ARR(object_ptr, zend_new_array(8));
29137 				goto try_assign_dim_array;
29138 			}
29139 		} else {
29140 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
29141 				zend_use_scalar_as_array();
29142 			}
29143 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29144 assign_dim_error:
29145 
29146 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29147 				ZVAL_NULL(EX_VAR(opline->result.var));
29148 			}
29149 		}
29150 	}
29151 	if (IS_CV != IS_UNUSED) {
29152 
29153 	}
29154 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29155 	/* assign_dim has two opcodes! */
29156 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29157 }
29158 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29160 {
29161 	USE_OPLINE
29162 	zend_free_op free_op1;
29163 	zval *object_ptr, *orig_object_ptr;
29164 	zend_free_op free_op_data;
29165 	zval *value;
29166 	zval *variable_ptr;
29167 	zval *dim;
29168 
29169 	SAVE_OPLINE();
29170 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29171 
29172 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29173 try_assign_dim_array:
29174 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29175 		SEPARATE_ARRAY(object_ptr);
29176 		if (IS_CV == IS_UNUSED) {
29177 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
29178 				ZVAL_DEREF(value);
29179 			}
29180 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29181 			if (UNEXPECTED(variable_ptr == NULL)) {
29182 				zend_cannot_add_element();
29183 				goto assign_dim_error;
29184 			} else if (IS_TMP_VAR == IS_CV) {
29185 				if (Z_REFCOUNTED_P(value)) {
29186 					Z_ADDREF_P(value);
29187 				}
29188 			} else if (IS_TMP_VAR == IS_VAR) {
29189 				if (value != free_op_data) {
29190 					if (Z_REFCOUNTED_P(value)) {
29191 						Z_ADDREF_P(value);
29192 					}
29193 					zval_ptr_dtor_nogc(free_op_data);
29194 				}
29195 			} else if (IS_TMP_VAR == IS_CONST) {
29196 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29197 					Z_ADDREF_P(value);
29198 				}
29199 			}
29200 		} else {
29201 			dim = EX_VAR(opline->op2.var);
29202 			if (IS_CV == IS_CONST) {
29203 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29204 			} else {
29205 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29206 			}
29207 			if (UNEXPECTED(variable_ptr == NULL)) {
29208 				goto assign_dim_error;
29209 			}
29210 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
29211 		}
29212 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29213 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29214 		}
29215 	} else {
29216 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29217 			object_ptr = Z_REFVAL_P(object_ptr);
29218 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29219 				goto try_assign_dim_array;
29220 			}
29221 		}
29222 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29223 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29224 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29225 
29226 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29227 				dim++;
29228 			}
29229 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29230 
29231 			zval_ptr_dtor_nogc(free_op_data);
29232 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29233 			if (IS_CV == IS_UNUSED) {
29234 				zend_use_new_element_for_string();
29235 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29236 				UNDEF_RESULT();
29237 			} else {
29238 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29239 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29240 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29241 				zval_ptr_dtor_nogc(free_op_data);
29242 			}
29243 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
29244 			if (Z_ISREF_P(orig_object_ptr)
29245 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
29246 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
29247 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29248 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29249 				UNDEF_RESULT();
29250 			} else {
29251 				ZVAL_ARR(object_ptr, zend_new_array(8));
29252 				goto try_assign_dim_array;
29253 			}
29254 		} else {
29255 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
29256 				zend_use_scalar_as_array();
29257 			}
29258 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29259 assign_dim_error:
29260 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29261 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29262 				ZVAL_NULL(EX_VAR(opline->result.var));
29263 			}
29264 		}
29265 	}
29266 	if (IS_CV != IS_UNUSED) {
29267 
29268 	}
29269 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29270 	/* assign_dim has two opcodes! */
29271 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29272 }
29273 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29275 {
29276 	USE_OPLINE
29277 	zend_free_op free_op1;
29278 	zval *object_ptr, *orig_object_ptr;
29279 	zend_free_op free_op_data;
29280 	zval *value;
29281 	zval *variable_ptr;
29282 	zval *dim;
29283 
29284 	SAVE_OPLINE();
29285 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29286 
29287 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29288 try_assign_dim_array:
29289 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29290 		SEPARATE_ARRAY(object_ptr);
29291 		if (IS_CV == IS_UNUSED) {
29292 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
29293 				ZVAL_DEREF(value);
29294 			}
29295 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29296 			if (UNEXPECTED(variable_ptr == NULL)) {
29297 				zend_cannot_add_element();
29298 				goto assign_dim_error;
29299 			} else if (IS_VAR == IS_CV) {
29300 				if (Z_REFCOUNTED_P(value)) {
29301 					Z_ADDREF_P(value);
29302 				}
29303 			} else if (IS_VAR == IS_VAR) {
29304 				if (value != free_op_data) {
29305 					if (Z_REFCOUNTED_P(value)) {
29306 						Z_ADDREF_P(value);
29307 					}
29308 					zval_ptr_dtor_nogc(free_op_data);
29309 				}
29310 			} else if (IS_VAR == IS_CONST) {
29311 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29312 					Z_ADDREF_P(value);
29313 				}
29314 			}
29315 		} else {
29316 			dim = EX_VAR(opline->op2.var);
29317 			if (IS_CV == IS_CONST) {
29318 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29319 			} else {
29320 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29321 			}
29322 			if (UNEXPECTED(variable_ptr == NULL)) {
29323 				goto assign_dim_error;
29324 			}
29325 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
29326 		}
29327 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29328 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29329 		}
29330 	} else {
29331 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29332 			object_ptr = Z_REFVAL_P(object_ptr);
29333 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29334 				goto try_assign_dim_array;
29335 			}
29336 		}
29337 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29338 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29339 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29340 
29341 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29342 				dim++;
29343 			}
29344 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29345 
29346 			zval_ptr_dtor_nogc(free_op_data);
29347 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29348 			if (IS_CV == IS_UNUSED) {
29349 				zend_use_new_element_for_string();
29350 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29351 				UNDEF_RESULT();
29352 			} else {
29353 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29354 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29355 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29356 				zval_ptr_dtor_nogc(free_op_data);
29357 			}
29358 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
29359 			if (Z_ISREF_P(orig_object_ptr)
29360 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
29361 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
29362 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29363 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29364 				UNDEF_RESULT();
29365 			} else {
29366 				ZVAL_ARR(object_ptr, zend_new_array(8));
29367 				goto try_assign_dim_array;
29368 			}
29369 		} else {
29370 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
29371 				zend_use_scalar_as_array();
29372 			}
29373 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29374 assign_dim_error:
29375 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
29376 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29377 				ZVAL_NULL(EX_VAR(opline->result.var));
29378 			}
29379 		}
29380 	}
29381 	if (IS_CV != IS_UNUSED) {
29382 
29383 	}
29384 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29385 	/* assign_dim has two opcodes! */
29386 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29387 }
29388 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29390 {
29391 	USE_OPLINE
29392 	zend_free_op free_op1;
29393 	zval *object_ptr, *orig_object_ptr;
29394 	zend_free_op free_op_data;
29395 	zval *value;
29396 	zval *variable_ptr;
29397 	zval *dim;
29398 
29399 	SAVE_OPLINE();
29400 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29401 
29402 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29403 try_assign_dim_array:
29404 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
29405 		SEPARATE_ARRAY(object_ptr);
29406 		if (IS_CV == IS_UNUSED) {
29407 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
29408 				ZVAL_DEREF(value);
29409 			}
29410 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
29411 			if (UNEXPECTED(variable_ptr == NULL)) {
29412 				zend_cannot_add_element();
29413 				goto assign_dim_error;
29414 			} else if (IS_CV == IS_CV) {
29415 				if (Z_REFCOUNTED_P(value)) {
29416 					Z_ADDREF_P(value);
29417 				}
29418 			} else if (IS_CV == IS_VAR) {
29419 				if (value != free_op_data) {
29420 					if (Z_REFCOUNTED_P(value)) {
29421 						Z_ADDREF_P(value);
29422 					}
29423 
29424 				}
29425 			} else if (IS_CV == IS_CONST) {
29426 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
29427 					Z_ADDREF_P(value);
29428 				}
29429 			}
29430 		} else {
29431 			dim = EX_VAR(opline->op2.var);
29432 			if (IS_CV == IS_CONST) {
29433 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29434 			} else {
29435 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
29436 			}
29437 			if (UNEXPECTED(variable_ptr == NULL)) {
29438 				goto assign_dim_error;
29439 			}
29440 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
29441 		}
29442 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29443 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29444 		}
29445 	} else {
29446 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
29447 			object_ptr = Z_REFVAL_P(object_ptr);
29448 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
29449 				goto try_assign_dim_array;
29450 			}
29451 		}
29452 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
29453 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29454 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
29455 
29456 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
29457 				dim++;
29458 			}
29459 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29460 
29461 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
29462 			if (IS_CV == IS_UNUSED) {
29463 				zend_use_new_element_for_string();
29464 
29465 				UNDEF_RESULT();
29466 			} else {
29467 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29468 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
29469 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
29470 
29471 			}
29472 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
29473 			if (Z_ISREF_P(orig_object_ptr)
29474 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
29475 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
29476 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29477 
29478 				UNDEF_RESULT();
29479 			} else {
29480 				ZVAL_ARR(object_ptr, zend_new_array(8));
29481 				goto try_assign_dim_array;
29482 			}
29483 		} else {
29484 			if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
29485 				zend_use_scalar_as_array();
29486 			}
29487 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29488 assign_dim_error:
29489 
29490 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29491 				ZVAL_NULL(EX_VAR(opline->result.var));
29492 			}
29493 		}
29494 	}
29495 	if (IS_CV != IS_UNUSED) {
29496 
29497 	}
29498 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29499 	/* assign_dim has two opcodes! */
29500 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29501 }
29502 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29504 {
29505 	USE_OPLINE
29506 	zend_free_op free_op1;
29507 	zval *value;
29508 	zval *variable_ptr;
29509 
29510 	SAVE_OPLINE();
29511 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29512 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29513 
29514 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
29515 
29516 		if (UNEXPECTED(0)) {
29517 			ZVAL_NULL(EX_VAR(opline->result.var));
29518 		}
29519 	} else {
29520 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
29521 		if (UNEXPECTED(0)) {
29522 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29523 		}
29524 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29525 		/* zend_assign_to_variable() always takes care of op2, never free it! */
29526 	}
29527 
29528 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29529 }
29530 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29532 {
29533 	USE_OPLINE
29534 	zend_free_op free_op1;
29535 	zval *value;
29536 	zval *variable_ptr;
29537 
29538 	SAVE_OPLINE();
29539 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29540 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29541 
29542 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
29543 
29544 		if (UNEXPECTED(1)) {
29545 			ZVAL_NULL(EX_VAR(opline->result.var));
29546 		}
29547 	} else {
29548 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
29549 		if (UNEXPECTED(1)) {
29550 			ZVAL_COPY(EX_VAR(opline->result.var), value);
29551 		}
29552 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29553 		/* zend_assign_to_variable() always takes care of op2, never free it! */
29554 	}
29555 
29556 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29557 }
29558 
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29559 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29560 {
29561 	USE_OPLINE
29562 	zend_free_op free_op1;
29563 	zval *variable_ptr;
29564 	zval *value_ptr;
29565 
29566 	SAVE_OPLINE();
29567 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
29568 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29569 
29570 	if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
29571 		variable_ptr = &EG(uninitialized_zval);
29572 	} else if (IS_VAR == IS_VAR &&
29573 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
29574 
29575 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
29576 		variable_ptr = &EG(uninitialized_zval);
29577 	} else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
29578 		variable_ptr = &EG(uninitialized_zval);
29579 	} else if (IS_CV == IS_VAR &&
29580 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
29581 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
29582 
29583 		variable_ptr = zend_wrong_assign_to_variable_reference(
29584 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29585 	} else {
29586 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
29587 	}
29588 
29589 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29590 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
29591 	}
29592 
29593 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29594 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29595 }
29596 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29598 {
29599 	USE_OPLINE
29600 	zend_free_op free_op1, free_op_data;
29601 	zval *property, *container, *value_ptr;
29602 
29603 	SAVE_OPLINE();
29604 
29605 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29606 
29607 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
29608 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29609 	}
29610 
29611 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29612 
29613 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
29614 
29615 	if (1) {
29616 		if (IS_VAR == IS_UNUSED) {
29617 			if (IS_CV == IS_CONST) {
29618 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29619 			} else {
29620 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29621 			}
29622 		} else {
29623 			if (IS_CV == IS_CONST) {
29624 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29625 			} else {
29626 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29627 			}
29628 		}
29629 	} else {
29630 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29631 	}
29632 
29633 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29634 
29635 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
29636 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29637 }
29638 
29639 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29640 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29641 {
29642 	USE_OPLINE
29643 	zend_free_op free_op1;
29644 	zval *property, *container, *value_ptr;
29645 
29646 	SAVE_OPLINE();
29647 
29648 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29649 
29650 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
29651 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29652 	}
29653 
29654 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
29655 
29656 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
29657 
29658 	if (1) {
29659 		if (IS_VAR == IS_UNUSED) {
29660 			if (IS_CV == IS_CONST) {
29661 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29662 			} else {
29663 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29664 			}
29665 		} else {
29666 			if (IS_CV == IS_CONST) {
29667 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29668 			} else {
29669 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29670 			}
29671 		}
29672 	} else {
29673 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
29674 	}
29675 
29676 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29677 
29678 
29679 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29680 }
29681 
29682 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29684 {
29685 	USE_OPLINE
29686 	zval *function_name;
29687 	zend_class_entry *ce;
29688 	uint32_t call_info;
29689 	zend_function *fbc;
29690 	zend_execute_data *call;
29691 
29692 	SAVE_OPLINE();
29693 
29694 	if (IS_VAR == IS_CONST) {
29695 		/* no function found. try a static method in class */
29696 		ce = CACHED_PTR(opline->result.num);
29697 		if (UNEXPECTED(ce == NULL)) {
29698 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
29699 			if (UNEXPECTED(ce == NULL)) {
29700 				ZEND_ASSERT(EG(exception));
29701 
29702 				HANDLE_EXCEPTION();
29703 			}
29704 			if (IS_CV != IS_CONST) {
29705 				CACHE_PTR(opline->result.num, ce);
29706 			}
29707 		}
29708 	} else if (IS_VAR == IS_UNUSED) {
29709 		ce = zend_fetch_class(NULL, opline->op1.num);
29710 		if (UNEXPECTED(ce == NULL)) {
29711 			ZEND_ASSERT(EG(exception));
29712 
29713 			HANDLE_EXCEPTION();
29714 		}
29715 	} else {
29716 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29717 	}
29718 
29719 	if (IS_VAR == IS_CONST &&
29720 	    IS_CV == IS_CONST &&
29721 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
29722 		/* nothing to do */
29723 	} else if (IS_VAR != IS_CONST &&
29724 	           IS_CV == IS_CONST &&
29725 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
29726 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
29727 	} else if (IS_CV != IS_UNUSED) {
29728 
29729 
29730 		function_name = EX_VAR(opline->op2.var);
29731 		if (IS_CV != IS_CONST) {
29732 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
29733 				do {
29734 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
29735 						function_name = Z_REFVAL_P(function_name);
29736 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
29737 							break;
29738 						}
29739 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
29740 						ZVAL_UNDEFINED_OP2();
29741 						if (UNEXPECTED(EG(exception) != NULL)) {
29742 							HANDLE_EXCEPTION();
29743 						}
29744 					}
29745 					zend_throw_error(NULL, "Function name must be a string");
29746 
29747 					HANDLE_EXCEPTION();
29748 				} while (0);
29749 			}
29750 		}
29751 
29752 		if (ce->get_static_method) {
29753 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
29754 		} else {
29755 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
29756 		}
29757 		if (UNEXPECTED(fbc == NULL)) {
29758 			if (EXPECTED(!EG(exception))) {
29759 				zend_undefined_method(ce, Z_STR_P(function_name));
29760 			}
29761 
29762 			HANDLE_EXCEPTION();
29763 		}
29764 		if (IS_CV == IS_CONST &&
29765 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
29766 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
29767 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
29768 		}
29769 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29770 			init_func_run_time_cache(&fbc->op_array);
29771 		}
29772 		if (IS_CV != IS_CONST) {
29773 
29774 		}
29775 	} else {
29776 		if (UNEXPECTED(ce->constructor == NULL)) {
29777 			zend_throw_error(NULL, "Cannot call constructor");
29778 			HANDLE_EXCEPTION();
29779 		}
29780 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
29781 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
29782 			HANDLE_EXCEPTION();
29783 		}
29784 		fbc = ce->constructor;
29785 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29786 			init_func_run_time_cache(&fbc->op_array);
29787 		}
29788 	}
29789 
29790 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
29791 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
29792 			ce = (zend_class_entry*)Z_OBJ(EX(This));
29793 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
29794 		} else {
29795 			zend_non_static_method_call(fbc);
29796 			if (UNEXPECTED(EG(exception) != NULL)) {
29797 				HANDLE_EXCEPTION();
29798 			}
29799 			goto check_parent_and_self;
29800 		}
29801 	} else {
29802 check_parent_and_self:
29803 		/* previous opcode is ZEND_FETCH_CLASS */
29804 		if (IS_VAR == IS_UNUSED
29805 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
29806 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
29807 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
29808 				ce = Z_OBJCE(EX(This));
29809 			} else {
29810 				ce = Z_CE(EX(This));
29811 			}
29812 		}
29813 		call_info = ZEND_CALL_NESTED_FUNCTION;
29814 	}
29815 
29816 	call = zend_vm_stack_push_call_frame(call_info,
29817 		fbc, opline->extended_value, ce);
29818 	call->prev_execute_data = EX(call);
29819 	EX(call) = call;
29820 
29821 	ZEND_VM_NEXT_OPCODE();
29822 }
29823 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29824 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29825 {
29826 	USE_OPLINE
29827 	zend_free_op free_op1;
29828 	zval *expr_ptr, new_expr;
29829 
29830 	SAVE_OPLINE();
29831 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
29832 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
29833 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29834 		if (Z_ISREF_P(expr_ptr)) {
29835 			Z_ADDREF_P(expr_ptr);
29836 		} else {
29837 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
29838 		}
29839 		if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
29840 	} else {
29841 		expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29842 		if (IS_VAR == IS_TMP_VAR) {
29843 			/* pass */
29844 		} else if (IS_VAR == IS_CONST) {
29845 			Z_TRY_ADDREF_P(expr_ptr);
29846 		} else if (IS_VAR == IS_CV) {
29847 			ZVAL_DEREF(expr_ptr);
29848 			Z_TRY_ADDREF_P(expr_ptr);
29849 		} else /* if (IS_VAR == IS_VAR) */ {
29850 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
29851 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
29852 
29853 				expr_ptr = Z_REFVAL_P(expr_ptr);
29854 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29855 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
29856 					expr_ptr = &new_expr;
29857 					efree_size(ref, sizeof(zend_reference));
29858 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
29859 					Z_ADDREF_P(expr_ptr);
29860 				}
29861 			}
29862 		}
29863 	}
29864 
29865 	if (IS_CV != IS_UNUSED) {
29866 
29867 		zval *offset = EX_VAR(opline->op2.var);
29868 		zend_string *str;
29869 		zend_ulong hval;
29870 
29871 add_again:
29872 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
29873 			str = Z_STR_P(offset);
29874 			if (IS_CV != IS_CONST) {
29875 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
29876 					goto num_index;
29877 				}
29878 			}
29879 str_index:
29880 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
29881 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
29882 			hval = Z_LVAL_P(offset);
29883 num_index:
29884 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
29885 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
29886 			offset = Z_REFVAL_P(offset);
29887 			goto add_again;
29888 		} else if (Z_TYPE_P(offset) == IS_NULL) {
29889 			str = ZSTR_EMPTY_ALLOC();
29890 			goto str_index;
29891 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
29892 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
29893 			goto num_index;
29894 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
29895 			hval = 0;
29896 			goto num_index;
29897 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
29898 			hval = 1;
29899 			goto num_index;
29900 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
29901 			zend_use_resource_as_offset(offset);
29902 			hval = Z_RES_HANDLE_P(offset);
29903 			goto num_index;
29904 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
29905 			ZVAL_UNDEFINED_OP2();
29906 			str = ZSTR_EMPTY_ALLOC();
29907 			goto str_index;
29908 		} else {
29909 			zend_illegal_offset();
29910 			zval_ptr_dtor_nogc(expr_ptr);
29911 		}
29912 
29913 	} else {
29914 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
29915 			zend_cannot_add_element();
29916 			zval_ptr_dtor_nogc(expr_ptr);
29917 		}
29918 	}
29919 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29920 }
29921 
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29923 {
29924 	zval *array;
29925 	uint32_t size;
29926 	USE_OPLINE
29927 
29928 	array = EX_VAR(opline->result.var);
29929 	if (IS_VAR != IS_UNUSED) {
29930 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
29931 		ZVAL_ARR(array, zend_new_array(size));
29932 		/* Explicitly initialize array as not-packed if flag is set */
29933 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
29934 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
29935 		}
29936 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29937 	} else {
29938 		ZVAL_ARR(array, zend_new_array(0));
29939 		ZEND_VM_NEXT_OPCODE();
29940 	}
29941 }
29942 
ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29944 {
29945 	USE_OPLINE
29946 	zend_free_op free_op1;
29947 	zval *container;
29948 	zval *offset;
29949 	zend_ulong hval;
29950 	zend_string *key;
29951 
29952 	SAVE_OPLINE();
29953 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
29954 	offset = EX_VAR(opline->op2.var);
29955 
29956 	do {
29957 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
29958 			HashTable *ht;
29959 
29960 unset_dim_array:
29961 			SEPARATE_ARRAY(container);
29962 			ht = Z_ARRVAL_P(container);
29963 offset_again:
29964 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
29965 				key = Z_STR_P(offset);
29966 				if (IS_CV != IS_CONST) {
29967 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
29968 						goto num_index_dim;
29969 					}
29970 				}
29971 str_index_dim:
29972 				if (ht == &EG(symbol_table)) {
29973 					zend_delete_global_variable(key);
29974 				} else {
29975 					zend_hash_del(ht, key);
29976 				}
29977 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
29978 				hval = Z_LVAL_P(offset);
29979 num_index_dim:
29980 				zend_hash_index_del(ht, hval);
29981 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
29982 				offset = Z_REFVAL_P(offset);
29983 				goto offset_again;
29984 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
29985 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
29986 				goto num_index_dim;
29987 			} else if (Z_TYPE_P(offset) == IS_NULL) {
29988 				key = ZSTR_EMPTY_ALLOC();
29989 				goto str_index_dim;
29990 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
29991 				hval = 0;
29992 				goto num_index_dim;
29993 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
29994 				hval = 1;
29995 				goto num_index_dim;
29996 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
29997 				hval = Z_RES_HANDLE_P(offset);
29998 				goto num_index_dim;
29999 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
30000 				ZVAL_UNDEFINED_OP2();
30001 				key = ZSTR_EMPTY_ALLOC();
30002 				goto str_index_dim;
30003 			} else {
30004 				zend_error(E_WARNING, "Illegal offset type in unset");
30005 			}
30006 			break;
30007 		} else if (Z_ISREF_P(container)) {
30008 			container = Z_REFVAL_P(container);
30009 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30010 				goto unset_dim_array;
30011 			}
30012 		}
30013 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30014 			container = ZVAL_UNDEFINED_OP1();
30015 		}
30016 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
30017 			offset = ZVAL_UNDEFINED_OP2();
30018 		}
30019 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30020 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
30021 				offset++;
30022 			}
30023 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
30024 		} else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
30025 			zend_throw_error(NULL, "Cannot unset string offsets");
30026 		}
30027 	} while (0);
30028 
30029 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
30030 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30031 }
30032 
ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30034 {
30035 	USE_OPLINE
30036 	zend_free_op free_op1;
30037 	zval *container;
30038 	zval *offset;
30039 
30040 	SAVE_OPLINE();
30041 	container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
30042 	if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30043 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30044 	}
30045 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30046 
30047 	do {
30048 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
30049 			if (Z_ISREF_P(container)) {
30050 				container = Z_REFVAL_P(container);
30051 				if (Z_TYPE_P(container) != IS_OBJECT) {
30052 					if (IS_VAR == IS_CV
30053 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30054 						ZVAL_UNDEFINED_OP1();
30055 					}
30056 					break;
30057 				}
30058 			} else {
30059 				break;
30060 			}
30061 		}
30062 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
30063 	} while (0);
30064 
30065 	if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
30066 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30067 }
30068 
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30070 {
30071 	USE_OPLINE
30072 
30073 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
30074 
30075 	SAVE_OPLINE();
30076 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
30077 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30078 	}
30079 
30080 	/* Destroy the previously yielded value */
30081 	zval_ptr_dtor(&generator->value);
30082 
30083 	/* Destroy the previously yielded key */
30084 	zval_ptr_dtor(&generator->key);
30085 
30086 	/* Set the new yielded value */
30087 	if (IS_VAR != IS_UNUSED) {
30088 		zend_free_op free_op1;
30089 
30090 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
30091 			/* Constants and temporary variables aren't yieldable by reference,
30092 			 * but we still allow them with a notice. */
30093 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
30094 				zval *value;
30095 
30096 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30097 
30098 				value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
30099 				ZVAL_COPY_VALUE(&generator->value, value);
30100 				if (IS_VAR == IS_CONST) {
30101 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30102 						Z_ADDREF(generator->value);
30103 					}
30104 				}
30105 			} else {
30106 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
30107 
30108 				/* If a function call result is yielded and the function did
30109 				 * not return by reference we throw a notice. */
30110 				do {
30111 					if (IS_VAR == IS_VAR) {
30112 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
30113 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
30114 						 && !Z_ISREF_P(value_ptr)) {
30115 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
30116 							ZVAL_COPY(&generator->value, value_ptr);
30117 							break;
30118 						}
30119 					}
30120 					if (Z_ISREF_P(value_ptr)) {
30121 						Z_ADDREF_P(value_ptr);
30122 					} else {
30123 						ZVAL_MAKE_REF_EX(value_ptr, 2);
30124 					}
30125 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
30126 				} while (0);
30127 
30128 				if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
30129 			}
30130 		} else {
30131 			zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
30132 
30133 			/* Consts, temporary variables and references need copying */
30134 			if (IS_VAR == IS_CONST) {
30135 				ZVAL_COPY_VALUE(&generator->value, value);
30136 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
30137 					Z_ADDREF(generator->value);
30138 				}
30139 			} else if (IS_VAR == IS_TMP_VAR) {
30140 				ZVAL_COPY_VALUE(&generator->value, value);
30141             } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
30142 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
30143 				zval_ptr_dtor_nogc(free_op1);
30144 			} else {
30145 				ZVAL_COPY_VALUE(&generator->value, value);
30146 				if (IS_VAR == IS_CV) {
30147 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
30148 				}
30149 			}
30150 		}
30151 	} else {
30152 		/* If no value was specified yield null */
30153 		ZVAL_NULL(&generator->value);
30154 	}
30155 
30156 	/* Set the new yielded key */
30157 	if (IS_CV != IS_UNUSED) {
30158 
30159 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30160 
30161 		/* Consts, temporary variables and references need copying */
30162 		if (IS_CV == IS_CONST) {
30163 			ZVAL_COPY_VALUE(&generator->key, key);
30164 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
30165 				Z_ADDREF(generator->key);
30166 			}
30167 		} else if (IS_CV == IS_TMP_VAR) {
30168 			ZVAL_COPY_VALUE(&generator->key, key);
30169 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
30170 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
30171 
30172 		} else {
30173 			ZVAL_COPY_VALUE(&generator->key, key);
30174 			if (IS_CV == IS_CV) {
30175 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
30176 			}
30177 		}
30178 
30179 		if (Z_TYPE(generator->key) == IS_LONG
30180 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
30181 		) {
30182 			generator->largest_used_integer_key = Z_LVAL(generator->key);
30183 		}
30184 	} else {
30185 		/* If no key was specified we use auto-increment keys */
30186 		generator->largest_used_integer_key++;
30187 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
30188 	}
30189 
30190 	if (RETURN_VALUE_USED(opline)) {
30191 		/* If the return value of yield is used set the send
30192 		 * target and initialize it to NULL */
30193 		generator->send_target = EX_VAR(opline->result.var);
30194 		ZVAL_NULL(generator->send_target);
30195 	} else {
30196 		generator->send_target = NULL;
30197 	}
30198 
30199 	/* We increment to the next op, so we are at the correct position when the
30200 	 * generator is resumed. */
30201 	ZEND_VM_INC_OPCODE();
30202 
30203 	/* The GOTO VM uses a local opline variable. We need to set the opline
30204 	 * variable in execute_data so we don't resume at an old position. */
30205 	SAVE_OPLINE();
30206 
30207 	ZEND_VM_RETURN();
30208 }
30209 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30210 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30211 {
30212 	USE_OPLINE
30213 	zval *array;
30214 	zval *value, *variable_ptr;
30215 	uint32_t value_type;
30216 	HashTable *fe_ht;
30217 	HashPosition pos;
30218 	Bucket *p;
30219 
30220 	array = EX_VAR(opline->op1.var);
30221 	SAVE_OPLINE();
30222 	fe_ht = Z_ARRVAL_P(array);
30223 	pos = Z_FE_POS_P(array);
30224 	p = fe_ht->arData + pos;
30225 	while (1) {
30226 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
30227 			/* reached end of iteration */
30228 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
30229 			ZEND_VM_CONTINUE();
30230 		}
30231 		value = &p->val;
30232 		value_type = Z_TYPE_INFO_P(value);
30233 		if (EXPECTED(value_type != IS_UNDEF)) {
30234 			if (UNEXPECTED(value_type == IS_INDIRECT)) {
30235 				value = Z_INDIRECT_P(value);
30236 				value_type = Z_TYPE_INFO_P(value);
30237 				if (EXPECTED(value_type != IS_UNDEF)) {
30238 					break;
30239 				}
30240 			} else {
30241 				break;
30242 			}
30243 		}
30244 		pos++;
30245 		p++;
30246 	}
30247 	Z_FE_POS_P(array) = pos + 1;
30248 	if (0) {
30249 		if (!p->key) {
30250 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
30251 		} else {
30252 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
30253 		}
30254 	}
30255 
30256 	variable_ptr = EX_VAR(opline->op2.var);
30257 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30258 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30259 }
30260 
30261 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30262 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30263 {
30264 	USE_OPLINE
30265 	zval *array;
30266 	zval *value, *variable_ptr;
30267 	uint32_t value_type;
30268 	HashTable *fe_ht;
30269 	HashPosition pos;
30270 	Bucket *p;
30271 
30272 	array = EX_VAR(opline->op1.var);
30273 	SAVE_OPLINE();
30274 	fe_ht = Z_ARRVAL_P(array);
30275 	pos = Z_FE_POS_P(array);
30276 	p = fe_ht->arData + pos;
30277 	while (1) {
30278 		if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
30279 			/* reached end of iteration */
30280 			ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
30281 			ZEND_VM_CONTINUE();
30282 		}
30283 		value = &p->val;
30284 		value_type = Z_TYPE_INFO_P(value);
30285 		if (EXPECTED(value_type != IS_UNDEF)) {
30286 			if (UNEXPECTED(value_type == IS_INDIRECT)) {
30287 				value = Z_INDIRECT_P(value);
30288 				value_type = Z_TYPE_INFO_P(value);
30289 				if (EXPECTED(value_type != IS_UNDEF)) {
30290 					break;
30291 				}
30292 			} else {
30293 				break;
30294 			}
30295 		}
30296 		pos++;
30297 		p++;
30298 	}
30299 	Z_FE_POS_P(array) = pos + 1;
30300 	if (1) {
30301 		if (!p->key) {
30302 			ZVAL_LONG(EX_VAR(opline->result.var), p->h);
30303 		} else {
30304 			ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
30305 		}
30306 	}
30307 
30308 	variable_ptr = EX_VAR(opline->op2.var);
30309 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
30310 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30311 }
30312 
30313 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30315 {
30316 	USE_OPLINE
30317 	uint32_t arg_num = opline->op2.num;
30318 
30319 	if (EXPECTED(0)) {
30320 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30321 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30322 		} else {
30323 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30324 		}
30325 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30326 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30327 	} else {
30328 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30329 	}
30330 	ZEND_VM_NEXT_OPCODE();
30331 }
30332 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30333 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30334 {
30335 	USE_OPLINE
30336 	uint32_t arg_num = opline->op2.num;
30337 
30338 	if (EXPECTED(1)) {
30339 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30340 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30341 		} else {
30342 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30343 		}
30344 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30345 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30346 	} else {
30347 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
30348 	}
30349 	ZEND_VM_NEXT_OPCODE();
30350 }
30351 
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30352 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30353 {
30354 	USE_OPLINE
30355 
30356 	zval *obj;
30357 	zend_class_entry *ce, *scope;
30358 	zend_function *clone;
30359 	zend_object_clone_obj_t clone_call;
30360 
30361 	SAVE_OPLINE();
30362 	obj = &EX(This);
30363 
30364 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
30365 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30366 	}
30367 
30368 	do {
30369 		if (IS_UNUSED == IS_CONST ||
30370 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
30371 		    if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
30372 				obj = Z_REFVAL_P(obj);
30373 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
30374 					break;
30375 				}
30376 			}
30377 			ZVAL_UNDEF(EX_VAR(opline->result.var));
30378 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
30379 				ZVAL_UNDEFINED_OP1();
30380 				if (UNEXPECTED(EG(exception) != NULL)) {
30381 					HANDLE_EXCEPTION();
30382 				}
30383 			}
30384 			zend_throw_error(NULL, "__clone method called on non-object");
30385 
30386 			HANDLE_EXCEPTION();
30387 		}
30388 	} while (0);
30389 
30390 	ce = Z_OBJCE_P(obj);
30391 	clone = ce->clone;
30392 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
30393 	if (UNEXPECTED(clone_call == NULL)) {
30394 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
30395 
30396 		ZVAL_UNDEF(EX_VAR(opline->result.var));
30397 		HANDLE_EXCEPTION();
30398 	}
30399 
30400 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
30401 		scope = EX(func)->op_array.scope;
30402 		if (clone->common.scope != scope) {
30403 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
30404 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
30405 				zend_wrong_clone_call(clone, scope);
30406 
30407 				ZVAL_UNDEF(EX_VAR(opline->result.var));
30408 				HANDLE_EXCEPTION();
30409 			}
30410 		}
30411 	}
30412 
30413 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
30414 
30415 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30416 }
30417 
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30419 {
30420 	uint32_t fetch_type;
30421 	zend_class_entry *called_scope, *scope;
30422 	USE_OPLINE
30423 
30424 	fetch_type = opline->op1.num;
30425 
30426 	scope = EX(func)->op_array.scope;
30427 	if (UNEXPECTED(scope == NULL)) {
30428 		SAVE_OPLINE();
30429 		zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
30430 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
30431 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
30432 		ZVAL_UNDEF(EX_VAR(opline->result.var));
30433 		HANDLE_EXCEPTION();
30434 	}
30435 
30436 	switch (fetch_type) {
30437 		case ZEND_FETCH_CLASS_SELF:
30438 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
30439 			break;
30440 		case ZEND_FETCH_CLASS_PARENT:
30441 			if (UNEXPECTED(scope->parent == NULL)) {
30442 				SAVE_OPLINE();
30443 				zend_throw_error(NULL,
30444 					"Cannot use \"parent\" when current class scope has no parent");
30445 				ZVAL_UNDEF(EX_VAR(opline->result.var));
30446 				HANDLE_EXCEPTION();
30447 			}
30448 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
30449 			break;
30450 		case ZEND_FETCH_CLASS_STATIC:
30451 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
30452 				called_scope = Z_OBJCE(EX(This));
30453 			} else {
30454 				called_scope = Z_CE(EX(This));
30455 			}
30456 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
30457 			break;
30458 		EMPTY_SWITCH_DEFAULT_CASE()
30459 	}
30460 	ZEND_VM_NEXT_OPCODE();
30461 }
30462 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30464 {
30465 	USE_OPLINE
30466 	zend_free_op free_op_data;
30467 	zval *object;
30468 	zval *property;
30469 	zval *value;
30470 	zval *zptr;
30471 	void **cache_slot;
30472 	zend_property_info *prop_info;
30473 
30474 	SAVE_OPLINE();
30475 	object = &EX(This);
30476 
30477 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30478 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30479 	}
30480 
30481 	property = RT_CONSTANT(opline, opline->op2);
30482 
30483 	do {
30484 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
30485 
30486 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30487 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30488 				object = Z_REFVAL_P(object);
30489 				goto assign_op_object;
30490 			}
30491 			if (IS_UNUSED == IS_CV
30492 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30493 				ZVAL_UNDEFINED_OP1();
30494 			}
30495 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
30496 			if (UNEXPECTED(!object)) {
30497 				break;
30498 			}
30499 		}
30500 
30501 assign_op_object:
30502 		/* here we are sure we are dealing with an object */
30503 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
30504 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
30505 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30506 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30507 					ZVAL_NULL(EX_VAR(opline->result.var));
30508 				}
30509 			} else {
30510 				zval *orig_zptr = zptr;
30511 				zend_reference *ref;
30512 
30513 				do {
30514 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
30515 						ref = Z_REF_P(zptr);
30516 						zptr = Z_REFVAL_P(zptr);
30517 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30518 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30519 							break;
30520 						}
30521 					}
30522 
30523 					if (IS_CONST == IS_CONST) {
30524 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30525 					} else {
30526 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
30527 					}
30528 					if (UNEXPECTED(prop_info)) {
30529 						/* special case for typed properties */
30530 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
30531 					} else {
30532 						zend_binary_op(zptr, zptr, value OPLINE_CC);
30533 					}
30534 				} while (0);
30535 
30536 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30537 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
30538 				}
30539 			}
30540 		} else {
30541 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
30542 		}
30543 	} while (0);
30544 
30545 	FREE_OP(free_op_data);
30546 
30547 
30548 	/* assign_obj has two opcodes! */
30549 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30550 }
30551 
30552 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30554 {
30555 	USE_OPLINE
30556 
30557 	zval *object;
30558 	zval *property;
30559 	zval *zptr;
30560 	void **cache_slot;
30561 	zend_property_info *prop_info;
30562 
30563 	SAVE_OPLINE();
30564 	object = &EX(This);
30565 
30566 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30567 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30568 	}
30569 
30570 	property = RT_CONSTANT(opline, opline->op2);
30571 
30572 	do {
30573 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30574 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30575 				object = Z_REFVAL_P(object);
30576 				goto pre_incdec_object;
30577 			}
30578 			if (IS_UNUSED == IS_CV
30579 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30580 				ZVAL_UNDEFINED_OP1();
30581 			}
30582 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
30583 			if (UNEXPECTED(!object)) {
30584 				break;
30585 			}
30586 		}
30587 
30588 pre_incdec_object:
30589 		/* here we are sure we are dealing with an object */
30590 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30591 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
30592 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30593 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30594 					ZVAL_NULL(EX_VAR(opline->result.var));
30595 				}
30596 			} else {
30597 				if (IS_CONST == IS_CONST) {
30598 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
30599 				} else {
30600 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30601 				}
30602 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30603 			}
30604 		} else {
30605 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30606 		}
30607 	} while (0);
30608 
30609 
30610 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30611 }
30612 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30614 {
30615 	USE_OPLINE
30616 
30617 	zval *object;
30618 	zval *property;
30619 	zval *zptr;
30620 	void **cache_slot;
30621 	zend_property_info *prop_info;
30622 
30623 	SAVE_OPLINE();
30624 	object = &EX(This);
30625 
30626 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30627 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30628 	}
30629 
30630 	property = RT_CONSTANT(opline, opline->op2);
30631 
30632 	do {
30633 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30634 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30635 				object = Z_REFVAL_P(object);
30636 				goto post_incdec_object;
30637 			}
30638 			if (IS_UNUSED == IS_CV
30639 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30640 				ZVAL_UNDEFINED_OP1();
30641 			}
30642 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
30643 			if (UNEXPECTED(!object)) {
30644 				break;
30645 			}
30646 		}
30647 
30648 post_incdec_object:
30649 		/* here we are sure we are dealing with an object */
30650 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30651 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
30652 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30653 				ZVAL_NULL(EX_VAR(opline->result.var));
30654 			} else {
30655 				if (IS_CONST == IS_CONST) {
30656 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30657 				} else {
30658 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30659 				}
30660 
30661 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30662 			}
30663 		} else {
30664 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30665 		}
30666 	} while (0);
30667 
30668 
30669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30670 }
30671 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30672 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30673 {
30674 	USE_OPLINE
30675 
30676 	zval *container;
30677 
30678 	zval *offset;
30679 	void **cache_slot = NULL;
30680 
30681 	SAVE_OPLINE();
30682 	container = &EX(This);
30683 
30684 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30685 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30686 	}
30687 
30688 	offset = RT_CONSTANT(opline, opline->op2);
30689 
30690 	if (IS_UNUSED == IS_CONST ||
30691 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
30692 	    do {
30693 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
30694 				container = Z_REFVAL_P(container);
30695 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30696 					break;
30697 				}
30698 			}
30699 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30700 				ZVAL_UNDEFINED_OP1();
30701 			}
30702 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
30703 				ZVAL_UNDEFINED_OP2();
30704 			}
30705 			zend_wrong_property_read(offset);
30706 			ZVAL_NULL(EX_VAR(opline->result.var));
30707 			goto fetch_obj_r_finish;
30708 		} while (0);
30709 	}
30710 
30711 	/* here we are sure we are dealing with an object */
30712 	do {
30713 		zend_object *zobj = Z_OBJ_P(container);
30714 		zval *retval;
30715 
30716 		if (IS_CONST == IS_CONST) {
30717 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
30718 
30719 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
30720 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30721 
30722 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30723 					retval = OBJ_PROP(zobj, prop_offset);
30724 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
30725 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30726 							goto fetch_obj_r_copy;
30727 						} else {
30728 fetch_obj_r_fast_copy:
30729 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
30730 							ZEND_VM_NEXT_OPCODE();
30731 						}
30732 					}
30733 				} else if (EXPECTED(zobj->properties != NULL)) {
30734 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
30735 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
30736 
30737 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
30738 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
30739 
30740 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
30741 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
30742 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
30743 						          EXPECTED(p->key != NULL) &&
30744 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
30745 								retval = &p->val;
30746 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30747 									goto fetch_obj_r_copy;
30748 								} else {
30749 									goto fetch_obj_r_fast_copy;
30750 								}
30751 							}
30752 						}
30753 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
30754 					}
30755 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
30756 					if (EXPECTED(retval)) {
30757 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
30758 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
30759 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30760 							goto fetch_obj_r_copy;
30761 						} else {
30762 							goto fetch_obj_r_fast_copy;
30763 						}
30764 					}
30765 				}
30766 			}
30767 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
30768 			ZVAL_UNDEFINED_OP2();
30769 		}
30770 
30771 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
30772 
30773 		if (retval != EX_VAR(opline->result.var)) {
30774 fetch_obj_r_copy:
30775 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
30776 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
30777 			zend_unwrap_reference(retval);
30778 		}
30779 	} while (0);
30780 
30781 fetch_obj_r_finish:
30782 
30783 
30784 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30785 }
30786 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30787 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30788 {
30789 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30790 }
30791 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30793 {
30794 	USE_OPLINE
30795 	zend_free_op free_op1;
30796 	zval *property, *container, *result;
30797 
30798 	SAVE_OPLINE();
30799 
30800 	container = &EX(This);
30801 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30802 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30803 	}
30804 
30805 	property = RT_CONSTANT(opline, opline->op2);
30806 	result = EX_VAR(opline->result.var);
30807 	zend_fetch_property_address(
30808 		result, container, IS_UNUSED, property, IS_CONST,
30809 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
30810 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
30811 
30812 	if (IS_UNUSED == IS_VAR) {
30813 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
30814 	}
30815 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30816 }
30817 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30818 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30819 {
30820 	USE_OPLINE
30821 	zend_free_op free_op1;
30822 	zval *property, *container, *result;
30823 
30824 	SAVE_OPLINE();
30825 	container = &EX(This);
30826 
30827 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30828 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30829 	}
30830 	property = RT_CONSTANT(opline, opline->op2);
30831 	result = EX_VAR(opline->result.var);
30832 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
30833 
30834 	if (IS_UNUSED == IS_VAR) {
30835 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
30836 	}
30837 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30838 }
30839 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30840 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30841 {
30842 	USE_OPLINE
30843 
30844 	zval *container;
30845 
30846 	zval *offset;
30847 	void **cache_slot = NULL;
30848 
30849 	SAVE_OPLINE();
30850 	container = &EX(This);
30851 
30852 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30853 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30854 	}
30855 
30856 	offset = RT_CONSTANT(opline, opline->op2);
30857 
30858 	if (IS_UNUSED == IS_CONST ||
30859 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
30860 		do {
30861 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
30862 				container = Z_REFVAL_P(container);
30863 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30864 					break;
30865 				}
30866 			}
30867 			ZVAL_NULL(EX_VAR(opline->result.var));
30868 			goto fetch_obj_is_finish;
30869 		} while (0);
30870 	}
30871 
30872 	/* here we are sure we are dealing with an object */
30873 	do {
30874 		zend_object *zobj = Z_OBJ_P(container);
30875 		zval *retval;
30876 
30877 		if (IS_CONST == IS_CONST) {
30878 			cache_slot = CACHE_ADDR(opline->extended_value);
30879 
30880 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
30881 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30882 
30883 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30884 					retval = OBJ_PROP(zobj, prop_offset);
30885 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
30886 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30887 							goto fetch_obj_is_copy;
30888 						} else {
30889 fetch_obj_is_fast_copy:
30890 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
30891 							ZEND_VM_NEXT_OPCODE();
30892 						}
30893 					}
30894 				} else if (EXPECTED(zobj->properties != NULL)) {
30895 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
30896 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
30897 
30898 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
30899 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
30900 
30901 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
30902 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
30903 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
30904 						          EXPECTED(p->key != NULL) &&
30905 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
30906 								retval = &p->val;
30907 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30908 									goto fetch_obj_is_copy;
30909 								} else {
30910 									goto fetch_obj_is_fast_copy;
30911 								}
30912 							}
30913 						}
30914 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
30915 					}
30916 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
30917 					if (EXPECTED(retval)) {
30918 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
30919 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
30920 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
30921 							goto fetch_obj_is_copy;
30922 						} else {
30923 							goto fetch_obj_is_fast_copy;
30924 						}
30925 					}
30926 				}
30927 			}
30928 		}
30929 
30930 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
30931 
30932 		if (retval != EX_VAR(opline->result.var)) {
30933 fetch_obj_is_copy:
30934 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
30935 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
30936 			zend_unwrap_reference(retval);
30937 		}
30938 	} while (0);
30939 
30940 fetch_obj_is_finish:
30941 
30942 
30943 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30944 }
30945 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30946 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30947 {
30948 #if 0
30949 	USE_OPLINE
30950 #endif
30951 
30952 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
30953 		/* Behave like FETCH_OBJ_W */
30954 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
30955 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30956 		}
30957 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30958 	} else {
30959 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30960 	}
30961 }
30962 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30964 {
30965 	USE_OPLINE
30966 	zend_free_op free_op1;
30967 	zval *container, *property, *result;
30968 
30969 	SAVE_OPLINE();
30970 	container = &EX(This);
30971 
30972 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
30973 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30974 	}
30975 
30976 	property = RT_CONSTANT(opline, opline->op2);
30977 	result = EX_VAR(opline->result.var);
30978 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
30979 
30980 	if (IS_UNUSED == IS_VAR) {
30981 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
30982 	}
30983 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30984 }
30985 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30987 {
30988 	USE_OPLINE
30989 
30990 	zval *object, *property, *value, tmp;
30991 
30992 	SAVE_OPLINE();
30993 	object = &EX(This);
30994 
30995 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30996 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30997 	}
30998 
30999 	property = RT_CONSTANT(opline, opline->op2);
31000 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
31001 
31002 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31003 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31004 			object = Z_REFVAL_P(object);
31005 			goto assign_object;
31006 		}
31007 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
31008 		if (UNEXPECTED(!object)) {
31009 			value = &EG(uninitialized_zval);
31010 			goto free_and_exit_assign_obj;
31011 		}
31012 	}
31013 
31014 assign_object:
31015 	if (IS_CONST == IS_CONST &&
31016 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
31017 		void **cache_slot = CACHE_ADDR(opline->extended_value);
31018 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31019 		zend_object *zobj = Z_OBJ_P(object);
31020 		zval *property_val;
31021 
31022 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31023 			property_val = OBJ_PROP(zobj, prop_offset);
31024 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
31025 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31026 
31027 				if (UNEXPECTED(prop_info != NULL)) {
31028 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
31029 					goto free_and_exit_assign_obj;
31030 				} else {
31031 fast_assign_obj:
31032 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
31033 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31034 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31035 					}
31036 					goto exit_assign_obj;
31037 				}
31038 			}
31039 		} else {
31040 			if (EXPECTED(zobj->properties != NULL)) {
31041 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31042 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31043 						GC_DELREF(zobj->properties);
31044 					}
31045 					zobj->properties = zend_array_dup(zobj->properties);
31046 				}
31047 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
31048 				if (property_val) {
31049 					goto fast_assign_obj;
31050 				}
31051 			}
31052 
31053 			if (!zobj->ce->__set) {
31054 
31055 				if (EXPECTED(zobj->properties == NULL)) {
31056 					rebuild_object_properties(zobj);
31057 				}
31058 				if (IS_CONST == IS_CONST) {
31059 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31060 						Z_ADDREF_P(value);
31061 					}
31062 				} else if (IS_CONST != IS_TMP_VAR) {
31063 					if (Z_ISREF_P(value)) {
31064 						if (IS_CONST == IS_VAR) {
31065 							zend_reference *ref = Z_REF_P(value);
31066 							if (GC_DELREF(ref) == 0) {
31067 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31068 								efree_size(ref, sizeof(zend_reference));
31069 								value = &tmp;
31070 							} else {
31071 								value = Z_REFVAL_P(value);
31072 								Z_TRY_ADDREF_P(value);
31073 							}
31074 						} else {
31075 							value = Z_REFVAL_P(value);
31076 							Z_TRY_ADDREF_P(value);
31077 						}
31078 					} else if (IS_CONST == IS_CV) {
31079 						Z_TRY_ADDREF_P(value);
31080 					}
31081 				}
31082 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
31083 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31084 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31085 				}
31086 				goto exit_assign_obj;
31087 			}
31088 		}
31089 	}
31090 
31091 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
31092 		ZVAL_DEREF(value);
31093 	}
31094 
31095 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31096 
31097 free_and_exit_assign_obj:
31098 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31099 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31100 	}
31101 
31102 exit_assign_obj:
31103 
31104 
31105 	/* assign_obj has two opcodes! */
31106 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31107 }
31108 
31109 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31111 {
31112 	USE_OPLINE
31113 	zend_free_op free_op_data;
31114 	zval *object, *property, *value, tmp;
31115 
31116 	SAVE_OPLINE();
31117 	object = &EX(This);
31118 
31119 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31120 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31121 	}
31122 
31123 	property = RT_CONSTANT(opline, opline->op2);
31124 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
31125 
31126 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31127 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31128 			object = Z_REFVAL_P(object);
31129 			goto assign_object;
31130 		}
31131 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
31132 		if (UNEXPECTED(!object)) {
31133 			value = &EG(uninitialized_zval);
31134 			goto free_and_exit_assign_obj;
31135 		}
31136 	}
31137 
31138 assign_object:
31139 	if (IS_CONST == IS_CONST &&
31140 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
31141 		void **cache_slot = CACHE_ADDR(opline->extended_value);
31142 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31143 		zend_object *zobj = Z_OBJ_P(object);
31144 		zval *property_val;
31145 
31146 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31147 			property_val = OBJ_PROP(zobj, prop_offset);
31148 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
31149 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31150 
31151 				if (UNEXPECTED(prop_info != NULL)) {
31152 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
31153 					goto free_and_exit_assign_obj;
31154 				} else {
31155 fast_assign_obj:
31156 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
31157 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31158 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31159 					}
31160 					goto exit_assign_obj;
31161 				}
31162 			}
31163 		} else {
31164 			if (EXPECTED(zobj->properties != NULL)) {
31165 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31166 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31167 						GC_DELREF(zobj->properties);
31168 					}
31169 					zobj->properties = zend_array_dup(zobj->properties);
31170 				}
31171 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
31172 				if (property_val) {
31173 					goto fast_assign_obj;
31174 				}
31175 			}
31176 
31177 			if (!zobj->ce->__set) {
31178 
31179 				if (EXPECTED(zobj->properties == NULL)) {
31180 					rebuild_object_properties(zobj);
31181 				}
31182 				if (IS_TMP_VAR == IS_CONST) {
31183 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31184 						Z_ADDREF_P(value);
31185 					}
31186 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
31187 					if (Z_ISREF_P(value)) {
31188 						if (IS_TMP_VAR == IS_VAR) {
31189 							zend_reference *ref = Z_REF_P(value);
31190 							if (GC_DELREF(ref) == 0) {
31191 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31192 								efree_size(ref, sizeof(zend_reference));
31193 								value = &tmp;
31194 							} else {
31195 								value = Z_REFVAL_P(value);
31196 								Z_TRY_ADDREF_P(value);
31197 							}
31198 						} else {
31199 							value = Z_REFVAL_P(value);
31200 							Z_TRY_ADDREF_P(value);
31201 						}
31202 					} else if (IS_TMP_VAR == IS_CV) {
31203 						Z_TRY_ADDREF_P(value);
31204 					}
31205 				}
31206 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
31207 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31208 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31209 				}
31210 				goto exit_assign_obj;
31211 			}
31212 		}
31213 	}
31214 
31215 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
31216 		ZVAL_DEREF(value);
31217 	}
31218 
31219 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31220 
31221 free_and_exit_assign_obj:
31222 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31223 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31224 	}
31225 	zval_ptr_dtor_nogc(free_op_data);
31226 exit_assign_obj:
31227 
31228 
31229 	/* assign_obj has two opcodes! */
31230 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31231 }
31232 
31233 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31234 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31235 {
31236 	USE_OPLINE
31237 	zend_free_op free_op_data;
31238 	zval *object, *property, *value, tmp;
31239 
31240 	SAVE_OPLINE();
31241 	object = &EX(This);
31242 
31243 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31244 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31245 	}
31246 
31247 	property = RT_CONSTANT(opline, opline->op2);
31248 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
31249 
31250 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31251 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31252 			object = Z_REFVAL_P(object);
31253 			goto assign_object;
31254 		}
31255 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
31256 		if (UNEXPECTED(!object)) {
31257 			value = &EG(uninitialized_zval);
31258 			goto free_and_exit_assign_obj;
31259 		}
31260 	}
31261 
31262 assign_object:
31263 	if (IS_CONST == IS_CONST &&
31264 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
31265 		void **cache_slot = CACHE_ADDR(opline->extended_value);
31266 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31267 		zend_object *zobj = Z_OBJ_P(object);
31268 		zval *property_val;
31269 
31270 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31271 			property_val = OBJ_PROP(zobj, prop_offset);
31272 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
31273 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31274 
31275 				if (UNEXPECTED(prop_info != NULL)) {
31276 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
31277 					goto free_and_exit_assign_obj;
31278 				} else {
31279 fast_assign_obj:
31280 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
31281 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31282 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31283 					}
31284 					goto exit_assign_obj;
31285 				}
31286 			}
31287 		} else {
31288 			if (EXPECTED(zobj->properties != NULL)) {
31289 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31290 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31291 						GC_DELREF(zobj->properties);
31292 					}
31293 					zobj->properties = zend_array_dup(zobj->properties);
31294 				}
31295 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
31296 				if (property_val) {
31297 					goto fast_assign_obj;
31298 				}
31299 			}
31300 
31301 			if (!zobj->ce->__set) {
31302 
31303 				if (EXPECTED(zobj->properties == NULL)) {
31304 					rebuild_object_properties(zobj);
31305 				}
31306 				if (IS_VAR == IS_CONST) {
31307 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31308 						Z_ADDREF_P(value);
31309 					}
31310 				} else if (IS_VAR != IS_TMP_VAR) {
31311 					if (Z_ISREF_P(value)) {
31312 						if (IS_VAR == IS_VAR) {
31313 							zend_reference *ref = Z_REF_P(value);
31314 							if (GC_DELREF(ref) == 0) {
31315 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31316 								efree_size(ref, sizeof(zend_reference));
31317 								value = &tmp;
31318 							} else {
31319 								value = Z_REFVAL_P(value);
31320 								Z_TRY_ADDREF_P(value);
31321 							}
31322 						} else {
31323 							value = Z_REFVAL_P(value);
31324 							Z_TRY_ADDREF_P(value);
31325 						}
31326 					} else if (IS_VAR == IS_CV) {
31327 						Z_TRY_ADDREF_P(value);
31328 					}
31329 				}
31330 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
31331 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31332 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31333 				}
31334 				goto exit_assign_obj;
31335 			}
31336 		}
31337 	}
31338 
31339 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
31340 		ZVAL_DEREF(value);
31341 	}
31342 
31343 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31344 
31345 free_and_exit_assign_obj:
31346 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31347 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31348 	}
31349 	zval_ptr_dtor_nogc(free_op_data);
31350 exit_assign_obj:
31351 
31352 
31353 	/* assign_obj has two opcodes! */
31354 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31355 }
31356 
31357 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31359 {
31360 	USE_OPLINE
31361 
31362 	zval *object, *property, *value, tmp;
31363 
31364 	SAVE_OPLINE();
31365 	object = &EX(This);
31366 
31367 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31368 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31369 	}
31370 
31371 	property = RT_CONSTANT(opline, opline->op2);
31372 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
31373 
31374 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31375 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31376 			object = Z_REFVAL_P(object);
31377 			goto assign_object;
31378 		}
31379 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
31380 		if (UNEXPECTED(!object)) {
31381 			value = &EG(uninitialized_zval);
31382 			goto free_and_exit_assign_obj;
31383 		}
31384 	}
31385 
31386 assign_object:
31387 	if (IS_CONST == IS_CONST &&
31388 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
31389 		void **cache_slot = CACHE_ADDR(opline->extended_value);
31390 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31391 		zend_object *zobj = Z_OBJ_P(object);
31392 		zval *property_val;
31393 
31394 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31395 			property_val = OBJ_PROP(zobj, prop_offset);
31396 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
31397 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31398 
31399 				if (UNEXPECTED(prop_info != NULL)) {
31400 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
31401 					goto free_and_exit_assign_obj;
31402 				} else {
31403 fast_assign_obj:
31404 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
31405 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31406 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31407 					}
31408 					goto exit_assign_obj;
31409 				}
31410 			}
31411 		} else {
31412 			if (EXPECTED(zobj->properties != NULL)) {
31413 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31414 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31415 						GC_DELREF(zobj->properties);
31416 					}
31417 					zobj->properties = zend_array_dup(zobj->properties);
31418 				}
31419 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
31420 				if (property_val) {
31421 					goto fast_assign_obj;
31422 				}
31423 			}
31424 
31425 			if (!zobj->ce->__set) {
31426 
31427 				if (EXPECTED(zobj->properties == NULL)) {
31428 					rebuild_object_properties(zobj);
31429 				}
31430 				if (IS_CV == IS_CONST) {
31431 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31432 						Z_ADDREF_P(value);
31433 					}
31434 				} else if (IS_CV != IS_TMP_VAR) {
31435 					if (Z_ISREF_P(value)) {
31436 						if (IS_CV == IS_VAR) {
31437 							zend_reference *ref = Z_REF_P(value);
31438 							if (GC_DELREF(ref) == 0) {
31439 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31440 								efree_size(ref, sizeof(zend_reference));
31441 								value = &tmp;
31442 							} else {
31443 								value = Z_REFVAL_P(value);
31444 								Z_TRY_ADDREF_P(value);
31445 							}
31446 						} else {
31447 							value = Z_REFVAL_P(value);
31448 							Z_TRY_ADDREF_P(value);
31449 						}
31450 					} else if (IS_CV == IS_CV) {
31451 						Z_TRY_ADDREF_P(value);
31452 					}
31453 				}
31454 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
31455 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31456 					ZVAL_COPY(EX_VAR(opline->result.var), value);
31457 				}
31458 				goto exit_assign_obj;
31459 			}
31460 		}
31461 	}
31462 
31463 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
31464 		ZVAL_DEREF(value);
31465 	}
31466 
31467 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31468 
31469 free_and_exit_assign_obj:
31470 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31471 		ZVAL_COPY(EX_VAR(opline->result.var), value);
31472 	}
31473 
31474 exit_assign_obj:
31475 
31476 
31477 	/* assign_obj has two opcodes! */
31478 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31479 }
31480 
31481 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31483 {
31484 	USE_OPLINE
31485 	zend_free_op free_op_data;
31486 	zval *property, *container, *value_ptr;
31487 
31488 	SAVE_OPLINE();
31489 
31490 	container = &EX(This);
31491 
31492 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31493 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31494 	}
31495 
31496 	property = RT_CONSTANT(opline, opline->op2);
31497 
31498 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
31499 
31500 	if (1) {
31501 		if (IS_UNUSED == IS_UNUSED) {
31502 			if (IS_CONST == IS_CONST) {
31503 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31504 			} else {
31505 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31506 			}
31507 		} else {
31508 			if (IS_CONST == IS_CONST) {
31509 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31510 			} else {
31511 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31512 			}
31513 		}
31514 	} else {
31515 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31516 	}
31517 
31518 
31519 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
31520 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31521 }
31522 
31523 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31525 {
31526 	USE_OPLINE
31527 
31528 	zval *property, *container, *value_ptr;
31529 
31530 	SAVE_OPLINE();
31531 
31532 	container = &EX(This);
31533 
31534 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
31535 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31536 	}
31537 
31538 	property = RT_CONSTANT(opline, opline->op2);
31539 
31540 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
31541 
31542 	if (1) {
31543 		if (IS_UNUSED == IS_UNUSED) {
31544 			if (IS_CONST == IS_CONST) {
31545 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31546 			} else {
31547 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31548 			}
31549 		} else {
31550 			if (IS_CONST == IS_CONST) {
31551 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31552 			} else {
31553 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31554 			}
31555 		}
31556 	} else {
31557 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31558 	}
31559 
31560 
31561 
31562 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31563 }
31564 
31565 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31566 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31567 {
31568 	USE_OPLINE
31569 
31570 	zend_string **rope;
31571 	zval *var;
31572 
31573 	/* Compiler allocates the necessary number of zval slots to keep the rope */
31574 	rope = (zend_string**)EX_VAR(opline->result.var);
31575 	if (IS_CONST == IS_CONST) {
31576 		var = RT_CONSTANT(opline, opline->op2);
31577 		rope[0] = Z_STR_P(var);
31578 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
31579 			Z_ADDREF_P(var);
31580 		}
31581 	} else {
31582 		var = RT_CONSTANT(opline, opline->op2);
31583 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
31584 			if (IS_CONST == IS_CV) {
31585 				rope[0] = zend_string_copy(Z_STR_P(var));
31586 			} else {
31587 				rope[0] = Z_STR_P(var);
31588 			}
31589 		} else {
31590 			SAVE_OPLINE();
31591 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
31592 				ZVAL_UNDEFINED_OP2();
31593 			}
31594 			rope[0] = zval_get_string_func(var);
31595 
31596 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31597 		}
31598 	}
31599 	ZEND_VM_NEXT_OPCODE();
31600 }
31601 
ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31602 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31603 {
31604 
31605 	zval *class_name;
31606 	USE_OPLINE
31607 
31608 	SAVE_OPLINE();
31609 	if (IS_CONST == IS_UNUSED) {
31610 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
31611 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31612 	} else if (IS_CONST == IS_CONST) {
31613 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
31614 
31615 		if (UNEXPECTED(ce == NULL)) {
31616 			class_name = RT_CONSTANT(opline, opline->op2);
31617 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
31618 			CACHE_PTR(opline->extended_value, ce);
31619 		}
31620 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
31621 	} else {
31622 		class_name = RT_CONSTANT(opline, opline->op2);
31623 try_class_name:
31624 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
31625 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
31626 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
31627 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
31628 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
31629 			class_name = Z_REFVAL_P(class_name);
31630 			goto try_class_name;
31631 		} else {
31632 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
31633 				ZVAL_UNDEFINED_OP2();
31634 				if (UNEXPECTED(EG(exception) != NULL)) {
31635 					HANDLE_EXCEPTION();
31636 				}
31637 			}
31638 			zend_throw_error(NULL, "Class name must be a valid object or a string");
31639 		}
31640 	}
31641 
31642 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31643 }
31644 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31645 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31646 {
31647 	USE_OPLINE
31648 	zval *function_name;
31649 	zend_free_op free_op1;
31650 	zval *object;
31651 	zend_function *fbc;
31652 	zend_class_entry *called_scope;
31653 	zend_object *obj;
31654 	zend_execute_data *call;
31655 	uint32_t call_info;
31656 
31657 	SAVE_OPLINE();
31658 
31659 	object = &EX(This);
31660 
31661 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31662 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
31663 	}
31664 
31665 	if (IS_CONST != IS_CONST) {
31666 		function_name = RT_CONSTANT(opline, opline->op2);
31667 	}
31668 
31669 	if (IS_CONST != IS_CONST &&
31670 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
31671 		do {
31672 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
31673 				function_name = Z_REFVAL_P(function_name);
31674 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
31675 					break;
31676 				}
31677 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
31678 				ZVAL_UNDEFINED_OP2();
31679 				if (UNEXPECTED(EG(exception) != NULL)) {
31680 
31681 					HANDLE_EXCEPTION();
31682 				}
31683 			}
31684 			zend_throw_error(NULL, "Method name must be a string");
31685 
31686 
31687 			HANDLE_EXCEPTION();
31688 		} while (0);
31689 	}
31690 
31691 	if (IS_UNUSED != IS_UNUSED) {
31692 		do {
31693 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31694 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
31695 					object = Z_REFVAL_P(object);
31696 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
31697 						break;
31698 					}
31699 				}
31700 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
31701 					object = ZVAL_UNDEFINED_OP1();
31702 					if (UNEXPECTED(EG(exception) != NULL)) {
31703 						if (IS_CONST != IS_CONST) {
31704 
31705 						}
31706 						HANDLE_EXCEPTION();
31707 					}
31708 				}
31709 				if (IS_CONST == IS_CONST) {
31710 					function_name = RT_CONSTANT(opline, opline->op2);
31711 				}
31712 				zend_invalid_method_call(object, function_name);
31713 
31714 
31715 				HANDLE_EXCEPTION();
31716 			}
31717 		} while (0);
31718 	}
31719 
31720 	obj = Z_OBJ_P(object);
31721 	called_scope = obj->ce;
31722 
31723 	if (IS_CONST == IS_CONST &&
31724 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
31725 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
31726 	} else {
31727 	    zend_object *orig_obj = obj;
31728 
31729 		if (IS_CONST == IS_CONST) {
31730 			function_name = RT_CONSTANT(opline, opline->op2);
31731 		}
31732 
31733 		/* First, locate the function. */
31734 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
31735 		if (UNEXPECTED(fbc == NULL)) {
31736 			if (EXPECTED(!EG(exception))) {
31737 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
31738 			}
31739 
31740 
31741 			HANDLE_EXCEPTION();
31742 		}
31743 		if (IS_CONST == IS_CONST &&
31744 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
31745 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
31746 		    EXPECTED(obj == orig_obj)) {
31747 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
31748 		}
31749 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
31750 			/* Reset "object" to trigger reference counting */
31751 			object = NULL;
31752 		}
31753 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31754 			init_func_run_time_cache(&fbc->op_array);
31755 		}
31756 	}
31757 
31758 	if (IS_CONST != IS_CONST) {
31759 
31760 	}
31761 
31762 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
31763 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
31764 
31765 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
31766 			HANDLE_EXCEPTION();
31767 		}
31768 		/* call static method */
31769 		obj = (zend_object*)called_scope;
31770 		call_info = ZEND_CALL_NESTED_FUNCTION;
31771 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
31772 		if (IS_UNUSED == IS_CV) {
31773 			GC_ADDREF(obj); /* For $this pointer */
31774 		} else if (free_op1 != object) {
31775 			GC_ADDREF(obj); /* For $this pointer */
31776 
31777 		}
31778 		/* CV may be changed indirectly (e.g. when it's a reference) */
31779 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
31780 	}
31781 
31782 	call = zend_vm_stack_push_call_frame(call_info,
31783 		fbc, opline->extended_value, obj);
31784 	call->prev_execute_data = EX(call);
31785 	EX(call) = call;
31786 
31787 	ZEND_VM_NEXT_OPCODE();
31788 }
31789 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31791 {
31792 	USE_OPLINE
31793 	zval *function_name;
31794 	zend_class_entry *ce;
31795 	uint32_t call_info;
31796 	zend_function *fbc;
31797 	zend_execute_data *call;
31798 
31799 	SAVE_OPLINE();
31800 
31801 	if (IS_UNUSED == IS_CONST) {
31802 		/* no function found. try a static method in class */
31803 		ce = CACHED_PTR(opline->result.num);
31804 		if (UNEXPECTED(ce == NULL)) {
31805 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
31806 			if (UNEXPECTED(ce == NULL)) {
31807 				ZEND_ASSERT(EG(exception));
31808 
31809 				HANDLE_EXCEPTION();
31810 			}
31811 			if (IS_CONST != IS_CONST) {
31812 				CACHE_PTR(opline->result.num, ce);
31813 			}
31814 		}
31815 	} else if (IS_UNUSED == IS_UNUSED) {
31816 		ce = zend_fetch_class(NULL, opline->op1.num);
31817 		if (UNEXPECTED(ce == NULL)) {
31818 			ZEND_ASSERT(EG(exception));
31819 
31820 			HANDLE_EXCEPTION();
31821 		}
31822 	} else {
31823 		ce = Z_CE_P(EX_VAR(opline->op1.var));
31824 	}
31825 
31826 	if (IS_UNUSED == IS_CONST &&
31827 	    IS_CONST == IS_CONST &&
31828 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
31829 		/* nothing to do */
31830 	} else if (IS_UNUSED != IS_CONST &&
31831 	           IS_CONST == IS_CONST &&
31832 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
31833 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
31834 	} else if (IS_CONST != IS_UNUSED) {
31835 
31836 
31837 		function_name = RT_CONSTANT(opline, opline->op2);
31838 		if (IS_CONST != IS_CONST) {
31839 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
31840 				do {
31841 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
31842 						function_name = Z_REFVAL_P(function_name);
31843 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
31844 							break;
31845 						}
31846 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
31847 						ZVAL_UNDEFINED_OP2();
31848 						if (UNEXPECTED(EG(exception) != NULL)) {
31849 							HANDLE_EXCEPTION();
31850 						}
31851 					}
31852 					zend_throw_error(NULL, "Function name must be a string");
31853 
31854 					HANDLE_EXCEPTION();
31855 				} while (0);
31856 			}
31857 		}
31858 
31859 		if (ce->get_static_method) {
31860 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
31861 		} else {
31862 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
31863 		}
31864 		if (UNEXPECTED(fbc == NULL)) {
31865 			if (EXPECTED(!EG(exception))) {
31866 				zend_undefined_method(ce, Z_STR_P(function_name));
31867 			}
31868 
31869 			HANDLE_EXCEPTION();
31870 		}
31871 		if (IS_CONST == IS_CONST &&
31872 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
31873 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
31874 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
31875 		}
31876 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31877 			init_func_run_time_cache(&fbc->op_array);
31878 		}
31879 		if (IS_CONST != IS_CONST) {
31880 
31881 		}
31882 	} else {
31883 		if (UNEXPECTED(ce->constructor == NULL)) {
31884 			zend_throw_error(NULL, "Cannot call constructor");
31885 			HANDLE_EXCEPTION();
31886 		}
31887 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
31888 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
31889 			HANDLE_EXCEPTION();
31890 		}
31891 		fbc = ce->constructor;
31892 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31893 			init_func_run_time_cache(&fbc->op_array);
31894 		}
31895 	}
31896 
31897 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
31898 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
31899 			ce = (zend_class_entry*)Z_OBJ(EX(This));
31900 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
31901 		} else {
31902 			zend_non_static_method_call(fbc);
31903 			if (UNEXPECTED(EG(exception) != NULL)) {
31904 				HANDLE_EXCEPTION();
31905 			}
31906 			goto check_parent_and_self;
31907 		}
31908 	} else {
31909 check_parent_and_self:
31910 		/* previous opcode is ZEND_FETCH_CLASS */
31911 		if (IS_UNUSED == IS_UNUSED
31912 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
31913 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
31914 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
31915 				ce = Z_OBJCE(EX(This));
31916 			} else {
31917 				ce = Z_CE(EX(This));
31918 			}
31919 		}
31920 		call_info = ZEND_CALL_NESTED_FUNCTION;
31921 	}
31922 
31923 	call = zend_vm_stack_push_call_frame(call_info,
31924 		fbc, opline->extended_value, ce);
31925 	call->prev_execute_data = EX(call);
31926 	EX(call) = call;
31927 
31928 	ZEND_VM_NEXT_OPCODE();
31929 }
31930 
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31931 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31932 {
31933 	USE_OPLINE
31934 	zend_constant *c;
31935 
31936 	c = CACHED_PTR(opline->extended_value);
31937 	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
31938 		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
31939 		ZEND_VM_NEXT_OPCODE();
31940 	}
31941 
31942 	SAVE_OPLINE();
31943 	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
31944 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31945 }
31946 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31948 {
31949 	zend_class_entry *ce, *scope;
31950 	zend_class_constant *c;
31951 	zval *value, *zv;
31952 	USE_OPLINE
31953 
31954 	SAVE_OPLINE();
31955 
31956 	do {
31957 		if (IS_UNUSED == IS_CONST) {
31958 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
31959 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
31960 				break;
31961 			} else if (EXPECTED(CACHED_PTR(opline->extended_value))) {
31962 				ce = CACHED_PTR(opline->extended_value);
31963 			} else {
31964 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
31965 				if (UNEXPECTED(ce == NULL)) {
31966 					ZEND_ASSERT(EG(exception));
31967 					ZVAL_UNDEF(EX_VAR(opline->result.var));
31968 					HANDLE_EXCEPTION();
31969 				}
31970 			}
31971 		} else {
31972 			if (IS_UNUSED == IS_UNUSED) {
31973 				ce = zend_fetch_class(NULL, opline->op1.num);
31974 				if (UNEXPECTED(ce == NULL)) {
31975 					ZEND_ASSERT(EG(exception));
31976 					ZVAL_UNDEF(EX_VAR(opline->result.var));
31977 					HANDLE_EXCEPTION();
31978 				}
31979 			} else {
31980 				ce = Z_CE_P(EX_VAR(opline->op1.var));
31981 			}
31982 			if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
31983 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
31984 				break;
31985 			}
31986 		}
31987 
31988 		zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1);
31989 		if (EXPECTED(zv != NULL)) {
31990 			c = Z_PTR_P(zv);
31991 			scope = EX(func)->op_array.scope;
31992 			if (!zend_verify_const_access(c, scope)) {
31993 				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(RT_CONSTANT(opline, opline->op2)));
31994 				ZVAL_UNDEF(EX_VAR(opline->result.var));
31995 				HANDLE_EXCEPTION();
31996 			}
31997 			value = &c->value;
31998 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
31999 				zval_update_constant_ex(value, c->ce);
32000 				if (UNEXPECTED(EG(exception) != NULL)) {
32001 					ZVAL_UNDEF(EX_VAR(opline->result.var));
32002 					HANDLE_EXCEPTION();
32003 				}
32004 			}
32005 			CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
32006 		} else {
32007 			zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)));
32008 			ZVAL_UNDEF(EX_VAR(opline->result.var));
32009 			HANDLE_EXCEPTION();
32010 		}
32011 	} while (0);
32012 
32013 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
32014 
32015 	ZEND_VM_NEXT_OPCODE();
32016 }
32017 
ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32019 {
32020 	zval *array;
32021 	uint32_t size;
32022 	USE_OPLINE
32023 
32024 	array = EX_VAR(opline->result.var);
32025 	if (IS_UNUSED != IS_UNUSED) {
32026 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
32027 		ZVAL_ARR(array, zend_new_array(size));
32028 		/* Explicitly initialize array as not-packed if flag is set */
32029 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
32030 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
32031 		}
32032 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32033 	} else {
32034 		ZVAL_ARR(array, zend_new_array(0));
32035 		ZEND_VM_NEXT_OPCODE();
32036 	}
32037 }
32038 
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32040 {
32041 	USE_OPLINE
32042 
32043 	zval *container;
32044 	zval *offset;
32045 
32046 	SAVE_OPLINE();
32047 	container = &EX(This);
32048 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32049 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32050 	}
32051 	offset = RT_CONSTANT(opline, opline->op2);
32052 
32053 	do {
32054 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32055 			if (Z_ISREF_P(container)) {
32056 				container = Z_REFVAL_P(container);
32057 				if (Z_TYPE_P(container) != IS_OBJECT) {
32058 					if (IS_UNUSED == IS_CV
32059 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32060 						ZVAL_UNDEFINED_OP1();
32061 					}
32062 					break;
32063 				}
32064 			} else {
32065 				break;
32066 			}
32067 		}
32068 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
32069 	} while (0);
32070 
32071 
32072 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32073 }
32074 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32075 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32076 {
32077 	USE_OPLINE
32078 
32079 	zval *container;
32080 	int result;
32081 	zval *offset;
32082 
32083 	SAVE_OPLINE();
32084 	container = &EX(This);
32085 
32086 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32087 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32088 	}
32089 
32090 	offset = RT_CONSTANT(opline, opline->op2);
32091 
32092 	if (IS_UNUSED == IS_CONST ||
32093 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32094 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32095 			container = Z_REFVAL_P(container);
32096 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32097 				result = (opline->extended_value & ZEND_ISEMPTY);
32098 				goto isset_object_finish;
32099 			}
32100 		} else {
32101 			result = (opline->extended_value & ZEND_ISEMPTY);
32102 			goto isset_object_finish;
32103 		}
32104 	}
32105 
32106 	result =
32107 		(opline->extended_value & ZEND_ISEMPTY) ^
32108 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
32109 
32110 isset_object_finish:
32111 
32112 
32113 	ZEND_VM_SMART_BRANCH(result, 1);
32114 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
32115 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32116 }
32117 
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32118 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32119 {
32120 	USE_OPLINE
32121 
32122 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
32123 
32124 	SAVE_OPLINE();
32125 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
32126 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32127 	}
32128 
32129 	/* Destroy the previously yielded value */
32130 	zval_ptr_dtor(&generator->value);
32131 
32132 	/* Destroy the previously yielded key */
32133 	zval_ptr_dtor(&generator->key);
32134 
32135 	/* Set the new yielded value */
32136 	if (IS_UNUSED != IS_UNUSED) {
32137 
32138 
32139 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
32140 			/* Constants and temporary variables aren't yieldable by reference,
32141 			 * but we still allow them with a notice. */
32142 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
32143 				zval *value;
32144 
32145 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32146 
32147 				value = NULL;
32148 				ZVAL_COPY_VALUE(&generator->value, value);
32149 				if (IS_UNUSED == IS_CONST) {
32150 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32151 						Z_ADDREF(generator->value);
32152 					}
32153 				}
32154 			} else {
32155 				zval *value_ptr = NULL;
32156 
32157 				/* If a function call result is yielded and the function did
32158 				 * not return by reference we throw a notice. */
32159 				do {
32160 					if (IS_UNUSED == IS_VAR) {
32161 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
32162 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
32163 						 && !Z_ISREF_P(value_ptr)) {
32164 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32165 							ZVAL_COPY(&generator->value, value_ptr);
32166 							break;
32167 						}
32168 					}
32169 					if (Z_ISREF_P(value_ptr)) {
32170 						Z_ADDREF_P(value_ptr);
32171 					} else {
32172 						ZVAL_MAKE_REF_EX(value_ptr, 2);
32173 					}
32174 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
32175 				} while (0);
32176 
32177 			}
32178 		} else {
32179 			zval *value = NULL;
32180 
32181 			/* Consts, temporary variables and references need copying */
32182 			if (IS_UNUSED == IS_CONST) {
32183 				ZVAL_COPY_VALUE(&generator->value, value);
32184 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32185 					Z_ADDREF(generator->value);
32186 				}
32187 			} else if (IS_UNUSED == IS_TMP_VAR) {
32188 				ZVAL_COPY_VALUE(&generator->value, value);
32189             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
32190 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
32191 
32192 			} else {
32193 				ZVAL_COPY_VALUE(&generator->value, value);
32194 				if (IS_UNUSED == IS_CV) {
32195 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
32196 				}
32197 			}
32198 		}
32199 	} else {
32200 		/* If no value was specified yield null */
32201 		ZVAL_NULL(&generator->value);
32202 	}
32203 
32204 	/* Set the new yielded key */
32205 	if (IS_CONST != IS_UNUSED) {
32206 
32207 		zval *key = RT_CONSTANT(opline, opline->op2);
32208 
32209 		/* Consts, temporary variables and references need copying */
32210 		if (IS_CONST == IS_CONST) {
32211 			ZVAL_COPY_VALUE(&generator->key, key);
32212 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
32213 				Z_ADDREF(generator->key);
32214 			}
32215 		} else if (IS_CONST == IS_TMP_VAR) {
32216 			ZVAL_COPY_VALUE(&generator->key, key);
32217 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
32218 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
32219 
32220 		} else {
32221 			ZVAL_COPY_VALUE(&generator->key, key);
32222 			if (IS_CONST == IS_CV) {
32223 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
32224 			}
32225 		}
32226 
32227 		if (Z_TYPE(generator->key) == IS_LONG
32228 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
32229 		) {
32230 			generator->largest_used_integer_key = Z_LVAL(generator->key);
32231 		}
32232 	} else {
32233 		/* If no key was specified we use auto-increment keys */
32234 		generator->largest_used_integer_key++;
32235 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
32236 	}
32237 
32238 	if (RETURN_VALUE_USED(opline)) {
32239 		/* If the return value of yield is used set the send
32240 		 * target and initialize it to NULL */
32241 		generator->send_target = EX_VAR(opline->result.var);
32242 		ZVAL_NULL(generator->send_target);
32243 	} else {
32244 		generator->send_target = NULL;
32245 	}
32246 
32247 	/* We increment to the next op, so we are at the correct position when the
32248 	 * generator is resumed. */
32249 	ZEND_VM_INC_OPCODE();
32250 
32251 	/* The GOTO VM uses a local opline variable. We need to set the opline
32252 	 * variable in execute_data so we don't resume at an old position. */
32253 	SAVE_OPLINE();
32254 
32255 	ZEND_VM_RETURN();
32256 }
32257 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32258 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32259 {
32260 	USE_OPLINE
32261 	zend_free_op free_op2, free_op_data;
32262 	zval *object;
32263 	zval *property;
32264 	zval *value;
32265 	zval *zptr;
32266 	void **cache_slot;
32267 	zend_property_info *prop_info;
32268 
32269 	SAVE_OPLINE();
32270 	object = &EX(This);
32271 
32272 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32273 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32274 	}
32275 
32276 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32277 
32278 	do {
32279 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
32280 
32281 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32282 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32283 				object = Z_REFVAL_P(object);
32284 				goto assign_op_object;
32285 			}
32286 			if (IS_UNUSED == IS_CV
32287 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32288 				ZVAL_UNDEFINED_OP1();
32289 			}
32290 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
32291 			if (UNEXPECTED(!object)) {
32292 				break;
32293 			}
32294 		}
32295 
32296 assign_op_object:
32297 		/* here we are sure we are dealing with an object */
32298 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
32299 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
32300 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32301 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32302 					ZVAL_NULL(EX_VAR(opline->result.var));
32303 				}
32304 			} else {
32305 				zval *orig_zptr = zptr;
32306 				zend_reference *ref;
32307 
32308 				do {
32309 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
32310 						ref = Z_REF_P(zptr);
32311 						zptr = Z_REFVAL_P(zptr);
32312 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
32313 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
32314 							break;
32315 						}
32316 					}
32317 
32318 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
32319 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32320 					} else {
32321 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
32322 					}
32323 					if (UNEXPECTED(prop_info)) {
32324 						/* special case for typed properties */
32325 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
32326 					} else {
32327 						zend_binary_op(zptr, zptr, value OPLINE_CC);
32328 					}
32329 				} while (0);
32330 
32331 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32332 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
32333 				}
32334 			}
32335 		} else {
32336 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
32337 		}
32338 	} while (0);
32339 
32340 	FREE_OP(free_op_data);
32341 	zval_ptr_dtor_nogc(free_op2);
32342 
32343 	/* assign_obj has two opcodes! */
32344 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32345 }
32346 
32347 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32349 {
32350 	USE_OPLINE
32351 	zend_free_op free_op2;
32352 	zval *object;
32353 	zval *property;
32354 	zval *zptr;
32355 	void **cache_slot;
32356 	zend_property_info *prop_info;
32357 
32358 	SAVE_OPLINE();
32359 	object = &EX(This);
32360 
32361 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32362 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32363 	}
32364 
32365 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32366 
32367 	do {
32368 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32369 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32370 				object = Z_REFVAL_P(object);
32371 				goto pre_incdec_object;
32372 			}
32373 			if (IS_UNUSED == IS_CV
32374 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32375 				ZVAL_UNDEFINED_OP1();
32376 			}
32377 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
32378 			if (UNEXPECTED(!object)) {
32379 				break;
32380 			}
32381 		}
32382 
32383 pre_incdec_object:
32384 		/* here we are sure we are dealing with an object */
32385 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
32386 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
32387 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32388 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32389 					ZVAL_NULL(EX_VAR(opline->result.var));
32390 				}
32391 			} else {
32392 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
32393 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
32394 				} else {
32395 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
32396 				}
32397 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
32398 			}
32399 		} else {
32400 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
32401 		}
32402 	} while (0);
32403 
32404 	zval_ptr_dtor_nogc(free_op2);
32405 
32406 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32407 }
32408 
ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32410 {
32411 	USE_OPLINE
32412 	zend_free_op free_op2;
32413 	zval *object;
32414 	zval *property;
32415 	zval *zptr;
32416 	void **cache_slot;
32417 	zend_property_info *prop_info;
32418 
32419 	SAVE_OPLINE();
32420 	object = &EX(This);
32421 
32422 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32423 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32424 	}
32425 
32426 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32427 
32428 	do {
32429 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32430 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32431 				object = Z_REFVAL_P(object);
32432 				goto post_incdec_object;
32433 			}
32434 			if (IS_UNUSED == IS_CV
32435 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32436 				ZVAL_UNDEFINED_OP1();
32437 			}
32438 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
32439 			if (UNEXPECTED(!object)) {
32440 				break;
32441 			}
32442 		}
32443 
32444 post_incdec_object:
32445 		/* here we are sure we are dealing with an object */
32446 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
32447 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
32448 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32449 				ZVAL_NULL(EX_VAR(opline->result.var));
32450 			} else {
32451 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
32452 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32453 				} else {
32454 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
32455 				}
32456 
32457 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
32458 			}
32459 		} else {
32460 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
32461 		}
32462 	} while (0);
32463 
32464 	zval_ptr_dtor_nogc(free_op2);
32465 
32466 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32467 }
32468 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32469 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32470 {
32471 	USE_OPLINE
32472 
32473 	zval *container;
32474 	zend_free_op free_op2;
32475 	zval *offset;
32476 	void **cache_slot = NULL;
32477 
32478 	SAVE_OPLINE();
32479 	container = &EX(This);
32480 
32481 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32482 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32483 	}
32484 
32485 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32486 
32487 	if (IS_UNUSED == IS_CONST ||
32488 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32489 	    do {
32490 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32491 				container = Z_REFVAL_P(container);
32492 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32493 					break;
32494 				}
32495 			}
32496 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32497 				ZVAL_UNDEFINED_OP1();
32498 			}
32499 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
32500 				ZVAL_UNDEFINED_OP2();
32501 			}
32502 			zend_wrong_property_read(offset);
32503 			ZVAL_NULL(EX_VAR(opline->result.var));
32504 			goto fetch_obj_r_finish;
32505 		} while (0);
32506 	}
32507 
32508 	/* here we are sure we are dealing with an object */
32509 	do {
32510 		zend_object *zobj = Z_OBJ_P(container);
32511 		zval *retval;
32512 
32513 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
32514 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
32515 
32516 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
32517 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32518 
32519 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32520 					retval = OBJ_PROP(zobj, prop_offset);
32521 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
32522 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32523 							goto fetch_obj_r_copy;
32524 						} else {
32525 fetch_obj_r_fast_copy:
32526 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32527 							ZEND_VM_NEXT_OPCODE();
32528 						}
32529 					}
32530 				} else if (EXPECTED(zobj->properties != NULL)) {
32531 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
32532 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
32533 
32534 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
32535 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
32536 
32537 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
32538 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
32539 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
32540 						          EXPECTED(p->key != NULL) &&
32541 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
32542 								retval = &p->val;
32543 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32544 									goto fetch_obj_r_copy;
32545 								} else {
32546 									goto fetch_obj_r_fast_copy;
32547 								}
32548 							}
32549 						}
32550 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
32551 					}
32552 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
32553 					if (EXPECTED(retval)) {
32554 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
32555 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
32556 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32557 							goto fetch_obj_r_copy;
32558 						} else {
32559 							goto fetch_obj_r_fast_copy;
32560 						}
32561 					}
32562 				}
32563 			}
32564 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
32565 			ZVAL_UNDEFINED_OP2();
32566 		}
32567 
32568 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
32569 
32570 		if (retval != EX_VAR(opline->result.var)) {
32571 fetch_obj_r_copy:
32572 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32573 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
32574 			zend_unwrap_reference(retval);
32575 		}
32576 	} while (0);
32577 
32578 fetch_obj_r_finish:
32579 	zval_ptr_dtor_nogc(free_op2);
32580 
32581 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32582 }
32583 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32584 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32585 {
32586 	USE_OPLINE
32587 	zend_free_op free_op1, free_op2;
32588 	zval *property, *container, *result;
32589 
32590 	SAVE_OPLINE();
32591 
32592 	container = &EX(This);
32593 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32594 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32595 	}
32596 
32597 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32598 	result = EX_VAR(opline->result.var);
32599 	zend_fetch_property_address(
32600 		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
32601 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
32602 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
32603 	zval_ptr_dtor_nogc(free_op2);
32604 	if (IS_UNUSED == IS_VAR) {
32605 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
32606 	}
32607 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32608 }
32609 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32611 {
32612 	USE_OPLINE
32613 	zend_free_op free_op1, free_op2;
32614 	zval *property, *container, *result;
32615 
32616 	SAVE_OPLINE();
32617 	container = &EX(This);
32618 
32619 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32620 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32621 	}
32622 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32623 	result = EX_VAR(opline->result.var);
32624 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
32625 	zval_ptr_dtor_nogc(free_op2);
32626 	if (IS_UNUSED == IS_VAR) {
32627 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
32628 	}
32629 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32630 }
32631 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32632 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32633 {
32634 	USE_OPLINE
32635 
32636 	zval *container;
32637 	zend_free_op free_op2;
32638 	zval *offset;
32639 	void **cache_slot = NULL;
32640 
32641 	SAVE_OPLINE();
32642 	container = &EX(This);
32643 
32644 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32645 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32646 	}
32647 
32648 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32649 
32650 	if (IS_UNUSED == IS_CONST ||
32651 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32652 		do {
32653 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32654 				container = Z_REFVAL_P(container);
32655 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32656 					break;
32657 				}
32658 			}
32659 			ZVAL_NULL(EX_VAR(opline->result.var));
32660 			goto fetch_obj_is_finish;
32661 		} while (0);
32662 	}
32663 
32664 	/* here we are sure we are dealing with an object */
32665 	do {
32666 		zend_object *zobj = Z_OBJ_P(container);
32667 		zval *retval;
32668 
32669 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
32670 			cache_slot = CACHE_ADDR(opline->extended_value);
32671 
32672 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
32673 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32674 
32675 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32676 					retval = OBJ_PROP(zobj, prop_offset);
32677 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
32678 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32679 							goto fetch_obj_is_copy;
32680 						} else {
32681 fetch_obj_is_fast_copy:
32682 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32683 							ZEND_VM_NEXT_OPCODE();
32684 						}
32685 					}
32686 				} else if (EXPECTED(zobj->properties != NULL)) {
32687 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
32688 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
32689 
32690 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
32691 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
32692 
32693 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
32694 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
32695 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
32696 						          EXPECTED(p->key != NULL) &&
32697 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
32698 								retval = &p->val;
32699 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32700 									goto fetch_obj_is_copy;
32701 								} else {
32702 									goto fetch_obj_is_fast_copy;
32703 								}
32704 							}
32705 						}
32706 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
32707 					}
32708 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
32709 					if (EXPECTED(retval)) {
32710 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
32711 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
32712 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32713 							goto fetch_obj_is_copy;
32714 						} else {
32715 							goto fetch_obj_is_fast_copy;
32716 						}
32717 					}
32718 				}
32719 			}
32720 		}
32721 
32722 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
32723 
32724 		if (retval != EX_VAR(opline->result.var)) {
32725 fetch_obj_is_copy:
32726 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32727 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
32728 			zend_unwrap_reference(retval);
32729 		}
32730 	} while (0);
32731 
32732 fetch_obj_is_finish:
32733 	zval_ptr_dtor_nogc(free_op2);
32734 
32735 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32736 }
32737 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32738 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32739 {
32740 #if 0
32741 	USE_OPLINE
32742 #endif
32743 
32744 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
32745 		/* Behave like FETCH_OBJ_W */
32746 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
32747 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32748 		}
32749 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32750 	} else {
32751 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32752 	}
32753 }
32754 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32755 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32756 {
32757 	USE_OPLINE
32758 	zend_free_op free_op1, free_op2;
32759 	zval *container, *property, *result;
32760 
32761 	SAVE_OPLINE();
32762 	container = &EX(This);
32763 
32764 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32765 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32766 	}
32767 
32768 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32769 	result = EX_VAR(opline->result.var);
32770 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
32771 	zval_ptr_dtor_nogc(free_op2);
32772 	if (IS_UNUSED == IS_VAR) {
32773 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
32774 	}
32775 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32776 }
32777 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32778 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32779 {
32780 	USE_OPLINE
32781 	zend_free_op free_op2;
32782 	zval *object, *property, *value, tmp;
32783 
32784 	SAVE_OPLINE();
32785 	object = &EX(This);
32786 
32787 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32788 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32789 	}
32790 
32791 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32792 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
32793 
32794 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32795 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32796 			object = Z_REFVAL_P(object);
32797 			goto assign_object;
32798 		}
32799 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
32800 		if (UNEXPECTED(!object)) {
32801 			value = &EG(uninitialized_zval);
32802 			goto free_and_exit_assign_obj;
32803 		}
32804 	}
32805 
32806 assign_object:
32807 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
32808 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
32809 		void **cache_slot = CACHE_ADDR(opline->extended_value);
32810 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32811 		zend_object *zobj = Z_OBJ_P(object);
32812 		zval *property_val;
32813 
32814 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32815 			property_val = OBJ_PROP(zobj, prop_offset);
32816 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
32817 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32818 
32819 				if (UNEXPECTED(prop_info != NULL)) {
32820 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32821 					goto free_and_exit_assign_obj;
32822 				} else {
32823 fast_assign_obj:
32824 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
32825 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32826 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32827 					}
32828 					goto exit_assign_obj;
32829 				}
32830 			}
32831 		} else {
32832 			if (EXPECTED(zobj->properties != NULL)) {
32833 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32834 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32835 						GC_DELREF(zobj->properties);
32836 					}
32837 					zobj->properties = zend_array_dup(zobj->properties);
32838 				}
32839 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32840 				if (property_val) {
32841 					goto fast_assign_obj;
32842 				}
32843 			}
32844 
32845 			if (!zobj->ce->__set) {
32846 
32847 				if (EXPECTED(zobj->properties == NULL)) {
32848 					rebuild_object_properties(zobj);
32849 				}
32850 				if (IS_CONST == IS_CONST) {
32851 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32852 						Z_ADDREF_P(value);
32853 					}
32854 				} else if (IS_CONST != IS_TMP_VAR) {
32855 					if (Z_ISREF_P(value)) {
32856 						if (IS_CONST == IS_VAR) {
32857 							zend_reference *ref = Z_REF_P(value);
32858 							if (GC_DELREF(ref) == 0) {
32859 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32860 								efree_size(ref, sizeof(zend_reference));
32861 								value = &tmp;
32862 							} else {
32863 								value = Z_REFVAL_P(value);
32864 								Z_TRY_ADDREF_P(value);
32865 							}
32866 						} else {
32867 							value = Z_REFVAL_P(value);
32868 							Z_TRY_ADDREF_P(value);
32869 						}
32870 					} else if (IS_CONST == IS_CV) {
32871 						Z_TRY_ADDREF_P(value);
32872 					}
32873 				}
32874 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32875 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32876 					ZVAL_COPY(EX_VAR(opline->result.var), value);
32877 				}
32878 				goto exit_assign_obj;
32879 			}
32880 		}
32881 	}
32882 
32883 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
32884 		ZVAL_DEREF(value);
32885 	}
32886 
32887 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
32888 
32889 free_and_exit_assign_obj:
32890 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32891 		ZVAL_COPY(EX_VAR(opline->result.var), value);
32892 	}
32893 
32894 exit_assign_obj:
32895 	zval_ptr_dtor_nogc(free_op2);
32896 
32897 	/* assign_obj has two opcodes! */
32898 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32899 }
32900 
32901 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32903 {
32904 	USE_OPLINE
32905 	zend_free_op free_op2, free_op_data;
32906 	zval *object, *property, *value, tmp;
32907 
32908 	SAVE_OPLINE();
32909 	object = &EX(This);
32910 
32911 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32912 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32913 	}
32914 
32915 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
32916 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
32917 
32918 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32919 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32920 			object = Z_REFVAL_P(object);
32921 			goto assign_object;
32922 		}
32923 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
32924 		if (UNEXPECTED(!object)) {
32925 			value = &EG(uninitialized_zval);
32926 			goto free_and_exit_assign_obj;
32927 		}
32928 	}
32929 
32930 assign_object:
32931 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
32932 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
32933 		void **cache_slot = CACHE_ADDR(opline->extended_value);
32934 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32935 		zend_object *zobj = Z_OBJ_P(object);
32936 		zval *property_val;
32937 
32938 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32939 			property_val = OBJ_PROP(zobj, prop_offset);
32940 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
32941 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
32942 
32943 				if (UNEXPECTED(prop_info != NULL)) {
32944 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
32945 					goto free_and_exit_assign_obj;
32946 				} else {
32947 fast_assign_obj:
32948 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
32949 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32950 						ZVAL_COPY(EX_VAR(opline->result.var), value);
32951 					}
32952 					goto exit_assign_obj;
32953 				}
32954 			}
32955 		} else {
32956 			if (EXPECTED(zobj->properties != NULL)) {
32957 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
32958 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
32959 						GC_DELREF(zobj->properties);
32960 					}
32961 					zobj->properties = zend_array_dup(zobj->properties);
32962 				}
32963 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
32964 				if (property_val) {
32965 					goto fast_assign_obj;
32966 				}
32967 			}
32968 
32969 			if (!zobj->ce->__set) {
32970 
32971 				if (EXPECTED(zobj->properties == NULL)) {
32972 					rebuild_object_properties(zobj);
32973 				}
32974 				if (IS_TMP_VAR == IS_CONST) {
32975 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
32976 						Z_ADDREF_P(value);
32977 					}
32978 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
32979 					if (Z_ISREF_P(value)) {
32980 						if (IS_TMP_VAR == IS_VAR) {
32981 							zend_reference *ref = Z_REF_P(value);
32982 							if (GC_DELREF(ref) == 0) {
32983 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
32984 								efree_size(ref, sizeof(zend_reference));
32985 								value = &tmp;
32986 							} else {
32987 								value = Z_REFVAL_P(value);
32988 								Z_TRY_ADDREF_P(value);
32989 							}
32990 						} else {
32991 							value = Z_REFVAL_P(value);
32992 							Z_TRY_ADDREF_P(value);
32993 						}
32994 					} else if (IS_TMP_VAR == IS_CV) {
32995 						Z_TRY_ADDREF_P(value);
32996 					}
32997 				}
32998 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
32999 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33000 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33001 				}
33002 				goto exit_assign_obj;
33003 			}
33004 		}
33005 	}
33006 
33007 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
33008 		ZVAL_DEREF(value);
33009 	}
33010 
33011 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33012 
33013 free_and_exit_assign_obj:
33014 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33015 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33016 	}
33017 	zval_ptr_dtor_nogc(free_op_data);
33018 exit_assign_obj:
33019 	zval_ptr_dtor_nogc(free_op2);
33020 
33021 	/* assign_obj has two opcodes! */
33022 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33023 }
33024 
33025 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33027 {
33028 	USE_OPLINE
33029 	zend_free_op free_op2, free_op_data;
33030 	zval *object, *property, *value, tmp;
33031 
33032 	SAVE_OPLINE();
33033 	object = &EX(This);
33034 
33035 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33036 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33037 	}
33038 
33039 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33040 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
33041 
33042 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33043 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33044 			object = Z_REFVAL_P(object);
33045 			goto assign_object;
33046 		}
33047 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
33048 		if (UNEXPECTED(!object)) {
33049 			value = &EG(uninitialized_zval);
33050 			goto free_and_exit_assign_obj;
33051 		}
33052 	}
33053 
33054 assign_object:
33055 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33056 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
33057 		void **cache_slot = CACHE_ADDR(opline->extended_value);
33058 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33059 		zend_object *zobj = Z_OBJ_P(object);
33060 		zval *property_val;
33061 
33062 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33063 			property_val = OBJ_PROP(zobj, prop_offset);
33064 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
33065 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33066 
33067 				if (UNEXPECTED(prop_info != NULL)) {
33068 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
33069 					goto free_and_exit_assign_obj;
33070 				} else {
33071 fast_assign_obj:
33072 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
33073 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33074 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33075 					}
33076 					goto exit_assign_obj;
33077 				}
33078 			}
33079 		} else {
33080 			if (EXPECTED(zobj->properties != NULL)) {
33081 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33082 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33083 						GC_DELREF(zobj->properties);
33084 					}
33085 					zobj->properties = zend_array_dup(zobj->properties);
33086 				}
33087 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
33088 				if (property_val) {
33089 					goto fast_assign_obj;
33090 				}
33091 			}
33092 
33093 			if (!zobj->ce->__set) {
33094 
33095 				if (EXPECTED(zobj->properties == NULL)) {
33096 					rebuild_object_properties(zobj);
33097 				}
33098 				if (IS_VAR == IS_CONST) {
33099 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33100 						Z_ADDREF_P(value);
33101 					}
33102 				} else if (IS_VAR != IS_TMP_VAR) {
33103 					if (Z_ISREF_P(value)) {
33104 						if (IS_VAR == IS_VAR) {
33105 							zend_reference *ref = Z_REF_P(value);
33106 							if (GC_DELREF(ref) == 0) {
33107 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33108 								efree_size(ref, sizeof(zend_reference));
33109 								value = &tmp;
33110 							} else {
33111 								value = Z_REFVAL_P(value);
33112 								Z_TRY_ADDREF_P(value);
33113 							}
33114 						} else {
33115 							value = Z_REFVAL_P(value);
33116 							Z_TRY_ADDREF_P(value);
33117 						}
33118 					} else if (IS_VAR == IS_CV) {
33119 						Z_TRY_ADDREF_P(value);
33120 					}
33121 				}
33122 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
33123 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33124 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33125 				}
33126 				goto exit_assign_obj;
33127 			}
33128 		}
33129 	}
33130 
33131 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
33132 		ZVAL_DEREF(value);
33133 	}
33134 
33135 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33136 
33137 free_and_exit_assign_obj:
33138 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33139 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33140 	}
33141 	zval_ptr_dtor_nogc(free_op_data);
33142 exit_assign_obj:
33143 	zval_ptr_dtor_nogc(free_op2);
33144 
33145 	/* assign_obj has two opcodes! */
33146 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33147 }
33148 
33149 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33150 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33151 {
33152 	USE_OPLINE
33153 	zend_free_op free_op2;
33154 	zval *object, *property, *value, tmp;
33155 
33156 	SAVE_OPLINE();
33157 	object = &EX(This);
33158 
33159 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33160 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33161 	}
33162 
33163 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33164 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
33165 
33166 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33167 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33168 			object = Z_REFVAL_P(object);
33169 			goto assign_object;
33170 		}
33171 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
33172 		if (UNEXPECTED(!object)) {
33173 			value = &EG(uninitialized_zval);
33174 			goto free_and_exit_assign_obj;
33175 		}
33176 	}
33177 
33178 assign_object:
33179 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33180 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
33181 		void **cache_slot = CACHE_ADDR(opline->extended_value);
33182 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33183 		zend_object *zobj = Z_OBJ_P(object);
33184 		zval *property_val;
33185 
33186 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33187 			property_val = OBJ_PROP(zobj, prop_offset);
33188 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
33189 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33190 
33191 				if (UNEXPECTED(prop_info != NULL)) {
33192 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
33193 					goto free_and_exit_assign_obj;
33194 				} else {
33195 fast_assign_obj:
33196 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
33197 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33198 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33199 					}
33200 					goto exit_assign_obj;
33201 				}
33202 			}
33203 		} else {
33204 			if (EXPECTED(zobj->properties != NULL)) {
33205 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33206 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33207 						GC_DELREF(zobj->properties);
33208 					}
33209 					zobj->properties = zend_array_dup(zobj->properties);
33210 				}
33211 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
33212 				if (property_val) {
33213 					goto fast_assign_obj;
33214 				}
33215 			}
33216 
33217 			if (!zobj->ce->__set) {
33218 
33219 				if (EXPECTED(zobj->properties == NULL)) {
33220 					rebuild_object_properties(zobj);
33221 				}
33222 				if (IS_CV == IS_CONST) {
33223 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33224 						Z_ADDREF_P(value);
33225 					}
33226 				} else if (IS_CV != IS_TMP_VAR) {
33227 					if (Z_ISREF_P(value)) {
33228 						if (IS_CV == IS_VAR) {
33229 							zend_reference *ref = Z_REF_P(value);
33230 							if (GC_DELREF(ref) == 0) {
33231 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33232 								efree_size(ref, sizeof(zend_reference));
33233 								value = &tmp;
33234 							} else {
33235 								value = Z_REFVAL_P(value);
33236 								Z_TRY_ADDREF_P(value);
33237 							}
33238 						} else {
33239 							value = Z_REFVAL_P(value);
33240 							Z_TRY_ADDREF_P(value);
33241 						}
33242 					} else if (IS_CV == IS_CV) {
33243 						Z_TRY_ADDREF_P(value);
33244 					}
33245 				}
33246 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
33247 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33248 					ZVAL_COPY(EX_VAR(opline->result.var), value);
33249 				}
33250 				goto exit_assign_obj;
33251 			}
33252 		}
33253 	}
33254 
33255 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
33256 		ZVAL_DEREF(value);
33257 	}
33258 
33259 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33260 
33261 free_and_exit_assign_obj:
33262 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33263 		ZVAL_COPY(EX_VAR(opline->result.var), value);
33264 	}
33265 
33266 exit_assign_obj:
33267 	zval_ptr_dtor_nogc(free_op2);
33268 
33269 	/* assign_obj has two opcodes! */
33270 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33271 }
33272 
33273 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33275 {
33276 	USE_OPLINE
33277 	zend_free_op free_op2, free_op_data;
33278 	zval *property, *container, *value_ptr;
33279 
33280 	SAVE_OPLINE();
33281 
33282 	container = &EX(This);
33283 
33284 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33285 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33286 	}
33287 
33288 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33289 
33290 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
33291 
33292 	if (1) {
33293 		if (IS_UNUSED == IS_UNUSED) {
33294 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33295 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33296 			} else {
33297 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33298 			}
33299 		} else {
33300 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33301 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33302 			} else {
33303 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33304 			}
33305 		}
33306 	} else {
33307 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
33308 	}
33309 
33310 	zval_ptr_dtor_nogc(free_op2);
33311 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
33312 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33313 }
33314 
33315 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33316 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33317 {
33318 	USE_OPLINE
33319 	zend_free_op free_op2;
33320 	zval *property, *container, *value_ptr;
33321 
33322 	SAVE_OPLINE();
33323 
33324 	container = &EX(This);
33325 
33326 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33327 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33328 	}
33329 
33330 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33331 
33332 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
33333 
33334 	if (1) {
33335 		if (IS_UNUSED == IS_UNUSED) {
33336 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33337 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33338 			} else {
33339 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33340 			}
33341 		} else {
33342 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33343 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33344 			} else {
33345 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33346 			}
33347 		}
33348 	} else {
33349 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
33350 	}
33351 
33352 	zval_ptr_dtor_nogc(free_op2);
33353 
33354 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33355 }
33356 
33357 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33358 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33359 {
33360 	USE_OPLINE
33361 	zend_free_op free_op2;
33362 	zend_string **rope;
33363 	zval *var;
33364 
33365 	/* Compiler allocates the necessary number of zval slots to keep the rope */
33366 	rope = (zend_string**)EX_VAR(opline->result.var);
33367 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33368 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33369 		rope[0] = Z_STR_P(var);
33370 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
33371 			Z_ADDREF_P(var);
33372 		}
33373 	} else {
33374 		var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33375 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
33376 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
33377 				rope[0] = zend_string_copy(Z_STR_P(var));
33378 			} else {
33379 				rope[0] = Z_STR_P(var);
33380 			}
33381 		} else {
33382 			SAVE_OPLINE();
33383 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
33384 				ZVAL_UNDEFINED_OP2();
33385 			}
33386 			rope[0] = zval_get_string_func(var);
33387 			zval_ptr_dtor_nogc(free_op2);
33388 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33389 		}
33390 	}
33391 	ZEND_VM_NEXT_OPCODE();
33392 }
33393 
ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33395 {
33396 	zend_free_op free_op2;
33397 	zval *class_name;
33398 	USE_OPLINE
33399 
33400 	SAVE_OPLINE();
33401 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
33402 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
33403 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33404 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33405 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
33406 
33407 		if (UNEXPECTED(ce == NULL)) {
33408 			class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33409 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
33410 			CACHE_PTR(opline->extended_value, ce);
33411 		}
33412 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
33413 	} else {
33414 		class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33415 try_class_name:
33416 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
33417 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
33418 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
33419 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
33420 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
33421 			class_name = Z_REFVAL_P(class_name);
33422 			goto try_class_name;
33423 		} else {
33424 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
33425 				ZVAL_UNDEFINED_OP2();
33426 				if (UNEXPECTED(EG(exception) != NULL)) {
33427 					HANDLE_EXCEPTION();
33428 				}
33429 			}
33430 			zend_throw_error(NULL, "Class name must be a valid object or a string");
33431 		}
33432 	}
33433 
33434 	zval_ptr_dtor_nogc(free_op2);
33435 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33436 }
33437 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33439 {
33440 	USE_OPLINE
33441 	zval *function_name;
33442 	zend_free_op free_op1, free_op2;
33443 	zval *object;
33444 	zend_function *fbc;
33445 	zend_class_entry *called_scope;
33446 	zend_object *obj;
33447 	zend_execute_data *call;
33448 	uint32_t call_info;
33449 
33450 	SAVE_OPLINE();
33451 
33452 	object = &EX(This);
33453 
33454 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33455 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33456 	}
33457 
33458 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33459 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33460 	}
33461 
33462 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
33463 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
33464 		do {
33465 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
33466 				function_name = Z_REFVAL_P(function_name);
33467 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
33468 					break;
33469 				}
33470 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
33471 				ZVAL_UNDEFINED_OP2();
33472 				if (UNEXPECTED(EG(exception) != NULL)) {
33473 
33474 					HANDLE_EXCEPTION();
33475 				}
33476 			}
33477 			zend_throw_error(NULL, "Method name must be a string");
33478 			zval_ptr_dtor_nogc(free_op2);
33479 
33480 			HANDLE_EXCEPTION();
33481 		} while (0);
33482 	}
33483 
33484 	if (IS_UNUSED != IS_UNUSED) {
33485 		do {
33486 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33487 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
33488 					object = Z_REFVAL_P(object);
33489 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33490 						break;
33491 					}
33492 				}
33493 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33494 					object = ZVAL_UNDEFINED_OP1();
33495 					if (UNEXPECTED(EG(exception) != NULL)) {
33496 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33497 							zval_ptr_dtor_nogc(free_op2);
33498 						}
33499 						HANDLE_EXCEPTION();
33500 					}
33501 				}
33502 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33503 					function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33504 				}
33505 				zend_invalid_method_call(object, function_name);
33506 				zval_ptr_dtor_nogc(free_op2);
33507 
33508 				HANDLE_EXCEPTION();
33509 			}
33510 		} while (0);
33511 	}
33512 
33513 	obj = Z_OBJ_P(object);
33514 	called_scope = obj->ce;
33515 
33516 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33517 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
33518 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
33519 	} else {
33520 	    zend_object *orig_obj = obj;
33521 
33522 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
33523 			function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33524 		}
33525 
33526 		/* First, locate the function. */
33527 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
33528 		if (UNEXPECTED(fbc == NULL)) {
33529 			if (EXPECTED(!EG(exception))) {
33530 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
33531 			}
33532 			zval_ptr_dtor_nogc(free_op2);
33533 
33534 			HANDLE_EXCEPTION();
33535 		}
33536 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33537 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
33538 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
33539 		    EXPECTED(obj == orig_obj)) {
33540 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
33541 		}
33542 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
33543 			/* Reset "object" to trigger reference counting */
33544 			object = NULL;
33545 		}
33546 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33547 			init_func_run_time_cache(&fbc->op_array);
33548 		}
33549 	}
33550 
33551 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33552 		zval_ptr_dtor_nogc(free_op2);
33553 	}
33554 
33555 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
33556 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
33557 
33558 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
33559 			HANDLE_EXCEPTION();
33560 		}
33561 		/* call static method */
33562 		obj = (zend_object*)called_scope;
33563 		call_info = ZEND_CALL_NESTED_FUNCTION;
33564 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
33565 		if (IS_UNUSED == IS_CV) {
33566 			GC_ADDREF(obj); /* For $this pointer */
33567 		} else if (free_op1 != object) {
33568 			GC_ADDREF(obj); /* For $this pointer */
33569 
33570 		}
33571 		/* CV may be changed indirectly (e.g. when it's a reference) */
33572 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
33573 	}
33574 
33575 	call = zend_vm_stack_push_call_frame(call_info,
33576 		fbc, opline->extended_value, obj);
33577 	call->prev_execute_data = EX(call);
33578 	EX(call) = call;
33579 
33580 	ZEND_VM_NEXT_OPCODE();
33581 }
33582 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33583 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33584 {
33585 	USE_OPLINE
33586 	zval *function_name;
33587 	zend_class_entry *ce;
33588 	uint32_t call_info;
33589 	zend_function *fbc;
33590 	zend_execute_data *call;
33591 
33592 	SAVE_OPLINE();
33593 
33594 	if (IS_UNUSED == IS_CONST) {
33595 		/* no function found. try a static method in class */
33596 		ce = CACHED_PTR(opline->result.num);
33597 		if (UNEXPECTED(ce == NULL)) {
33598 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
33599 			if (UNEXPECTED(ce == NULL)) {
33600 				ZEND_ASSERT(EG(exception));
33601 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33602 				HANDLE_EXCEPTION();
33603 			}
33604 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33605 				CACHE_PTR(opline->result.num, ce);
33606 			}
33607 		}
33608 	} else if (IS_UNUSED == IS_UNUSED) {
33609 		ce = zend_fetch_class(NULL, opline->op1.num);
33610 		if (UNEXPECTED(ce == NULL)) {
33611 			ZEND_ASSERT(EG(exception));
33612 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
33613 			HANDLE_EXCEPTION();
33614 		}
33615 	} else {
33616 		ce = Z_CE_P(EX_VAR(opline->op1.var));
33617 	}
33618 
33619 	if (IS_UNUSED == IS_CONST &&
33620 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
33621 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
33622 		/* nothing to do */
33623 	} else if (IS_UNUSED != IS_CONST &&
33624 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
33625 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
33626 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
33627 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
33628 		zend_free_op free_op2;
33629 
33630 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33631 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33632 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
33633 				do {
33634 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
33635 						function_name = Z_REFVAL_P(function_name);
33636 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
33637 							break;
33638 						}
33639 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
33640 						ZVAL_UNDEFINED_OP2();
33641 						if (UNEXPECTED(EG(exception) != NULL)) {
33642 							HANDLE_EXCEPTION();
33643 						}
33644 					}
33645 					zend_throw_error(NULL, "Function name must be a string");
33646 					zval_ptr_dtor_nogc(free_op2);
33647 					HANDLE_EXCEPTION();
33648 				} while (0);
33649 			}
33650 		}
33651 
33652 		if (ce->get_static_method) {
33653 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
33654 		} else {
33655 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
33656 		}
33657 		if (UNEXPECTED(fbc == NULL)) {
33658 			if (EXPECTED(!EG(exception))) {
33659 				zend_undefined_method(ce, Z_STR_P(function_name));
33660 			}
33661 			zval_ptr_dtor_nogc(free_op2);
33662 			HANDLE_EXCEPTION();
33663 		}
33664 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
33665 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
33666 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
33667 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
33668 		}
33669 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33670 			init_func_run_time_cache(&fbc->op_array);
33671 		}
33672 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
33673 			zval_ptr_dtor_nogc(free_op2);
33674 		}
33675 	} else {
33676 		if (UNEXPECTED(ce->constructor == NULL)) {
33677 			zend_throw_error(NULL, "Cannot call constructor");
33678 			HANDLE_EXCEPTION();
33679 		}
33680 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
33681 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
33682 			HANDLE_EXCEPTION();
33683 		}
33684 		fbc = ce->constructor;
33685 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
33686 			init_func_run_time_cache(&fbc->op_array);
33687 		}
33688 	}
33689 
33690 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
33691 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
33692 			ce = (zend_class_entry*)Z_OBJ(EX(This));
33693 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
33694 		} else {
33695 			zend_non_static_method_call(fbc);
33696 			if (UNEXPECTED(EG(exception) != NULL)) {
33697 				HANDLE_EXCEPTION();
33698 			}
33699 			goto check_parent_and_self;
33700 		}
33701 	} else {
33702 check_parent_and_self:
33703 		/* previous opcode is ZEND_FETCH_CLASS */
33704 		if (IS_UNUSED == IS_UNUSED
33705 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
33706 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
33707 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
33708 				ce = Z_OBJCE(EX(This));
33709 			} else {
33710 				ce = Z_CE(EX(This));
33711 			}
33712 		}
33713 		call_info = ZEND_CALL_NESTED_FUNCTION;
33714 	}
33715 
33716 	call = zend_vm_stack_push_call_frame(call_info,
33717 		fbc, opline->extended_value, ce);
33718 	call->prev_execute_data = EX(call);
33719 	EX(call) = call;
33720 
33721 	ZEND_VM_NEXT_OPCODE();
33722 }
33723 
ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33725 {
33726 	zval *array;
33727 	uint32_t size;
33728 	USE_OPLINE
33729 
33730 	array = EX_VAR(opline->result.var);
33731 	if (IS_UNUSED != IS_UNUSED) {
33732 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
33733 		ZVAL_ARR(array, zend_new_array(size));
33734 		/* Explicitly initialize array as not-packed if flag is set */
33735 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
33736 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
33737 		}
33738 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33739 	} else {
33740 		ZVAL_ARR(array, zend_new_array(0));
33741 		ZEND_VM_NEXT_OPCODE();
33742 	}
33743 }
33744 
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33745 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33746 {
33747 	USE_OPLINE
33748 	zend_free_op free_op2;
33749 	zval *container;
33750 	zval *offset;
33751 
33752 	SAVE_OPLINE();
33753 	container = &EX(This);
33754 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33755 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33756 	}
33757 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33758 
33759 	do {
33760 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33761 			if (Z_ISREF_P(container)) {
33762 				container = Z_REFVAL_P(container);
33763 				if (Z_TYPE_P(container) != IS_OBJECT) {
33764 					if (IS_UNUSED == IS_CV
33765 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33766 						ZVAL_UNDEFINED_OP1();
33767 					}
33768 					break;
33769 				}
33770 			} else {
33771 				break;
33772 			}
33773 		}
33774 		Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
33775 	} while (0);
33776 
33777 	zval_ptr_dtor_nogc(free_op2);
33778 
33779 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33780 }
33781 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33782 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33783 {
33784 	USE_OPLINE
33785 	zend_free_op free_op2;
33786 	zval *container;
33787 	int result;
33788 	zval *offset;
33789 
33790 	SAVE_OPLINE();
33791 	container = &EX(This);
33792 
33793 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
33794 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33795 	}
33796 
33797 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33798 
33799 	if (IS_UNUSED == IS_CONST ||
33800 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33801 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33802 			container = Z_REFVAL_P(container);
33803 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
33804 				result = (opline->extended_value & ZEND_ISEMPTY);
33805 				goto isset_object_finish;
33806 			}
33807 		} else {
33808 			result = (opline->extended_value & ZEND_ISEMPTY);
33809 			goto isset_object_finish;
33810 		}
33811 	}
33812 
33813 	result =
33814 		(opline->extended_value & ZEND_ISEMPTY) ^
33815 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
33816 
33817 isset_object_finish:
33818 	zval_ptr_dtor_nogc(free_op2);
33819 
33820 	ZEND_VM_SMART_BRANCH(result, 1);
33821 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
33822 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33823 }
33824 
ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33825 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33826 {
33827 	USE_OPLINE
33828 
33829 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
33830 
33831 	SAVE_OPLINE();
33832 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33833 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33834 	}
33835 
33836 	/* Destroy the previously yielded value */
33837 	zval_ptr_dtor(&generator->value);
33838 
33839 	/* Destroy the previously yielded key */
33840 	zval_ptr_dtor(&generator->key);
33841 
33842 	/* Set the new yielded value */
33843 	if (IS_UNUSED != IS_UNUSED) {
33844 
33845 
33846 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33847 			/* Constants and temporary variables aren't yieldable by reference,
33848 			 * but we still allow them with a notice. */
33849 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
33850 				zval *value;
33851 
33852 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33853 
33854 				value = NULL;
33855 				ZVAL_COPY_VALUE(&generator->value, value);
33856 				if (IS_UNUSED == IS_CONST) {
33857 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33858 						Z_ADDREF(generator->value);
33859 					}
33860 				}
33861 			} else {
33862 				zval *value_ptr = NULL;
33863 
33864 				/* If a function call result is yielded and the function did
33865 				 * not return by reference we throw a notice. */
33866 				do {
33867 					if (IS_UNUSED == IS_VAR) {
33868 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
33869 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
33870 						 && !Z_ISREF_P(value_ptr)) {
33871 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33872 							ZVAL_COPY(&generator->value, value_ptr);
33873 							break;
33874 						}
33875 					}
33876 					if (Z_ISREF_P(value_ptr)) {
33877 						Z_ADDREF_P(value_ptr);
33878 					} else {
33879 						ZVAL_MAKE_REF_EX(value_ptr, 2);
33880 					}
33881 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
33882 				} while (0);
33883 
33884 			}
33885 		} else {
33886 			zval *value = NULL;
33887 
33888 			/* Consts, temporary variables and references need copying */
33889 			if (IS_UNUSED == IS_CONST) {
33890 				ZVAL_COPY_VALUE(&generator->value, value);
33891 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33892 					Z_ADDREF(generator->value);
33893 				}
33894 			} else if (IS_UNUSED == IS_TMP_VAR) {
33895 				ZVAL_COPY_VALUE(&generator->value, value);
33896             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
33897 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
33898 
33899 			} else {
33900 				ZVAL_COPY_VALUE(&generator->value, value);
33901 				if (IS_UNUSED == IS_CV) {
33902 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
33903 				}
33904 			}
33905 		}
33906 	} else {
33907 		/* If no value was specified yield null */
33908 		ZVAL_NULL(&generator->value);
33909 	}
33910 
33911 	/* Set the new yielded key */
33912 	if (IS_TMP_VAR != IS_UNUSED) {
33913 		zend_free_op free_op2;
33914 		zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
33915 
33916 		/* Consts, temporary variables and references need copying */
33917 		if (IS_TMP_VAR == IS_CONST) {
33918 			ZVAL_COPY_VALUE(&generator->key, key);
33919 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
33920 				Z_ADDREF(generator->key);
33921 			}
33922 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
33923 			ZVAL_COPY_VALUE(&generator->key, key);
33924 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
33925 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
33926 
33927 		} else {
33928 			ZVAL_COPY_VALUE(&generator->key, key);
33929 			if (IS_TMP_VAR == IS_CV) {
33930 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
33931 			}
33932 		}
33933 
33934 		if (Z_TYPE(generator->key) == IS_LONG
33935 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
33936 		) {
33937 			generator->largest_used_integer_key = Z_LVAL(generator->key);
33938 		}
33939 	} else {
33940 		/* If no key was specified we use auto-increment keys */
33941 		generator->largest_used_integer_key++;
33942 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
33943 	}
33944 
33945 	if (RETURN_VALUE_USED(opline)) {
33946 		/* If the return value of yield is used set the send
33947 		 * target and initialize it to NULL */
33948 		generator->send_target = EX_VAR(opline->result.var);
33949 		ZVAL_NULL(generator->send_target);
33950 	} else {
33951 		generator->send_target = NULL;
33952 	}
33953 
33954 	/* We increment to the next op, so we are at the correct position when the
33955 	 * generator is resumed. */
33956 	ZEND_VM_INC_OPCODE();
33957 
33958 	/* The GOTO VM uses a local opline variable. We need to set the opline
33959 	 * variable in execute_data so we don't resume at an old position. */
33960 	SAVE_OPLINE();
33961 
33962 	ZEND_VM_RETURN();
33963 }
33964 
ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33966 {
33967 	USE_OPLINE
33968 
33969 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
33970 
33971 	SAVE_OPLINE();
33972 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
33973 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33974 	}
33975 
33976 	/* Destroy the previously yielded value */
33977 	zval_ptr_dtor(&generator->value);
33978 
33979 	/* Destroy the previously yielded key */
33980 	zval_ptr_dtor(&generator->key);
33981 
33982 	/* Set the new yielded value */
33983 	if (IS_UNUSED != IS_UNUSED) {
33984 
33985 
33986 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
33987 			/* Constants and temporary variables aren't yieldable by reference,
33988 			 * but we still allow them with a notice. */
33989 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
33990 				zval *value;
33991 
33992 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
33993 
33994 				value = NULL;
33995 				ZVAL_COPY_VALUE(&generator->value, value);
33996 				if (IS_UNUSED == IS_CONST) {
33997 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
33998 						Z_ADDREF(generator->value);
33999 					}
34000 				}
34001 			} else {
34002 				zval *value_ptr = NULL;
34003 
34004 				/* If a function call result is yielded and the function did
34005 				 * not return by reference we throw a notice. */
34006 				do {
34007 					if (IS_UNUSED == IS_VAR) {
34008 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
34009 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
34010 						 && !Z_ISREF_P(value_ptr)) {
34011 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34012 							ZVAL_COPY(&generator->value, value_ptr);
34013 							break;
34014 						}
34015 					}
34016 					if (Z_ISREF_P(value_ptr)) {
34017 						Z_ADDREF_P(value_ptr);
34018 					} else {
34019 						ZVAL_MAKE_REF_EX(value_ptr, 2);
34020 					}
34021 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
34022 				} while (0);
34023 
34024 			}
34025 		} else {
34026 			zval *value = NULL;
34027 
34028 			/* Consts, temporary variables and references need copying */
34029 			if (IS_UNUSED == IS_CONST) {
34030 				ZVAL_COPY_VALUE(&generator->value, value);
34031 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34032 					Z_ADDREF(generator->value);
34033 				}
34034 			} else if (IS_UNUSED == IS_TMP_VAR) {
34035 				ZVAL_COPY_VALUE(&generator->value, value);
34036             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34037 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34038 
34039 			} else {
34040 				ZVAL_COPY_VALUE(&generator->value, value);
34041 				if (IS_UNUSED == IS_CV) {
34042 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34043 				}
34044 			}
34045 		}
34046 	} else {
34047 		/* If no value was specified yield null */
34048 		ZVAL_NULL(&generator->value);
34049 	}
34050 
34051 	/* Set the new yielded key */
34052 	if (IS_VAR != IS_UNUSED) {
34053 		zend_free_op free_op2;
34054 		zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
34055 
34056 		/* Consts, temporary variables and references need copying */
34057 		if (IS_VAR == IS_CONST) {
34058 			ZVAL_COPY_VALUE(&generator->key, key);
34059 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
34060 				Z_ADDREF(generator->key);
34061 			}
34062 		} else if (IS_VAR == IS_TMP_VAR) {
34063 			ZVAL_COPY_VALUE(&generator->key, key);
34064 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
34065 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
34066 			zval_ptr_dtor_nogc(free_op2);
34067 		} else {
34068 			ZVAL_COPY_VALUE(&generator->key, key);
34069 			if (IS_VAR == IS_CV) {
34070 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
34071 			}
34072 		}
34073 
34074 		if (Z_TYPE(generator->key) == IS_LONG
34075 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
34076 		) {
34077 			generator->largest_used_integer_key = Z_LVAL(generator->key);
34078 		}
34079 	} else {
34080 		/* If no key was specified we use auto-increment keys */
34081 		generator->largest_used_integer_key++;
34082 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
34083 	}
34084 
34085 	if (RETURN_VALUE_USED(opline)) {
34086 		/* If the return value of yield is used set the send
34087 		 * target and initialize it to NULL */
34088 		generator->send_target = EX_VAR(opline->result.var);
34089 		ZVAL_NULL(generator->send_target);
34090 	} else {
34091 		generator->send_target = NULL;
34092 	}
34093 
34094 	/* We increment to the next op, so we are at the correct position when the
34095 	 * generator is resumed. */
34096 	ZEND_VM_INC_OPCODE();
34097 
34098 	/* The GOTO VM uses a local opline variable. We need to set the opline
34099 	 * variable in execute_data so we don't resume at an old position. */
34100 	SAVE_OPLINE();
34101 
34102 	ZEND_VM_RETURN();
34103 }
34104 
ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34105 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34106 {
34107 
34108 	zval *class_name;
34109 	USE_OPLINE
34110 
34111 	SAVE_OPLINE();
34112 	if (IS_UNUSED == IS_UNUSED) {
34113 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
34114 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34115 	} else if (IS_UNUSED == IS_CONST) {
34116 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
34117 
34118 		if (UNEXPECTED(ce == NULL)) {
34119 			class_name = NULL;
34120 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
34121 			CACHE_PTR(opline->extended_value, ce);
34122 		}
34123 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
34124 	} else {
34125 		class_name = NULL;
34126 try_class_name:
34127 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
34128 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
34129 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
34130 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
34131 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
34132 			class_name = Z_REFVAL_P(class_name);
34133 			goto try_class_name;
34134 		} else {
34135 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
34136 				ZVAL_UNDEFINED_OP2();
34137 				if (UNEXPECTED(EG(exception) != NULL)) {
34138 					HANDLE_EXCEPTION();
34139 				}
34140 			}
34141 			zend_throw_error(NULL, "Class name must be a valid object or a string");
34142 		}
34143 	}
34144 
34145 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34146 }
34147 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34148 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34149 {
34150 	USE_OPLINE
34151 	zval *function_name;
34152 	zend_class_entry *ce;
34153 	uint32_t call_info;
34154 	zend_function *fbc;
34155 	zend_execute_data *call;
34156 
34157 	SAVE_OPLINE();
34158 
34159 	if (IS_UNUSED == IS_CONST) {
34160 		/* no function found. try a static method in class */
34161 		ce = CACHED_PTR(opline->result.num);
34162 		if (UNEXPECTED(ce == NULL)) {
34163 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
34164 			if (UNEXPECTED(ce == NULL)) {
34165 				ZEND_ASSERT(EG(exception));
34166 
34167 				HANDLE_EXCEPTION();
34168 			}
34169 			if (IS_UNUSED != IS_CONST) {
34170 				CACHE_PTR(opline->result.num, ce);
34171 			}
34172 		}
34173 	} else if (IS_UNUSED == IS_UNUSED) {
34174 		ce = zend_fetch_class(NULL, opline->op1.num);
34175 		if (UNEXPECTED(ce == NULL)) {
34176 			ZEND_ASSERT(EG(exception));
34177 
34178 			HANDLE_EXCEPTION();
34179 		}
34180 	} else {
34181 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34182 	}
34183 
34184 	if (IS_UNUSED == IS_CONST &&
34185 	    IS_UNUSED == IS_CONST &&
34186 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
34187 		/* nothing to do */
34188 	} else if (IS_UNUSED != IS_CONST &&
34189 	           IS_UNUSED == IS_CONST &&
34190 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
34191 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34192 	} else if (IS_UNUSED != IS_UNUSED) {
34193 
34194 
34195 		function_name = NULL;
34196 		if (IS_UNUSED != IS_CONST) {
34197 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34198 				do {
34199 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
34200 						function_name = Z_REFVAL_P(function_name);
34201 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34202 							break;
34203 						}
34204 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34205 						ZVAL_UNDEFINED_OP2();
34206 						if (UNEXPECTED(EG(exception) != NULL)) {
34207 							HANDLE_EXCEPTION();
34208 						}
34209 					}
34210 					zend_throw_error(NULL, "Function name must be a string");
34211 
34212 					HANDLE_EXCEPTION();
34213 				} while (0);
34214 			}
34215 		}
34216 
34217 		if (ce->get_static_method) {
34218 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
34219 		} else {
34220 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
34221 		}
34222 		if (UNEXPECTED(fbc == NULL)) {
34223 			if (EXPECTED(!EG(exception))) {
34224 				zend_undefined_method(ce, Z_STR_P(function_name));
34225 			}
34226 
34227 			HANDLE_EXCEPTION();
34228 		}
34229 		if (IS_UNUSED == IS_CONST &&
34230 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
34231 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
34232 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
34233 		}
34234 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34235 			init_func_run_time_cache(&fbc->op_array);
34236 		}
34237 		if (IS_UNUSED != IS_CONST) {
34238 
34239 		}
34240 	} else {
34241 		if (UNEXPECTED(ce->constructor == NULL)) {
34242 			zend_throw_error(NULL, "Cannot call constructor");
34243 			HANDLE_EXCEPTION();
34244 		}
34245 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
34246 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
34247 			HANDLE_EXCEPTION();
34248 		}
34249 		fbc = ce->constructor;
34250 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34251 			init_func_run_time_cache(&fbc->op_array);
34252 		}
34253 	}
34254 
34255 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
34256 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
34257 			ce = (zend_class_entry*)Z_OBJ(EX(This));
34258 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34259 		} else {
34260 			zend_non_static_method_call(fbc);
34261 			if (UNEXPECTED(EG(exception) != NULL)) {
34262 				HANDLE_EXCEPTION();
34263 			}
34264 			goto check_parent_and_self;
34265 		}
34266 	} else {
34267 check_parent_and_self:
34268 		/* previous opcode is ZEND_FETCH_CLASS */
34269 		if (IS_UNUSED == IS_UNUSED
34270 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
34271 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
34272 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
34273 				ce = Z_OBJCE(EX(This));
34274 			} else {
34275 				ce = Z_CE(EX(This));
34276 			}
34277 		}
34278 		call_info = ZEND_CALL_NESTED_FUNCTION;
34279 	}
34280 
34281 	call = zend_vm_stack_push_call_frame(call_info,
34282 		fbc, opline->extended_value, ce);
34283 	call->prev_execute_data = EX(call);
34284 	EX(call) = call;
34285 
34286 	ZEND_VM_NEXT_OPCODE();
34287 }
34288 
ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34290 {
34291 	USE_OPLINE
34292 
34293 	SAVE_OPLINE();
34294 	if (IS_UNUSED == IS_UNUSED) {
34295 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
34296 	} else {
34297 /* prevents "undefined variable opline" errors */
34298 #if 0 || (IS_UNUSED != IS_UNUSED)
34299 		zval *retval_ref, *retval_ptr;
34300 
34301 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
34302 
34303 		retval_ref = retval_ptr = NULL;
34304 
34305 		if (IS_UNUSED == IS_CONST) {
34306 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
34307 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
34308 		} else if (IS_UNUSED == IS_VAR) {
34309 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
34310 				retval_ptr = Z_INDIRECT_P(retval_ptr);
34311 			}
34312 			ZVAL_DEREF(retval_ptr);
34313 		} else if (IS_UNUSED == IS_CV) {
34314 			ZVAL_DEREF(retval_ptr);
34315 		}
34316 
34317 		if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
34318 			&& ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
34319 			&& ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
34320 			&& !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
34321 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
34322 			&& retval_ref != retval_ptr)
34323 		) {
34324 			/* A cast might happen - unwrap the reference if this is a by-value return */
34325 			if (Z_REFCOUNT_P(retval_ref) == 1) {
34326 				ZVAL_UNREF(retval_ref);
34327 			} else {
34328 				Z_DELREF_P(retval_ref);
34329 				ZVAL_COPY(retval_ref, retval_ptr);
34330 			}
34331 			retval_ptr = retval_ref;
34332 		}
34333 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
34334 #endif
34335 	}
34336 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34337 }
34338 
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34339 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34340 {
34341 	USE_OPLINE
34342 	zval *result;
34343 	zend_function *constructor;
34344 	zend_class_entry *ce;
34345 	zend_execute_data *call;
34346 
34347 	SAVE_OPLINE();
34348 	if (IS_UNUSED == IS_CONST) {
34349 		ce = CACHED_PTR(opline->op2.num);
34350 		if (UNEXPECTED(ce == NULL)) {
34351 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
34352 			if (UNEXPECTED(ce == NULL)) {
34353 				ZEND_ASSERT(EG(exception));
34354 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34355 				HANDLE_EXCEPTION();
34356 			}
34357 			CACHE_PTR(opline->op2.num, ce);
34358 		}
34359 	} else if (IS_UNUSED == IS_UNUSED) {
34360 		ce = zend_fetch_class(NULL, opline->op1.num);
34361 		if (UNEXPECTED(ce == NULL)) {
34362 			ZEND_ASSERT(EG(exception));
34363 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34364 			HANDLE_EXCEPTION();
34365 		}
34366 	} else {
34367 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34368 	}
34369 
34370 	result = EX_VAR(opline->result.var);
34371 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
34372 		ZVAL_UNDEF(result);
34373 		HANDLE_EXCEPTION();
34374 	}
34375 
34376 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
34377 	if (constructor == NULL) {
34378 		if (UNEXPECTED(EG(exception))) {
34379 			HANDLE_EXCEPTION();
34380 		}
34381 
34382 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
34383 		 * opcode is DO_FCALL in case EXT instructions are used. */
34384 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
34385 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
34386 		}
34387 
34388 		/* Perform a dummy function call */
34389 		call = zend_vm_stack_push_call_frame(
34390 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
34391 			opline->extended_value, NULL);
34392 	} else {
34393 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
34394 			init_func_run_time_cache(&constructor->op_array);
34395 		}
34396 		/* We are not handling overloaded classes right now */
34397 		call = zend_vm_stack_push_call_frame(
34398 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
34399 			constructor,
34400 			opline->extended_value,
34401 			Z_OBJ_P(result));
34402 		Z_ADDREF_P(result);
34403 	}
34404 
34405 	call->prev_execute_data = EX(call);
34406 	EX(call) = call;
34407 	ZEND_VM_NEXT_OPCODE();
34408 }
34409 
ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34410 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34411 {
34412 	zval *array;
34413 	uint32_t size;
34414 	USE_OPLINE
34415 
34416 	array = EX_VAR(opline->result.var);
34417 	if (IS_UNUSED != IS_UNUSED) {
34418 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
34419 		ZVAL_ARR(array, zend_new_array(size));
34420 		/* Explicitly initialize array as not-packed if flag is set */
34421 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
34422 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
34423 		}
34424 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34425 	} else {
34426 		ZVAL_ARR(array, zend_new_array(0));
34427 		ZEND_VM_NEXT_OPCODE();
34428 	}
34429 }
34430 
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34432 {
34433 	USE_OPLINE
34434 
34435 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
34436 
34437 	SAVE_OPLINE();
34438 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
34439 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34440 	}
34441 
34442 	/* Destroy the previously yielded value */
34443 	zval_ptr_dtor(&generator->value);
34444 
34445 	/* Destroy the previously yielded key */
34446 	zval_ptr_dtor(&generator->key);
34447 
34448 	/* Set the new yielded value */
34449 	if (IS_UNUSED != IS_UNUSED) {
34450 
34451 
34452 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
34453 			/* Constants and temporary variables aren't yieldable by reference,
34454 			 * but we still allow them with a notice. */
34455 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
34456 				zval *value;
34457 
34458 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34459 
34460 				value = NULL;
34461 				ZVAL_COPY_VALUE(&generator->value, value);
34462 				if (IS_UNUSED == IS_CONST) {
34463 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34464 						Z_ADDREF(generator->value);
34465 					}
34466 				}
34467 			} else {
34468 				zval *value_ptr = NULL;
34469 
34470 				/* If a function call result is yielded and the function did
34471 				 * not return by reference we throw a notice. */
34472 				do {
34473 					if (IS_UNUSED == IS_VAR) {
34474 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
34475 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
34476 						 && !Z_ISREF_P(value_ptr)) {
34477 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34478 							ZVAL_COPY(&generator->value, value_ptr);
34479 							break;
34480 						}
34481 					}
34482 					if (Z_ISREF_P(value_ptr)) {
34483 						Z_ADDREF_P(value_ptr);
34484 					} else {
34485 						ZVAL_MAKE_REF_EX(value_ptr, 2);
34486 					}
34487 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
34488 				} while (0);
34489 
34490 			}
34491 		} else {
34492 			zval *value = NULL;
34493 
34494 			/* Consts, temporary variables and references need copying */
34495 			if (IS_UNUSED == IS_CONST) {
34496 				ZVAL_COPY_VALUE(&generator->value, value);
34497 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34498 					Z_ADDREF(generator->value);
34499 				}
34500 			} else if (IS_UNUSED == IS_TMP_VAR) {
34501 				ZVAL_COPY_VALUE(&generator->value, value);
34502             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34503 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34504 
34505 			} else {
34506 				ZVAL_COPY_VALUE(&generator->value, value);
34507 				if (IS_UNUSED == IS_CV) {
34508 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34509 				}
34510 			}
34511 		}
34512 	} else {
34513 		/* If no value was specified yield null */
34514 		ZVAL_NULL(&generator->value);
34515 	}
34516 
34517 	/* Set the new yielded key */
34518 	if (IS_UNUSED != IS_UNUSED) {
34519 
34520 		zval *key = NULL;
34521 
34522 		/* Consts, temporary variables and references need copying */
34523 		if (IS_UNUSED == IS_CONST) {
34524 			ZVAL_COPY_VALUE(&generator->key, key);
34525 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
34526 				Z_ADDREF(generator->key);
34527 			}
34528 		} else if (IS_UNUSED == IS_TMP_VAR) {
34529 			ZVAL_COPY_VALUE(&generator->key, key);
34530 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
34531 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
34532 
34533 		} else {
34534 			ZVAL_COPY_VALUE(&generator->key, key);
34535 			if (IS_UNUSED == IS_CV) {
34536 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
34537 			}
34538 		}
34539 
34540 		if (Z_TYPE(generator->key) == IS_LONG
34541 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
34542 		) {
34543 			generator->largest_used_integer_key = Z_LVAL(generator->key);
34544 		}
34545 	} else {
34546 		/* If no key was specified we use auto-increment keys */
34547 		generator->largest_used_integer_key++;
34548 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
34549 	}
34550 
34551 	if (RETURN_VALUE_USED(opline)) {
34552 		/* If the return value of yield is used set the send
34553 		 * target and initialize it to NULL */
34554 		generator->send_target = EX_VAR(opline->result.var);
34555 		ZVAL_NULL(generator->send_target);
34556 	} else {
34557 		generator->send_target = NULL;
34558 	}
34559 
34560 	/* We increment to the next op, so we are at the correct position when the
34561 	 * generator is resumed. */
34562 	ZEND_VM_INC_OPCODE();
34563 
34564 	/* The GOTO VM uses a local opline variable. We need to set the opline
34565 	 * variable in execute_data so we don't resume at an old position. */
34566 	SAVE_OPLINE();
34567 
34568 	ZEND_VM_RETURN();
34569 }
34570 
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34572 {
34573 	USE_OPLINE
34574 
34575 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
34576 		zval *result = EX_VAR(opline->result.var);
34577 
34578 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
34579 		Z_ADDREF_P(result);
34580 		ZEND_VM_NEXT_OPCODE();
34581 	} else {
34582 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34583 	}
34584 }
34585 
ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34586 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34587 {
34588 	USE_OPLINE
34589 
34590 	ZVAL_BOOL(EX_VAR(opline->result.var),
34591 		(opline->extended_value & ZEND_ISEMPTY) ^
34592 		 (Z_TYPE(EX(This)) == IS_OBJECT));
34593 	ZEND_VM_NEXT_OPCODE();
34594 }
34595 
ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34597 {
34598 	USE_OPLINE
34599 
34600 	if (IS_UNUSED == IS_UNUSED) {
34601 		if (UNEXPECTED(!EX(func)->common.scope)) {
34602 			SAVE_OPLINE();
34603 			zend_error(E_WARNING, "get_class() called without object from outside a class");
34604 			ZVAL_FALSE(EX_VAR(opline->result.var));
34605 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34606 		} else {
34607 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
34608 			ZEND_VM_NEXT_OPCODE();
34609 		}
34610 	} else {
34611 
34612 		zval *op1;
34613 
34614 		SAVE_OPLINE();
34615 		op1 = NULL;
34616 		while (1) {
34617 			if (Z_TYPE_P(op1) == IS_OBJECT) {
34618 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
34619 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
34620 				op1 = Z_REFVAL_P(op1);
34621 				continue;
34622 			} else {
34623 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
34624 					ZVAL_UNDEFINED_OP1();
34625 				}
34626 				zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
34627 				ZVAL_FALSE(EX_VAR(opline->result.var));
34628 			}
34629 			break;
34630 		}
34631 
34632 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34633 	}
34634 }
34635 
ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34637 {
34638 	USE_OPLINE
34639 
34640 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
34641 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
34642 	} else if (Z_CE(EX(This))) {
34643 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
34644 	} else {
34645 		ZVAL_FALSE(EX_VAR(opline->result.var));
34646 		if (UNEXPECTED(!EX(func)->common.scope)) {
34647 			SAVE_OPLINE();
34648 			zend_error(E_WARNING, "get_called_class() called from outside a class");
34649 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34650 		}
34651 	}
34652 	ZEND_VM_NEXT_OPCODE();
34653 }
34654 
ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34655 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34656 {
34657 	USE_OPLINE
34658 
34659 	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
34660 	ZEND_VM_NEXT_OPCODE();
34661 }
34662 
ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34664 {
34665 	USE_OPLINE
34666 	zend_array *ht;
34667 	uint32_t arg_count, result_size, skip;
34668 
34669 	arg_count = EX_NUM_ARGS();
34670 	if (IS_UNUSED == IS_CONST) {
34671 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
34672 		if (arg_count < skip) {
34673 			result_size = 0;
34674 		} else {
34675 			result_size = arg_count - skip;
34676 		}
34677 	} else {
34678 		skip = 0;
34679 		result_size = arg_count;
34680 	}
34681 
34682 	if (result_size) {
34683 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
34684 
34685 		ht = zend_new_array(result_size);
34686 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
34687 		zend_hash_real_init_packed(ht);
34688 		ZEND_HASH_FILL_PACKED(ht) {
34689 			zval *p, *q;
34690 			uint32_t i = skip;
34691 			p = EX_VAR_NUM(i);
34692 			if (arg_count > first_extra_arg) {
34693 				while (i < first_extra_arg) {
34694 					q = p;
34695 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
34696 						ZVAL_DEREF(q);
34697 						if (Z_OPT_REFCOUNTED_P(q)) {
34698 							Z_ADDREF_P(q);
34699 						}
34700 						ZEND_HASH_FILL_SET(q);
34701 					} else {
34702 						ZEND_HASH_FILL_SET_NULL();
34703 					}
34704 					ZEND_HASH_FILL_NEXT();
34705 					p++;
34706 					i++;
34707 				}
34708 				if (skip < first_extra_arg) {
34709 					skip = 0;
34710 				} else {
34711 					skip -= first_extra_arg;
34712 				}
34713 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
34714 			}
34715 			while (i < arg_count) {
34716 				q = p;
34717 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
34718 					ZVAL_DEREF(q);
34719 					if (Z_OPT_REFCOUNTED_P(q)) {
34720 						Z_ADDREF_P(q);
34721 					}
34722 					ZEND_HASH_FILL_SET(q);
34723 				} else {
34724 					ZEND_HASH_FILL_SET_NULL();
34725 				}
34726 				ZEND_HASH_FILL_NEXT();
34727 				p++;
34728 				i++;
34729 			}
34730 		} ZEND_HASH_FILL_END();
34731 		ht->nNumOfElements = result_size;
34732 	} else {
34733 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
34734 	}
34735 	ZEND_VM_NEXT_OPCODE();
34736 }
34737 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34738 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34739 {
34740 	USE_OPLINE
34741 	zend_free_op free_op_data;
34742 	zval *object;
34743 	zval *property;
34744 	zval *value;
34745 	zval *zptr;
34746 	void **cache_slot;
34747 	zend_property_info *prop_info;
34748 
34749 	SAVE_OPLINE();
34750 	object = &EX(This);
34751 
34752 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34753 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34754 	}
34755 
34756 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
34757 
34758 	do {
34759 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
34760 
34761 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34762 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34763 				object = Z_REFVAL_P(object);
34764 				goto assign_op_object;
34765 			}
34766 			if (IS_UNUSED == IS_CV
34767 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34768 				ZVAL_UNDEFINED_OP1();
34769 			}
34770 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
34771 			if (UNEXPECTED(!object)) {
34772 				break;
34773 			}
34774 		}
34775 
34776 assign_op_object:
34777 		/* here we are sure we are dealing with an object */
34778 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
34779 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
34780 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34781 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34782 					ZVAL_NULL(EX_VAR(opline->result.var));
34783 				}
34784 			} else {
34785 				zval *orig_zptr = zptr;
34786 				zend_reference *ref;
34787 
34788 				do {
34789 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
34790 						ref = Z_REF_P(zptr);
34791 						zptr = Z_REFVAL_P(zptr);
34792 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
34793 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
34794 							break;
34795 						}
34796 					}
34797 
34798 					if (IS_CV == IS_CONST) {
34799 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
34800 					} else {
34801 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
34802 					}
34803 					if (UNEXPECTED(prop_info)) {
34804 						/* special case for typed properties */
34805 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
34806 					} else {
34807 						zend_binary_op(zptr, zptr, value OPLINE_CC);
34808 					}
34809 				} while (0);
34810 
34811 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34812 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
34813 				}
34814 			}
34815 		} else {
34816 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
34817 		}
34818 	} while (0);
34819 
34820 	FREE_OP(free_op_data);
34821 
34822 
34823 	/* assign_obj has two opcodes! */
34824 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34825 }
34826 
34827 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34829 {
34830 	USE_OPLINE
34831 
34832 	zval *object;
34833 	zval *property;
34834 	zval *zptr;
34835 	void **cache_slot;
34836 	zend_property_info *prop_info;
34837 
34838 	SAVE_OPLINE();
34839 	object = &EX(This);
34840 
34841 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34842 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34843 	}
34844 
34845 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
34846 
34847 	do {
34848 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34849 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34850 				object = Z_REFVAL_P(object);
34851 				goto pre_incdec_object;
34852 			}
34853 			if (IS_UNUSED == IS_CV
34854 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34855 				ZVAL_UNDEFINED_OP1();
34856 			}
34857 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
34858 			if (UNEXPECTED(!object)) {
34859 				break;
34860 			}
34861 		}
34862 
34863 pre_incdec_object:
34864 		/* here we are sure we are dealing with an object */
34865 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
34866 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
34867 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34868 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34869 					ZVAL_NULL(EX_VAR(opline->result.var));
34870 				}
34871 			} else {
34872 				if (IS_CV == IS_CONST) {
34873 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
34874 				} else {
34875 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
34876 				}
34877 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
34878 			}
34879 		} else {
34880 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
34881 		}
34882 	} while (0);
34883 
34884 
34885 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34886 }
34887 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34888 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34889 {
34890 	USE_OPLINE
34891 
34892 	zval *object;
34893 	zval *property;
34894 	zval *zptr;
34895 	void **cache_slot;
34896 	zend_property_info *prop_info;
34897 
34898 	SAVE_OPLINE();
34899 	object = &EX(This);
34900 
34901 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34902 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34903 	}
34904 
34905 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
34906 
34907 	do {
34908 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34909 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34910 				object = Z_REFVAL_P(object);
34911 				goto post_incdec_object;
34912 			}
34913 			if (IS_UNUSED == IS_CV
34914 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34915 				ZVAL_UNDEFINED_OP1();
34916 			}
34917 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
34918 			if (UNEXPECTED(!object)) {
34919 				break;
34920 			}
34921 		}
34922 
34923 post_incdec_object:
34924 		/* here we are sure we are dealing with an object */
34925 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
34926 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
34927 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34928 				ZVAL_NULL(EX_VAR(opline->result.var));
34929 			} else {
34930 				if (IS_CV == IS_CONST) {
34931 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
34932 				} else {
34933 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
34934 				}
34935 
34936 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
34937 			}
34938 		} else {
34939 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
34940 		}
34941 	} while (0);
34942 
34943 
34944 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34945 }
34946 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34947 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34948 {
34949 	USE_OPLINE
34950 
34951 	zval *container;
34952 
34953 	zval *offset;
34954 	void **cache_slot = NULL;
34955 
34956 	SAVE_OPLINE();
34957 	container = &EX(This);
34958 
34959 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34960 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34961 	}
34962 
34963 	offset = EX_VAR(opline->op2.var);
34964 
34965 	if (IS_UNUSED == IS_CONST ||
34966 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34967 	    do {
34968 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34969 				container = Z_REFVAL_P(container);
34970 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
34971 					break;
34972 				}
34973 			}
34974 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34975 				ZVAL_UNDEFINED_OP1();
34976 			}
34977 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
34978 				ZVAL_UNDEFINED_OP2();
34979 			}
34980 			zend_wrong_property_read(offset);
34981 			ZVAL_NULL(EX_VAR(opline->result.var));
34982 			goto fetch_obj_r_finish;
34983 		} while (0);
34984 	}
34985 
34986 	/* here we are sure we are dealing with an object */
34987 	do {
34988 		zend_object *zobj = Z_OBJ_P(container);
34989 		zval *retval;
34990 
34991 		if (IS_CV == IS_CONST) {
34992 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
34993 
34994 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
34995 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
34996 
34997 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
34998 					retval = OBJ_PROP(zobj, prop_offset);
34999 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
35000 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35001 							goto fetch_obj_r_copy;
35002 						} else {
35003 fetch_obj_r_fast_copy:
35004 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35005 							ZEND_VM_NEXT_OPCODE();
35006 						}
35007 					}
35008 				} else if (EXPECTED(zobj->properties != NULL)) {
35009 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35010 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35011 
35012 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35013 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35014 
35015 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
35016 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
35017 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
35018 						          EXPECTED(p->key != NULL) &&
35019 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
35020 								retval = &p->val;
35021 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35022 									goto fetch_obj_r_copy;
35023 								} else {
35024 									goto fetch_obj_r_fast_copy;
35025 								}
35026 							}
35027 						}
35028 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35029 					}
35030 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
35031 					if (EXPECTED(retval)) {
35032 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35033 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35034 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35035 							goto fetch_obj_r_copy;
35036 						} else {
35037 							goto fetch_obj_r_fast_copy;
35038 						}
35039 					}
35040 				}
35041 			}
35042 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
35043 			ZVAL_UNDEFINED_OP2();
35044 		}
35045 
35046 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
35047 
35048 		if (retval != EX_VAR(opline->result.var)) {
35049 fetch_obj_r_copy:
35050 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35051 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35052 			zend_unwrap_reference(retval);
35053 		}
35054 	} while (0);
35055 
35056 fetch_obj_r_finish:
35057 
35058 
35059 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35060 }
35061 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35062 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35063 {
35064 	USE_OPLINE
35065 	zend_free_op free_op1;
35066 	zval *property, *container, *result;
35067 
35068 	SAVE_OPLINE();
35069 
35070 	container = &EX(This);
35071 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35072 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35073 	}
35074 
35075 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35076 	result = EX_VAR(opline->result.var);
35077 	zend_fetch_property_address(
35078 		result, container, IS_UNUSED, property, IS_CV,
35079 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
35080 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
35081 
35082 	if (IS_UNUSED == IS_VAR) {
35083 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
35084 	}
35085 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35086 }
35087 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35088 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35089 {
35090 	USE_OPLINE
35091 	zend_free_op free_op1;
35092 	zval *property, *container, *result;
35093 
35094 	SAVE_OPLINE();
35095 	container = &EX(This);
35096 
35097 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35098 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35099 	}
35100 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35101 	result = EX_VAR(opline->result.var);
35102 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
35103 
35104 	if (IS_UNUSED == IS_VAR) {
35105 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
35106 	}
35107 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35108 }
35109 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35110 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35111 {
35112 	USE_OPLINE
35113 
35114 	zval *container;
35115 
35116 	zval *offset;
35117 	void **cache_slot = NULL;
35118 
35119 	SAVE_OPLINE();
35120 	container = &EX(This);
35121 
35122 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35123 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35124 	}
35125 
35126 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35127 
35128 	if (IS_UNUSED == IS_CONST ||
35129 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35130 		do {
35131 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35132 				container = Z_REFVAL_P(container);
35133 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
35134 					break;
35135 				}
35136 			}
35137 			ZVAL_NULL(EX_VAR(opline->result.var));
35138 			goto fetch_obj_is_finish;
35139 		} while (0);
35140 	}
35141 
35142 	/* here we are sure we are dealing with an object */
35143 	do {
35144 		zend_object *zobj = Z_OBJ_P(container);
35145 		zval *retval;
35146 
35147 		if (IS_CV == IS_CONST) {
35148 			cache_slot = CACHE_ADDR(opline->extended_value);
35149 
35150 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
35151 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35152 
35153 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35154 					retval = OBJ_PROP(zobj, prop_offset);
35155 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
35156 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35157 							goto fetch_obj_is_copy;
35158 						} else {
35159 fetch_obj_is_fast_copy:
35160 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35161 							ZEND_VM_NEXT_OPCODE();
35162 						}
35163 					}
35164 				} else if (EXPECTED(zobj->properties != NULL)) {
35165 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35166 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35167 
35168 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35169 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35170 
35171 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
35172 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
35173 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
35174 						          EXPECTED(p->key != NULL) &&
35175 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
35176 								retval = &p->val;
35177 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35178 									goto fetch_obj_is_copy;
35179 								} else {
35180 									goto fetch_obj_is_fast_copy;
35181 								}
35182 							}
35183 						}
35184 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35185 					}
35186 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
35187 					if (EXPECTED(retval)) {
35188 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35189 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35190 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35191 							goto fetch_obj_is_copy;
35192 						} else {
35193 							goto fetch_obj_is_fast_copy;
35194 						}
35195 					}
35196 				}
35197 			}
35198 		}
35199 
35200 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
35201 
35202 		if (retval != EX_VAR(opline->result.var)) {
35203 fetch_obj_is_copy:
35204 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35205 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35206 			zend_unwrap_reference(retval);
35207 		}
35208 	} while (0);
35209 
35210 fetch_obj_is_finish:
35211 
35212 
35213 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35214 }
35215 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35216 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35217 {
35218 #if 0
35219 	USE_OPLINE
35220 #endif
35221 
35222 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
35223 		/* Behave like FETCH_OBJ_W */
35224 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
35225 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35226 		}
35227 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35228 	} else {
35229 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35230 	}
35231 }
35232 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35234 {
35235 	USE_OPLINE
35236 	zend_free_op free_op1;
35237 	zval *container, *property, *result;
35238 
35239 	SAVE_OPLINE();
35240 	container = &EX(This);
35241 
35242 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35243 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35244 	}
35245 
35246 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35247 	result = EX_VAR(opline->result.var);
35248 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
35249 
35250 	if (IS_UNUSED == IS_VAR) {
35251 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
35252 	}
35253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35254 }
35255 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35257 {
35258 	USE_OPLINE
35259 
35260 	zval *object, *property, *value, tmp;
35261 
35262 	SAVE_OPLINE();
35263 	object = &EX(This);
35264 
35265 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35266 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35267 	}
35268 
35269 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35270 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
35271 
35272 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35273 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35274 			object = Z_REFVAL_P(object);
35275 			goto assign_object;
35276 		}
35277 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
35278 		if (UNEXPECTED(!object)) {
35279 			value = &EG(uninitialized_zval);
35280 			goto free_and_exit_assign_obj;
35281 		}
35282 	}
35283 
35284 assign_object:
35285 	if (IS_CV == IS_CONST &&
35286 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
35287 		void **cache_slot = CACHE_ADDR(opline->extended_value);
35288 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35289 		zend_object *zobj = Z_OBJ_P(object);
35290 		zval *property_val;
35291 
35292 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35293 			property_val = OBJ_PROP(zobj, prop_offset);
35294 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
35295 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35296 
35297 				if (UNEXPECTED(prop_info != NULL)) {
35298 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
35299 					goto free_and_exit_assign_obj;
35300 				} else {
35301 fast_assign_obj:
35302 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
35303 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35304 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35305 					}
35306 					goto exit_assign_obj;
35307 				}
35308 			}
35309 		} else {
35310 			if (EXPECTED(zobj->properties != NULL)) {
35311 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35312 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35313 						GC_DELREF(zobj->properties);
35314 					}
35315 					zobj->properties = zend_array_dup(zobj->properties);
35316 				}
35317 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
35318 				if (property_val) {
35319 					goto fast_assign_obj;
35320 				}
35321 			}
35322 
35323 			if (!zobj->ce->__set) {
35324 
35325 				if (EXPECTED(zobj->properties == NULL)) {
35326 					rebuild_object_properties(zobj);
35327 				}
35328 				if (IS_CONST == IS_CONST) {
35329 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35330 						Z_ADDREF_P(value);
35331 					}
35332 				} else if (IS_CONST != IS_TMP_VAR) {
35333 					if (Z_ISREF_P(value)) {
35334 						if (IS_CONST == IS_VAR) {
35335 							zend_reference *ref = Z_REF_P(value);
35336 							if (GC_DELREF(ref) == 0) {
35337 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35338 								efree_size(ref, sizeof(zend_reference));
35339 								value = &tmp;
35340 							} else {
35341 								value = Z_REFVAL_P(value);
35342 								Z_TRY_ADDREF_P(value);
35343 							}
35344 						} else {
35345 							value = Z_REFVAL_P(value);
35346 							Z_TRY_ADDREF_P(value);
35347 						}
35348 					} else if (IS_CONST == IS_CV) {
35349 						Z_TRY_ADDREF_P(value);
35350 					}
35351 				}
35352 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
35353 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35354 					ZVAL_COPY(EX_VAR(opline->result.var), value);
35355 				}
35356 				goto exit_assign_obj;
35357 			}
35358 		}
35359 	}
35360 
35361 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
35362 		ZVAL_DEREF(value);
35363 	}
35364 
35365 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35366 
35367 free_and_exit_assign_obj:
35368 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35369 		ZVAL_COPY(EX_VAR(opline->result.var), value);
35370 	}
35371 
35372 exit_assign_obj:
35373 
35374 
35375 	/* assign_obj has two opcodes! */
35376 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35377 }
35378 
35379 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35380 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35381 {
35382 	USE_OPLINE
35383 	zend_free_op free_op_data;
35384 	zval *object, *property, *value, tmp;
35385 
35386 	SAVE_OPLINE();
35387 	object = &EX(This);
35388 
35389 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35390 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35391 	}
35392 
35393 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35394 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
35395 
35396 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35397 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35398 			object = Z_REFVAL_P(object);
35399 			goto assign_object;
35400 		}
35401 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
35402 		if (UNEXPECTED(!object)) {
35403 			value = &EG(uninitialized_zval);
35404 			goto free_and_exit_assign_obj;
35405 		}
35406 	}
35407 
35408 assign_object:
35409 	if (IS_CV == IS_CONST &&
35410 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
35411 		void **cache_slot = CACHE_ADDR(opline->extended_value);
35412 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35413 		zend_object *zobj = Z_OBJ_P(object);
35414 		zval *property_val;
35415 
35416 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35417 			property_val = OBJ_PROP(zobj, prop_offset);
35418 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
35419 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35420 
35421 				if (UNEXPECTED(prop_info != NULL)) {
35422 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
35423 					goto free_and_exit_assign_obj;
35424 				} else {
35425 fast_assign_obj:
35426 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
35427 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35428 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35429 					}
35430 					goto exit_assign_obj;
35431 				}
35432 			}
35433 		} else {
35434 			if (EXPECTED(zobj->properties != NULL)) {
35435 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35436 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35437 						GC_DELREF(zobj->properties);
35438 					}
35439 					zobj->properties = zend_array_dup(zobj->properties);
35440 				}
35441 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
35442 				if (property_val) {
35443 					goto fast_assign_obj;
35444 				}
35445 			}
35446 
35447 			if (!zobj->ce->__set) {
35448 
35449 				if (EXPECTED(zobj->properties == NULL)) {
35450 					rebuild_object_properties(zobj);
35451 				}
35452 				if (IS_TMP_VAR == IS_CONST) {
35453 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35454 						Z_ADDREF_P(value);
35455 					}
35456 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
35457 					if (Z_ISREF_P(value)) {
35458 						if (IS_TMP_VAR == IS_VAR) {
35459 							zend_reference *ref = Z_REF_P(value);
35460 							if (GC_DELREF(ref) == 0) {
35461 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35462 								efree_size(ref, sizeof(zend_reference));
35463 								value = &tmp;
35464 							} else {
35465 								value = Z_REFVAL_P(value);
35466 								Z_TRY_ADDREF_P(value);
35467 							}
35468 						} else {
35469 							value = Z_REFVAL_P(value);
35470 							Z_TRY_ADDREF_P(value);
35471 						}
35472 					} else if (IS_TMP_VAR == IS_CV) {
35473 						Z_TRY_ADDREF_P(value);
35474 					}
35475 				}
35476 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
35477 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35478 					ZVAL_COPY(EX_VAR(opline->result.var), value);
35479 				}
35480 				goto exit_assign_obj;
35481 			}
35482 		}
35483 	}
35484 
35485 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
35486 		ZVAL_DEREF(value);
35487 	}
35488 
35489 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35490 
35491 free_and_exit_assign_obj:
35492 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35493 		ZVAL_COPY(EX_VAR(opline->result.var), value);
35494 	}
35495 	zval_ptr_dtor_nogc(free_op_data);
35496 exit_assign_obj:
35497 
35498 
35499 	/* assign_obj has two opcodes! */
35500 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35501 }
35502 
35503 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35505 {
35506 	USE_OPLINE
35507 	zend_free_op free_op_data;
35508 	zval *object, *property, *value, tmp;
35509 
35510 	SAVE_OPLINE();
35511 	object = &EX(This);
35512 
35513 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35514 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35515 	}
35516 
35517 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35518 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
35519 
35520 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35521 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35522 			object = Z_REFVAL_P(object);
35523 			goto assign_object;
35524 		}
35525 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
35526 		if (UNEXPECTED(!object)) {
35527 			value = &EG(uninitialized_zval);
35528 			goto free_and_exit_assign_obj;
35529 		}
35530 	}
35531 
35532 assign_object:
35533 	if (IS_CV == IS_CONST &&
35534 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
35535 		void **cache_slot = CACHE_ADDR(opline->extended_value);
35536 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35537 		zend_object *zobj = Z_OBJ_P(object);
35538 		zval *property_val;
35539 
35540 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35541 			property_val = OBJ_PROP(zobj, prop_offset);
35542 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
35543 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35544 
35545 				if (UNEXPECTED(prop_info != NULL)) {
35546 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
35547 					goto free_and_exit_assign_obj;
35548 				} else {
35549 fast_assign_obj:
35550 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
35551 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35552 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35553 					}
35554 					goto exit_assign_obj;
35555 				}
35556 			}
35557 		} else {
35558 			if (EXPECTED(zobj->properties != NULL)) {
35559 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35560 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35561 						GC_DELREF(zobj->properties);
35562 					}
35563 					zobj->properties = zend_array_dup(zobj->properties);
35564 				}
35565 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
35566 				if (property_val) {
35567 					goto fast_assign_obj;
35568 				}
35569 			}
35570 
35571 			if (!zobj->ce->__set) {
35572 
35573 				if (EXPECTED(zobj->properties == NULL)) {
35574 					rebuild_object_properties(zobj);
35575 				}
35576 				if (IS_VAR == IS_CONST) {
35577 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35578 						Z_ADDREF_P(value);
35579 					}
35580 				} else if (IS_VAR != IS_TMP_VAR) {
35581 					if (Z_ISREF_P(value)) {
35582 						if (IS_VAR == IS_VAR) {
35583 							zend_reference *ref = Z_REF_P(value);
35584 							if (GC_DELREF(ref) == 0) {
35585 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35586 								efree_size(ref, sizeof(zend_reference));
35587 								value = &tmp;
35588 							} else {
35589 								value = Z_REFVAL_P(value);
35590 								Z_TRY_ADDREF_P(value);
35591 							}
35592 						} else {
35593 							value = Z_REFVAL_P(value);
35594 							Z_TRY_ADDREF_P(value);
35595 						}
35596 					} else if (IS_VAR == IS_CV) {
35597 						Z_TRY_ADDREF_P(value);
35598 					}
35599 				}
35600 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
35601 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35602 					ZVAL_COPY(EX_VAR(opline->result.var), value);
35603 				}
35604 				goto exit_assign_obj;
35605 			}
35606 		}
35607 	}
35608 
35609 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
35610 		ZVAL_DEREF(value);
35611 	}
35612 
35613 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35614 
35615 free_and_exit_assign_obj:
35616 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35617 		ZVAL_COPY(EX_VAR(opline->result.var), value);
35618 	}
35619 	zval_ptr_dtor_nogc(free_op_data);
35620 exit_assign_obj:
35621 
35622 
35623 	/* assign_obj has two opcodes! */
35624 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35625 }
35626 
35627 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35628 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35629 {
35630 	USE_OPLINE
35631 
35632 	zval *object, *property, *value, tmp;
35633 
35634 	SAVE_OPLINE();
35635 	object = &EX(This);
35636 
35637 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35638 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35639 	}
35640 
35641 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35642 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
35643 
35644 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35645 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35646 			object = Z_REFVAL_P(object);
35647 			goto assign_object;
35648 		}
35649 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
35650 		if (UNEXPECTED(!object)) {
35651 			value = &EG(uninitialized_zval);
35652 			goto free_and_exit_assign_obj;
35653 		}
35654 	}
35655 
35656 assign_object:
35657 	if (IS_CV == IS_CONST &&
35658 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
35659 		void **cache_slot = CACHE_ADDR(opline->extended_value);
35660 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35661 		zend_object *zobj = Z_OBJ_P(object);
35662 		zval *property_val;
35663 
35664 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35665 			property_val = OBJ_PROP(zobj, prop_offset);
35666 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
35667 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35668 
35669 				if (UNEXPECTED(prop_info != NULL)) {
35670 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
35671 					goto free_and_exit_assign_obj;
35672 				} else {
35673 fast_assign_obj:
35674 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
35675 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35676 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35677 					}
35678 					goto exit_assign_obj;
35679 				}
35680 			}
35681 		} else {
35682 			if (EXPECTED(zobj->properties != NULL)) {
35683 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35684 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35685 						GC_DELREF(zobj->properties);
35686 					}
35687 					zobj->properties = zend_array_dup(zobj->properties);
35688 				}
35689 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
35690 				if (property_val) {
35691 					goto fast_assign_obj;
35692 				}
35693 			}
35694 
35695 			if (!zobj->ce->__set) {
35696 
35697 				if (EXPECTED(zobj->properties == NULL)) {
35698 					rebuild_object_properties(zobj);
35699 				}
35700 				if (IS_CV == IS_CONST) {
35701 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35702 						Z_ADDREF_P(value);
35703 					}
35704 				} else if (IS_CV != IS_TMP_VAR) {
35705 					if (Z_ISREF_P(value)) {
35706 						if (IS_CV == IS_VAR) {
35707 							zend_reference *ref = Z_REF_P(value);
35708 							if (GC_DELREF(ref) == 0) {
35709 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35710 								efree_size(ref, sizeof(zend_reference));
35711 								value = &tmp;
35712 							} else {
35713 								value = Z_REFVAL_P(value);
35714 								Z_TRY_ADDREF_P(value);
35715 							}
35716 						} else {
35717 							value = Z_REFVAL_P(value);
35718 							Z_TRY_ADDREF_P(value);
35719 						}
35720 					} else if (IS_CV == IS_CV) {
35721 						Z_TRY_ADDREF_P(value);
35722 					}
35723 				}
35724 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
35725 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35726 					ZVAL_COPY(EX_VAR(opline->result.var), value);
35727 				}
35728 				goto exit_assign_obj;
35729 			}
35730 		}
35731 	}
35732 
35733 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
35734 		ZVAL_DEREF(value);
35735 	}
35736 
35737 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35738 
35739 free_and_exit_assign_obj:
35740 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35741 		ZVAL_COPY(EX_VAR(opline->result.var), value);
35742 	}
35743 
35744 exit_assign_obj:
35745 
35746 
35747 	/* assign_obj has two opcodes! */
35748 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35749 }
35750 
35751 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35752 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35753 {
35754 	USE_OPLINE
35755 	zend_free_op free_op_data;
35756 	zval *property, *container, *value_ptr;
35757 
35758 	SAVE_OPLINE();
35759 
35760 	container = &EX(This);
35761 
35762 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35763 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35764 	}
35765 
35766 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35767 
35768 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
35769 
35770 	if (1) {
35771 		if (IS_UNUSED == IS_UNUSED) {
35772 			if (IS_CV == IS_CONST) {
35773 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35774 			} else {
35775 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35776 			}
35777 		} else {
35778 			if (IS_CV == IS_CONST) {
35779 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35780 			} else {
35781 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35782 			}
35783 		}
35784 	} else {
35785 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35786 	}
35787 
35788 
35789 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
35790 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35791 }
35792 
35793 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35795 {
35796 	USE_OPLINE
35797 
35798 	zval *property, *container, *value_ptr;
35799 
35800 	SAVE_OPLINE();
35801 
35802 	container = &EX(This);
35803 
35804 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
35805 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35806 	}
35807 
35808 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35809 
35810 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
35811 
35812 	if (1) {
35813 		if (IS_UNUSED == IS_UNUSED) {
35814 			if (IS_CV == IS_CONST) {
35815 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35816 			} else {
35817 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35818 			}
35819 		} else {
35820 			if (IS_CV == IS_CONST) {
35821 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35822 			} else {
35823 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35824 			}
35825 		}
35826 	} else {
35827 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35828 	}
35829 
35830 
35831 
35832 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35833 }
35834 
35835 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35837 {
35838 	USE_OPLINE
35839 
35840 	zend_string **rope;
35841 	zval *var;
35842 
35843 	/* Compiler allocates the necessary number of zval slots to keep the rope */
35844 	rope = (zend_string**)EX_VAR(opline->result.var);
35845 	if (IS_CV == IS_CONST) {
35846 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
35847 		rope[0] = Z_STR_P(var);
35848 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
35849 			Z_ADDREF_P(var);
35850 		}
35851 	} else {
35852 		var = EX_VAR(opline->op2.var);
35853 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
35854 			if (IS_CV == IS_CV) {
35855 				rope[0] = zend_string_copy(Z_STR_P(var));
35856 			} else {
35857 				rope[0] = Z_STR_P(var);
35858 			}
35859 		} else {
35860 			SAVE_OPLINE();
35861 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
35862 				ZVAL_UNDEFINED_OP2();
35863 			}
35864 			rope[0] = zval_get_string_func(var);
35865 
35866 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35867 		}
35868 	}
35869 	ZEND_VM_NEXT_OPCODE();
35870 }
35871 
ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35872 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35873 {
35874 
35875 	zval *class_name;
35876 	USE_OPLINE
35877 
35878 	SAVE_OPLINE();
35879 	if (IS_CV == IS_UNUSED) {
35880 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
35881 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35882 	} else if (IS_CV == IS_CONST) {
35883 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
35884 
35885 		if (UNEXPECTED(ce == NULL)) {
35886 			class_name = EX_VAR(opline->op2.var);
35887 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
35888 			CACHE_PTR(opline->extended_value, ce);
35889 		}
35890 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
35891 	} else {
35892 		class_name = EX_VAR(opline->op2.var);
35893 try_class_name:
35894 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
35895 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
35896 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
35897 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
35898 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
35899 			class_name = Z_REFVAL_P(class_name);
35900 			goto try_class_name;
35901 		} else {
35902 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
35903 				ZVAL_UNDEFINED_OP2();
35904 				if (UNEXPECTED(EG(exception) != NULL)) {
35905 					HANDLE_EXCEPTION();
35906 				}
35907 			}
35908 			zend_throw_error(NULL, "Class name must be a valid object or a string");
35909 		}
35910 	}
35911 
35912 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35913 }
35914 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35916 {
35917 	USE_OPLINE
35918 	zval *function_name;
35919 	zend_free_op free_op1;
35920 	zval *object;
35921 	zend_function *fbc;
35922 	zend_class_entry *called_scope;
35923 	zend_object *obj;
35924 	zend_execute_data *call;
35925 	uint32_t call_info;
35926 
35927 	SAVE_OPLINE();
35928 
35929 	object = &EX(This);
35930 
35931 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35932 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35933 	}
35934 
35935 	if (IS_CV != IS_CONST) {
35936 		function_name = EX_VAR(opline->op2.var);
35937 	}
35938 
35939 	if (IS_CV != IS_CONST &&
35940 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
35941 		do {
35942 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
35943 				function_name = Z_REFVAL_P(function_name);
35944 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
35945 					break;
35946 				}
35947 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
35948 				ZVAL_UNDEFINED_OP2();
35949 				if (UNEXPECTED(EG(exception) != NULL)) {
35950 
35951 					HANDLE_EXCEPTION();
35952 				}
35953 			}
35954 			zend_throw_error(NULL, "Method name must be a string");
35955 
35956 
35957 			HANDLE_EXCEPTION();
35958 		} while (0);
35959 	}
35960 
35961 	if (IS_UNUSED != IS_UNUSED) {
35962 		do {
35963 			if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35964 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
35965 					object = Z_REFVAL_P(object);
35966 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
35967 						break;
35968 					}
35969 				}
35970 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
35971 					object = ZVAL_UNDEFINED_OP1();
35972 					if (UNEXPECTED(EG(exception) != NULL)) {
35973 						if (IS_CV != IS_CONST) {
35974 
35975 						}
35976 						HANDLE_EXCEPTION();
35977 					}
35978 				}
35979 				if (IS_CV == IS_CONST) {
35980 					function_name = EX_VAR(opline->op2.var);
35981 				}
35982 				zend_invalid_method_call(object, function_name);
35983 
35984 
35985 				HANDLE_EXCEPTION();
35986 			}
35987 		} while (0);
35988 	}
35989 
35990 	obj = Z_OBJ_P(object);
35991 	called_scope = obj->ce;
35992 
35993 	if (IS_CV == IS_CONST &&
35994 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
35995 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
35996 	} else {
35997 	    zend_object *orig_obj = obj;
35998 
35999 		if (IS_CV == IS_CONST) {
36000 			function_name = EX_VAR(opline->op2.var);
36001 		}
36002 
36003 		/* First, locate the function. */
36004 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
36005 		if (UNEXPECTED(fbc == NULL)) {
36006 			if (EXPECTED(!EG(exception))) {
36007 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
36008 			}
36009 
36010 
36011 			HANDLE_EXCEPTION();
36012 		}
36013 		if (IS_CV == IS_CONST &&
36014 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
36015 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36016 		    EXPECTED(obj == orig_obj)) {
36017 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
36018 		}
36019 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
36020 			/* Reset "object" to trigger reference counting */
36021 			object = NULL;
36022 		}
36023 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36024 			init_func_run_time_cache(&fbc->op_array);
36025 		}
36026 	}
36027 
36028 	if (IS_CV != IS_CONST) {
36029 
36030 	}
36031 
36032 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36033 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
36034 
36035 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
36036 			HANDLE_EXCEPTION();
36037 		}
36038 		/* call static method */
36039 		obj = (zend_object*)called_scope;
36040 		call_info = ZEND_CALL_NESTED_FUNCTION;
36041 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
36042 		if (IS_UNUSED == IS_CV) {
36043 			GC_ADDREF(obj); /* For $this pointer */
36044 		} else if (free_op1 != object) {
36045 			GC_ADDREF(obj); /* For $this pointer */
36046 
36047 		}
36048 		/* CV may be changed indirectly (e.g. when it's a reference) */
36049 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
36050 	}
36051 
36052 	call = zend_vm_stack_push_call_frame(call_info,
36053 		fbc, opline->extended_value, obj);
36054 	call->prev_execute_data = EX(call);
36055 	EX(call) = call;
36056 
36057 	ZEND_VM_NEXT_OPCODE();
36058 }
36059 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36061 {
36062 	USE_OPLINE
36063 	zval *function_name;
36064 	zend_class_entry *ce;
36065 	uint32_t call_info;
36066 	zend_function *fbc;
36067 	zend_execute_data *call;
36068 
36069 	SAVE_OPLINE();
36070 
36071 	if (IS_UNUSED == IS_CONST) {
36072 		/* no function found. try a static method in class */
36073 		ce = CACHED_PTR(opline->result.num);
36074 		if (UNEXPECTED(ce == NULL)) {
36075 			ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
36076 			if (UNEXPECTED(ce == NULL)) {
36077 				ZEND_ASSERT(EG(exception));
36078 
36079 				HANDLE_EXCEPTION();
36080 			}
36081 			if (IS_CV != IS_CONST) {
36082 				CACHE_PTR(opline->result.num, ce);
36083 			}
36084 		}
36085 	} else if (IS_UNUSED == IS_UNUSED) {
36086 		ce = zend_fetch_class(NULL, opline->op1.num);
36087 		if (UNEXPECTED(ce == NULL)) {
36088 			ZEND_ASSERT(EG(exception));
36089 
36090 			HANDLE_EXCEPTION();
36091 		}
36092 	} else {
36093 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36094 	}
36095 
36096 	if (IS_UNUSED == IS_CONST &&
36097 	    IS_CV == IS_CONST &&
36098 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
36099 		/* nothing to do */
36100 	} else if (IS_UNUSED != IS_CONST &&
36101 	           IS_CV == IS_CONST &&
36102 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
36103 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36104 	} else if (IS_CV != IS_UNUSED) {
36105 
36106 
36107 		function_name = EX_VAR(opline->op2.var);
36108 		if (IS_CV != IS_CONST) {
36109 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36110 				do {
36111 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
36112 						function_name = Z_REFVAL_P(function_name);
36113 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36114 							break;
36115 						}
36116 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36117 						ZVAL_UNDEFINED_OP2();
36118 						if (UNEXPECTED(EG(exception) != NULL)) {
36119 							HANDLE_EXCEPTION();
36120 						}
36121 					}
36122 					zend_throw_error(NULL, "Function name must be a string");
36123 
36124 					HANDLE_EXCEPTION();
36125 				} while (0);
36126 			}
36127 		}
36128 
36129 		if (ce->get_static_method) {
36130 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
36131 		} else {
36132 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
36133 		}
36134 		if (UNEXPECTED(fbc == NULL)) {
36135 			if (EXPECTED(!EG(exception))) {
36136 				zend_undefined_method(ce, Z_STR_P(function_name));
36137 			}
36138 
36139 			HANDLE_EXCEPTION();
36140 		}
36141 		if (IS_CV == IS_CONST &&
36142 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
36143 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
36144 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
36145 		}
36146 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36147 			init_func_run_time_cache(&fbc->op_array);
36148 		}
36149 		if (IS_CV != IS_CONST) {
36150 
36151 		}
36152 	} else {
36153 		if (UNEXPECTED(ce->constructor == NULL)) {
36154 			zend_throw_error(NULL, "Cannot call constructor");
36155 			HANDLE_EXCEPTION();
36156 		}
36157 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
36158 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
36159 			HANDLE_EXCEPTION();
36160 		}
36161 		fbc = ce->constructor;
36162 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36163 			init_func_run_time_cache(&fbc->op_array);
36164 		}
36165 	}
36166 
36167 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
36168 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
36169 			ce = (zend_class_entry*)Z_OBJ(EX(This));
36170 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36171 		} else {
36172 			zend_non_static_method_call(fbc);
36173 			if (UNEXPECTED(EG(exception) != NULL)) {
36174 				HANDLE_EXCEPTION();
36175 			}
36176 			goto check_parent_and_self;
36177 		}
36178 	} else {
36179 check_parent_and_self:
36180 		/* previous opcode is ZEND_FETCH_CLASS */
36181 		if (IS_UNUSED == IS_UNUSED
36182 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
36183 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
36184 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
36185 				ce = Z_OBJCE(EX(This));
36186 			} else {
36187 				ce = Z_CE(EX(This));
36188 			}
36189 		}
36190 		call_info = ZEND_CALL_NESTED_FUNCTION;
36191 	}
36192 
36193 	call = zend_vm_stack_push_call_frame(call_info,
36194 		fbc, opline->extended_value, ce);
36195 	call->prev_execute_data = EX(call);
36196 	EX(call) = call;
36197 
36198 	ZEND_VM_NEXT_OPCODE();
36199 }
36200 
ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36201 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36202 {
36203 	zval *array;
36204 	uint32_t size;
36205 	USE_OPLINE
36206 
36207 	array = EX_VAR(opline->result.var);
36208 	if (IS_UNUSED != IS_UNUSED) {
36209 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
36210 		ZVAL_ARR(array, zend_new_array(size));
36211 		/* Explicitly initialize array as not-packed if flag is set */
36212 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
36213 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
36214 		}
36215 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36216 	} else {
36217 		ZVAL_ARR(array, zend_new_array(0));
36218 		ZEND_VM_NEXT_OPCODE();
36219 	}
36220 }
36221 
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36223 {
36224 	USE_OPLINE
36225 
36226 	zval *container;
36227 	zval *offset;
36228 
36229 	SAVE_OPLINE();
36230 	container = &EX(This);
36231 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36232 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36233 	}
36234 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36235 
36236 	do {
36237 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36238 			if (Z_ISREF_P(container)) {
36239 				container = Z_REFVAL_P(container);
36240 				if (Z_TYPE_P(container) != IS_OBJECT) {
36241 					if (IS_UNUSED == IS_CV
36242 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36243 						ZVAL_UNDEFINED_OP1();
36244 					}
36245 					break;
36246 				}
36247 			} else {
36248 				break;
36249 			}
36250 		}
36251 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
36252 	} while (0);
36253 
36254 
36255 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36256 }
36257 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36258 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36259 {
36260 	USE_OPLINE
36261 
36262 	zval *container;
36263 	int result;
36264 	zval *offset;
36265 
36266 	SAVE_OPLINE();
36267 	container = &EX(This);
36268 
36269 	if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36270 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36271 	}
36272 
36273 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36274 
36275 	if (IS_UNUSED == IS_CONST ||
36276 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36277 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36278 			container = Z_REFVAL_P(container);
36279 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36280 				result = (opline->extended_value & ZEND_ISEMPTY);
36281 				goto isset_object_finish;
36282 			}
36283 		} else {
36284 			result = (opline->extended_value & ZEND_ISEMPTY);
36285 			goto isset_object_finish;
36286 		}
36287 	}
36288 
36289 	result =
36290 		(opline->extended_value & ZEND_ISEMPTY) ^
36291 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
36292 
36293 isset_object_finish:
36294 
36295 
36296 	ZEND_VM_SMART_BRANCH(result, 1);
36297 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
36298 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36299 }
36300 
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36302 {
36303 	USE_OPLINE
36304 
36305 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
36306 
36307 	SAVE_OPLINE();
36308 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
36309 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36310 	}
36311 
36312 	/* Destroy the previously yielded value */
36313 	zval_ptr_dtor(&generator->value);
36314 
36315 	/* Destroy the previously yielded key */
36316 	zval_ptr_dtor(&generator->key);
36317 
36318 	/* Set the new yielded value */
36319 	if (IS_UNUSED != IS_UNUSED) {
36320 
36321 
36322 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36323 			/* Constants and temporary variables aren't yieldable by reference,
36324 			 * but we still allow them with a notice. */
36325 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
36326 				zval *value;
36327 
36328 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36329 
36330 				value = NULL;
36331 				ZVAL_COPY_VALUE(&generator->value, value);
36332 				if (IS_UNUSED == IS_CONST) {
36333 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36334 						Z_ADDREF(generator->value);
36335 					}
36336 				}
36337 			} else {
36338 				zval *value_ptr = NULL;
36339 
36340 				/* If a function call result is yielded and the function did
36341 				 * not return by reference we throw a notice. */
36342 				do {
36343 					if (IS_UNUSED == IS_VAR) {
36344 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
36345 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
36346 						 && !Z_ISREF_P(value_ptr)) {
36347 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36348 							ZVAL_COPY(&generator->value, value_ptr);
36349 							break;
36350 						}
36351 					}
36352 					if (Z_ISREF_P(value_ptr)) {
36353 						Z_ADDREF_P(value_ptr);
36354 					} else {
36355 						ZVAL_MAKE_REF_EX(value_ptr, 2);
36356 					}
36357 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
36358 				} while (0);
36359 
36360 			}
36361 		} else {
36362 			zval *value = NULL;
36363 
36364 			/* Consts, temporary variables and references need copying */
36365 			if (IS_UNUSED == IS_CONST) {
36366 				ZVAL_COPY_VALUE(&generator->value, value);
36367 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36368 					Z_ADDREF(generator->value);
36369 				}
36370 			} else if (IS_UNUSED == IS_TMP_VAR) {
36371 				ZVAL_COPY_VALUE(&generator->value, value);
36372             } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
36373 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
36374 
36375 			} else {
36376 				ZVAL_COPY_VALUE(&generator->value, value);
36377 				if (IS_UNUSED == IS_CV) {
36378 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
36379 				}
36380 			}
36381 		}
36382 	} else {
36383 		/* If no value was specified yield null */
36384 		ZVAL_NULL(&generator->value);
36385 	}
36386 
36387 	/* Set the new yielded key */
36388 	if (IS_CV != IS_UNUSED) {
36389 
36390 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
36391 
36392 		/* Consts, temporary variables and references need copying */
36393 		if (IS_CV == IS_CONST) {
36394 			ZVAL_COPY_VALUE(&generator->key, key);
36395 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
36396 				Z_ADDREF(generator->key);
36397 			}
36398 		} else if (IS_CV == IS_TMP_VAR) {
36399 			ZVAL_COPY_VALUE(&generator->key, key);
36400 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
36401 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
36402 
36403 		} else {
36404 			ZVAL_COPY_VALUE(&generator->key, key);
36405 			if (IS_CV == IS_CV) {
36406 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
36407 			}
36408 		}
36409 
36410 		if (Z_TYPE(generator->key) == IS_LONG
36411 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
36412 		) {
36413 			generator->largest_used_integer_key = Z_LVAL(generator->key);
36414 		}
36415 	} else {
36416 		/* If no key was specified we use auto-increment keys */
36417 		generator->largest_used_integer_key++;
36418 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
36419 	}
36420 
36421 	if (RETURN_VALUE_USED(opline)) {
36422 		/* If the return value of yield is used set the send
36423 		 * target and initialize it to NULL */
36424 		generator->send_target = EX_VAR(opline->result.var);
36425 		ZVAL_NULL(generator->send_target);
36426 	} else {
36427 		generator->send_target = NULL;
36428 	}
36429 
36430 	/* We increment to the next op, so we are at the correct position when the
36431 	 * generator is resumed. */
36432 	ZEND_VM_INC_OPCODE();
36433 
36434 	/* The GOTO VM uses a local opline variable. We need to set the opline
36435 	 * variable in execute_data so we don't resume at an old position. */
36436 	SAVE_OPLINE();
36437 
36438 	ZEND_VM_RETURN();
36439 }
36440 
ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36442 {
36443 	USE_OPLINE
36444 
36445 	zval *op1;
36446 
36447 	op1 = EX_VAR(opline->op1.var);
36448 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
36449 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
36450 		ZEND_VM_NEXT_OPCODE();
36451 	}
36452 
36453 	SAVE_OPLINE();
36454 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
36455 		op1 = ZVAL_UNDEFINED_OP1();
36456 	}
36457 	bitwise_not_function(EX_VAR(opline->result.var), op1);
36458 
36459 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36460 }
36461 
ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36463 {
36464 	USE_OPLINE
36465 	zval *val;
36466 
36467 
36468 	val = EX_VAR(opline->op1.var);
36469 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
36470 		ZVAL_FALSE(EX_VAR(opline->result.var));
36471 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36472 		/* The result and op1 can be the same cv zval */
36473 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
36474 		ZVAL_TRUE(EX_VAR(opline->result.var));
36475 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
36476 			SAVE_OPLINE();
36477 			ZVAL_UNDEFINED_OP1();
36478 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36479 		}
36480 	} else {
36481 		SAVE_OPLINE();
36482 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
36483 
36484 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36485 	}
36486 	ZEND_VM_NEXT_OPCODE();
36487 }
36488 
zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)36489 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
36490 {
36491 	USE_OPLINE
36492 
36493 	zval *var_ptr;
36494 
36495 	var_ptr = EX_VAR(opline->op1.var);
36496 
36497 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
36498 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36499 			ZVAL_NULL(EX_VAR(opline->result.var));
36500 		}
36501 		ZEND_VM_NEXT_OPCODE();
36502 	}
36503 
36504 	SAVE_OPLINE();
36505 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
36506 		ZVAL_NULL(var_ptr);
36507 		ZVAL_UNDEFINED_OP1();
36508 	}
36509 
36510 	do {
36511 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
36512 			zend_reference *ref = Z_REF_P(var_ptr);
36513 			var_ptr = Z_REFVAL_P(var_ptr);
36514 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
36515 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
36516 				break;
36517 			}
36518 		}
36519 		increment_function(var_ptr);
36520 	} while (0);
36521 
36522 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36523 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36524 	}
36525 
36526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36527 }
36528 
ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36529 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36530 {
36531 	USE_OPLINE
36532 
36533 	zval *var_ptr;
36534 
36535 	var_ptr = EX_VAR(opline->op1.var);
36536 
36537 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36538 		fast_long_increment_function(var_ptr);
36539 		if (UNEXPECTED(0)) {
36540 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
36541 		}
36542 		ZEND_VM_NEXT_OPCODE();
36543 	}
36544 
36545 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36546 }
36547 
ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36548 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36549 {
36550 	USE_OPLINE
36551 
36552 	zval *var_ptr;
36553 
36554 	var_ptr = EX_VAR(opline->op1.var);
36555 
36556 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36557 		fast_long_increment_function(var_ptr);
36558 		if (UNEXPECTED(1)) {
36559 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
36560 		}
36561 		ZEND_VM_NEXT_OPCODE();
36562 	}
36563 
36564 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36565 }
36566 
zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)36567 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
36568 {
36569 	USE_OPLINE
36570 
36571 	zval *var_ptr;
36572 
36573 	var_ptr = EX_VAR(opline->op1.var);
36574 
36575 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
36576 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36577 			ZVAL_NULL(EX_VAR(opline->result.var));
36578 		}
36579 		ZEND_VM_NEXT_OPCODE();
36580 	}
36581 
36582 	SAVE_OPLINE();
36583 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
36584 		ZVAL_NULL(var_ptr);
36585 		ZVAL_UNDEFINED_OP1();
36586 	}
36587 
36588 	do {
36589 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
36590 			zend_reference *ref = Z_REF_P(var_ptr);
36591 			var_ptr = Z_REFVAL_P(var_ptr);
36592 
36593 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
36594 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
36595 				break;
36596 			}
36597 		}
36598 		decrement_function(var_ptr);
36599 	} while (0);
36600 
36601 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
36602 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36603 	}
36604 
36605 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36606 }
36607 
ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36608 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36609 {
36610 	USE_OPLINE
36611 
36612 	zval *var_ptr;
36613 
36614 	var_ptr = EX_VAR(opline->op1.var);
36615 
36616 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36617 		fast_long_decrement_function(var_ptr);
36618 		if (UNEXPECTED(0)) {
36619 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
36620 		}
36621 		ZEND_VM_NEXT_OPCODE();
36622 	}
36623 
36624 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36625 }
36626 
ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36627 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36628 {
36629 	USE_OPLINE
36630 
36631 	zval *var_ptr;
36632 
36633 	var_ptr = EX_VAR(opline->op1.var);
36634 
36635 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36636 		fast_long_decrement_function(var_ptr);
36637 		if (UNEXPECTED(1)) {
36638 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
36639 		}
36640 		ZEND_VM_NEXT_OPCODE();
36641 	}
36642 
36643 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36644 }
36645 
zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)36646 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
36647 {
36648 	USE_OPLINE
36649 
36650 	zval *var_ptr;
36651 
36652 	var_ptr = EX_VAR(opline->op1.var);
36653 
36654 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
36655 		ZVAL_NULL(EX_VAR(opline->result.var));
36656 		ZEND_VM_NEXT_OPCODE();
36657 	}
36658 
36659 	SAVE_OPLINE();
36660 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
36661 		ZVAL_NULL(var_ptr);
36662 		ZVAL_UNDEFINED_OP1();
36663 	}
36664 
36665 	do {
36666 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
36667 			zend_reference *ref = Z_REF_P(var_ptr);
36668 			var_ptr = Z_REFVAL_P(var_ptr);
36669 
36670 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
36671 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
36672 				break;
36673 			}
36674 		}
36675 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36676 
36677 		increment_function(var_ptr);
36678 	} while (0);
36679 
36680 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36681 }
36682 
ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36683 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36684 {
36685 	USE_OPLINE
36686 
36687 	zval *var_ptr;
36688 
36689 	var_ptr = EX_VAR(opline->op1.var);
36690 
36691 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36692 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
36693 		fast_long_increment_function(var_ptr);
36694 		ZEND_VM_NEXT_OPCODE();
36695 	}
36696 
36697 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36698 }
36699 
zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)36700 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
36701 {
36702 	USE_OPLINE
36703 
36704 	zval *var_ptr;
36705 
36706 	var_ptr = EX_VAR(opline->op1.var);
36707 
36708 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
36709 		ZVAL_NULL(EX_VAR(opline->result.var));
36710 		ZEND_VM_NEXT_OPCODE();
36711 	}
36712 
36713 	SAVE_OPLINE();
36714 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
36715 		ZVAL_NULL(var_ptr);
36716 		ZVAL_UNDEFINED_OP1();
36717 	}
36718 
36719 	do {
36720 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
36721 			zend_reference *ref = Z_REF_P(var_ptr);
36722 			var_ptr = Z_REFVAL_P(var_ptr);
36723 
36724 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
36725 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
36726 				break;
36727 			}
36728 		}
36729 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
36730 
36731 		decrement_function(var_ptr);
36732 	} while (0);
36733 
36734 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36735 }
36736 
ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36737 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36738 {
36739 	USE_OPLINE
36740 
36741 	zval *var_ptr;
36742 
36743 	var_ptr = EX_VAR(opline->op1.var);
36744 
36745 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
36746 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
36747 		fast_long_decrement_function(var_ptr);
36748 		ZEND_VM_NEXT_OPCODE();
36749 	}
36750 
36751 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36752 }
36753 
ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36754 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36755 {
36756 	USE_OPLINE
36757 
36758 	zval *z;
36759 
36760 	SAVE_OPLINE();
36761 	z = EX_VAR(opline->op1.var);
36762 
36763 	if (Z_TYPE_P(z) == IS_STRING) {
36764 		zend_string *str = Z_STR_P(z);
36765 
36766 		if (ZSTR_LEN(str) != 0) {
36767 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
36768 		}
36769 	} else {
36770 		zend_string *str = zval_get_string_func(z);
36771 
36772 		if (ZSTR_LEN(str) != 0) {
36773 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
36774 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
36775 			ZVAL_UNDEFINED_OP1();
36776 		}
36777 		zend_string_release_ex(str, 0);
36778 	}
36779 
36780 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36781 }
36782 
ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36783 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36784 {
36785 	USE_OPLINE
36786 
36787 	zval *val;
36788 
36789 	val = EX_VAR(opline->op1.var);
36790 
36791 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
36792 		ZEND_VM_NEXT_OPCODE();
36793 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36794 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36795 			SAVE_OPLINE();
36796 			ZVAL_UNDEFINED_OP1();
36797 			if (UNEXPECTED(EG(exception))) {
36798 				HANDLE_EXCEPTION();
36799 			}
36800 		}
36801 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36802 	}
36803 
36804 	SAVE_OPLINE();
36805 	if (i_zend_is_true(val)) {
36806 		opline++;
36807 	} else {
36808 		opline = OP_JMP_ADDR(opline, opline->op2);
36809 	}
36810 
36811 	ZEND_VM_JMP(opline);
36812 }
36813 
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36814 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36815 {
36816 	USE_OPLINE
36817 
36818 	zval *val;
36819 
36820 	val = EX_VAR(opline->op1.var);
36821 
36822 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
36823 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36824 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36825 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36826 			SAVE_OPLINE();
36827 			ZVAL_UNDEFINED_OP1();
36828 			if (UNEXPECTED(EG(exception))) {
36829 				HANDLE_EXCEPTION();
36830 			}
36831 		}
36832 		ZEND_VM_NEXT_OPCODE();
36833 	}
36834 
36835 	SAVE_OPLINE();
36836 	if (i_zend_is_true(val)) {
36837 		opline = OP_JMP_ADDR(opline, opline->op2);
36838 	} else {
36839 		opline++;
36840 	}
36841 
36842 	ZEND_VM_JMP(opline);
36843 }
36844 
ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36846 {
36847 	USE_OPLINE
36848 
36849 	zval *val;
36850 
36851 	val = EX_VAR(opline->op1.var);
36852 
36853 	if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
36854 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
36855 		ZEND_VM_CONTINUE();
36856 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36857 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36858 			SAVE_OPLINE();
36859 			ZVAL_UNDEFINED_OP1();
36860 			if (UNEXPECTED(EG(exception))) {
36861 				HANDLE_EXCEPTION();
36862 			}
36863 		}
36864 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36865 	}
36866 
36867 	SAVE_OPLINE();
36868 	if (i_zend_is_true(val)) {
36869 		opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value);
36870 	} else {
36871 		opline = OP_JMP_ADDR(opline, opline->op2);
36872 	}
36873 
36874 	ZEND_VM_JMP(opline);
36875 }
36876 
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36878 {
36879 	USE_OPLINE
36880 
36881 	zval *val;
36882 	int ret;
36883 
36884 	val = EX_VAR(opline->op1.var);
36885 
36886 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
36887 		ZVAL_TRUE(EX_VAR(opline->result.var));
36888 		ZEND_VM_NEXT_OPCODE();
36889 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36890 		ZVAL_FALSE(EX_VAR(opline->result.var));
36891 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36892 			SAVE_OPLINE();
36893 			ZVAL_UNDEFINED_OP1();
36894 			if (UNEXPECTED(EG(exception))) {
36895 				HANDLE_EXCEPTION();
36896 			}
36897 		}
36898 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36899 	}
36900 
36901 	SAVE_OPLINE();
36902 	ret = i_zend_is_true(val);
36903 
36904 	if (ret) {
36905 		ZVAL_TRUE(EX_VAR(opline->result.var));
36906 		opline++;
36907 	} else {
36908 		ZVAL_FALSE(EX_VAR(opline->result.var));
36909 		opline = OP_JMP_ADDR(opline, opline->op2);
36910 	}
36911 	ZEND_VM_JMP(opline);
36912 }
36913 
ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36914 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36915 {
36916 	USE_OPLINE
36917 
36918 	zval *val;
36919 	int ret;
36920 
36921 	val = EX_VAR(opline->op1.var);
36922 
36923 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
36924 		ZVAL_TRUE(EX_VAR(opline->result.var));
36925 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
36926 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
36927 		ZVAL_FALSE(EX_VAR(opline->result.var));
36928 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
36929 			SAVE_OPLINE();
36930 			ZVAL_UNDEFINED_OP1();
36931 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36932 		} else {
36933 			ZEND_VM_NEXT_OPCODE();
36934 		}
36935 	}
36936 
36937 	SAVE_OPLINE();
36938 	ret = i_zend_is_true(val);
36939 
36940 	if (ret) {
36941 		ZVAL_TRUE(EX_VAR(opline->result.var));
36942 		opline = OP_JMP_ADDR(opline, opline->op2);
36943 	} else {
36944 		ZVAL_FALSE(EX_VAR(opline->result.var));
36945 		opline++;
36946 	}
36947 	ZEND_VM_JMP(opline);
36948 }
36949 
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36950 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36951 {
36952 	USE_OPLINE
36953 	zval *retval_ptr;
36954 	zval *return_value;
36955 	zend_free_op free_op1;
36956 
36957 	retval_ptr = EX_VAR(opline->op1.var);
36958 	return_value = EX(return_value);
36959 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
36960 		SAVE_OPLINE();
36961 		retval_ptr = ZVAL_UNDEFINED_OP1();
36962 		if (return_value) {
36963 			ZVAL_NULL(return_value);
36964 		}
36965 	} else if (!return_value) {
36966 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
36967 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
36968 				SAVE_OPLINE();
36969 				rc_dtor_func(Z_COUNTED_P(free_op1));
36970 			}
36971 		}
36972 	} else {
36973 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
36974 			ZVAL_COPY_VALUE(return_value, retval_ptr);
36975 			if (IS_CV == IS_CONST) {
36976 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
36977 					Z_ADDREF_P(return_value);
36978 				}
36979 			}
36980 		} else if (IS_CV == IS_CV) {
36981 			do {
36982 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
36983 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
36984 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
36985 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
36986 							ZVAL_COPY_VALUE(return_value, retval_ptr);
36987 							if (GC_MAY_LEAK(ref)) {
36988 								gc_possible_root(ref);
36989 							}
36990 							ZVAL_NULL(retval_ptr);
36991 							break;
36992 						} else {
36993 							Z_ADDREF_P(retval_ptr);
36994 						}
36995 					} else {
36996 						retval_ptr = Z_REFVAL_P(retval_ptr);
36997 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
36998 							Z_ADDREF_P(retval_ptr);
36999 						}
37000 					}
37001 				}
37002 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37003 			} while (0);
37004 		} else /* if (IS_CV == IS_VAR) */ {
37005 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
37006 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
37007 
37008 				retval_ptr = Z_REFVAL_P(retval_ptr);
37009 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37010 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37011 					efree_size(ref, sizeof(zend_reference));
37012 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
37013 					Z_ADDREF_P(retval_ptr);
37014 				}
37015 			} else {
37016 				ZVAL_COPY_VALUE(return_value, retval_ptr);
37017 			}
37018 		}
37019 	}
37020 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37021 }
37022 
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37024 {
37025 	USE_OPLINE
37026 	zval *retval_ptr;
37027 
37028 
37029 	SAVE_OPLINE();
37030 
37031 	do {
37032 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
37033 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
37034 			/* Not supposed to happen, but we'll allow it */
37035 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
37036 
37037 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37038 			if (!EX(return_value)) {
37039 
37040 			} else {
37041 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
37042 					ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
37043 					break;
37044 				}
37045 
37046 				ZVAL_NEW_REF(EX(return_value), retval_ptr);
37047 				if (IS_CV == IS_CONST) {
37048 					Z_TRY_ADDREF_P(retval_ptr);
37049 				}
37050 			}
37051 			break;
37052 		}
37053 
37054 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
37055 
37056 		if (IS_CV == IS_VAR) {
37057 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
37058 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
37059 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
37060 				if (EX(return_value)) {
37061 					ZVAL_NEW_REF(EX(return_value), retval_ptr);
37062 				} else {
37063 
37064 				}
37065 				break;
37066 			}
37067 		}
37068 
37069 		if (EX(return_value)) {
37070 			if (Z_ISREF_P(retval_ptr)) {
37071 				Z_ADDREF_P(retval_ptr);
37072 			} else {
37073 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
37074 			}
37075 			ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
37076 		}
37077 
37078 	} while (0);
37079 
37080 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37081 }
37082 
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37084 {
37085 	USE_OPLINE
37086 	zval *retval;
37087 
37088 
37089 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
37090 
37091 	SAVE_OPLINE();
37092 	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37093 
37094 	/* Copy return value into generator->retval */
37095 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
37096 		ZVAL_COPY_VALUE(&generator->retval, retval);
37097 		if (IS_CV == IS_CONST) {
37098 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
37099 				Z_ADDREF(generator->retval);
37100 			}
37101 		}
37102 	} else if (IS_CV == IS_CV) {
37103 		ZVAL_COPY_DEREF(&generator->retval, retval);
37104 	} else /* if (IS_CV == IS_VAR) */ {
37105 		if (UNEXPECTED(Z_ISREF_P(retval))) {
37106 			zend_refcounted *ref = Z_COUNTED_P(retval);
37107 
37108 			retval = Z_REFVAL_P(retval);
37109 			ZVAL_COPY_VALUE(&generator->retval, retval);
37110 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37111 				efree_size(ref, sizeof(zend_reference));
37112 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
37113 				Z_ADDREF_P(retval);
37114 			}
37115 		} else {
37116 			ZVAL_COPY_VALUE(&generator->retval, retval);
37117 		}
37118 	}
37119 
37120 	/* Close the generator to free up resources */
37121 	zend_generator_close(generator, 1);
37122 
37123 	/* Pass execution back to handling code */
37124 	ZEND_VM_RETURN();
37125 }
37126 
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37127 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37128 {
37129 	USE_OPLINE
37130 	zval *value;
37131 
37132 
37133 	SAVE_OPLINE();
37134 	value = EX_VAR(opline->op1.var);
37135 
37136 	do {
37137 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
37138 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
37139 				value = Z_REFVAL_P(value);
37140 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
37141 					break;
37142 				}
37143 			}
37144 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
37145 				ZVAL_UNDEFINED_OP1();
37146 				if (UNEXPECTED(EG(exception) != NULL)) {
37147 					HANDLE_EXCEPTION();
37148 				}
37149 			}
37150 			zend_throw_error(NULL, "Can only throw objects");
37151 
37152 			HANDLE_EXCEPTION();
37153 		}
37154 	} while (0);
37155 
37156 	zend_exception_save();
37157 	if (IS_CV != IS_TMP_VAR) {
37158 		Z_TRY_ADDREF_P(value);
37159 	}
37160 
37161 	zend_throw_exception_object(value);
37162 	zend_exception_restore();
37163 
37164 	HANDLE_EXCEPTION();
37165 }
37166 
ZEND_SEND_VAR_SPEC_CV_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37167 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37168 {
37169 	USE_OPLINE
37170 	zval *varptr, *arg;
37171 
37172 
37173 	varptr = EX_VAR(opline->op1.var);
37174 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
37175 		SAVE_OPLINE();
37176 		ZVAL_UNDEFINED_OP1();
37177 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37178 		ZVAL_NULL(arg);
37179 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37180 	}
37181 
37182 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37183 
37184 	if (IS_CV == IS_CV) {
37185 		ZVAL_COPY_DEREF(arg, varptr);
37186 	} else /* if (IS_CV == IS_VAR) */ {
37187 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
37188 			zend_refcounted *ref = Z_COUNTED_P(varptr);
37189 
37190 			varptr = Z_REFVAL_P(varptr);
37191 			ZVAL_COPY_VALUE(arg, varptr);
37192 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37193 				efree_size(ref, sizeof(zend_reference));
37194 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
37195 				Z_ADDREF_P(arg);
37196 			}
37197 		} else {
37198 			ZVAL_COPY_VALUE(arg, varptr);
37199 		}
37200 	}
37201 
37202 	ZEND_VM_NEXT_OPCODE();
37203 }
37204 
ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37206 {
37207 	ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_CV_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37208 }
37209 
ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37211 {
37212 	USE_OPLINE
37213 
37214 	zval *varptr, *arg;
37215 
37216 	SAVE_OPLINE();
37217 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
37218 
37219 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37220 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
37221 		ZVAL_NEW_EMPTY_REF(arg);
37222 		ZVAL_NULL(Z_REFVAL_P(arg));
37223 		ZEND_VM_NEXT_OPCODE();
37224 	}
37225 
37226 	if (Z_ISREF_P(varptr)) {
37227 		Z_ADDREF_P(varptr);
37228 	} else {
37229 		ZVAL_MAKE_REF_EX(varptr, 2);
37230 	}
37231 	ZVAL_REF(arg, Z_REF_P(varptr));
37232 
37233 	ZEND_VM_NEXT_OPCODE();
37234 }
37235 
ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37237 {
37238 	USE_OPLINE
37239 	zval *varptr, *arg;
37240 
37241 	uint32_t arg_num = opline->op2.num;
37242 
37243 	if (EXPECTED(0)) {
37244 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37245 			goto send_var_by_ref;
37246 		}
37247 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37248 send_var_by_ref:
37249 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37250 	}
37251 
37252 	varptr = EX_VAR(opline->op1.var);
37253 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
37254 		SAVE_OPLINE();
37255 		ZVAL_UNDEFINED_OP1();
37256 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37257 		ZVAL_NULL(arg);
37258 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37259 	}
37260 
37261 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37262 
37263 	if (IS_CV == IS_CV) {
37264 		ZVAL_COPY_DEREF(arg, varptr);
37265 	} else /* if (IS_CV == IS_VAR) */ {
37266 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
37267 			zend_refcounted *ref = Z_COUNTED_P(varptr);
37268 
37269 			varptr = Z_REFVAL_P(varptr);
37270 			ZVAL_COPY_VALUE(arg, varptr);
37271 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37272 				efree_size(ref, sizeof(zend_reference));
37273 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
37274 				Z_ADDREF_P(arg);
37275 			}
37276 		} else {
37277 			ZVAL_COPY_VALUE(arg, varptr);
37278 		}
37279 	}
37280 
37281 	ZEND_VM_NEXT_OPCODE();
37282 }
37283 
ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37284 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37285 {
37286 	USE_OPLINE
37287 	zval *varptr, *arg;
37288 
37289 	uint32_t arg_num = opline->op2.num;
37290 
37291 	if (EXPECTED(1)) {
37292 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37293 			goto send_var_by_ref;
37294 		}
37295 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
37296 send_var_by_ref:
37297 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37298 	}
37299 
37300 	varptr = EX_VAR(opline->op1.var);
37301 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
37302 		SAVE_OPLINE();
37303 		ZVAL_UNDEFINED_OP1();
37304 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37305 		ZVAL_NULL(arg);
37306 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37307 	}
37308 
37309 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
37310 
37311 	if (IS_CV == IS_CV) {
37312 		ZVAL_COPY_DEREF(arg, varptr);
37313 	} else /* if (IS_CV == IS_VAR) */ {
37314 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
37315 			zend_refcounted *ref = Z_COUNTED_P(varptr);
37316 
37317 			varptr = Z_REFVAL_P(varptr);
37318 			ZVAL_COPY_VALUE(arg, varptr);
37319 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
37320 				efree_size(ref, sizeof(zend_reference));
37321 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
37322 				Z_ADDREF_P(arg);
37323 			}
37324 		} else {
37325 			ZVAL_COPY_VALUE(arg, varptr);
37326 		}
37327 	}
37328 
37329 	ZEND_VM_NEXT_OPCODE();
37330 }
37331 
ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37333 {
37334 	USE_OPLINE
37335 	zval *arg, *param;
37336 
37337 
37338 	SAVE_OPLINE();
37339 
37340 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
37341 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
37342 	}
37343 
37344 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37345 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
37346 	ZVAL_COPY(param, arg);
37347 
37348 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37349 }
37350 
ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37352 {
37353 	USE_OPLINE
37354 	zval *val;
37355 
37356 
37357 	val = EX_VAR(opline->op1.var);
37358 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
37359 		ZVAL_TRUE(EX_VAR(opline->result.var));
37360 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
37361 		/* The result and op1 can be the same cv zval */
37362 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
37363 		ZVAL_FALSE(EX_VAR(opline->result.var));
37364 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
37365 			SAVE_OPLINE();
37366 			ZVAL_UNDEFINED_OP1();
37367 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37368 		}
37369 	} else {
37370 		SAVE_OPLINE();
37371 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
37372 
37373 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37374 	}
37375 	ZEND_VM_NEXT_OPCODE();
37376 }
37377 
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37379 {
37380 	USE_OPLINE
37381 
37382 	zval *obj;
37383 	zend_class_entry *ce, *scope;
37384 	zend_function *clone;
37385 	zend_object_clone_obj_t clone_call;
37386 
37387 	SAVE_OPLINE();
37388 	obj = EX_VAR(opline->op1.var);
37389 
37390 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
37391 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37392 	}
37393 
37394 	do {
37395 		if (IS_CV == IS_CONST ||
37396 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
37397 		    if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
37398 				obj = Z_REFVAL_P(obj);
37399 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
37400 					break;
37401 				}
37402 			}
37403 			ZVAL_UNDEF(EX_VAR(opline->result.var));
37404 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
37405 				ZVAL_UNDEFINED_OP1();
37406 				if (UNEXPECTED(EG(exception) != NULL)) {
37407 					HANDLE_EXCEPTION();
37408 				}
37409 			}
37410 			zend_throw_error(NULL, "__clone method called on non-object");
37411 
37412 			HANDLE_EXCEPTION();
37413 		}
37414 	} while (0);
37415 
37416 	ce = Z_OBJCE_P(obj);
37417 	clone = ce->clone;
37418 	clone_call = Z_OBJ_HT_P(obj)->clone_obj;
37419 	if (UNEXPECTED(clone_call == NULL)) {
37420 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
37421 
37422 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37423 		HANDLE_EXCEPTION();
37424 	}
37425 
37426 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
37427 		scope = EX(func)->op_array.scope;
37428 		if (clone->common.scope != scope) {
37429 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
37430 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
37431 				zend_wrong_clone_call(clone, scope);
37432 
37433 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37434 				HANDLE_EXCEPTION();
37435 			}
37436 		}
37437 	}
37438 
37439 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
37440 
37441 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37442 }
37443 
ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37445 {
37446 	USE_OPLINE
37447 
37448 	zval *expr;
37449 	zval *result = EX_VAR(opline->result.var);
37450 	HashTable *ht;
37451 
37452 	SAVE_OPLINE();
37453 	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37454 
37455 	switch (opline->extended_value) {
37456 		case IS_NULL:
37457 			ZVAL_NULL(result);
37458 			break;
37459 		case _IS_BOOL:
37460 			ZVAL_BOOL(result, zend_is_true(expr));
37461 			break;
37462 		case IS_LONG:
37463 			ZVAL_LONG(result, zval_get_long(expr));
37464 			break;
37465 		case IS_DOUBLE:
37466 			ZVAL_DOUBLE(result, zval_get_double(expr));
37467 			break;
37468 		case IS_STRING:
37469 			ZVAL_STR(result, zval_get_string(expr));
37470 			break;
37471 		default:
37472 			if (IS_CV & (IS_VAR|IS_CV)) {
37473 				ZVAL_DEREF(expr);
37474 			}
37475 			/* If value is already of correct type, return it directly */
37476 			if (Z_TYPE_P(expr) == opline->extended_value) {
37477 				ZVAL_COPY_VALUE(result, expr);
37478 				if (IS_CV == IS_CONST) {
37479 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
37480 				} else if (IS_CV != IS_TMP_VAR) {
37481 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
37482 				}
37483 
37484 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37485 			}
37486 
37487 			if (opline->extended_value == IS_ARRAY) {
37488 				if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
37489 					if (Z_TYPE_P(expr) != IS_NULL) {
37490 						ZVAL_ARR(result, zend_new_array(1));
37491 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
37492 						if (IS_CV == IS_CONST) {
37493 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
37494 						} else {
37495 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
37496 						}
37497 					} else {
37498 						ZVAL_EMPTY_ARRAY(result);
37499 					}
37500 				} else {
37501 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
37502 					if (obj_ht) {
37503 						/* fast copy */
37504 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
37505 							(Z_OBJCE_P(expr)->default_properties_count ||
37506 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
37507 							 GC_IS_RECURSIVE(obj_ht))));
37508 						zend_release_properties(obj_ht);
37509 					} else {
37510 						ZVAL_EMPTY_ARRAY(result);
37511 					}
37512 				}
37513 			} else {
37514 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
37515 				if (Z_TYPE_P(expr) == IS_ARRAY) {
37516 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
37517 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
37518 						/* TODO: try not to duplicate immutable arrays as well ??? */
37519 						ht = zend_array_dup(ht);
37520 					}
37521 					Z_OBJ_P(result)->properties = ht;
37522 				} else if (Z_TYPE_P(expr) != IS_NULL) {
37523 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
37524 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
37525 					if (IS_CV == IS_CONST) {
37526 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
37527 					} else {
37528 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
37529 					}
37530 				}
37531 			}
37532 	}
37533 
37534 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37535 }
37536 
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37538 {
37539 	USE_OPLINE
37540 	zend_op_array *new_op_array;
37541 
37542 	zval *inc_filename;
37543 
37544 	SAVE_OPLINE();
37545 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37546 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
37547 
37548 	if (UNEXPECTED(EG(exception) != NULL)) {
37549 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
37550 			destroy_op_array(new_op_array);
37551 			efree_size(new_op_array, sizeof(zend_op_array));
37552 		}
37553 		UNDEF_RESULT();
37554 		HANDLE_EXCEPTION();
37555 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
37556 		if (RETURN_VALUE_USED(opline)) {
37557 			ZVAL_TRUE(EX_VAR(opline->result.var));
37558 		}
37559 	} else if (EXPECTED(new_op_array != NULL)) {
37560 		zval *return_value = NULL;
37561 		zend_execute_data *call;
37562 
37563 		if (RETURN_VALUE_USED(opline)) {
37564 			return_value = EX_VAR(opline->result.var);
37565 		}
37566 
37567 		new_op_array->scope = EX(func)->op_array.scope;
37568 
37569 		call = zend_vm_stack_push_call_frame(
37570 		    (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
37571 			(zend_function*)new_op_array, 0,
37572 			Z_PTR(EX(This)));
37573 
37574 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
37575 			call->symbol_table = EX(symbol_table);
37576 		} else {
37577 			call->symbol_table = zend_rebuild_symbol_table();
37578 		}
37579 
37580 		call->prev_execute_data = execute_data;
37581 		i_init_code_execute_data(call, new_op_array, return_value);
37582 		if (EXPECTED(zend_execute_ex == execute_ex)) {
37583 			ZEND_VM_ENTER();
37584 		} else {
37585 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
37586 			zend_execute_ex(call);
37587 			zend_vm_stack_free_call_frame(call);
37588 		}
37589 
37590 		destroy_op_array(new_op_array);
37591 		efree_size(new_op_array, sizeof(zend_op_array));
37592 		if (UNEXPECTED(EG(exception) != NULL)) {
37593 			zend_rethrow_exception(execute_data);
37594 			UNDEF_RESULT();
37595 			HANDLE_EXCEPTION();
37596 		}
37597 	} else if (RETURN_VALUE_USED(opline)) {
37598 		ZVAL_FALSE(EX_VAR(opline->result.var));
37599 	}
37600 	ZEND_VM_NEXT_OPCODE();
37601 }
37602 
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37603 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37604 {
37605 	USE_OPLINE
37606 
37607 	zval *array_ptr, *result;
37608 
37609 	SAVE_OPLINE();
37610 
37611 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37612 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
37613 		result = EX_VAR(opline->result.var);
37614 		ZVAL_COPY_VALUE(result, array_ptr);
37615 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
37616 			Z_ADDREF_P(array_ptr);
37617 		}
37618 		Z_FE_POS_P(result) = 0;
37619 
37620 		ZEND_VM_NEXT_OPCODE();
37621 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
37622 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
37623 			HashTable *properties;
37624 			if (Z_OBJ_P(array_ptr)->properties
37625 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
37626 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
37627 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
37628 				}
37629 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
37630 			}
37631 
37632 			properties = Z_OBJPROP_P(array_ptr);
37633 			result = EX_VAR(opline->result.var);
37634 			ZVAL_COPY_VALUE(result, array_ptr);
37635 			if (IS_CV != IS_TMP_VAR) {
37636 				Z_ADDREF_P(array_ptr);
37637 			}
37638 
37639 			if (zend_hash_num_elements(properties) == 0) {
37640 				Z_FE_ITER_P(result) = (uint32_t) -1;
37641 
37642 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
37643 			}
37644 
37645 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
37646 
37647 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37648 		} else {
37649 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
37650 
37651 			if (UNEXPECTED(EG(exception))) {
37652 				HANDLE_EXCEPTION();
37653 			} else if (is_empty) {
37654 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37655 			} else {
37656 				ZEND_VM_NEXT_OPCODE();
37657 			}
37658 		}
37659 	} else {
37660 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
37661 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37662 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
37663 
37664 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
37665 	}
37666 }
37667 
ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37668 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37669 {
37670 	USE_OPLINE
37671 
37672 	zval *array_ptr, *array_ref;
37673 
37674 	SAVE_OPLINE();
37675 
37676 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
37677 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37678 		if (Z_ISREF_P(array_ref)) {
37679 			array_ptr = Z_REFVAL_P(array_ref);
37680 		}
37681 	} else {
37682 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37683 	}
37684 
37685 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
37686 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
37687 			if (array_ptr == array_ref) {
37688 				ZVAL_NEW_REF(array_ref, array_ref);
37689 				array_ptr = Z_REFVAL_P(array_ref);
37690 			}
37691 			Z_ADDREF_P(array_ref);
37692 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
37693 		} else {
37694 			array_ref = EX_VAR(opline->result.var);
37695 			ZVAL_NEW_REF(array_ref, array_ptr);
37696 			array_ptr = Z_REFVAL_P(array_ref);
37697 		}
37698 		if (IS_CV == IS_CONST) {
37699 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
37700 		} else {
37701 			SEPARATE_ARRAY(array_ptr);
37702 		}
37703 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
37704 
37705 		if (IS_CV == IS_VAR) {
37706 
37707 		}
37708 		ZEND_VM_NEXT_OPCODE();
37709 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
37710 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
37711 			HashTable *properties;
37712 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
37713 				if (array_ptr == array_ref) {
37714 					ZVAL_NEW_REF(array_ref, array_ref);
37715 					array_ptr = Z_REFVAL_P(array_ref);
37716 				}
37717 				Z_ADDREF_P(array_ref);
37718 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
37719 			} else {
37720 				array_ptr = EX_VAR(opline->result.var);
37721 				ZVAL_COPY_VALUE(array_ptr, array_ref);
37722 			}
37723 			if (Z_OBJ_P(array_ptr)->properties
37724 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
37725 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
37726 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
37727 				}
37728 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
37729 			}
37730 
37731 			properties = Z_OBJPROP_P(array_ptr);
37732 			if (zend_hash_num_elements(properties) == 0) {
37733 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
37734 
37735 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
37736 			}
37737 
37738 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
37739 
37740 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37741 		} else {
37742 			zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
37743 
37744 			if (IS_CV == IS_VAR) {
37745 
37746 			} else {
37747 
37748 			}
37749 			if (UNEXPECTED(EG(exception))) {
37750 				HANDLE_EXCEPTION();
37751 			} else if (is_empty) {
37752 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37753 			} else {
37754 				ZEND_VM_NEXT_OPCODE();
37755 			}
37756 		}
37757 	} else {
37758 		zend_error(E_WARNING, "Invalid argument supplied for foreach()");
37759 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37760 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
37761 		if (IS_CV == IS_VAR) {
37762 
37763 		} else {
37764 
37765 		}
37766 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
37767 	}
37768 }
37769 
ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37771 {
37772 	USE_OPLINE
37773 
37774 	zval *value;
37775 	zval *ref = NULL;
37776 	int ret;
37777 
37778 	SAVE_OPLINE();
37779 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37780 
37781 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
37782 		if (IS_CV == IS_VAR) {
37783 			ref = value;
37784 		}
37785 		value = Z_REFVAL_P(value);
37786 	}
37787 
37788 	ret = i_zend_is_true(value);
37789 
37790 	if (UNEXPECTED(EG(exception))) {
37791 
37792 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37793 		HANDLE_EXCEPTION();
37794 	}
37795 
37796 	if (ret) {
37797 		zval *result = EX_VAR(opline->result.var);
37798 
37799 		ZVAL_COPY_VALUE(result, value);
37800 		if (IS_CV == IS_CONST) {
37801 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
37802 		} else if (IS_CV == IS_CV) {
37803 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
37804 		} else if (IS_CV == IS_VAR && ref) {
37805 			zend_reference *r = Z_REF_P(ref);
37806 
37807 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
37808 				efree_size(r, sizeof(zend_reference));
37809 			} else if (Z_OPT_REFCOUNTED_P(result)) {
37810 				Z_ADDREF_P(result);
37811 			}
37812 		}
37813 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37814 	}
37815 
37816 	ZEND_VM_NEXT_OPCODE();
37817 }
37818 
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37819 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37820 {
37821 	USE_OPLINE
37822 
37823 	zval *value;
37824 	zval *ref = NULL;
37825 
37826 	SAVE_OPLINE();
37827 	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
37828 
37829 	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
37830 		if (IS_CV & IS_VAR) {
37831 			ref = value;
37832 		}
37833 		value = Z_REFVAL_P(value);
37834 	}
37835 
37836 	if (Z_TYPE_P(value) > IS_NULL) {
37837 		zval *result = EX_VAR(opline->result.var);
37838 		ZVAL_COPY_VALUE(result, value);
37839 		if (IS_CV == IS_CONST) {
37840 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
37841 		} else if (IS_CV == IS_CV) {
37842 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
37843 		} else if ((IS_CV & IS_VAR) && ref) {
37844 			zend_reference *r = Z_REF_P(ref);
37845 
37846 			if (UNEXPECTED(GC_DELREF(r) == 0)) {
37847 				efree_size(r, sizeof(zend_reference));
37848 			} else if (Z_OPT_REFCOUNTED_P(result)) {
37849 				Z_ADDREF_P(result);
37850 			}
37851 		}
37852 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
37853 	}
37854 
37855 	ZEND_VM_NEXT_OPCODE();
37856 }
37857 
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37858 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37859 {
37860 	USE_OPLINE
37861 
37862 	zval *value;
37863 	zval *result = EX_VAR(opline->result.var);
37864 
37865 	value = EX_VAR(opline->op1.var);
37866 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
37867 		SAVE_OPLINE();
37868 		ZVAL_UNDEFINED_OP1();
37869 		ZVAL_NULL(result);
37870 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37871 	}
37872 
37873 	if (IS_CV == IS_CV) {
37874 		ZVAL_COPY_DEREF(result, value);
37875 	} else if (IS_CV == IS_VAR) {
37876 		if (UNEXPECTED(Z_ISREF_P(value))) {
37877 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
37878 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
37879 				efree_size(Z_REF_P(value), sizeof(zend_reference));
37880 			} else if (Z_OPT_REFCOUNTED_P(result)) {
37881 				Z_ADDREF_P(result);
37882 			}
37883 		} else {
37884 			ZVAL_COPY_VALUE(result, value);
37885 		}
37886 	} else {
37887 		ZVAL_COPY_VALUE(result, value);
37888 		if (IS_CV == IS_CONST) {
37889 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
37890 				Z_ADDREF_P(result);
37891 			}
37892 		}
37893 	}
37894 	ZEND_VM_NEXT_OPCODE();
37895 }
37896 
ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37898 {
37899 	USE_OPLINE
37900 
37901 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
37902 
37903 	zval *val;
37904 
37905 
37906 	SAVE_OPLINE();
37907 	val = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
37908 
37909 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
37910 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
37911 
37912 		UNDEF_RESULT();
37913 		HANDLE_EXCEPTION();
37914 	}
37915 
37916 	if (Z_TYPE_P(val) == IS_ARRAY) {
37917 		ZVAL_COPY_VALUE(&generator->values, val);
37918 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) {
37919 			Z_ADDREF_P(val);
37920 		}
37921 		Z_FE_POS(generator->values) = 0;
37922 
37923 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
37924 		zend_class_entry *ce = Z_OBJCE_P(val);
37925 		if (ce == zend_ce_generator) {
37926 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
37927 
37928 			if (IS_CV != IS_TMP_VAR) {
37929 				Z_ADDREF_P(val);
37930 			}
37931 
37932 			if (Z_ISUNDEF(new_gen->retval)) {
37933 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
37934 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
37935 					zval_ptr_dtor(val);
37936 					UNDEF_RESULT();
37937 					HANDLE_EXCEPTION();
37938 				} else {
37939 					zend_generator_yield_from(generator, new_gen);
37940 				}
37941 			} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
37942 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
37943 				zval_ptr_dtor(val);
37944 				UNDEF_RESULT();
37945 				HANDLE_EXCEPTION();
37946 			} else {
37947 				if (RETURN_VALUE_USED(opline)) {
37948 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
37949 				}
37950 				ZEND_VM_NEXT_OPCODE();
37951 			}
37952 		} else {
37953 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
37954 
37955 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
37956 				if (!EG(exception)) {
37957 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
37958 				}
37959 				UNDEF_RESULT();
37960 				HANDLE_EXCEPTION();
37961 			}
37962 
37963 			iter->index = 0;
37964 			if (iter->funcs->rewind) {
37965 				iter->funcs->rewind(iter);
37966 				if (UNEXPECTED(EG(exception) != NULL)) {
37967 					OBJ_RELEASE(&iter->std);
37968 					UNDEF_RESULT();
37969 					HANDLE_EXCEPTION();
37970 				}
37971 			}
37972 
37973 			ZVAL_OBJ(&generator->values, &iter->std);
37974 		}
37975 	} else {
37976 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
37977 
37978 		UNDEF_RESULT();
37979 		HANDLE_EXCEPTION();
37980 	}
37981 
37982 	/* This is the default return value
37983 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
37984 	if (RETURN_VALUE_USED(opline)) {
37985 		ZVAL_NULL(EX_VAR(opline->result.var));
37986 	}
37987 
37988 	/* This generator has no send target (though the generator we delegate to might have one) */
37989 	generator->send_target = NULL;
37990 
37991 	/* We increment to the next op, so we are at the correct position when the
37992 	 * generator is resumed. */
37993 	ZEND_VM_INC_OPCODE();
37994 
37995 	/* The GOTO VM uses a local opline variable. We need to set the opline
37996 	 * variable in execute_data so we don't resume at an old position. */
37997 	SAVE_OPLINE();
37998 
37999 	ZEND_VM_RETURN();
38000 }
38001 
ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38002 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38003 {
38004 	USE_OPLINE
38005 	zval *value;
38006 
38007 
38008 	value = EX_VAR(opline->op1.var);
38009 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
38010 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
38011 
38012 		ZEND_VM_NEXT_OPCODE();
38013 	} else {
38014 		zend_bool strict;
38015 
38016 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
38017 			value = Z_REFVAL_P(value);
38018 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
38019 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
38020 
38021 				ZEND_VM_NEXT_OPCODE();
38022 			}
38023 		}
38024 
38025 		SAVE_OPLINE();
38026 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38027 			value = ZVAL_UNDEFINED_OP1();
38028 		}
38029 		strict = EX_USES_STRICT_TYPES();
38030 		do {
38031 			if (EXPECTED(!strict)) {
38032 				zend_string *str;
38033 				zval tmp;
38034 
38035 				ZVAL_COPY(&tmp, value);
38036 				if (zend_parse_arg_str_weak(&tmp, &str)) {
38037 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
38038 					zval_ptr_dtor(&tmp);
38039 					break;
38040 				}
38041 				zval_ptr_dtor(&tmp);
38042 			}
38043 			if (!EG(exception)) {
38044 				zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value)));
38045 			}
38046 			ZVAL_NULL(EX_VAR(opline->result.var));
38047 		} while (0);
38048 	}
38049 
38050 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38051 }
38052 
ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38053 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38054 {
38055 	USE_OPLINE
38056 	zval *value;
38057 	int result = 0;
38058 
38059 
38060 	value = EX_VAR(opline->op1.var);
38061 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
38062 type_check_resource:
38063 		if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE)
38064 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
38065 			result = 1;
38066 		}
38067 	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
38068 		value = Z_REFVAL_P(value);
38069 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
38070 			goto type_check_resource;
38071 		}
38072 	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
38073 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
38074 		SAVE_OPLINE();
38075 		ZVAL_UNDEFINED_OP1();
38076 		if (UNEXPECTED(EG(exception))) {
38077 			ZVAL_UNDEF(EX_VAR(opline->result.var));
38078 			HANDLE_EXCEPTION();
38079 		}
38080 	}
38081 	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38082 		SAVE_OPLINE();
38083 
38084 		ZEND_VM_SMART_BRANCH(result, 1);
38085 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38086 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38087 	} else {
38088 		ZEND_VM_SMART_BRANCH(result, 0);
38089 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
38090 		ZEND_VM_NEXT_OPCODE();
38091 	}
38092 }
38093 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38094 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38095 {
38096 	USE_OPLINE
38097 	zval *var_ptr;
38098 
38099 	var_ptr = EX_VAR(opline->op1.var);
38100 	Z_LVAL_P(var_ptr)++;
38101 	if (UNEXPECTED(0)) {
38102 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38103 	}
38104 	ZEND_VM_NEXT_OPCODE();
38105 }
38106 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38107 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38108 {
38109 	USE_OPLINE
38110 	zval *var_ptr;
38111 
38112 	var_ptr = EX_VAR(opline->op1.var);
38113 	Z_LVAL_P(var_ptr)++;
38114 	if (UNEXPECTED(1)) {
38115 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38116 	}
38117 	ZEND_VM_NEXT_OPCODE();
38118 }
38119 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38120 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38121 {
38122 	USE_OPLINE
38123 	zval *var_ptr;
38124 
38125 	var_ptr = EX_VAR(opline->op1.var);
38126 	fast_long_increment_function(var_ptr);
38127 	if (UNEXPECTED(0)) {
38128 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38129 	}
38130 	ZEND_VM_NEXT_OPCODE();
38131 }
38132 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38133 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38134 {
38135 	USE_OPLINE
38136 	zval *var_ptr;
38137 
38138 	var_ptr = EX_VAR(opline->op1.var);
38139 	fast_long_increment_function(var_ptr);
38140 	if (UNEXPECTED(1)) {
38141 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38142 	}
38143 	ZEND_VM_NEXT_OPCODE();
38144 }
38145 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38146 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38147 {
38148 	USE_OPLINE
38149 	zval *var_ptr;
38150 
38151 	var_ptr = EX_VAR(opline->op1.var);
38152 	Z_LVAL_P(var_ptr)--;
38153 	if (UNEXPECTED(0)) {
38154 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38155 	}
38156 	ZEND_VM_NEXT_OPCODE();
38157 }
38158 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38159 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38160 {
38161 	USE_OPLINE
38162 	zval *var_ptr;
38163 
38164 	var_ptr = EX_VAR(opline->op1.var);
38165 	Z_LVAL_P(var_ptr)--;
38166 	if (UNEXPECTED(1)) {
38167 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38168 	}
38169 	ZEND_VM_NEXT_OPCODE();
38170 }
38171 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38172 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38173 {
38174 	USE_OPLINE
38175 	zval *var_ptr;
38176 
38177 	var_ptr = EX_VAR(opline->op1.var);
38178 	fast_long_decrement_function(var_ptr);
38179 	if (UNEXPECTED(0)) {
38180 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38181 	}
38182 	ZEND_VM_NEXT_OPCODE();
38183 }
38184 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38185 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38186 {
38187 	USE_OPLINE
38188 	zval *var_ptr;
38189 
38190 	var_ptr = EX_VAR(opline->op1.var);
38191 	fast_long_decrement_function(var_ptr);
38192 	if (UNEXPECTED(1)) {
38193 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
38194 	}
38195 	ZEND_VM_NEXT_OPCODE();
38196 }
38197 
ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38198 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38199 {
38200 	USE_OPLINE
38201 	zval *var_ptr;
38202 
38203 	var_ptr = EX_VAR(opline->op1.var);
38204 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38205 	Z_LVAL_P(var_ptr)++;
38206 	ZEND_VM_NEXT_OPCODE();
38207 }
38208 
ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38209 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38210 {
38211 	USE_OPLINE
38212 	zval *var_ptr;
38213 
38214 	var_ptr = EX_VAR(opline->op1.var);
38215 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38216 	fast_long_increment_function(var_ptr);
38217 	ZEND_VM_NEXT_OPCODE();
38218 }
38219 
ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38220 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38221 {
38222 	USE_OPLINE
38223 	zval *var_ptr;
38224 
38225 	var_ptr = EX_VAR(opline->op1.var);
38226 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38227 	Z_LVAL_P(var_ptr)--;
38228 	ZEND_VM_NEXT_OPCODE();
38229 }
38230 
ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38231 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38232 {
38233 	USE_OPLINE
38234 	zval *var_ptr;
38235 
38236 	var_ptr = EX_VAR(opline->op1.var);
38237 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
38238 	fast_long_decrement_function(var_ptr);
38239 	ZEND_VM_NEXT_OPCODE();
38240 }
38241 
ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38242 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38243 {
38244 	USE_OPLINE
38245 	zval *varptr, *arg;
38246 
38247 
38248 	varptr = EX_VAR(opline->op1.var);
38249 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
38250 
38251 	if (IS_CV == IS_CV) {
38252 		ZVAL_COPY(arg, varptr);
38253 	} else /* if (IS_CV == IS_VAR) */ {
38254 		ZVAL_COPY_VALUE(arg, varptr);
38255 	}
38256 
38257 	ZEND_VM_NEXT_OPCODE();
38258 }
38259 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38260 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38261 {
38262 	USE_OPLINE
38263 	zval *varptr, *arg;
38264 
38265 	uint32_t arg_num = opline->op2.num;
38266 
38267 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
38268 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38269 	}
38270 
38271 	varptr = EX_VAR(opline->op1.var);
38272 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
38273 
38274 	if (IS_CV == IS_CV) {
38275 		ZVAL_COPY(arg, varptr);
38276 	} else /* if (IS_CV == IS_VAR) */ {
38277 		ZVAL_COPY_VALUE(arg, varptr);
38278 	}
38279 
38280 	ZEND_VM_NEXT_OPCODE();
38281 }
38282 
ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38284 {
38285 	USE_OPLINE
38286 
38287 	zval *op1, *op2;
38288 
38289 	SAVE_OPLINE();
38290 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38291 	op2 = RT_CONSTANT(opline, opline->op2);
38292 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
38293 
38294 
38295 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38296 }
38297 
ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38298 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38299 {
38300 	USE_OPLINE
38301 
38302 	zval *op1, *op2;
38303 
38304 	SAVE_OPLINE();
38305 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38306 	op2 = RT_CONSTANT(opline, opline->op2);
38307 	pow_function(EX_VAR(opline->result.var), op1, op2);
38308 
38309 
38310 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38311 }
38312 
ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38314 {
38315 	USE_OPLINE
38316 
38317 	zval *op1, *op2;
38318 
38319 	op1 = EX_VAR(opline->op1.var);
38320 	op2 = RT_CONSTANT(opline, opline->op2);
38321 
38322 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
38323 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
38324 		zend_string *op1_str = Z_STR_P(op1);
38325 		zend_string *op2_str = Z_STR_P(op2);
38326 		zend_string *str;
38327 
38328 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
38329 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
38330 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
38331 			} else {
38332 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
38333 			}
38334 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38335 				zend_string_release_ex(op1_str, 0);
38336 			}
38337 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
38338 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
38339 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
38340 			} else {
38341 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
38342 			}
38343 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38344 				zend_string_release_ex(op2_str, 0);
38345 			}
38346 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
38347 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
38348 		    size_t len = ZSTR_LEN(op1_str);
38349 
38350 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
38351 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
38352 			}
38353 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
38354 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
38355 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
38356 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38357 				zend_string_release_ex(op2_str, 0);
38358 			}
38359 		} else {
38360 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
38361 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
38362 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
38363 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
38364 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38365 				zend_string_release_ex(op1_str, 0);
38366 			}
38367 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38368 				zend_string_release_ex(op2_str, 0);
38369 			}
38370 		}
38371 		ZEND_VM_NEXT_OPCODE();
38372 	} else {
38373 		SAVE_OPLINE();
38374 
38375 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
38376 			op1 = ZVAL_UNDEFINED_OP1();
38377 		}
38378 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
38379 			op2 = ZVAL_UNDEFINED_OP2();
38380 		}
38381 		concat_function(EX_VAR(opline->result.var), op1, op2);
38382 
38383 
38384 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38385 	}
38386 }
38387 
ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38388 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38389 {
38390 	USE_OPLINE
38391 
38392 	zval *op1, *op2;
38393 	zend_bool result;
38394 
38395 	SAVE_OPLINE();
38396 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38397 	op2 = RT_CONSTANT(opline, opline->op2);
38398 	result = fast_is_identical_function(op1, op2);
38399 
38400 
38401 	ZEND_VM_SMART_BRANCH(result, 1);
38402 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
38403 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38404 }
38405 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38407 {
38408 	USE_OPLINE
38409 
38410 	zval *op1, *op2;
38411 	zend_bool result;
38412 
38413 	SAVE_OPLINE();
38414 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38415 	op2 = RT_CONSTANT(opline, opline->op2);
38416 	result = fast_is_not_identical_function(op1, op2);
38417 
38418 
38419 	ZEND_VM_SMART_BRANCH(result, 1);
38420 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
38421 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38422 }
38423 
ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38424 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38425 {
38426 	USE_OPLINE
38427 
38428 	zval *op1, *op2;
38429 	double d1, d2;
38430 
38431 	op1 = EX_VAR(opline->op1.var);
38432 	op2 = RT_CONSTANT(opline, opline->op2);
38433 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38434 		/* pass */
38435 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38436 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38437 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
38438 is_equal_true:
38439 
38440 				ZVAL_TRUE(EX_VAR(opline->result.var));
38441 				ZEND_VM_NEXT_OPCODE();
38442 			} else {
38443 is_equal_false:
38444 
38445 				ZVAL_FALSE(EX_VAR(opline->result.var));
38446 				ZEND_VM_NEXT_OPCODE();
38447 			}
38448 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38449 			d1 = (double)Z_LVAL_P(op1);
38450 			d2 = Z_DVAL_P(op2);
38451 			goto is_equal_double;
38452 		}
38453 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38454 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38455 			d1 = Z_DVAL_P(op1);
38456 			d2 = Z_DVAL_P(op2);
38457 is_equal_double:
38458 			if (d1 == d2) {
38459 				goto is_equal_true;
38460 			} else {
38461 				goto is_equal_false;
38462 			}
38463 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38464 			d1 = Z_DVAL_P(op1);
38465 			d2 = (double)Z_LVAL_P(op2);
38466 			goto is_equal_double;
38467 		}
38468 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38469 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38470 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38471 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38472 				zval_ptr_dtor_str(op1);
38473 			}
38474 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38475 				zval_ptr_dtor_str(op2);
38476 			}
38477 			if (result) {
38478 				goto is_equal_true;
38479 			} else {
38480 				goto is_equal_false;
38481 			}
38482 		}
38483 	}
38484 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38485 }
38486 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38487 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38488 {
38489 	USE_OPLINE
38490 
38491 	zval *op1, *op2;
38492 	double d1, d2;
38493 
38494 	op1 = EX_VAR(opline->op1.var);
38495 	op2 = RT_CONSTANT(opline, opline->op2);
38496 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38497 		/* pass */
38498 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38499 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38500 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
38501 is_equal_true:
38502 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
38503 				ZVAL_TRUE(EX_VAR(opline->result.var));
38504 				ZEND_VM_NEXT_OPCODE();
38505 			} else {
38506 is_equal_false:
38507 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
38508 				ZVAL_FALSE(EX_VAR(opline->result.var));
38509 				ZEND_VM_NEXT_OPCODE();
38510 			}
38511 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38512 			d1 = (double)Z_LVAL_P(op1);
38513 			d2 = Z_DVAL_P(op2);
38514 			goto is_equal_double;
38515 		}
38516 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38517 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38518 			d1 = Z_DVAL_P(op1);
38519 			d2 = Z_DVAL_P(op2);
38520 is_equal_double:
38521 			if (d1 == d2) {
38522 				goto is_equal_true;
38523 			} else {
38524 				goto is_equal_false;
38525 			}
38526 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38527 			d1 = Z_DVAL_P(op1);
38528 			d2 = (double)Z_LVAL_P(op2);
38529 			goto is_equal_double;
38530 		}
38531 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38532 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38533 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38534 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38535 				zval_ptr_dtor_str(op1);
38536 			}
38537 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38538 				zval_ptr_dtor_str(op2);
38539 			}
38540 			if (result) {
38541 				goto is_equal_true;
38542 			} else {
38543 				goto is_equal_false;
38544 			}
38545 		}
38546 	}
38547 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38548 }
38549 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38551 {
38552 	USE_OPLINE
38553 
38554 	zval *op1, *op2;
38555 	double d1, d2;
38556 
38557 	op1 = EX_VAR(opline->op1.var);
38558 	op2 = RT_CONSTANT(opline, opline->op2);
38559 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38560 		/* pass */
38561 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38562 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38563 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
38564 is_equal_true:
38565 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
38566 				ZVAL_TRUE(EX_VAR(opline->result.var));
38567 				ZEND_VM_NEXT_OPCODE();
38568 			} else {
38569 is_equal_false:
38570 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
38571 				ZVAL_FALSE(EX_VAR(opline->result.var));
38572 				ZEND_VM_NEXT_OPCODE();
38573 			}
38574 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38575 			d1 = (double)Z_LVAL_P(op1);
38576 			d2 = Z_DVAL_P(op2);
38577 			goto is_equal_double;
38578 		}
38579 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38580 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38581 			d1 = Z_DVAL_P(op1);
38582 			d2 = Z_DVAL_P(op2);
38583 is_equal_double:
38584 			if (d1 == d2) {
38585 				goto is_equal_true;
38586 			} else {
38587 				goto is_equal_false;
38588 			}
38589 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38590 			d1 = Z_DVAL_P(op1);
38591 			d2 = (double)Z_LVAL_P(op2);
38592 			goto is_equal_double;
38593 		}
38594 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38595 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38596 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38597 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38598 				zval_ptr_dtor_str(op1);
38599 			}
38600 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38601 				zval_ptr_dtor_str(op2);
38602 			}
38603 			if (result) {
38604 				goto is_equal_true;
38605 			} else {
38606 				goto is_equal_false;
38607 			}
38608 		}
38609 	}
38610 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38611 }
38612 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38614 {
38615 	USE_OPLINE
38616 
38617 	zval *op1, *op2;
38618 	double d1, d2;
38619 
38620 	op1 = EX_VAR(opline->op1.var);
38621 	op2 = RT_CONSTANT(opline, opline->op2);
38622 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38623 		/* pass */
38624 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38625 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38626 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
38627 is_not_equal_true:
38628 
38629 				ZVAL_TRUE(EX_VAR(opline->result.var));
38630 				ZEND_VM_NEXT_OPCODE();
38631 			} else {
38632 is_not_equal_false:
38633 
38634 				ZVAL_FALSE(EX_VAR(opline->result.var));
38635 				ZEND_VM_NEXT_OPCODE();
38636 			}
38637 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38638 			d1 = (double)Z_LVAL_P(op1);
38639 			d2 = Z_DVAL_P(op2);
38640 			goto is_not_equal_double;
38641 		}
38642 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38643 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38644 			d1 = Z_DVAL_P(op1);
38645 			d2 = Z_DVAL_P(op2);
38646 is_not_equal_double:
38647 			if (d1 != d2) {
38648 				goto is_not_equal_true;
38649 			} else {
38650 				goto is_not_equal_false;
38651 			}
38652 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38653 			d1 = Z_DVAL_P(op1);
38654 			d2 = (double)Z_LVAL_P(op2);
38655 			goto is_not_equal_double;
38656 		}
38657 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38658 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38659 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38660 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38661 				zval_ptr_dtor_str(op1);
38662 			}
38663 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38664 				zval_ptr_dtor_str(op2);
38665 			}
38666 			if (!result) {
38667 				goto is_not_equal_true;
38668 			} else {
38669 				goto is_not_equal_false;
38670 			}
38671 		}
38672 	}
38673 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38674 }
38675 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38677 {
38678 	USE_OPLINE
38679 
38680 	zval *op1, *op2;
38681 	double d1, d2;
38682 
38683 	op1 = EX_VAR(opline->op1.var);
38684 	op2 = RT_CONSTANT(opline, opline->op2);
38685 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38686 		/* pass */
38687 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38688 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38689 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
38690 is_not_equal_true:
38691 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
38692 				ZVAL_TRUE(EX_VAR(opline->result.var));
38693 				ZEND_VM_NEXT_OPCODE();
38694 			} else {
38695 is_not_equal_false:
38696 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
38697 				ZVAL_FALSE(EX_VAR(opline->result.var));
38698 				ZEND_VM_NEXT_OPCODE();
38699 			}
38700 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38701 			d1 = (double)Z_LVAL_P(op1);
38702 			d2 = Z_DVAL_P(op2);
38703 			goto is_not_equal_double;
38704 		}
38705 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38706 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38707 			d1 = Z_DVAL_P(op1);
38708 			d2 = Z_DVAL_P(op2);
38709 is_not_equal_double:
38710 			if (d1 != d2) {
38711 				goto is_not_equal_true;
38712 			} else {
38713 				goto is_not_equal_false;
38714 			}
38715 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38716 			d1 = Z_DVAL_P(op1);
38717 			d2 = (double)Z_LVAL_P(op2);
38718 			goto is_not_equal_double;
38719 		}
38720 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38721 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38722 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38723 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38724 				zval_ptr_dtor_str(op1);
38725 			}
38726 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38727 				zval_ptr_dtor_str(op2);
38728 			}
38729 			if (!result) {
38730 				goto is_not_equal_true;
38731 			} else {
38732 				goto is_not_equal_false;
38733 			}
38734 		}
38735 	}
38736 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38737 }
38738 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38739 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38740 {
38741 	USE_OPLINE
38742 
38743 	zval *op1, *op2;
38744 	double d1, d2;
38745 
38746 	op1 = EX_VAR(opline->op1.var);
38747 	op2 = RT_CONSTANT(opline, opline->op2);
38748 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
38749 		/* pass */
38750 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
38751 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38752 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
38753 is_not_equal_true:
38754 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
38755 				ZVAL_TRUE(EX_VAR(opline->result.var));
38756 				ZEND_VM_NEXT_OPCODE();
38757 			} else {
38758 is_not_equal_false:
38759 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
38760 				ZVAL_FALSE(EX_VAR(opline->result.var));
38761 				ZEND_VM_NEXT_OPCODE();
38762 			}
38763 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38764 			d1 = (double)Z_LVAL_P(op1);
38765 			d2 = Z_DVAL_P(op2);
38766 			goto is_not_equal_double;
38767 		}
38768 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
38769 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
38770 			d1 = Z_DVAL_P(op1);
38771 			d2 = Z_DVAL_P(op2);
38772 is_not_equal_double:
38773 			if (d1 != d2) {
38774 				goto is_not_equal_true;
38775 			} else {
38776 				goto is_not_equal_false;
38777 			}
38778 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
38779 			d1 = Z_DVAL_P(op1);
38780 			d2 = (double)Z_LVAL_P(op2);
38781 			goto is_not_equal_double;
38782 		}
38783 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
38784 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
38785 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
38786 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
38787 				zval_ptr_dtor_str(op1);
38788 			}
38789 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
38790 				zval_ptr_dtor_str(op2);
38791 			}
38792 			if (!result) {
38793 				goto is_not_equal_true;
38794 			} else {
38795 				goto is_not_equal_false;
38796 			}
38797 		}
38798 	}
38799 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
38800 }
38801 
ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38802 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38803 {
38804 	USE_OPLINE
38805 
38806 	zval *op1, *op2;
38807 
38808 	SAVE_OPLINE();
38809 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38810 	op2 = RT_CONSTANT(opline, opline->op2);
38811 	compare_function(EX_VAR(opline->result.var), op1, op2);
38812 
38813 
38814 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38815 }
38816 
ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38818 {
38819 	USE_OPLINE
38820 
38821 	zval *op1, *op2;
38822 
38823 	SAVE_OPLINE();
38824 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
38825 	op2 = RT_CONSTANT(opline, opline->op2);
38826 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
38827 
38828 
38829 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38830 }
38831 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38832 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38833 {
38834 	USE_OPLINE
38835 	zend_free_op free_op_data;
38836 	zval *object;
38837 	zval *property;
38838 	zval *value;
38839 	zval *zptr;
38840 	void **cache_slot;
38841 	zend_property_info *prop_info;
38842 
38843 	SAVE_OPLINE();
38844 	object = EX_VAR(opline->op1.var);
38845 
38846 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38847 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38848 	}
38849 
38850 	property = RT_CONSTANT(opline, opline->op2);
38851 
38852 	do {
38853 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
38854 
38855 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38856 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38857 				object = Z_REFVAL_P(object);
38858 				goto assign_op_object;
38859 			}
38860 			if (IS_CV == IS_CV
38861 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38862 				ZVAL_UNDEFINED_OP1();
38863 			}
38864 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
38865 			if (UNEXPECTED(!object)) {
38866 				break;
38867 			}
38868 		}
38869 
38870 assign_op_object:
38871 		/* here we are sure we are dealing with an object */
38872 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
38873 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
38874 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
38875 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38876 					ZVAL_NULL(EX_VAR(opline->result.var));
38877 				}
38878 			} else {
38879 				zval *orig_zptr = zptr;
38880 				zend_reference *ref;
38881 
38882 				do {
38883 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
38884 						ref = Z_REF_P(zptr);
38885 						zptr = Z_REFVAL_P(zptr);
38886 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
38887 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
38888 							break;
38889 						}
38890 					}
38891 
38892 					if (IS_CONST == IS_CONST) {
38893 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
38894 					} else {
38895 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
38896 					}
38897 					if (UNEXPECTED(prop_info)) {
38898 						/* special case for typed properties */
38899 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
38900 					} else {
38901 						zend_binary_op(zptr, zptr, value OPLINE_CC);
38902 					}
38903 				} while (0);
38904 
38905 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38906 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
38907 				}
38908 			}
38909 		} else {
38910 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
38911 		}
38912 	} while (0);
38913 
38914 	FREE_OP(free_op_data);
38915 
38916 
38917 	/* assign_obj has two opcodes! */
38918 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38919 }
38920 
38921 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38922 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38923 {
38924 	USE_OPLINE
38925 	zend_free_op free_op_data1;
38926 	zval *var_ptr;
38927 	zval *value, *container, *dim;
38928 
38929 	SAVE_OPLINE();
38930 	container = EX_VAR(opline->op1.var);
38931 
38932 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
38933 assign_dim_op_array:
38934 		SEPARATE_ARRAY(container);
38935 assign_dim_op_new_array:
38936 		dim = RT_CONSTANT(opline, opline->op2);
38937 		if (IS_CONST == IS_UNUSED) {
38938 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
38939 			if (UNEXPECTED(!var_ptr)) {
38940 				zend_cannot_add_element();
38941 				goto assign_dim_op_ret_null;
38942 			}
38943 		} else {
38944 			if (IS_CONST == IS_CONST) {
38945 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
38946 			} else {
38947 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
38948 			}
38949 			if (UNEXPECTED(!var_ptr)) {
38950 				goto assign_dim_op_ret_null;
38951 			}
38952 		}
38953 
38954 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
38955 
38956 		do {
38957 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
38958 				zend_reference *ref = Z_REF_P(var_ptr);
38959 				var_ptr = Z_REFVAL_P(var_ptr);
38960 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
38961 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
38962 					break;
38963 				}
38964 			}
38965 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
38966 		} while (0);
38967 
38968 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38969 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
38970 		}
38971 		FREE_OP(free_op_data1);
38972 	} else {
38973 		if (EXPECTED(Z_ISREF_P(container))) {
38974 			container = Z_REFVAL_P(container);
38975 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
38976 				goto assign_dim_op_array;
38977 			}
38978 		}
38979 
38980 		dim = RT_CONSTANT(opline, opline->op2);
38981 
38982 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
38983 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
38984 				dim++;
38985 			}
38986 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
38987 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
38988 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
38989 				ZVAL_UNDEFINED_OP1();
38990 			}
38991 			ZVAL_ARR(container, zend_new_array(8));
38992 			goto assign_dim_op_new_array;
38993 		} else {
38994 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
38995 assign_dim_op_ret_null:
38996 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
38997 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38998 				ZVAL_NULL(EX_VAR(opline->result.var));
38999 			}
39000 		}
39001 	}
39002 
39003 
39004 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39005 }
39006 
ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39007 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39008 {
39009 	USE_OPLINE
39010 
39011 	zval *var_ptr;
39012 	zval *value;
39013 
39014 	SAVE_OPLINE();
39015 	value = RT_CONSTANT(opline, opline->op2);
39016 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
39017 
39018 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
39019 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39020 			ZVAL_NULL(EX_VAR(opline->result.var));
39021 		}
39022 	} else {
39023 		do {
39024 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39025 				zend_reference *ref = Z_REF_P(var_ptr);
39026 				var_ptr = Z_REFVAL_P(var_ptr);
39027 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39028 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
39029 					break;
39030 				}
39031 			}
39032 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
39033 		} while (0);
39034 
39035 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39036 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39037 		}
39038 	}
39039 
39040 
39041 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39042 }
39043 
ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39044 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39045 {
39046 	USE_OPLINE
39047 
39048 	zval *object;
39049 	zval *property;
39050 	zval *zptr;
39051 	void **cache_slot;
39052 	zend_property_info *prop_info;
39053 
39054 	SAVE_OPLINE();
39055 	object = EX_VAR(opline->op1.var);
39056 
39057 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39058 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39059 	}
39060 
39061 	property = RT_CONSTANT(opline, opline->op2);
39062 
39063 	do {
39064 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39065 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39066 				object = Z_REFVAL_P(object);
39067 				goto pre_incdec_object;
39068 			}
39069 			if (IS_CV == IS_CV
39070 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39071 				ZVAL_UNDEFINED_OP1();
39072 			}
39073 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39074 			if (UNEXPECTED(!object)) {
39075 				break;
39076 			}
39077 		}
39078 
39079 pre_incdec_object:
39080 		/* here we are sure we are dealing with an object */
39081 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
39082 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
39083 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
39084 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39085 					ZVAL_NULL(EX_VAR(opline->result.var));
39086 				}
39087 			} else {
39088 				if (IS_CONST == IS_CONST) {
39089 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
39090 				} else {
39091 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
39092 				}
39093 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
39094 			}
39095 		} else {
39096 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
39097 		}
39098 	} while (0);
39099 
39100 
39101 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39102 }
39103 
ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39104 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39105 {
39106 	USE_OPLINE
39107 
39108 	zval *object;
39109 	zval *property;
39110 	zval *zptr;
39111 	void **cache_slot;
39112 	zend_property_info *prop_info;
39113 
39114 	SAVE_OPLINE();
39115 	object = EX_VAR(opline->op1.var);
39116 
39117 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39118 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39119 	}
39120 
39121 	property = RT_CONSTANT(opline, opline->op2);
39122 
39123 	do {
39124 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39125 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39126 				object = Z_REFVAL_P(object);
39127 				goto post_incdec_object;
39128 			}
39129 			if (IS_CV == IS_CV
39130 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39131 				ZVAL_UNDEFINED_OP1();
39132 			}
39133 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39134 			if (UNEXPECTED(!object)) {
39135 				break;
39136 			}
39137 		}
39138 
39139 post_incdec_object:
39140 		/* here we are sure we are dealing with an object */
39141 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
39142 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
39143 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
39144 				ZVAL_NULL(EX_VAR(opline->result.var));
39145 			} else {
39146 				if (IS_CONST == IS_CONST) {
39147 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
39148 				} else {
39149 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
39150 				}
39151 
39152 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
39153 			}
39154 		} else {
39155 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
39156 		}
39157 	} while (0);
39158 
39159 
39160 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39161 }
39162 
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39163 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39164 {
39165 	USE_OPLINE
39166 
39167 	zval *container, *dim, *value;
39168 
39169 	SAVE_OPLINE();
39170 	container = EX_VAR(opline->op1.var);
39171 	dim = RT_CONSTANT(opline, opline->op2);
39172 	if (IS_CV != IS_CONST) {
39173 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
39174 fetch_dim_r_array:
39175 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
39176 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
39177 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
39178 			container = Z_REFVAL_P(container);
39179 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
39180 				goto fetch_dim_r_array;
39181 			} else {
39182 				goto fetch_dim_r_slow;
39183 			}
39184 		} else {
39185 fetch_dim_r_slow:
39186 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
39187 				dim++;
39188 			}
39189 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
39190 		}
39191 	} else {
39192 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
39193 	}
39194 
39195 
39196 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39197 }
39198 
ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39199 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39200 {
39201 	USE_OPLINE
39202 	zend_free_op free_op1;
39203 	zval *container;
39204 
39205 	SAVE_OPLINE();
39206 	container = EX_VAR(opline->op1.var);
39207 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
39208 
39209 	if (IS_CV == IS_VAR) {
39210 		zval *result = EX_VAR(opline->result.var);
39211 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39212 	}
39213 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39214 }
39215 
ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39216 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39217 {
39218 	USE_OPLINE
39219 	zend_free_op free_op1;
39220 	zval *container;
39221 
39222 	SAVE_OPLINE();
39223 	container = EX_VAR(opline->op1.var);
39224 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
39225 
39226 	if (IS_CV == IS_VAR) {
39227 		zval *result = EX_VAR(opline->result.var);
39228 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39229 	}
39230 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39231 }
39232 
ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39234 {
39235 	USE_OPLINE
39236 
39237 	zval *container;
39238 
39239 	SAVE_OPLINE();
39240 	container = EX_VAR(opline->op1.var);
39241 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
39242 
39243 
39244 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39245 }
39246 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39247 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39248 {
39249 #if 0
39250 	USE_OPLINE
39251 #endif
39252 
39253 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
39254         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39255 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39256         }
39257 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39258 	} else {
39259 		if (IS_CONST == IS_UNUSED) {
39260 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39261 		}
39262 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39263 	}
39264 }
39265 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39267 {
39268 	USE_OPLINE
39269 	zend_free_op free_op1;
39270 	zval *container;
39271 
39272 	SAVE_OPLINE();
39273 	container = EX_VAR(opline->op1.var);
39274 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
39275 
39276 	if (IS_CV == IS_VAR) {
39277 		zval *result = EX_VAR(opline->result.var);
39278 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39279 	}
39280 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39281 }
39282 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39283 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39284 {
39285 	USE_OPLINE
39286 
39287 	zval *container;
39288 
39289 	zval *offset;
39290 	void **cache_slot = NULL;
39291 
39292 	SAVE_OPLINE();
39293 	container = EX_VAR(opline->op1.var);
39294 
39295 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39296 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39297 	}
39298 
39299 	offset = RT_CONSTANT(opline, opline->op2);
39300 
39301 	if (IS_CV == IS_CONST ||
39302 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
39303 	    do {
39304 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
39305 				container = Z_REFVAL_P(container);
39306 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
39307 					break;
39308 				}
39309 			}
39310 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39311 				ZVAL_UNDEFINED_OP1();
39312 			}
39313 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
39314 				ZVAL_UNDEFINED_OP2();
39315 			}
39316 			zend_wrong_property_read(offset);
39317 			ZVAL_NULL(EX_VAR(opline->result.var));
39318 			goto fetch_obj_r_finish;
39319 		} while (0);
39320 	}
39321 
39322 	/* here we are sure we are dealing with an object */
39323 	do {
39324 		zend_object *zobj = Z_OBJ_P(container);
39325 		zval *retval;
39326 
39327 		if (IS_CONST == IS_CONST) {
39328 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
39329 
39330 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
39331 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
39332 
39333 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
39334 					retval = OBJ_PROP(zobj, prop_offset);
39335 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
39336 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39337 							goto fetch_obj_r_copy;
39338 						} else {
39339 fetch_obj_r_fast_copy:
39340 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
39341 							ZEND_VM_NEXT_OPCODE();
39342 						}
39343 					}
39344 				} else if (EXPECTED(zobj->properties != NULL)) {
39345 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
39346 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
39347 
39348 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
39349 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
39350 
39351 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
39352 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
39353 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
39354 						          EXPECTED(p->key != NULL) &&
39355 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
39356 								retval = &p->val;
39357 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39358 									goto fetch_obj_r_copy;
39359 								} else {
39360 									goto fetch_obj_r_fast_copy;
39361 								}
39362 							}
39363 						}
39364 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
39365 					}
39366 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
39367 					if (EXPECTED(retval)) {
39368 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
39369 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
39370 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39371 							goto fetch_obj_r_copy;
39372 						} else {
39373 							goto fetch_obj_r_fast_copy;
39374 						}
39375 					}
39376 				}
39377 			}
39378 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
39379 			ZVAL_UNDEFINED_OP2();
39380 		}
39381 
39382 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
39383 
39384 		if (retval != EX_VAR(opline->result.var)) {
39385 fetch_obj_r_copy:
39386 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
39387 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
39388 			zend_unwrap_reference(retval);
39389 		}
39390 	} while (0);
39391 
39392 fetch_obj_r_finish:
39393 
39394 
39395 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39396 }
39397 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39398 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39399 {
39400 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39401 }
39402 
ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39403 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39404 {
39405 	USE_OPLINE
39406 	zend_free_op free_op1;
39407 	zval *property, *container, *result;
39408 
39409 	SAVE_OPLINE();
39410 
39411 	container = EX_VAR(opline->op1.var);
39412 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39413 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39414 	}
39415 
39416 	property = RT_CONSTANT(opline, opline->op2);
39417 	result = EX_VAR(opline->result.var);
39418 	zend_fetch_property_address(
39419 		result, container, IS_CV, property, IS_CONST,
39420 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
39421 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
39422 
39423 	if (IS_CV == IS_VAR) {
39424 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39425 	}
39426 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39427 }
39428 
ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39430 {
39431 	USE_OPLINE
39432 	zend_free_op free_op1;
39433 	zval *property, *container, *result;
39434 
39435 	SAVE_OPLINE();
39436 	container = EX_VAR(opline->op1.var);
39437 
39438 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39439 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39440 	}
39441 	property = RT_CONSTANT(opline, opline->op2);
39442 	result = EX_VAR(opline->result.var);
39443 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
39444 
39445 	if (IS_CV == IS_VAR) {
39446 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39447 	}
39448 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39449 }
39450 
ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39452 {
39453 	USE_OPLINE
39454 
39455 	zval *container;
39456 
39457 	zval *offset;
39458 	void **cache_slot = NULL;
39459 
39460 	SAVE_OPLINE();
39461 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
39462 
39463 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39464 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39465 	}
39466 
39467 	offset = RT_CONSTANT(opline, opline->op2);
39468 
39469 	if (IS_CV == IS_CONST ||
39470 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
39471 		do {
39472 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
39473 				container = Z_REFVAL_P(container);
39474 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
39475 					break;
39476 				}
39477 			}
39478 			ZVAL_NULL(EX_VAR(opline->result.var));
39479 			goto fetch_obj_is_finish;
39480 		} while (0);
39481 	}
39482 
39483 	/* here we are sure we are dealing with an object */
39484 	do {
39485 		zend_object *zobj = Z_OBJ_P(container);
39486 		zval *retval;
39487 
39488 		if (IS_CONST == IS_CONST) {
39489 			cache_slot = CACHE_ADDR(opline->extended_value);
39490 
39491 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
39492 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
39493 
39494 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
39495 					retval = OBJ_PROP(zobj, prop_offset);
39496 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
39497 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39498 							goto fetch_obj_is_copy;
39499 						} else {
39500 fetch_obj_is_fast_copy:
39501 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
39502 							ZEND_VM_NEXT_OPCODE();
39503 						}
39504 					}
39505 				} else if (EXPECTED(zobj->properties != NULL)) {
39506 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
39507 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
39508 
39509 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
39510 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
39511 
39512 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
39513 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
39514 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
39515 						          EXPECTED(p->key != NULL) &&
39516 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
39517 								retval = &p->val;
39518 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39519 									goto fetch_obj_is_copy;
39520 								} else {
39521 									goto fetch_obj_is_fast_copy;
39522 								}
39523 							}
39524 						}
39525 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
39526 					}
39527 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
39528 					if (EXPECTED(retval)) {
39529 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
39530 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
39531 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
39532 							goto fetch_obj_is_copy;
39533 						} else {
39534 							goto fetch_obj_is_fast_copy;
39535 						}
39536 					}
39537 				}
39538 			}
39539 		}
39540 
39541 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
39542 
39543 		if (retval != EX_VAR(opline->result.var)) {
39544 fetch_obj_is_copy:
39545 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
39546 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
39547 			zend_unwrap_reference(retval);
39548 		}
39549 	} while (0);
39550 
39551 fetch_obj_is_finish:
39552 
39553 
39554 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39555 }
39556 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39558 {
39559 #if 0
39560 	USE_OPLINE
39561 #endif
39562 
39563 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
39564 		/* Behave like FETCH_OBJ_W */
39565 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39566 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39567 		}
39568 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39569 	} else {
39570 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39571 	}
39572 }
39573 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39575 {
39576 	USE_OPLINE
39577 	zend_free_op free_op1;
39578 	zval *container, *property, *result;
39579 
39580 	SAVE_OPLINE();
39581 	container = EX_VAR(opline->op1.var);
39582 
39583 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
39584 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39585 	}
39586 
39587 	property = RT_CONSTANT(opline, opline->op2);
39588 	result = EX_VAR(opline->result.var);
39589 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
39590 
39591 	if (IS_CV == IS_VAR) {
39592 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
39593 	}
39594 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39595 }
39596 
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39598 {
39599 	USE_OPLINE
39600 
39601 	zval *object, *property, *value, tmp;
39602 
39603 	SAVE_OPLINE();
39604 	object = EX_VAR(opline->op1.var);
39605 
39606 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39607 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39608 	}
39609 
39610 	property = RT_CONSTANT(opline, opline->op2);
39611 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
39612 
39613 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39614 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39615 			object = Z_REFVAL_P(object);
39616 			goto assign_object;
39617 		}
39618 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39619 		if (UNEXPECTED(!object)) {
39620 			value = &EG(uninitialized_zval);
39621 			goto free_and_exit_assign_obj;
39622 		}
39623 	}
39624 
39625 assign_object:
39626 	if (IS_CONST == IS_CONST &&
39627 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
39628 		void **cache_slot = CACHE_ADDR(opline->extended_value);
39629 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
39630 		zend_object *zobj = Z_OBJ_P(object);
39631 		zval *property_val;
39632 
39633 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
39634 			property_val = OBJ_PROP(zobj, prop_offset);
39635 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
39636 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
39637 
39638 				if (UNEXPECTED(prop_info != NULL)) {
39639 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
39640 					goto free_and_exit_assign_obj;
39641 				} else {
39642 fast_assign_obj:
39643 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
39644 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39645 						ZVAL_COPY(EX_VAR(opline->result.var), value);
39646 					}
39647 					goto exit_assign_obj;
39648 				}
39649 			}
39650 		} else {
39651 			if (EXPECTED(zobj->properties != NULL)) {
39652 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
39653 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
39654 						GC_DELREF(zobj->properties);
39655 					}
39656 					zobj->properties = zend_array_dup(zobj->properties);
39657 				}
39658 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
39659 				if (property_val) {
39660 					goto fast_assign_obj;
39661 				}
39662 			}
39663 
39664 			if (!zobj->ce->__set) {
39665 
39666 				if (EXPECTED(zobj->properties == NULL)) {
39667 					rebuild_object_properties(zobj);
39668 				}
39669 				if (IS_CONST == IS_CONST) {
39670 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
39671 						Z_ADDREF_P(value);
39672 					}
39673 				} else if (IS_CONST != IS_TMP_VAR) {
39674 					if (Z_ISREF_P(value)) {
39675 						if (IS_CONST == IS_VAR) {
39676 							zend_reference *ref = Z_REF_P(value);
39677 							if (GC_DELREF(ref) == 0) {
39678 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
39679 								efree_size(ref, sizeof(zend_reference));
39680 								value = &tmp;
39681 							} else {
39682 								value = Z_REFVAL_P(value);
39683 								Z_TRY_ADDREF_P(value);
39684 							}
39685 						} else {
39686 							value = Z_REFVAL_P(value);
39687 							Z_TRY_ADDREF_P(value);
39688 						}
39689 					} else if (IS_CONST == IS_CV) {
39690 						Z_TRY_ADDREF_P(value);
39691 					}
39692 				}
39693 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
39694 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39695 					ZVAL_COPY(EX_VAR(opline->result.var), value);
39696 				}
39697 				goto exit_assign_obj;
39698 			}
39699 		}
39700 	}
39701 
39702 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
39703 		ZVAL_DEREF(value);
39704 	}
39705 
39706 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
39707 
39708 free_and_exit_assign_obj:
39709 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39710 		ZVAL_COPY(EX_VAR(opline->result.var), value);
39711 	}
39712 
39713 exit_assign_obj:
39714 
39715 
39716 	/* assign_obj has two opcodes! */
39717 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39718 }
39719 
39720 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39722 {
39723 	USE_OPLINE
39724 	zend_free_op free_op_data;
39725 	zval *object, *property, *value, tmp;
39726 
39727 	SAVE_OPLINE();
39728 	object = EX_VAR(opline->op1.var);
39729 
39730 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39731 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39732 	}
39733 
39734 	property = RT_CONSTANT(opline, opline->op2);
39735 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
39736 
39737 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39738 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39739 			object = Z_REFVAL_P(object);
39740 			goto assign_object;
39741 		}
39742 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39743 		if (UNEXPECTED(!object)) {
39744 			value = &EG(uninitialized_zval);
39745 			goto free_and_exit_assign_obj;
39746 		}
39747 	}
39748 
39749 assign_object:
39750 	if (IS_CONST == IS_CONST &&
39751 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
39752 		void **cache_slot = CACHE_ADDR(opline->extended_value);
39753 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
39754 		zend_object *zobj = Z_OBJ_P(object);
39755 		zval *property_val;
39756 
39757 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
39758 			property_val = OBJ_PROP(zobj, prop_offset);
39759 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
39760 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
39761 
39762 				if (UNEXPECTED(prop_info != NULL)) {
39763 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
39764 					goto free_and_exit_assign_obj;
39765 				} else {
39766 fast_assign_obj:
39767 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
39768 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39769 						ZVAL_COPY(EX_VAR(opline->result.var), value);
39770 					}
39771 					goto exit_assign_obj;
39772 				}
39773 			}
39774 		} else {
39775 			if (EXPECTED(zobj->properties != NULL)) {
39776 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
39777 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
39778 						GC_DELREF(zobj->properties);
39779 					}
39780 					zobj->properties = zend_array_dup(zobj->properties);
39781 				}
39782 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
39783 				if (property_val) {
39784 					goto fast_assign_obj;
39785 				}
39786 			}
39787 
39788 			if (!zobj->ce->__set) {
39789 
39790 				if (EXPECTED(zobj->properties == NULL)) {
39791 					rebuild_object_properties(zobj);
39792 				}
39793 				if (IS_TMP_VAR == IS_CONST) {
39794 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
39795 						Z_ADDREF_P(value);
39796 					}
39797 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
39798 					if (Z_ISREF_P(value)) {
39799 						if (IS_TMP_VAR == IS_VAR) {
39800 							zend_reference *ref = Z_REF_P(value);
39801 							if (GC_DELREF(ref) == 0) {
39802 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
39803 								efree_size(ref, sizeof(zend_reference));
39804 								value = &tmp;
39805 							} else {
39806 								value = Z_REFVAL_P(value);
39807 								Z_TRY_ADDREF_P(value);
39808 							}
39809 						} else {
39810 							value = Z_REFVAL_P(value);
39811 							Z_TRY_ADDREF_P(value);
39812 						}
39813 					} else if (IS_TMP_VAR == IS_CV) {
39814 						Z_TRY_ADDREF_P(value);
39815 					}
39816 				}
39817 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
39818 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39819 					ZVAL_COPY(EX_VAR(opline->result.var), value);
39820 				}
39821 				goto exit_assign_obj;
39822 			}
39823 		}
39824 	}
39825 
39826 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
39827 		ZVAL_DEREF(value);
39828 	}
39829 
39830 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
39831 
39832 free_and_exit_assign_obj:
39833 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39834 		ZVAL_COPY(EX_VAR(opline->result.var), value);
39835 	}
39836 	zval_ptr_dtor_nogc(free_op_data);
39837 exit_assign_obj:
39838 
39839 
39840 	/* assign_obj has two opcodes! */
39841 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39842 }
39843 
39844 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39845 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39846 {
39847 	USE_OPLINE
39848 	zend_free_op free_op_data;
39849 	zval *object, *property, *value, tmp;
39850 
39851 	SAVE_OPLINE();
39852 	object = EX_VAR(opline->op1.var);
39853 
39854 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39855 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39856 	}
39857 
39858 	property = RT_CONSTANT(opline, opline->op2);
39859 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
39860 
39861 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39862 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39863 			object = Z_REFVAL_P(object);
39864 			goto assign_object;
39865 		}
39866 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39867 		if (UNEXPECTED(!object)) {
39868 			value = &EG(uninitialized_zval);
39869 			goto free_and_exit_assign_obj;
39870 		}
39871 	}
39872 
39873 assign_object:
39874 	if (IS_CONST == IS_CONST &&
39875 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
39876 		void **cache_slot = CACHE_ADDR(opline->extended_value);
39877 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
39878 		zend_object *zobj = Z_OBJ_P(object);
39879 		zval *property_val;
39880 
39881 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
39882 			property_val = OBJ_PROP(zobj, prop_offset);
39883 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
39884 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
39885 
39886 				if (UNEXPECTED(prop_info != NULL)) {
39887 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
39888 					goto free_and_exit_assign_obj;
39889 				} else {
39890 fast_assign_obj:
39891 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
39892 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39893 						ZVAL_COPY(EX_VAR(opline->result.var), value);
39894 					}
39895 					goto exit_assign_obj;
39896 				}
39897 			}
39898 		} else {
39899 			if (EXPECTED(zobj->properties != NULL)) {
39900 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
39901 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
39902 						GC_DELREF(zobj->properties);
39903 					}
39904 					zobj->properties = zend_array_dup(zobj->properties);
39905 				}
39906 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
39907 				if (property_val) {
39908 					goto fast_assign_obj;
39909 				}
39910 			}
39911 
39912 			if (!zobj->ce->__set) {
39913 
39914 				if (EXPECTED(zobj->properties == NULL)) {
39915 					rebuild_object_properties(zobj);
39916 				}
39917 				if (IS_VAR == IS_CONST) {
39918 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
39919 						Z_ADDREF_P(value);
39920 					}
39921 				} else if (IS_VAR != IS_TMP_VAR) {
39922 					if (Z_ISREF_P(value)) {
39923 						if (IS_VAR == IS_VAR) {
39924 							zend_reference *ref = Z_REF_P(value);
39925 							if (GC_DELREF(ref) == 0) {
39926 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
39927 								efree_size(ref, sizeof(zend_reference));
39928 								value = &tmp;
39929 							} else {
39930 								value = Z_REFVAL_P(value);
39931 								Z_TRY_ADDREF_P(value);
39932 							}
39933 						} else {
39934 							value = Z_REFVAL_P(value);
39935 							Z_TRY_ADDREF_P(value);
39936 						}
39937 					} else if (IS_VAR == IS_CV) {
39938 						Z_TRY_ADDREF_P(value);
39939 					}
39940 				}
39941 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
39942 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39943 					ZVAL_COPY(EX_VAR(opline->result.var), value);
39944 				}
39945 				goto exit_assign_obj;
39946 			}
39947 		}
39948 	}
39949 
39950 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
39951 		ZVAL_DEREF(value);
39952 	}
39953 
39954 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
39955 
39956 free_and_exit_assign_obj:
39957 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39958 		ZVAL_COPY(EX_VAR(opline->result.var), value);
39959 	}
39960 	zval_ptr_dtor_nogc(free_op_data);
39961 exit_assign_obj:
39962 
39963 
39964 	/* assign_obj has two opcodes! */
39965 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
39966 }
39967 
39968 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39969 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39970 {
39971 	USE_OPLINE
39972 
39973 	zval *object, *property, *value, tmp;
39974 
39975 	SAVE_OPLINE();
39976 	object = EX_VAR(opline->op1.var);
39977 
39978 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
39979 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39980 	}
39981 
39982 	property = RT_CONSTANT(opline, opline->op2);
39983 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
39984 
39985 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
39986 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
39987 			object = Z_REFVAL_P(object);
39988 			goto assign_object;
39989 		}
39990 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
39991 		if (UNEXPECTED(!object)) {
39992 			value = &EG(uninitialized_zval);
39993 			goto free_and_exit_assign_obj;
39994 		}
39995 	}
39996 
39997 assign_object:
39998 	if (IS_CONST == IS_CONST &&
39999 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
40000 		void **cache_slot = CACHE_ADDR(opline->extended_value);
40001 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
40002 		zend_object *zobj = Z_OBJ_P(object);
40003 		zval *property_val;
40004 
40005 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
40006 			property_val = OBJ_PROP(zobj, prop_offset);
40007 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
40008 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
40009 
40010 				if (UNEXPECTED(prop_info != NULL)) {
40011 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
40012 					goto free_and_exit_assign_obj;
40013 				} else {
40014 fast_assign_obj:
40015 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
40016 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40017 						ZVAL_COPY(EX_VAR(opline->result.var), value);
40018 					}
40019 					goto exit_assign_obj;
40020 				}
40021 			}
40022 		} else {
40023 			if (EXPECTED(zobj->properties != NULL)) {
40024 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
40025 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
40026 						GC_DELREF(zobj->properties);
40027 					}
40028 					zobj->properties = zend_array_dup(zobj->properties);
40029 				}
40030 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
40031 				if (property_val) {
40032 					goto fast_assign_obj;
40033 				}
40034 			}
40035 
40036 			if (!zobj->ce->__set) {
40037 
40038 				if (EXPECTED(zobj->properties == NULL)) {
40039 					rebuild_object_properties(zobj);
40040 				}
40041 				if (IS_CV == IS_CONST) {
40042 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
40043 						Z_ADDREF_P(value);
40044 					}
40045 				} else if (IS_CV != IS_TMP_VAR) {
40046 					if (Z_ISREF_P(value)) {
40047 						if (IS_CV == IS_VAR) {
40048 							zend_reference *ref = Z_REF_P(value);
40049 							if (GC_DELREF(ref) == 0) {
40050 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
40051 								efree_size(ref, sizeof(zend_reference));
40052 								value = &tmp;
40053 							} else {
40054 								value = Z_REFVAL_P(value);
40055 								Z_TRY_ADDREF_P(value);
40056 							}
40057 						} else {
40058 							value = Z_REFVAL_P(value);
40059 							Z_TRY_ADDREF_P(value);
40060 						}
40061 					} else if (IS_CV == IS_CV) {
40062 						Z_TRY_ADDREF_P(value);
40063 					}
40064 				}
40065 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
40066 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40067 					ZVAL_COPY(EX_VAR(opline->result.var), value);
40068 				}
40069 				goto exit_assign_obj;
40070 			}
40071 		}
40072 	}
40073 
40074 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
40075 		ZVAL_DEREF(value);
40076 	}
40077 
40078 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
40079 
40080 free_and_exit_assign_obj:
40081 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40082 		ZVAL_COPY(EX_VAR(opline->result.var), value);
40083 	}
40084 
40085 exit_assign_obj:
40086 
40087 
40088 	/* assign_obj has two opcodes! */
40089 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40090 }
40091 
40092 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40093 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40094 {
40095 	USE_OPLINE
40096 
40097 	zval *object_ptr, *orig_object_ptr;
40098 	zend_free_op free_op_data;
40099 	zval *value;
40100 	zval *variable_ptr;
40101 	zval *dim;
40102 
40103 	SAVE_OPLINE();
40104 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
40105 
40106 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40107 try_assign_dim_array:
40108 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
40109 		SEPARATE_ARRAY(object_ptr);
40110 		if (IS_CONST == IS_UNUSED) {
40111 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
40112 				ZVAL_DEREF(value);
40113 			}
40114 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
40115 			if (UNEXPECTED(variable_ptr == NULL)) {
40116 				zend_cannot_add_element();
40117 				goto assign_dim_error;
40118 			} else if (IS_CONST == IS_CV) {
40119 				if (Z_REFCOUNTED_P(value)) {
40120 					Z_ADDREF_P(value);
40121 				}
40122 			} else if (IS_CONST == IS_VAR) {
40123 				if (value != free_op_data) {
40124 					if (Z_REFCOUNTED_P(value)) {
40125 						Z_ADDREF_P(value);
40126 					}
40127 
40128 				}
40129 			} else if (IS_CONST == IS_CONST) {
40130 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
40131 					Z_ADDREF_P(value);
40132 				}
40133 			}
40134 		} else {
40135 			dim = RT_CONSTANT(opline, opline->op2);
40136 			if (IS_CONST == IS_CONST) {
40137 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40138 			} else {
40139 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40140 			}
40141 			if (UNEXPECTED(variable_ptr == NULL)) {
40142 				goto assign_dim_error;
40143 			}
40144 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
40145 		}
40146 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40147 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40148 		}
40149 	} else {
40150 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
40151 			object_ptr = Z_REFVAL_P(object_ptr);
40152 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40153 				goto try_assign_dim_array;
40154 			}
40155 		}
40156 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
40157 			dim = RT_CONSTANT(opline, opline->op2);
40158 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
40159 
40160 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40161 				dim++;
40162 			}
40163 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40164 
40165 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
40166 			if (IS_CONST == IS_UNUSED) {
40167 				zend_use_new_element_for_string();
40168 
40169 				UNDEF_RESULT();
40170 			} else {
40171 				dim = RT_CONSTANT(opline, opline->op2);
40172 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
40173 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40174 
40175 			}
40176 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
40177 			if (Z_ISREF_P(orig_object_ptr)
40178 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
40179 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
40180 				dim = RT_CONSTANT(opline, opline->op2);
40181 
40182 				UNDEF_RESULT();
40183 			} else {
40184 				ZVAL_ARR(object_ptr, zend_new_array(8));
40185 				goto try_assign_dim_array;
40186 			}
40187 		} else {
40188 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
40189 				zend_use_scalar_as_array();
40190 			}
40191 			dim = RT_CONSTANT(opline, opline->op2);
40192 assign_dim_error:
40193 
40194 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40195 				ZVAL_NULL(EX_VAR(opline->result.var));
40196 			}
40197 		}
40198 	}
40199 	if (IS_CONST != IS_UNUSED) {
40200 
40201 	}
40202 
40203 	/* assign_dim has two opcodes! */
40204 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40205 }
40206 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40207 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40208 {
40209 	USE_OPLINE
40210 
40211 	zval *object_ptr, *orig_object_ptr;
40212 	zend_free_op free_op_data;
40213 	zval *value;
40214 	zval *variable_ptr;
40215 	zval *dim;
40216 
40217 	SAVE_OPLINE();
40218 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
40219 
40220 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40221 try_assign_dim_array:
40222 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40223 		SEPARATE_ARRAY(object_ptr);
40224 		if (IS_CONST == IS_UNUSED) {
40225 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
40226 				ZVAL_DEREF(value);
40227 			}
40228 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
40229 			if (UNEXPECTED(variable_ptr == NULL)) {
40230 				zend_cannot_add_element();
40231 				goto assign_dim_error;
40232 			} else if (IS_TMP_VAR == IS_CV) {
40233 				if (Z_REFCOUNTED_P(value)) {
40234 					Z_ADDREF_P(value);
40235 				}
40236 			} else if (IS_TMP_VAR == IS_VAR) {
40237 				if (value != free_op_data) {
40238 					if (Z_REFCOUNTED_P(value)) {
40239 						Z_ADDREF_P(value);
40240 					}
40241 					zval_ptr_dtor_nogc(free_op_data);
40242 				}
40243 			} else if (IS_TMP_VAR == IS_CONST) {
40244 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
40245 					Z_ADDREF_P(value);
40246 				}
40247 			}
40248 		} else {
40249 			dim = RT_CONSTANT(opline, opline->op2);
40250 			if (IS_CONST == IS_CONST) {
40251 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40252 			} else {
40253 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40254 			}
40255 			if (UNEXPECTED(variable_ptr == NULL)) {
40256 				goto assign_dim_error;
40257 			}
40258 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
40259 		}
40260 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40261 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40262 		}
40263 	} else {
40264 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
40265 			object_ptr = Z_REFVAL_P(object_ptr);
40266 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40267 				goto try_assign_dim_array;
40268 			}
40269 		}
40270 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
40271 			dim = RT_CONSTANT(opline, opline->op2);
40272 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40273 
40274 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40275 				dim++;
40276 			}
40277 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40278 
40279 			zval_ptr_dtor_nogc(free_op_data);
40280 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
40281 			if (IS_CONST == IS_UNUSED) {
40282 				zend_use_new_element_for_string();
40283 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40284 				UNDEF_RESULT();
40285 			} else {
40286 				dim = RT_CONSTANT(opline, opline->op2);
40287 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40288 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40289 				zval_ptr_dtor_nogc(free_op_data);
40290 			}
40291 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
40292 			if (Z_ISREF_P(orig_object_ptr)
40293 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
40294 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
40295 				dim = RT_CONSTANT(opline, opline->op2);
40296 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40297 				UNDEF_RESULT();
40298 			} else {
40299 				ZVAL_ARR(object_ptr, zend_new_array(8));
40300 				goto try_assign_dim_array;
40301 			}
40302 		} else {
40303 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
40304 				zend_use_scalar_as_array();
40305 			}
40306 			dim = RT_CONSTANT(opline, opline->op2);
40307 assign_dim_error:
40308 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40309 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40310 				ZVAL_NULL(EX_VAR(opline->result.var));
40311 			}
40312 		}
40313 	}
40314 	if (IS_CONST != IS_UNUSED) {
40315 
40316 	}
40317 
40318 	/* assign_dim has two opcodes! */
40319 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40320 }
40321 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40322 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40323 {
40324 	USE_OPLINE
40325 
40326 	zval *object_ptr, *orig_object_ptr;
40327 	zend_free_op free_op_data;
40328 	zval *value;
40329 	zval *variable_ptr;
40330 	zval *dim;
40331 
40332 	SAVE_OPLINE();
40333 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
40334 
40335 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40336 try_assign_dim_array:
40337 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40338 		SEPARATE_ARRAY(object_ptr);
40339 		if (IS_CONST == IS_UNUSED) {
40340 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
40341 				ZVAL_DEREF(value);
40342 			}
40343 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
40344 			if (UNEXPECTED(variable_ptr == NULL)) {
40345 				zend_cannot_add_element();
40346 				goto assign_dim_error;
40347 			} else if (IS_VAR == IS_CV) {
40348 				if (Z_REFCOUNTED_P(value)) {
40349 					Z_ADDREF_P(value);
40350 				}
40351 			} else if (IS_VAR == IS_VAR) {
40352 				if (value != free_op_data) {
40353 					if (Z_REFCOUNTED_P(value)) {
40354 						Z_ADDREF_P(value);
40355 					}
40356 					zval_ptr_dtor_nogc(free_op_data);
40357 				}
40358 			} else if (IS_VAR == IS_CONST) {
40359 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
40360 					Z_ADDREF_P(value);
40361 				}
40362 			}
40363 		} else {
40364 			dim = RT_CONSTANT(opline, opline->op2);
40365 			if (IS_CONST == IS_CONST) {
40366 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40367 			} else {
40368 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40369 			}
40370 			if (UNEXPECTED(variable_ptr == NULL)) {
40371 				goto assign_dim_error;
40372 			}
40373 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
40374 		}
40375 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40376 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40377 		}
40378 	} else {
40379 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
40380 			object_ptr = Z_REFVAL_P(object_ptr);
40381 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40382 				goto try_assign_dim_array;
40383 			}
40384 		}
40385 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
40386 			dim = RT_CONSTANT(opline, opline->op2);
40387 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40388 
40389 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40390 				dim++;
40391 			}
40392 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40393 
40394 			zval_ptr_dtor_nogc(free_op_data);
40395 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
40396 			if (IS_CONST == IS_UNUSED) {
40397 				zend_use_new_element_for_string();
40398 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40399 				UNDEF_RESULT();
40400 			} else {
40401 				dim = RT_CONSTANT(opline, opline->op2);
40402 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40403 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40404 				zval_ptr_dtor_nogc(free_op_data);
40405 			}
40406 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
40407 			if (Z_ISREF_P(orig_object_ptr)
40408 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
40409 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
40410 				dim = RT_CONSTANT(opline, opline->op2);
40411 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40412 				UNDEF_RESULT();
40413 			} else {
40414 				ZVAL_ARR(object_ptr, zend_new_array(8));
40415 				goto try_assign_dim_array;
40416 			}
40417 		} else {
40418 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
40419 				zend_use_scalar_as_array();
40420 			}
40421 			dim = RT_CONSTANT(opline, opline->op2);
40422 assign_dim_error:
40423 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
40424 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40425 				ZVAL_NULL(EX_VAR(opline->result.var));
40426 			}
40427 		}
40428 	}
40429 	if (IS_CONST != IS_UNUSED) {
40430 
40431 	}
40432 
40433 	/* assign_dim has two opcodes! */
40434 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40435 }
40436 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40437 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40438 {
40439 	USE_OPLINE
40440 
40441 	zval *object_ptr, *orig_object_ptr;
40442 	zend_free_op free_op_data;
40443 	zval *value;
40444 	zval *variable_ptr;
40445 	zval *dim;
40446 
40447 	SAVE_OPLINE();
40448 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
40449 
40450 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40451 try_assign_dim_array:
40452 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
40453 		SEPARATE_ARRAY(object_ptr);
40454 		if (IS_CONST == IS_UNUSED) {
40455 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
40456 				ZVAL_DEREF(value);
40457 			}
40458 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
40459 			if (UNEXPECTED(variable_ptr == NULL)) {
40460 				zend_cannot_add_element();
40461 				goto assign_dim_error;
40462 			} else if (IS_CV == IS_CV) {
40463 				if (Z_REFCOUNTED_P(value)) {
40464 					Z_ADDREF_P(value);
40465 				}
40466 			} else if (IS_CV == IS_VAR) {
40467 				if (value != free_op_data) {
40468 					if (Z_REFCOUNTED_P(value)) {
40469 						Z_ADDREF_P(value);
40470 					}
40471 
40472 				}
40473 			} else if (IS_CV == IS_CONST) {
40474 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
40475 					Z_ADDREF_P(value);
40476 				}
40477 			}
40478 		} else {
40479 			dim = RT_CONSTANT(opline, opline->op2);
40480 			if (IS_CONST == IS_CONST) {
40481 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40482 			} else {
40483 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
40484 			}
40485 			if (UNEXPECTED(variable_ptr == NULL)) {
40486 				goto assign_dim_error;
40487 			}
40488 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
40489 		}
40490 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40491 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40492 		}
40493 	} else {
40494 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
40495 			object_ptr = Z_REFVAL_P(object_ptr);
40496 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
40497 				goto try_assign_dim_array;
40498 			}
40499 		}
40500 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
40501 			dim = RT_CONSTANT(opline, opline->op2);
40502 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
40503 
40504 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
40505 				dim++;
40506 			}
40507 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40508 
40509 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
40510 			if (IS_CONST == IS_UNUSED) {
40511 				zend_use_new_element_for_string();
40512 
40513 				UNDEF_RESULT();
40514 			} else {
40515 				dim = RT_CONSTANT(opline, opline->op2);
40516 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
40517 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
40518 
40519 			}
40520 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
40521 			if (Z_ISREF_P(orig_object_ptr)
40522 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
40523 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
40524 				dim = RT_CONSTANT(opline, opline->op2);
40525 
40526 				UNDEF_RESULT();
40527 			} else {
40528 				ZVAL_ARR(object_ptr, zend_new_array(8));
40529 				goto try_assign_dim_array;
40530 			}
40531 		} else {
40532 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
40533 				zend_use_scalar_as_array();
40534 			}
40535 			dim = RT_CONSTANT(opline, opline->op2);
40536 assign_dim_error:
40537 
40538 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
40539 				ZVAL_NULL(EX_VAR(opline->result.var));
40540 			}
40541 		}
40542 	}
40543 	if (IS_CONST != IS_UNUSED) {
40544 
40545 	}
40546 
40547 	/* assign_dim has two opcodes! */
40548 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40549 }
40550 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40551 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40552 {
40553 	USE_OPLINE
40554 
40555 	zval *value;
40556 	zval *variable_ptr;
40557 
40558 	SAVE_OPLINE();
40559 	value = RT_CONSTANT(opline, opline->op2);
40560 	variable_ptr = EX_VAR(opline->op1.var);
40561 
40562 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
40563 
40564 		if (UNEXPECTED(0)) {
40565 			ZVAL_NULL(EX_VAR(opline->result.var));
40566 		}
40567 	} else {
40568 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
40569 		if (UNEXPECTED(0)) {
40570 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40571 		}
40572 
40573 		/* zend_assign_to_variable() always takes care of op2, never free it! */
40574 	}
40575 
40576 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40577 }
40578 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40579 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40580 {
40581 	USE_OPLINE
40582 
40583 	zval *value;
40584 	zval *variable_ptr;
40585 
40586 	SAVE_OPLINE();
40587 	value = RT_CONSTANT(opline, opline->op2);
40588 	variable_ptr = EX_VAR(opline->op1.var);
40589 
40590 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
40591 
40592 		if (UNEXPECTED(1)) {
40593 			ZVAL_NULL(EX_VAR(opline->result.var));
40594 		}
40595 	} else {
40596 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
40597 		if (UNEXPECTED(1)) {
40598 			ZVAL_COPY(EX_VAR(opline->result.var), value);
40599 		}
40600 
40601 		/* zend_assign_to_variable() always takes care of op2, never free it! */
40602 	}
40603 
40604 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40605 }
40606 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40608 {
40609 	USE_OPLINE
40610 	zend_free_op free_op_data;
40611 	zval *property, *container, *value_ptr;
40612 
40613 	SAVE_OPLINE();
40614 
40615 	container = EX_VAR(opline->op1.var);
40616 
40617 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40618 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40619 	}
40620 
40621 	property = RT_CONSTANT(opline, opline->op2);
40622 
40623 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
40624 
40625 	if (1) {
40626 		if (IS_CV == IS_UNUSED) {
40627 			if (IS_CONST == IS_CONST) {
40628 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40629 			} else {
40630 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40631 			}
40632 		} else {
40633 			if (IS_CONST == IS_CONST) {
40634 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40635 			} else {
40636 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40637 			}
40638 		}
40639 	} else {
40640 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40641 	}
40642 
40643 
40644 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
40645 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40646 }
40647 
40648 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40649 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40650 {
40651 	USE_OPLINE
40652 
40653 	zval *property, *container, *value_ptr;
40654 
40655 	SAVE_OPLINE();
40656 
40657 	container = EX_VAR(opline->op1.var);
40658 
40659 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
40660 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40661 	}
40662 
40663 	property = RT_CONSTANT(opline, opline->op2);
40664 
40665 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
40666 
40667 	if (1) {
40668 		if (IS_CV == IS_UNUSED) {
40669 			if (IS_CONST == IS_CONST) {
40670 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40671 			} else {
40672 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40673 			}
40674 		} else {
40675 			if (IS_CONST == IS_CONST) {
40676 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40677 			} else {
40678 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40679 			}
40680 		}
40681 	} else {
40682 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
40683 	}
40684 
40685 
40686 
40687 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
40688 }
40689 
40690 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40691 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40692 {
40693 	USE_OPLINE
40694 
40695 	zval *op1, *op2;
40696 	zend_string *op1_str, *op2_str, *str;
40697 
40698 
40699 	op1 = EX_VAR(opline->op1.var);
40700 	op2 = RT_CONSTANT(opline, opline->op2);
40701 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
40702 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
40703 		zend_string *op1_str = Z_STR_P(op1);
40704 		zend_string *op2_str = Z_STR_P(op2);
40705 		zend_string *str;
40706 
40707 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
40708 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
40709 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
40710 			} else {
40711 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
40712 			}
40713 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40714 				zend_string_release_ex(op1_str, 0);
40715 			}
40716 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
40717 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
40718 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
40719 			} else {
40720 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
40721 			}
40722 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40723 				zend_string_release_ex(op2_str, 0);
40724 			}
40725 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
40726 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
40727 		    size_t len = ZSTR_LEN(op1_str);
40728 
40729 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
40730 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
40731 			}
40732 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
40733 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40734 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40735 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40736 				zend_string_release_ex(op2_str, 0);
40737 			}
40738 		} else {
40739 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
40740 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
40741 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40742 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40743 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40744 				zend_string_release_ex(op1_str, 0);
40745 			}
40746 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40747 				zend_string_release_ex(op2_str, 0);
40748 			}
40749 		}
40750 		ZEND_VM_NEXT_OPCODE();
40751 	}
40752 
40753 	SAVE_OPLINE();
40754 	if (IS_CV == IS_CONST) {
40755 		op1_str = Z_STR_P(op1);
40756 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
40757 		op1_str = zend_string_copy(Z_STR_P(op1));
40758 	} else {
40759 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
40760 			ZVAL_UNDEFINED_OP1();
40761 		}
40762 		op1_str = zval_get_string_func(op1);
40763 	}
40764 	if (IS_CONST == IS_CONST) {
40765 		op2_str = Z_STR_P(op2);
40766 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
40767 		op2_str = zend_string_copy(Z_STR_P(op2));
40768 	} else {
40769 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
40770 			ZVAL_UNDEFINED_OP2();
40771 		}
40772 		op2_str = zval_get_string_func(op2);
40773 	}
40774 	do {
40775 		if (IS_CV != IS_CONST) {
40776 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
40777 				if (IS_CONST == IS_CONST) {
40778 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
40779 						GC_ADDREF(op2_str);
40780 					}
40781 				}
40782 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
40783 				zend_string_release_ex(op1_str, 0);
40784 				break;
40785 			}
40786 		}
40787 		if (IS_CONST != IS_CONST) {
40788 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
40789 				if (IS_CV == IS_CONST) {
40790 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
40791 						GC_ADDREF(op1_str);
40792 					}
40793 				}
40794 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
40795 				zend_string_release_ex(op2_str, 0);
40796 				break;
40797 			}
40798 		}
40799 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
40800 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
40801 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40802 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40803 		if (IS_CV != IS_CONST) {
40804 			zend_string_release_ex(op1_str, 0);
40805 		}
40806 		if (IS_CONST != IS_CONST) {
40807 			zend_string_release_ex(op2_str, 0);
40808 		}
40809 	} while (0);
40810 
40811 
40812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40813 }
40814 
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40815 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40816 {
40817 	USE_OPLINE
40818 	zval *function_name;
40819 	zend_free_op free_op1;
40820 	zval *object;
40821 	zend_function *fbc;
40822 	zend_class_entry *called_scope;
40823 	zend_object *obj;
40824 	zend_execute_data *call;
40825 	uint32_t call_info;
40826 
40827 	SAVE_OPLINE();
40828 
40829 	object = EX_VAR(opline->op1.var);
40830 
40831 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40832 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
40833 	}
40834 
40835 	if (IS_CONST != IS_CONST) {
40836 		function_name = RT_CONSTANT(opline, opline->op2);
40837 	}
40838 
40839 	if (IS_CONST != IS_CONST &&
40840 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
40841 		do {
40842 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
40843 				function_name = Z_REFVAL_P(function_name);
40844 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
40845 					break;
40846 				}
40847 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
40848 				ZVAL_UNDEFINED_OP2();
40849 				if (UNEXPECTED(EG(exception) != NULL)) {
40850 
40851 					HANDLE_EXCEPTION();
40852 				}
40853 			}
40854 			zend_throw_error(NULL, "Method name must be a string");
40855 
40856 
40857 			HANDLE_EXCEPTION();
40858 		} while (0);
40859 	}
40860 
40861 	if (IS_CV != IS_UNUSED) {
40862 		do {
40863 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
40864 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
40865 					object = Z_REFVAL_P(object);
40866 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
40867 						break;
40868 					}
40869 				}
40870 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
40871 					object = ZVAL_UNDEFINED_OP1();
40872 					if (UNEXPECTED(EG(exception) != NULL)) {
40873 						if (IS_CONST != IS_CONST) {
40874 
40875 						}
40876 						HANDLE_EXCEPTION();
40877 					}
40878 				}
40879 				if (IS_CONST == IS_CONST) {
40880 					function_name = RT_CONSTANT(opline, opline->op2);
40881 				}
40882 				zend_invalid_method_call(object, function_name);
40883 
40884 
40885 				HANDLE_EXCEPTION();
40886 			}
40887 		} while (0);
40888 	}
40889 
40890 	obj = Z_OBJ_P(object);
40891 	called_scope = obj->ce;
40892 
40893 	if (IS_CONST == IS_CONST &&
40894 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
40895 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
40896 	} else {
40897 	    zend_object *orig_obj = obj;
40898 
40899 		if (IS_CONST == IS_CONST) {
40900 			function_name = RT_CONSTANT(opline, opline->op2);
40901 		}
40902 
40903 		/* First, locate the function. */
40904 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
40905 		if (UNEXPECTED(fbc == NULL)) {
40906 			if (EXPECTED(!EG(exception))) {
40907 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
40908 			}
40909 
40910 
40911 			HANDLE_EXCEPTION();
40912 		}
40913 		if (IS_CONST == IS_CONST &&
40914 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
40915 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
40916 		    EXPECTED(obj == orig_obj)) {
40917 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
40918 		}
40919 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
40920 			/* Reset "object" to trigger reference counting */
40921 			object = NULL;
40922 		}
40923 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
40924 			init_func_run_time_cache(&fbc->op_array);
40925 		}
40926 	}
40927 
40928 	if (IS_CONST != IS_CONST) {
40929 
40930 	}
40931 
40932 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
40933 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
40934 
40935 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
40936 			HANDLE_EXCEPTION();
40937 		}
40938 		/* call static method */
40939 		obj = (zend_object*)called_scope;
40940 		call_info = ZEND_CALL_NESTED_FUNCTION;
40941 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
40942 		if (IS_CV == IS_CV) {
40943 			GC_ADDREF(obj); /* For $this pointer */
40944 		} else if (free_op1 != object) {
40945 			GC_ADDREF(obj); /* For $this pointer */
40946 
40947 		}
40948 		/* CV may be changed indirectly (e.g. when it's a reference) */
40949 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
40950 	}
40951 
40952 	call = zend_vm_stack_push_call_frame(call_info,
40953 		fbc, opline->extended_value, obj);
40954 	call->prev_execute_data = EX(call);
40955 	EX(call) = call;
40956 
40957 	ZEND_VM_NEXT_OPCODE();
40958 }
40959 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40960 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40961 {
40962 	USE_OPLINE
40963 
40964 	zval *expr_ptr, new_expr;
40965 
40966 	SAVE_OPLINE();
40967 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
40968 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
40969 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
40970 		if (Z_ISREF_P(expr_ptr)) {
40971 			Z_ADDREF_P(expr_ptr);
40972 		} else {
40973 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
40974 		}
40975 
40976 	} else {
40977 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40978 		if (IS_CV == IS_TMP_VAR) {
40979 			/* pass */
40980 		} else if (IS_CV == IS_CONST) {
40981 			Z_TRY_ADDREF_P(expr_ptr);
40982 		} else if (IS_CV == IS_CV) {
40983 			ZVAL_DEREF(expr_ptr);
40984 			Z_TRY_ADDREF_P(expr_ptr);
40985 		} else /* if (IS_CV == IS_VAR) */ {
40986 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
40987 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
40988 
40989 				expr_ptr = Z_REFVAL_P(expr_ptr);
40990 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40991 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
40992 					expr_ptr = &new_expr;
40993 					efree_size(ref, sizeof(zend_reference));
40994 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
40995 					Z_ADDREF_P(expr_ptr);
40996 				}
40997 			}
40998 		}
40999 	}
41000 
41001 	if (IS_CONST != IS_UNUSED) {
41002 
41003 		zval *offset = RT_CONSTANT(opline, opline->op2);
41004 		zend_string *str;
41005 		zend_ulong hval;
41006 
41007 add_again:
41008 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
41009 			str = Z_STR_P(offset);
41010 			if (IS_CONST != IS_CONST) {
41011 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
41012 					goto num_index;
41013 				}
41014 			}
41015 str_index:
41016 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
41017 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
41018 			hval = Z_LVAL_P(offset);
41019 num_index:
41020 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
41021 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
41022 			offset = Z_REFVAL_P(offset);
41023 			goto add_again;
41024 		} else if (Z_TYPE_P(offset) == IS_NULL) {
41025 			str = ZSTR_EMPTY_ALLOC();
41026 			goto str_index;
41027 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
41028 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
41029 			goto num_index;
41030 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
41031 			hval = 0;
41032 			goto num_index;
41033 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
41034 			hval = 1;
41035 			goto num_index;
41036 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
41037 			zend_use_resource_as_offset(offset);
41038 			hval = Z_RES_HANDLE_P(offset);
41039 			goto num_index;
41040 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
41041 			ZVAL_UNDEFINED_OP2();
41042 			str = ZSTR_EMPTY_ALLOC();
41043 			goto str_index;
41044 		} else {
41045 			zend_illegal_offset();
41046 			zval_ptr_dtor_nogc(expr_ptr);
41047 		}
41048 
41049 	} else {
41050 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
41051 			zend_cannot_add_element();
41052 			zval_ptr_dtor_nogc(expr_ptr);
41053 		}
41054 	}
41055 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41056 }
41057 
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41059 {
41060 	zval *array;
41061 	uint32_t size;
41062 	USE_OPLINE
41063 
41064 	array = EX_VAR(opline->result.var);
41065 	if (IS_CV != IS_UNUSED) {
41066 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
41067 		ZVAL_ARR(array, zend_new_array(size));
41068 		/* Explicitly initialize array as not-packed if flag is set */
41069 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
41070 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
41071 		}
41072 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41073 	} else {
41074 		ZVAL_ARR(array, zend_new_array(0));
41075 		ZEND_VM_NEXT_OPCODE();
41076 	}
41077 }
41078 
ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41079 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41080 {
41081 	USE_OPLINE
41082 
41083 	zval *container;
41084 	zval *offset;
41085 	zend_ulong hval;
41086 	zend_string *key;
41087 
41088 	SAVE_OPLINE();
41089 	container = EX_VAR(opline->op1.var);
41090 	offset = RT_CONSTANT(opline, opline->op2);
41091 
41092 	do {
41093 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41094 			HashTable *ht;
41095 
41096 unset_dim_array:
41097 			SEPARATE_ARRAY(container);
41098 			ht = Z_ARRVAL_P(container);
41099 offset_again:
41100 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
41101 				key = Z_STR_P(offset);
41102 				if (IS_CONST != IS_CONST) {
41103 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
41104 						goto num_index_dim;
41105 					}
41106 				}
41107 str_index_dim:
41108 				if (ht == &EG(symbol_table)) {
41109 					zend_delete_global_variable(key);
41110 				} else {
41111 					zend_hash_del(ht, key);
41112 				}
41113 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
41114 				hval = Z_LVAL_P(offset);
41115 num_index_dim:
41116 				zend_hash_index_del(ht, hval);
41117 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
41118 				offset = Z_REFVAL_P(offset);
41119 				goto offset_again;
41120 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
41121 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
41122 				goto num_index_dim;
41123 			} else if (Z_TYPE_P(offset) == IS_NULL) {
41124 				key = ZSTR_EMPTY_ALLOC();
41125 				goto str_index_dim;
41126 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
41127 				hval = 0;
41128 				goto num_index_dim;
41129 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
41130 				hval = 1;
41131 				goto num_index_dim;
41132 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
41133 				hval = Z_RES_HANDLE_P(offset);
41134 				goto num_index_dim;
41135 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
41136 				ZVAL_UNDEFINED_OP2();
41137 				key = ZSTR_EMPTY_ALLOC();
41138 				goto str_index_dim;
41139 			} else {
41140 				zend_error(E_WARNING, "Illegal offset type in unset");
41141 			}
41142 			break;
41143 		} else if (Z_ISREF_P(container)) {
41144 			container = Z_REFVAL_P(container);
41145 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41146 				goto unset_dim_array;
41147 			}
41148 		}
41149 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
41150 			container = ZVAL_UNDEFINED_OP1();
41151 		}
41152 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
41153 			offset = ZVAL_UNDEFINED_OP2();
41154 		}
41155 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41156 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
41157 				offset++;
41158 			}
41159 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
41160 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
41161 			zend_throw_error(NULL, "Cannot unset string offsets");
41162 		}
41163 	} while (0);
41164 
41165 
41166 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41167 }
41168 
ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41169 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41170 {
41171 	USE_OPLINE
41172 
41173 	zval *container;
41174 	zval *offset;
41175 
41176 	SAVE_OPLINE();
41177 	container = EX_VAR(opline->op1.var);
41178 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
41179 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41180 	}
41181 	offset = RT_CONSTANT(opline, opline->op2);
41182 
41183 	do {
41184 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
41185 			if (Z_ISREF_P(container)) {
41186 				container = Z_REFVAL_P(container);
41187 				if (Z_TYPE_P(container) != IS_OBJECT) {
41188 					if (IS_CV == IS_CV
41189 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
41190 						ZVAL_UNDEFINED_OP1();
41191 					}
41192 					break;
41193 				}
41194 			} else {
41195 				break;
41196 			}
41197 		}
41198 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
41199 	} while (0);
41200 
41201 
41202 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41203 }
41204 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41205 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41206 {
41207 	USE_OPLINE
41208 
41209 	zval *container;
41210 	int result;
41211 	zend_ulong hval;
41212 	zval *offset;
41213 
41214 	SAVE_OPLINE();
41215 	container = EX_VAR(opline->op1.var);
41216 	offset = RT_CONSTANT(opline, opline->op2);
41217 
41218 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41219 		HashTable *ht;
41220 		zval *value;
41221 		zend_string *str;
41222 
41223 isset_dim_obj_array:
41224 		ht = Z_ARRVAL_P(container);
41225 isset_again:
41226 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
41227 			str = Z_STR_P(offset);
41228 			if (IS_CONST != IS_CONST) {
41229 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
41230 					goto num_index_prop;
41231 				}
41232 			}
41233 			value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST);
41234 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
41235 			hval = Z_LVAL_P(offset);
41236 num_index_prop:
41237 			value = zend_hash_index_find(ht, hval);
41238 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
41239 			offset = Z_REFVAL_P(offset);
41240 			goto isset_again;
41241 		} else {
41242 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
41243 			if (UNEXPECTED(EG(exception))) {
41244 				result = 0;
41245 				goto isset_dim_obj_exit;
41246 			}
41247 		}
41248 
41249 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
41250 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
41251 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
41252 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
41253 
41254 			if (IS_CV & (IS_CONST|IS_CV)) {
41255 				/* avoid exception check */
41256 
41257 				ZEND_VM_SMART_BRANCH(result, 0);
41258 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
41259 				ZEND_VM_NEXT_OPCODE();
41260 			}
41261 		} else {
41262 			result = (value == NULL || !i_zend_is_true(value));
41263 		}
41264 		goto isset_dim_obj_exit;
41265 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
41266 		container = Z_REFVAL_P(container);
41267 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41268 			goto isset_dim_obj_array;
41269 		}
41270 	}
41271 
41272 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
41273 		offset++;
41274 	}
41275 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
41276 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
41277 	} else {
41278 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
41279 	}
41280 
41281 isset_dim_obj_exit:
41282 
41283 
41284 	ZEND_VM_SMART_BRANCH(result, 1);
41285 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41286 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41287 }
41288 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41290 {
41291 	USE_OPLINE
41292 
41293 	zval *container;
41294 	int result;
41295 	zval *offset;
41296 
41297 	SAVE_OPLINE();
41298 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
41299 
41300 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
41301 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41302 	}
41303 
41304 	offset = RT_CONSTANT(opline, opline->op2);
41305 
41306 	if (IS_CV == IS_CONST ||
41307 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
41308 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
41309 			container = Z_REFVAL_P(container);
41310 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
41311 				result = (opline->extended_value & ZEND_ISEMPTY);
41312 				goto isset_object_finish;
41313 			}
41314 		} else {
41315 			result = (opline->extended_value & ZEND_ISEMPTY);
41316 			goto isset_object_finish;
41317 		}
41318 	}
41319 
41320 	result =
41321 		(opline->extended_value & ZEND_ISEMPTY) ^
41322 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
41323 
41324 isset_object_finish:
41325 
41326 
41327 	ZEND_VM_SMART_BRANCH(result, 1);
41328 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41329 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41330 }
41331 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41333 {
41334 	USE_OPLINE
41335 
41336 
41337 	zval *key, *subject;
41338 	HashTable *ht;
41339 	uint32_t result;
41340 
41341 	SAVE_OPLINE();
41342 
41343 	key = EX_VAR(opline->op1.var);
41344 	subject = RT_CONSTANT(opline, opline->op2);
41345 
41346 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
41347 array_key_exists_array:
41348 		ht = Z_ARRVAL_P(subject);
41349 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
41350 	} else {
41351 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
41352 			subject = Z_REFVAL_P(subject);
41353 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
41354 				goto array_key_exists_array;
41355 			}
41356 		}
41357 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
41358 	}
41359 
41360 
41361 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
41362 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
41363 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41364 }
41365 
41366 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41367 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41368 {
41369 	USE_OPLINE
41370 
41371 	zval *expr;
41372 	zend_bool result;
41373 
41374 	SAVE_OPLINE();
41375 	expr = EX_VAR(opline->op1.var);
41376 
41377 try_instanceof:
41378 	if (Z_TYPE_P(expr) == IS_OBJECT) {
41379 		zend_class_entry *ce;
41380 
41381 		if (IS_CONST == IS_CONST) {
41382 			ce = CACHED_PTR(opline->extended_value);
41383 			if (UNEXPECTED(ce == NULL)) {
41384 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
41385 				if (EXPECTED(ce)) {
41386 					CACHE_PTR(opline->extended_value, ce);
41387 				}
41388 			}
41389 		} else if (IS_CONST == IS_UNUSED) {
41390 			ce = zend_fetch_class(NULL, opline->op2.num);
41391 			if (UNEXPECTED(ce == NULL)) {
41392 				ZEND_ASSERT(EG(exception));
41393 
41394 				ZVAL_UNDEF(EX_VAR(opline->result.var));
41395 				HANDLE_EXCEPTION();
41396 			}
41397 		} else {
41398 			ce = Z_CE_P(EX_VAR(opline->op2.var));
41399 		}
41400 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
41401 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
41402 		expr = Z_REFVAL_P(expr);
41403 		goto try_instanceof;
41404 	} else {
41405 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
41406 			ZVAL_UNDEFINED_OP1();
41407 		}
41408 		result = 0;
41409 	}
41410 
41411 	ZEND_VM_SMART_BRANCH(result, 1);
41412 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
41413 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41414 }
41415 
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41416 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41417 {
41418 	USE_OPLINE
41419 
41420 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
41421 
41422 	SAVE_OPLINE();
41423 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
41424 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41425 	}
41426 
41427 	/* Destroy the previously yielded value */
41428 	zval_ptr_dtor(&generator->value);
41429 
41430 	/* Destroy the previously yielded key */
41431 	zval_ptr_dtor(&generator->key);
41432 
41433 	/* Set the new yielded value */
41434 	if (IS_CV != IS_UNUSED) {
41435 
41436 
41437 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
41438 			/* Constants and temporary variables aren't yieldable by reference,
41439 			 * but we still allow them with a notice. */
41440 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
41441 				zval *value;
41442 
41443 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
41444 
41445 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41446 				ZVAL_COPY_VALUE(&generator->value, value);
41447 				if (IS_CV == IS_CONST) {
41448 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
41449 						Z_ADDREF(generator->value);
41450 					}
41451 				}
41452 			} else {
41453 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
41454 
41455 				/* If a function call result is yielded and the function did
41456 				 * not return by reference we throw a notice. */
41457 				do {
41458 					if (IS_CV == IS_VAR) {
41459 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
41460 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
41461 						 && !Z_ISREF_P(value_ptr)) {
41462 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
41463 							ZVAL_COPY(&generator->value, value_ptr);
41464 							break;
41465 						}
41466 					}
41467 					if (Z_ISREF_P(value_ptr)) {
41468 						Z_ADDREF_P(value_ptr);
41469 					} else {
41470 						ZVAL_MAKE_REF_EX(value_ptr, 2);
41471 					}
41472 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
41473 				} while (0);
41474 
41475 			}
41476 		} else {
41477 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41478 
41479 			/* Consts, temporary variables and references need copying */
41480 			if (IS_CV == IS_CONST) {
41481 				ZVAL_COPY_VALUE(&generator->value, value);
41482 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
41483 					Z_ADDREF(generator->value);
41484 				}
41485 			} else if (IS_CV == IS_TMP_VAR) {
41486 				ZVAL_COPY_VALUE(&generator->value, value);
41487             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
41488 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
41489 
41490 			} else {
41491 				ZVAL_COPY_VALUE(&generator->value, value);
41492 				if (IS_CV == IS_CV) {
41493 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
41494 				}
41495 			}
41496 		}
41497 	} else {
41498 		/* If no value was specified yield null */
41499 		ZVAL_NULL(&generator->value);
41500 	}
41501 
41502 	/* Set the new yielded key */
41503 	if (IS_CONST != IS_UNUSED) {
41504 
41505 		zval *key = RT_CONSTANT(opline, opline->op2);
41506 
41507 		/* Consts, temporary variables and references need copying */
41508 		if (IS_CONST == IS_CONST) {
41509 			ZVAL_COPY_VALUE(&generator->key, key);
41510 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
41511 				Z_ADDREF(generator->key);
41512 			}
41513 		} else if (IS_CONST == IS_TMP_VAR) {
41514 			ZVAL_COPY_VALUE(&generator->key, key);
41515 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
41516 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
41517 
41518 		} else {
41519 			ZVAL_COPY_VALUE(&generator->key, key);
41520 			if (IS_CONST == IS_CV) {
41521 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
41522 			}
41523 		}
41524 
41525 		if (Z_TYPE(generator->key) == IS_LONG
41526 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
41527 		) {
41528 			generator->largest_used_integer_key = Z_LVAL(generator->key);
41529 		}
41530 	} else {
41531 		/* If no key was specified we use auto-increment keys */
41532 		generator->largest_used_integer_key++;
41533 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
41534 	}
41535 
41536 	if (RETURN_VALUE_USED(opline)) {
41537 		/* If the return value of yield is used set the send
41538 		 * target and initialize it to NULL */
41539 		generator->send_target = EX_VAR(opline->result.var);
41540 		ZVAL_NULL(generator->send_target);
41541 	} else {
41542 		generator->send_target = NULL;
41543 	}
41544 
41545 	/* We increment to the next op, so we are at the correct position when the
41546 	 * generator is resumed. */
41547 	ZEND_VM_INC_OPCODE();
41548 
41549 	/* The GOTO VM uses a local opline variable. We need to set the opline
41550 	 * variable in execute_data so we don't resume at an old position. */
41551 	SAVE_OPLINE();
41552 
41553 	ZEND_VM_RETURN();
41554 }
41555 
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41556 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41557 {
41558 	USE_OPLINE
41559 
41560 	zend_string *varname;
41561 	zval *value;
41562 	zval *variable_ptr;
41563 	uintptr_t idx;
41564 	zend_reference *ref;
41565 
41566 	ZEND_VM_REPEATABLE_OPCODE
41567 
41568 	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41569 
41570 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
41571 	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
41572 	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
41573 		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
41574 
41575 		if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
41576 	        (EXPECTED(p->key == varname) ||
41577 	         (EXPECTED(p->h == ZSTR_H(varname)) &&
41578 	          EXPECTED(p->key != NULL) &&
41579 	          EXPECTED(zend_string_equal_content(p->key, varname))))) {
41580 
41581 			value = (zval*)p; /* value = &p->val; */
41582 			goto check_indirect;
41583 		}
41584 	}
41585 
41586 	value = zend_hash_find_ex(&EG(symbol_table), varname, 1);
41587 	if (UNEXPECTED(value == NULL)) {
41588 		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
41589 		idx = (char*)value - (char*)EG(symbol_table).arData;
41590 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
41591 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
41592 	} else {
41593 		idx = (char*)value - (char*)EG(symbol_table).arData;
41594 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
41595 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
41596 check_indirect:
41597 		/* GLOBAL variable may be an INDIRECT pointer to CV */
41598 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
41599 			value = Z_INDIRECT_P(value);
41600 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
41601 				ZVAL_NULL(value);
41602 			}
41603 		}
41604 	}
41605 
41606 	if (UNEXPECTED(!Z_ISREF_P(value))) {
41607 		ZVAL_MAKE_REF_EX(value, 2);
41608 		ref = Z_REF_P(value);
41609 	} else {
41610 		ref = Z_REF_P(value);
41611 		GC_ADDREF(ref);
41612 	}
41613 
41614 	variable_ptr = EX_VAR(opline->op1.var);
41615 
41616 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
41617 		zend_refcounted *ref = Z_COUNTED_P(variable_ptr);
41618 		uint32_t refcnt = GC_DELREF(ref);
41619 
41620 		if (EXPECTED(variable_ptr != value)) {
41621 			if (refcnt == 0) {
41622 				SAVE_OPLINE();
41623 				rc_dtor_func(ref);
41624 				if (UNEXPECTED(EG(exception))) {
41625 					ZVAL_NULL(variable_ptr);
41626 					HANDLE_EXCEPTION();
41627 				}
41628 			} else {
41629 				gc_check_possible_root(ref);
41630 			}
41631 		}
41632 	}
41633 	ZVAL_REF(variable_ptr, ref);
41634 
41635 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
41636 	ZEND_VM_NEXT_OPCODE();
41637 }
41638 
ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41640 {
41641 	USE_OPLINE
41642 
41643 	zval *op1;
41644 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
41645 	zval *result;
41646 
41647 	SAVE_OPLINE();
41648 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41649 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41650 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
41651 	} else if (opline->extended_value) {
41652 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41653 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
41654 		} else {
41655 			result = NULL;
41656 		}
41657 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
41658 		result = zend_hash_find_ex(ht, ZSTR_EMPTY_ALLOC(), 1);
41659 	} else {
41660 		zend_string *key;
41661 		zval key_tmp, result_tmp, *val;
41662 
41663 		result = NULL;
41664 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
41665 			ZVAL_STR(&key_tmp, key);
41666 			compare_function(&result_tmp, op1, &key_tmp);
41667 			if (Z_LVAL(result_tmp) == 0) {
41668 				result = val;
41669 				break;
41670 			}
41671 		} ZEND_HASH_FOREACH_END();
41672 	}
41673 
41674 	ZEND_VM_SMART_BRANCH(result, 1);
41675 	ZVAL_BOOL(EX_VAR(opline->result.var), result != NULL);
41676 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41677 }
41678 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41679 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41680 {
41681 	USE_OPLINE
41682 
41683 	zval *container, *dim, *value;
41684 	zend_long offset;
41685 	HashTable *ht;
41686 
41687 	container = EX_VAR(opline->op1.var);
41688 	dim = RT_CONSTANT(opline, opline->op2);
41689 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41690 fetch_dim_r_index_array:
41691 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
41692 			offset = Z_LVAL_P(dim);
41693 		} else {
41694 			offset = zval_get_long(dim);
41695 		}
41696 		ht = Z_ARRVAL_P(container);
41697 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
41698 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41699 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41700 			SAVE_OPLINE();
41701 
41702 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41703 		} else {
41704 			ZEND_VM_NEXT_OPCODE();
41705 		}
41706 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
41707 		container = Z_REFVAL_P(container);
41708 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41709 			goto fetch_dim_r_index_array;
41710 		} else {
41711 			goto fetch_dim_r_index_slow;
41712 		}
41713 	} else {
41714 fetch_dim_r_index_slow:
41715 		SAVE_OPLINE();
41716 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41717 			dim++;
41718 		}
41719 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41720 
41721 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41722 	}
41723 
41724 fetch_dim_r_index_undef:
41725 	ZVAL_NULL(EX_VAR(opline->result.var));
41726 	SAVE_OPLINE();
41727 	zend_undefined_offset(offset);
41728 
41729 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41730 }
41731 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41732 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41733 {
41734 	USE_OPLINE
41735 
41736 	zval *container, *dim, *value;
41737 	zend_long offset;
41738 	HashTable *ht;
41739 
41740 	container = EX_VAR(opline->op1.var);
41741 	dim = EX_VAR(opline->op2.var);
41742 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41743 fetch_dim_r_index_array:
41744 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
41745 			offset = Z_LVAL_P(dim);
41746 		} else {
41747 			offset = zval_get_long(dim);
41748 		}
41749 		ht = Z_ARRVAL_P(container);
41750 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
41751 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41752 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41753 			SAVE_OPLINE();
41754 
41755 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41756 		} else {
41757 			ZEND_VM_NEXT_OPCODE();
41758 		}
41759 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
41760 		container = Z_REFVAL_P(container);
41761 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41762 			goto fetch_dim_r_index_array;
41763 		} else {
41764 			goto fetch_dim_r_index_slow;
41765 		}
41766 	} else {
41767 fetch_dim_r_index_slow:
41768 		SAVE_OPLINE();
41769 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41770 			dim++;
41771 		}
41772 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41773 
41774 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41775 	}
41776 
41777 fetch_dim_r_index_undef:
41778 	ZVAL_NULL(EX_VAR(opline->result.var));
41779 	SAVE_OPLINE();
41780 	zend_undefined_offset(offset);
41781 
41782 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41783 }
41784 
ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41786 {
41787 	USE_OPLINE
41788 	zend_free_op free_op2;
41789 	zval *op1, *op2;
41790 
41791 	SAVE_OPLINE();
41792 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41793 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
41794 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
41795 
41796 	zval_ptr_dtor_nogc(free_op2);
41797 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41798 }
41799 
ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41800 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41801 {
41802 	USE_OPLINE
41803 	zend_free_op free_op2;
41804 	zval *op1, *op2;
41805 
41806 	SAVE_OPLINE();
41807 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41808 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
41809 	pow_function(EX_VAR(opline->result.var), op1, op2);
41810 
41811 	zval_ptr_dtor_nogc(free_op2);
41812 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41813 }
41814 
ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41815 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41816 {
41817 	USE_OPLINE
41818 	zend_free_op free_op2;
41819 	zval *op1, *op2;
41820 
41821 	op1 = EX_VAR(opline->op1.var);
41822 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
41823 
41824 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
41825 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
41826 		zend_string *op1_str = Z_STR_P(op1);
41827 		zend_string *op2_str = Z_STR_P(op2);
41828 		zend_string *str;
41829 
41830 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
41831 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
41832 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
41833 			} else {
41834 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
41835 			}
41836 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41837 				zend_string_release_ex(op1_str, 0);
41838 			}
41839 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
41840 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
41841 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
41842 			} else {
41843 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
41844 			}
41845 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
41846 				zend_string_release_ex(op2_str, 0);
41847 			}
41848 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
41849 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
41850 		    size_t len = ZSTR_LEN(op1_str);
41851 
41852 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
41853 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41854 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41855 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
41856 				zend_string_release_ex(op2_str, 0);
41857 			}
41858 		} else {
41859 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
41860 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
41861 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
41862 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
41863 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41864 				zend_string_release_ex(op1_str, 0);
41865 			}
41866 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
41867 				zend_string_release_ex(op2_str, 0);
41868 			}
41869 		}
41870 		ZEND_VM_NEXT_OPCODE();
41871 	} else {
41872 		SAVE_OPLINE();
41873 
41874 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
41875 			op1 = ZVAL_UNDEFINED_OP1();
41876 		}
41877 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
41878 			op2 = ZVAL_UNDEFINED_OP2();
41879 		}
41880 		concat_function(EX_VAR(opline->result.var), op1, op2);
41881 
41882 		zval_ptr_dtor_nogc(free_op2);
41883 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41884 	}
41885 }
41886 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41887 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41888 {
41889 	USE_OPLINE
41890 	zend_free_op free_op2;
41891 	zval *op1, *op2;
41892 	double d1, d2;
41893 
41894 	op1 = EX_VAR(opline->op1.var);
41895 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
41896 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
41897 		/* pass */
41898 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41899 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41900 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41901 is_equal_true:
41902 
41903 				ZVAL_TRUE(EX_VAR(opline->result.var));
41904 				ZEND_VM_NEXT_OPCODE();
41905 			} else {
41906 is_equal_false:
41907 
41908 				ZVAL_FALSE(EX_VAR(opline->result.var));
41909 				ZEND_VM_NEXT_OPCODE();
41910 			}
41911 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41912 			d1 = (double)Z_LVAL_P(op1);
41913 			d2 = Z_DVAL_P(op2);
41914 			goto is_equal_double;
41915 		}
41916 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41917 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41918 			d1 = Z_DVAL_P(op1);
41919 			d2 = Z_DVAL_P(op2);
41920 is_equal_double:
41921 			if (d1 == d2) {
41922 				goto is_equal_true;
41923 			} else {
41924 				goto is_equal_false;
41925 			}
41926 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41927 			d1 = Z_DVAL_P(op1);
41928 			d2 = (double)Z_LVAL_P(op2);
41929 			goto is_equal_double;
41930 		}
41931 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41932 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41933 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41934 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41935 				zval_ptr_dtor_str(op1);
41936 			}
41937 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
41938 				zval_ptr_dtor_str(op2);
41939 			}
41940 			if (result) {
41941 				goto is_equal_true;
41942 			} else {
41943 				goto is_equal_false;
41944 			}
41945 		}
41946 	}
41947 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41948 }
41949 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41951 {
41952 	USE_OPLINE
41953 	zend_free_op free_op2;
41954 	zval *op1, *op2;
41955 	double d1, d2;
41956 
41957 	op1 = EX_VAR(opline->op1.var);
41958 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
41959 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
41960 		/* pass */
41961 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41962 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41963 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41964 is_equal_true:
41965 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
41966 				ZVAL_TRUE(EX_VAR(opline->result.var));
41967 				ZEND_VM_NEXT_OPCODE();
41968 			} else {
41969 is_equal_false:
41970 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
41971 				ZVAL_FALSE(EX_VAR(opline->result.var));
41972 				ZEND_VM_NEXT_OPCODE();
41973 			}
41974 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41975 			d1 = (double)Z_LVAL_P(op1);
41976 			d2 = Z_DVAL_P(op2);
41977 			goto is_equal_double;
41978 		}
41979 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41980 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41981 			d1 = Z_DVAL_P(op1);
41982 			d2 = Z_DVAL_P(op2);
41983 is_equal_double:
41984 			if (d1 == d2) {
41985 				goto is_equal_true;
41986 			} else {
41987 				goto is_equal_false;
41988 			}
41989 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41990 			d1 = Z_DVAL_P(op1);
41991 			d2 = (double)Z_LVAL_P(op2);
41992 			goto is_equal_double;
41993 		}
41994 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41995 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41996 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41997 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41998 				zval_ptr_dtor_str(op1);
41999 			}
42000 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42001 				zval_ptr_dtor_str(op2);
42002 			}
42003 			if (result) {
42004 				goto is_equal_true;
42005 			} else {
42006 				goto is_equal_false;
42007 			}
42008 		}
42009 	}
42010 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42011 }
42012 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42013 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42014 {
42015 	USE_OPLINE
42016 	zend_free_op free_op2;
42017 	zval *op1, *op2;
42018 	double d1, d2;
42019 
42020 	op1 = EX_VAR(opline->op1.var);
42021 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42022 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
42023 		/* pass */
42024 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42025 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42026 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
42027 is_equal_true:
42028 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
42029 				ZVAL_TRUE(EX_VAR(opline->result.var));
42030 				ZEND_VM_NEXT_OPCODE();
42031 			} else {
42032 is_equal_false:
42033 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
42034 				ZVAL_FALSE(EX_VAR(opline->result.var));
42035 				ZEND_VM_NEXT_OPCODE();
42036 			}
42037 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42038 			d1 = (double)Z_LVAL_P(op1);
42039 			d2 = Z_DVAL_P(op2);
42040 			goto is_equal_double;
42041 		}
42042 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
42043 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42044 			d1 = Z_DVAL_P(op1);
42045 			d2 = Z_DVAL_P(op2);
42046 is_equal_double:
42047 			if (d1 == d2) {
42048 				goto is_equal_true;
42049 			} else {
42050 				goto is_equal_false;
42051 			}
42052 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42053 			d1 = Z_DVAL_P(op1);
42054 			d2 = (double)Z_LVAL_P(op2);
42055 			goto is_equal_double;
42056 		}
42057 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42058 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42059 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
42060 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42061 				zval_ptr_dtor_str(op1);
42062 			}
42063 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42064 				zval_ptr_dtor_str(op2);
42065 			}
42066 			if (result) {
42067 				goto is_equal_true;
42068 			} else {
42069 				goto is_equal_false;
42070 			}
42071 		}
42072 	}
42073 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42074 }
42075 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42076 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42077 {
42078 	USE_OPLINE
42079 	zend_free_op free_op2;
42080 	zval *op1, *op2;
42081 	double d1, d2;
42082 
42083 	op1 = EX_VAR(opline->op1.var);
42084 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42085 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
42086 		/* pass */
42087 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42088 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42089 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
42090 is_not_equal_true:
42091 
42092 				ZVAL_TRUE(EX_VAR(opline->result.var));
42093 				ZEND_VM_NEXT_OPCODE();
42094 			} else {
42095 is_not_equal_false:
42096 
42097 				ZVAL_FALSE(EX_VAR(opline->result.var));
42098 				ZEND_VM_NEXT_OPCODE();
42099 			}
42100 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42101 			d1 = (double)Z_LVAL_P(op1);
42102 			d2 = Z_DVAL_P(op2);
42103 			goto is_not_equal_double;
42104 		}
42105 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
42106 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42107 			d1 = Z_DVAL_P(op1);
42108 			d2 = Z_DVAL_P(op2);
42109 is_not_equal_double:
42110 			if (d1 != d2) {
42111 				goto is_not_equal_true;
42112 			} else {
42113 				goto is_not_equal_false;
42114 			}
42115 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42116 			d1 = Z_DVAL_P(op1);
42117 			d2 = (double)Z_LVAL_P(op2);
42118 			goto is_not_equal_double;
42119 		}
42120 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42121 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42122 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
42123 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42124 				zval_ptr_dtor_str(op1);
42125 			}
42126 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42127 				zval_ptr_dtor_str(op2);
42128 			}
42129 			if (!result) {
42130 				goto is_not_equal_true;
42131 			} else {
42132 				goto is_not_equal_false;
42133 			}
42134 		}
42135 	}
42136 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42137 }
42138 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42139 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42140 {
42141 	USE_OPLINE
42142 	zend_free_op free_op2;
42143 	zval *op1, *op2;
42144 	double d1, d2;
42145 
42146 	op1 = EX_VAR(opline->op1.var);
42147 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42148 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
42149 		/* pass */
42150 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42151 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42152 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
42153 is_not_equal_true:
42154 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
42155 				ZVAL_TRUE(EX_VAR(opline->result.var));
42156 				ZEND_VM_NEXT_OPCODE();
42157 			} else {
42158 is_not_equal_false:
42159 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
42160 				ZVAL_FALSE(EX_VAR(opline->result.var));
42161 				ZEND_VM_NEXT_OPCODE();
42162 			}
42163 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42164 			d1 = (double)Z_LVAL_P(op1);
42165 			d2 = Z_DVAL_P(op2);
42166 			goto is_not_equal_double;
42167 		}
42168 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
42169 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42170 			d1 = Z_DVAL_P(op1);
42171 			d2 = Z_DVAL_P(op2);
42172 is_not_equal_double:
42173 			if (d1 != d2) {
42174 				goto is_not_equal_true;
42175 			} else {
42176 				goto is_not_equal_false;
42177 			}
42178 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42179 			d1 = Z_DVAL_P(op1);
42180 			d2 = (double)Z_LVAL_P(op2);
42181 			goto is_not_equal_double;
42182 		}
42183 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42184 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42185 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
42186 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42187 				zval_ptr_dtor_str(op1);
42188 			}
42189 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42190 				zval_ptr_dtor_str(op2);
42191 			}
42192 			if (!result) {
42193 				goto is_not_equal_true;
42194 			} else {
42195 				goto is_not_equal_false;
42196 			}
42197 		}
42198 	}
42199 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42200 }
42201 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42203 {
42204 	USE_OPLINE
42205 	zend_free_op free_op2;
42206 	zval *op1, *op2;
42207 	double d1, d2;
42208 
42209 	op1 = EX_VAR(opline->op1.var);
42210 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42211 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
42212 		/* pass */
42213 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
42214 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42215 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
42216 is_not_equal_true:
42217 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
42218 				ZVAL_TRUE(EX_VAR(opline->result.var));
42219 				ZEND_VM_NEXT_OPCODE();
42220 			} else {
42221 is_not_equal_false:
42222 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
42223 				ZVAL_FALSE(EX_VAR(opline->result.var));
42224 				ZEND_VM_NEXT_OPCODE();
42225 			}
42226 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42227 			d1 = (double)Z_LVAL_P(op1);
42228 			d2 = Z_DVAL_P(op2);
42229 			goto is_not_equal_double;
42230 		}
42231 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
42232 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
42233 			d1 = Z_DVAL_P(op1);
42234 			d2 = Z_DVAL_P(op2);
42235 is_not_equal_double:
42236 			if (d1 != d2) {
42237 				goto is_not_equal_true;
42238 			} else {
42239 				goto is_not_equal_false;
42240 			}
42241 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
42242 			d1 = Z_DVAL_P(op1);
42243 			d2 = (double)Z_LVAL_P(op2);
42244 			goto is_not_equal_double;
42245 		}
42246 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
42247 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
42248 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
42249 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
42250 				zval_ptr_dtor_str(op1);
42251 			}
42252 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
42253 				zval_ptr_dtor_str(op2);
42254 			}
42255 			if (!result) {
42256 				goto is_not_equal_true;
42257 			} else {
42258 				goto is_not_equal_false;
42259 			}
42260 		}
42261 	}
42262 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
42263 }
42264 
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42265 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42266 {
42267 	USE_OPLINE
42268 	zend_free_op free_op2;
42269 	zval *op1, *op2;
42270 
42271 	SAVE_OPLINE();
42272 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42273 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42274 	compare_function(EX_VAR(opline->result.var), op1, op2);
42275 
42276 	zval_ptr_dtor_nogc(free_op2);
42277 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42278 }
42279 
ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42281 {
42282 	USE_OPLINE
42283 	zend_free_op free_op2;
42284 	zval *op1, *op2;
42285 
42286 	SAVE_OPLINE();
42287 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
42288 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42289 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
42290 
42291 	zval_ptr_dtor_nogc(free_op2);
42292 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42293 }
42294 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42295 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42296 {
42297 	USE_OPLINE
42298 	zend_free_op free_op2, free_op_data;
42299 	zval *object;
42300 	zval *property;
42301 	zval *value;
42302 	zval *zptr;
42303 	void **cache_slot;
42304 	zend_property_info *prop_info;
42305 
42306 	SAVE_OPLINE();
42307 	object = EX_VAR(opline->op1.var);
42308 
42309 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42310 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42311 	}
42312 
42313 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42314 
42315 	do {
42316 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
42317 
42318 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42319 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42320 				object = Z_REFVAL_P(object);
42321 				goto assign_op_object;
42322 			}
42323 			if (IS_CV == IS_CV
42324 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42325 				ZVAL_UNDEFINED_OP1();
42326 			}
42327 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
42328 			if (UNEXPECTED(!object)) {
42329 				break;
42330 			}
42331 		}
42332 
42333 assign_op_object:
42334 		/* here we are sure we are dealing with an object */
42335 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
42336 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
42337 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
42338 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42339 					ZVAL_NULL(EX_VAR(opline->result.var));
42340 				}
42341 			} else {
42342 				zval *orig_zptr = zptr;
42343 				zend_reference *ref;
42344 
42345 				do {
42346 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
42347 						ref = Z_REF_P(zptr);
42348 						zptr = Z_REFVAL_P(zptr);
42349 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
42350 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
42351 							break;
42352 						}
42353 					}
42354 
42355 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42356 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
42357 					} else {
42358 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
42359 					}
42360 					if (UNEXPECTED(prop_info)) {
42361 						/* special case for typed properties */
42362 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
42363 					} else {
42364 						zend_binary_op(zptr, zptr, value OPLINE_CC);
42365 					}
42366 				} while (0);
42367 
42368 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42369 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
42370 				}
42371 			}
42372 		} else {
42373 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
42374 		}
42375 	} while (0);
42376 
42377 	FREE_OP(free_op_data);
42378 	zval_ptr_dtor_nogc(free_op2);
42379 
42380 	/* assign_obj has two opcodes! */
42381 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42382 }
42383 
42384 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42386 {
42387 	USE_OPLINE
42388 	zend_free_op free_op2, free_op_data1;
42389 	zval *var_ptr;
42390 	zval *value, *container, *dim;
42391 
42392 	SAVE_OPLINE();
42393 	container = EX_VAR(opline->op1.var);
42394 
42395 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42396 assign_dim_op_array:
42397 		SEPARATE_ARRAY(container);
42398 assign_dim_op_new_array:
42399 		dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42400 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
42401 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
42402 			if (UNEXPECTED(!var_ptr)) {
42403 				zend_cannot_add_element();
42404 				goto assign_dim_op_ret_null;
42405 			}
42406 		} else {
42407 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42408 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
42409 			} else {
42410 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
42411 			}
42412 			if (UNEXPECTED(!var_ptr)) {
42413 				goto assign_dim_op_ret_null;
42414 			}
42415 		}
42416 
42417 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
42418 
42419 		do {
42420 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
42421 				zend_reference *ref = Z_REF_P(var_ptr);
42422 				var_ptr = Z_REFVAL_P(var_ptr);
42423 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
42424 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
42425 					break;
42426 				}
42427 			}
42428 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
42429 		} while (0);
42430 
42431 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42432 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
42433 		}
42434 		FREE_OP(free_op_data1);
42435 	} else {
42436 		if (EXPECTED(Z_ISREF_P(container))) {
42437 			container = Z_REFVAL_P(container);
42438 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42439 				goto assign_dim_op_array;
42440 			}
42441 		}
42442 
42443 		dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42444 
42445 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42446 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42447 				dim++;
42448 			}
42449 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
42450 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
42451 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
42452 				ZVAL_UNDEFINED_OP1();
42453 			}
42454 			ZVAL_ARR(container, zend_new_array(8));
42455 			goto assign_dim_op_new_array;
42456 		} else {
42457 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
42458 assign_dim_op_ret_null:
42459 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
42460 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42461 				ZVAL_NULL(EX_VAR(opline->result.var));
42462 			}
42463 		}
42464 	}
42465 
42466 	zval_ptr_dtor_nogc(free_op2);
42467 
42468 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42469 }
42470 
ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42471 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42472 {
42473 	USE_OPLINE
42474 	zend_free_op free_op2;
42475 	zval *var_ptr;
42476 	zval *value;
42477 
42478 	SAVE_OPLINE();
42479 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42480 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
42481 
42482 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
42483 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42484 			ZVAL_NULL(EX_VAR(opline->result.var));
42485 		}
42486 	} else {
42487 		do {
42488 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
42489 				zend_reference *ref = Z_REF_P(var_ptr);
42490 				var_ptr = Z_REFVAL_P(var_ptr);
42491 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
42492 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
42493 					break;
42494 				}
42495 			}
42496 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
42497 		} while (0);
42498 
42499 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42500 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
42501 		}
42502 	}
42503 
42504 	zval_ptr_dtor_nogc(free_op2);
42505 
42506 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42507 }
42508 
ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42509 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42510 {
42511 	USE_OPLINE
42512 	zend_free_op free_op2;
42513 	zval *object;
42514 	zval *property;
42515 	zval *zptr;
42516 	void **cache_slot;
42517 	zend_property_info *prop_info;
42518 
42519 	SAVE_OPLINE();
42520 	object = EX_VAR(opline->op1.var);
42521 
42522 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42523 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42524 	}
42525 
42526 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42527 
42528 	do {
42529 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42530 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42531 				object = Z_REFVAL_P(object);
42532 				goto pre_incdec_object;
42533 			}
42534 			if (IS_CV == IS_CV
42535 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42536 				ZVAL_UNDEFINED_OP1();
42537 			}
42538 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
42539 			if (UNEXPECTED(!object)) {
42540 				break;
42541 			}
42542 		}
42543 
42544 pre_incdec_object:
42545 		/* here we are sure we are dealing with an object */
42546 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
42547 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
42548 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
42549 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42550 					ZVAL_NULL(EX_VAR(opline->result.var));
42551 				}
42552 			} else {
42553 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42554 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
42555 				} else {
42556 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
42557 				}
42558 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
42559 			}
42560 		} else {
42561 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
42562 		}
42563 	} while (0);
42564 
42565 	zval_ptr_dtor_nogc(free_op2);
42566 
42567 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42568 }
42569 
ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42570 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42571 {
42572 	USE_OPLINE
42573 	zend_free_op free_op2;
42574 	zval *object;
42575 	zval *property;
42576 	zval *zptr;
42577 	void **cache_slot;
42578 	zend_property_info *prop_info;
42579 
42580 	SAVE_OPLINE();
42581 	object = EX_VAR(opline->op1.var);
42582 
42583 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42584 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42585 	}
42586 
42587 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42588 
42589 	do {
42590 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42591 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42592 				object = Z_REFVAL_P(object);
42593 				goto post_incdec_object;
42594 			}
42595 			if (IS_CV == IS_CV
42596 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
42597 				ZVAL_UNDEFINED_OP1();
42598 			}
42599 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
42600 			if (UNEXPECTED(!object)) {
42601 				break;
42602 			}
42603 		}
42604 
42605 post_incdec_object:
42606 		/* here we are sure we are dealing with an object */
42607 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
42608 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
42609 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
42610 				ZVAL_NULL(EX_VAR(opline->result.var));
42611 			} else {
42612 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42613 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
42614 				} else {
42615 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
42616 				}
42617 
42618 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
42619 			}
42620 		} else {
42621 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
42622 		}
42623 	} while (0);
42624 
42625 	zval_ptr_dtor_nogc(free_op2);
42626 
42627 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42628 }
42629 
ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42631 {
42632 	USE_OPLINE
42633 	zend_free_op free_op2;
42634 	zval *container, *dim, *value;
42635 
42636 	SAVE_OPLINE();
42637 	container = EX_VAR(opline->op1.var);
42638 	dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42639 	if (IS_CV != IS_CONST) {
42640 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42641 fetch_dim_r_array:
42642 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
42643 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42644 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
42645 			container = Z_REFVAL_P(container);
42646 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
42647 				goto fetch_dim_r_array;
42648 			} else {
42649 				goto fetch_dim_r_slow;
42650 			}
42651 		} else {
42652 fetch_dim_r_slow:
42653 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42654 				dim++;
42655 			}
42656 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
42657 		}
42658 	} else {
42659 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
42660 	}
42661 	zval_ptr_dtor_nogc(free_op2);
42662 
42663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42664 }
42665 
ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42667 {
42668 	USE_OPLINE
42669 	zend_free_op free_op1, free_op2;
42670 	zval *container;
42671 
42672 	SAVE_OPLINE();
42673 	container = EX_VAR(opline->op1.var);
42674 	zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
42675 	zval_ptr_dtor_nogc(free_op2);
42676 	if (IS_CV == IS_VAR) {
42677 		zval *result = EX_VAR(opline->result.var);
42678 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
42679 	}
42680 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42681 }
42682 
ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42683 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42684 {
42685 	USE_OPLINE
42686 	zend_free_op free_op1, free_op2;
42687 	zval *container;
42688 
42689 	SAVE_OPLINE();
42690 	container = EX_VAR(opline->op1.var);
42691 	zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
42692 	zval_ptr_dtor_nogc(free_op2);
42693 	if (IS_CV == IS_VAR) {
42694 		zval *result = EX_VAR(opline->result.var);
42695 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
42696 	}
42697 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42698 }
42699 
ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42700 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42701 {
42702 	USE_OPLINE
42703 	zend_free_op free_op2;
42704 	zval *container;
42705 
42706 	SAVE_OPLINE();
42707 	container = EX_VAR(opline->op1.var);
42708 	zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
42709 	zval_ptr_dtor_nogc(free_op2);
42710 
42711 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42712 }
42713 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42715 {
42716 #if 0
42717 	USE_OPLINE
42718 #endif
42719 
42720 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
42721         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
42722 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42723         }
42724 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42725 	} else {
42726 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
42727 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42728 		}
42729 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42730 	}
42731 }
42732 
ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42733 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42734 {
42735 	USE_OPLINE
42736 	zend_free_op free_op1, free_op2;
42737 	zval *container;
42738 
42739 	SAVE_OPLINE();
42740 	container = EX_VAR(opline->op1.var);
42741 	zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
42742 	zval_ptr_dtor_nogc(free_op2);
42743 	if (IS_CV == IS_VAR) {
42744 		zval *result = EX_VAR(opline->result.var);
42745 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
42746 	}
42747 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42748 }
42749 
ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42751 {
42752 	USE_OPLINE
42753 
42754 	zval *container;
42755 	zend_free_op free_op2;
42756 	zval *offset;
42757 	void **cache_slot = NULL;
42758 
42759 	SAVE_OPLINE();
42760 	container = EX_VAR(opline->op1.var);
42761 
42762 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42763 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42764 	}
42765 
42766 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42767 
42768 	if (IS_CV == IS_CONST ||
42769 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42770 	    do {
42771 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42772 				container = Z_REFVAL_P(container);
42773 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42774 					break;
42775 				}
42776 			}
42777 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42778 				ZVAL_UNDEFINED_OP1();
42779 			}
42780 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
42781 				ZVAL_UNDEFINED_OP2();
42782 			}
42783 			zend_wrong_property_read(offset);
42784 			ZVAL_NULL(EX_VAR(opline->result.var));
42785 			goto fetch_obj_r_finish;
42786 		} while (0);
42787 	}
42788 
42789 	/* here we are sure we are dealing with an object */
42790 	do {
42791 		zend_object *zobj = Z_OBJ_P(container);
42792 		zval *retval;
42793 
42794 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42795 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
42796 
42797 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
42798 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42799 
42800 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42801 					retval = OBJ_PROP(zobj, prop_offset);
42802 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
42803 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42804 							goto fetch_obj_r_copy;
42805 						} else {
42806 fetch_obj_r_fast_copy:
42807 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42808 							ZEND_VM_NEXT_OPCODE();
42809 						}
42810 					}
42811 				} else if (EXPECTED(zobj->properties != NULL)) {
42812 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
42813 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
42814 
42815 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
42816 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
42817 
42818 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
42819 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
42820 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
42821 						          EXPECTED(p->key != NULL) &&
42822 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
42823 								retval = &p->val;
42824 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42825 									goto fetch_obj_r_copy;
42826 								} else {
42827 									goto fetch_obj_r_fast_copy;
42828 								}
42829 							}
42830 						}
42831 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
42832 					}
42833 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
42834 					if (EXPECTED(retval)) {
42835 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
42836 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
42837 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42838 							goto fetch_obj_r_copy;
42839 						} else {
42840 							goto fetch_obj_r_fast_copy;
42841 						}
42842 					}
42843 				}
42844 			}
42845 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
42846 			ZVAL_UNDEFINED_OP2();
42847 		}
42848 
42849 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
42850 
42851 		if (retval != EX_VAR(opline->result.var)) {
42852 fetch_obj_r_copy:
42853 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42854 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
42855 			zend_unwrap_reference(retval);
42856 		}
42857 	} while (0);
42858 
42859 fetch_obj_r_finish:
42860 	zval_ptr_dtor_nogc(free_op2);
42861 
42862 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42863 }
42864 
ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42866 {
42867 	USE_OPLINE
42868 	zend_free_op free_op1, free_op2;
42869 	zval *property, *container, *result;
42870 
42871 	SAVE_OPLINE();
42872 
42873 	container = EX_VAR(opline->op1.var);
42874 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42875 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42876 	}
42877 
42878 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42879 	result = EX_VAR(opline->result.var);
42880 	zend_fetch_property_address(
42881 		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
42882 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
42883 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
42884 	zval_ptr_dtor_nogc(free_op2);
42885 	if (IS_CV == IS_VAR) {
42886 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
42887 	}
42888 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42889 }
42890 
ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42892 {
42893 	USE_OPLINE
42894 	zend_free_op free_op1, free_op2;
42895 	zval *property, *container, *result;
42896 
42897 	SAVE_OPLINE();
42898 	container = EX_VAR(opline->op1.var);
42899 
42900 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42901 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42902 	}
42903 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42904 	result = EX_VAR(opline->result.var);
42905 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
42906 	zval_ptr_dtor_nogc(free_op2);
42907 	if (IS_CV == IS_VAR) {
42908 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
42909 	}
42910 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42911 }
42912 
ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42913 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42914 {
42915 	USE_OPLINE
42916 
42917 	zval *container;
42918 	zend_free_op free_op2;
42919 	zval *offset;
42920 	void **cache_slot = NULL;
42921 
42922 	SAVE_OPLINE();
42923 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
42924 
42925 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
42926 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42927 	}
42928 
42929 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
42930 
42931 	if (IS_CV == IS_CONST ||
42932 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
42933 		do {
42934 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
42935 				container = Z_REFVAL_P(container);
42936 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
42937 					break;
42938 				}
42939 			}
42940 			ZVAL_NULL(EX_VAR(opline->result.var));
42941 			goto fetch_obj_is_finish;
42942 		} while (0);
42943 	}
42944 
42945 	/* here we are sure we are dealing with an object */
42946 	do {
42947 		zend_object *zobj = Z_OBJ_P(container);
42948 		zval *retval;
42949 
42950 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
42951 			cache_slot = CACHE_ADDR(opline->extended_value);
42952 
42953 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
42954 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42955 
42956 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42957 					retval = OBJ_PROP(zobj, prop_offset);
42958 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
42959 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42960 							goto fetch_obj_is_copy;
42961 						} else {
42962 fetch_obj_is_fast_copy:
42963 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42964 							ZEND_VM_NEXT_OPCODE();
42965 						}
42966 					}
42967 				} else if (EXPECTED(zobj->properties != NULL)) {
42968 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
42969 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
42970 
42971 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
42972 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
42973 
42974 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
42975 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
42976 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
42977 						          EXPECTED(p->key != NULL) &&
42978 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
42979 								retval = &p->val;
42980 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42981 									goto fetch_obj_is_copy;
42982 								} else {
42983 									goto fetch_obj_is_fast_copy;
42984 								}
42985 							}
42986 						}
42987 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
42988 					}
42989 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
42990 					if (EXPECTED(retval)) {
42991 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
42992 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
42993 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
42994 							goto fetch_obj_is_copy;
42995 						} else {
42996 							goto fetch_obj_is_fast_copy;
42997 						}
42998 					}
42999 				}
43000 			}
43001 		}
43002 
43003 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
43004 
43005 		if (retval != EX_VAR(opline->result.var)) {
43006 fetch_obj_is_copy:
43007 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
43008 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
43009 			zend_unwrap_reference(retval);
43010 		}
43011 	} while (0);
43012 
43013 fetch_obj_is_finish:
43014 	zval_ptr_dtor_nogc(free_op2);
43015 
43016 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43017 }
43018 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43020 {
43021 #if 0
43022 	USE_OPLINE
43023 #endif
43024 
43025 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
43026 		/* Behave like FETCH_OBJ_W */
43027 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
43028 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43029 		}
43030 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43031 	} else {
43032 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43033 	}
43034 }
43035 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43037 {
43038 	USE_OPLINE
43039 	zend_free_op free_op1, free_op2;
43040 	zval *container, *property, *result;
43041 
43042 	SAVE_OPLINE();
43043 	container = EX_VAR(opline->op1.var);
43044 
43045 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
43046 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43047 	}
43048 
43049 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43050 	result = EX_VAR(opline->result.var);
43051 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
43052 	zval_ptr_dtor_nogc(free_op2);
43053 	if (IS_CV == IS_VAR) {
43054 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
43055 	}
43056 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43057 }
43058 
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43060 {
43061 	USE_OPLINE
43062 	zend_free_op free_op2;
43063 	zval *object, *property, *value, tmp;
43064 
43065 	SAVE_OPLINE();
43066 	object = EX_VAR(opline->op1.var);
43067 
43068 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43069 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43070 	}
43071 
43072 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43073 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
43074 
43075 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43076 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43077 			object = Z_REFVAL_P(object);
43078 			goto assign_object;
43079 		}
43080 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
43081 		if (UNEXPECTED(!object)) {
43082 			value = &EG(uninitialized_zval);
43083 			goto free_and_exit_assign_obj;
43084 		}
43085 	}
43086 
43087 assign_object:
43088 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43089 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
43090 		void **cache_slot = CACHE_ADDR(opline->extended_value);
43091 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
43092 		zend_object *zobj = Z_OBJ_P(object);
43093 		zval *property_val;
43094 
43095 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
43096 			property_val = OBJ_PROP(zobj, prop_offset);
43097 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
43098 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
43099 
43100 				if (UNEXPECTED(prop_info != NULL)) {
43101 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
43102 					goto free_and_exit_assign_obj;
43103 				} else {
43104 fast_assign_obj:
43105 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
43106 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43107 						ZVAL_COPY(EX_VAR(opline->result.var), value);
43108 					}
43109 					goto exit_assign_obj;
43110 				}
43111 			}
43112 		} else {
43113 			if (EXPECTED(zobj->properties != NULL)) {
43114 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
43115 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
43116 						GC_DELREF(zobj->properties);
43117 					}
43118 					zobj->properties = zend_array_dup(zobj->properties);
43119 				}
43120 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
43121 				if (property_val) {
43122 					goto fast_assign_obj;
43123 				}
43124 			}
43125 
43126 			if (!zobj->ce->__set) {
43127 
43128 				if (EXPECTED(zobj->properties == NULL)) {
43129 					rebuild_object_properties(zobj);
43130 				}
43131 				if (IS_CONST == IS_CONST) {
43132 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
43133 						Z_ADDREF_P(value);
43134 					}
43135 				} else if (IS_CONST != IS_TMP_VAR) {
43136 					if (Z_ISREF_P(value)) {
43137 						if (IS_CONST == IS_VAR) {
43138 							zend_reference *ref = Z_REF_P(value);
43139 							if (GC_DELREF(ref) == 0) {
43140 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
43141 								efree_size(ref, sizeof(zend_reference));
43142 								value = &tmp;
43143 							} else {
43144 								value = Z_REFVAL_P(value);
43145 								Z_TRY_ADDREF_P(value);
43146 							}
43147 						} else {
43148 							value = Z_REFVAL_P(value);
43149 							Z_TRY_ADDREF_P(value);
43150 						}
43151 					} else if (IS_CONST == IS_CV) {
43152 						Z_TRY_ADDREF_P(value);
43153 					}
43154 				}
43155 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
43156 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43157 					ZVAL_COPY(EX_VAR(opline->result.var), value);
43158 				}
43159 				goto exit_assign_obj;
43160 			}
43161 		}
43162 	}
43163 
43164 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
43165 		ZVAL_DEREF(value);
43166 	}
43167 
43168 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
43169 
43170 free_and_exit_assign_obj:
43171 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43172 		ZVAL_COPY(EX_VAR(opline->result.var), value);
43173 	}
43174 
43175 exit_assign_obj:
43176 	zval_ptr_dtor_nogc(free_op2);
43177 
43178 	/* assign_obj has two opcodes! */
43179 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43180 }
43181 
43182 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43183 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43184 {
43185 	USE_OPLINE
43186 	zend_free_op free_op2, free_op_data;
43187 	zval *object, *property, *value, tmp;
43188 
43189 	SAVE_OPLINE();
43190 	object = EX_VAR(opline->op1.var);
43191 
43192 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43193 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43194 	}
43195 
43196 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43197 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43198 
43199 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43200 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43201 			object = Z_REFVAL_P(object);
43202 			goto assign_object;
43203 		}
43204 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
43205 		if (UNEXPECTED(!object)) {
43206 			value = &EG(uninitialized_zval);
43207 			goto free_and_exit_assign_obj;
43208 		}
43209 	}
43210 
43211 assign_object:
43212 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43213 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
43214 		void **cache_slot = CACHE_ADDR(opline->extended_value);
43215 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
43216 		zend_object *zobj = Z_OBJ_P(object);
43217 		zval *property_val;
43218 
43219 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
43220 			property_val = OBJ_PROP(zobj, prop_offset);
43221 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
43222 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
43223 
43224 				if (UNEXPECTED(prop_info != NULL)) {
43225 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
43226 					goto free_and_exit_assign_obj;
43227 				} else {
43228 fast_assign_obj:
43229 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
43230 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43231 						ZVAL_COPY(EX_VAR(opline->result.var), value);
43232 					}
43233 					goto exit_assign_obj;
43234 				}
43235 			}
43236 		} else {
43237 			if (EXPECTED(zobj->properties != NULL)) {
43238 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
43239 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
43240 						GC_DELREF(zobj->properties);
43241 					}
43242 					zobj->properties = zend_array_dup(zobj->properties);
43243 				}
43244 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
43245 				if (property_val) {
43246 					goto fast_assign_obj;
43247 				}
43248 			}
43249 
43250 			if (!zobj->ce->__set) {
43251 
43252 				if (EXPECTED(zobj->properties == NULL)) {
43253 					rebuild_object_properties(zobj);
43254 				}
43255 				if (IS_TMP_VAR == IS_CONST) {
43256 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
43257 						Z_ADDREF_P(value);
43258 					}
43259 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
43260 					if (Z_ISREF_P(value)) {
43261 						if (IS_TMP_VAR == IS_VAR) {
43262 							zend_reference *ref = Z_REF_P(value);
43263 							if (GC_DELREF(ref) == 0) {
43264 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
43265 								efree_size(ref, sizeof(zend_reference));
43266 								value = &tmp;
43267 							} else {
43268 								value = Z_REFVAL_P(value);
43269 								Z_TRY_ADDREF_P(value);
43270 							}
43271 						} else {
43272 							value = Z_REFVAL_P(value);
43273 							Z_TRY_ADDREF_P(value);
43274 						}
43275 					} else if (IS_TMP_VAR == IS_CV) {
43276 						Z_TRY_ADDREF_P(value);
43277 					}
43278 				}
43279 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
43280 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43281 					ZVAL_COPY(EX_VAR(opline->result.var), value);
43282 				}
43283 				goto exit_assign_obj;
43284 			}
43285 		}
43286 	}
43287 
43288 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
43289 		ZVAL_DEREF(value);
43290 	}
43291 
43292 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
43293 
43294 free_and_exit_assign_obj:
43295 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43296 		ZVAL_COPY(EX_VAR(opline->result.var), value);
43297 	}
43298 	zval_ptr_dtor_nogc(free_op_data);
43299 exit_assign_obj:
43300 	zval_ptr_dtor_nogc(free_op2);
43301 
43302 	/* assign_obj has two opcodes! */
43303 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43304 }
43305 
43306 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43307 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43308 {
43309 	USE_OPLINE
43310 	zend_free_op free_op2, free_op_data;
43311 	zval *object, *property, *value, tmp;
43312 
43313 	SAVE_OPLINE();
43314 	object = EX_VAR(opline->op1.var);
43315 
43316 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43317 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43318 	}
43319 
43320 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43321 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43322 
43323 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43324 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43325 			object = Z_REFVAL_P(object);
43326 			goto assign_object;
43327 		}
43328 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
43329 		if (UNEXPECTED(!object)) {
43330 			value = &EG(uninitialized_zval);
43331 			goto free_and_exit_assign_obj;
43332 		}
43333 	}
43334 
43335 assign_object:
43336 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43337 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
43338 		void **cache_slot = CACHE_ADDR(opline->extended_value);
43339 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
43340 		zend_object *zobj = Z_OBJ_P(object);
43341 		zval *property_val;
43342 
43343 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
43344 			property_val = OBJ_PROP(zobj, prop_offset);
43345 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
43346 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
43347 
43348 				if (UNEXPECTED(prop_info != NULL)) {
43349 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
43350 					goto free_and_exit_assign_obj;
43351 				} else {
43352 fast_assign_obj:
43353 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
43354 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43355 						ZVAL_COPY(EX_VAR(opline->result.var), value);
43356 					}
43357 					goto exit_assign_obj;
43358 				}
43359 			}
43360 		} else {
43361 			if (EXPECTED(zobj->properties != NULL)) {
43362 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
43363 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
43364 						GC_DELREF(zobj->properties);
43365 					}
43366 					zobj->properties = zend_array_dup(zobj->properties);
43367 				}
43368 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
43369 				if (property_val) {
43370 					goto fast_assign_obj;
43371 				}
43372 			}
43373 
43374 			if (!zobj->ce->__set) {
43375 
43376 				if (EXPECTED(zobj->properties == NULL)) {
43377 					rebuild_object_properties(zobj);
43378 				}
43379 				if (IS_VAR == IS_CONST) {
43380 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
43381 						Z_ADDREF_P(value);
43382 					}
43383 				} else if (IS_VAR != IS_TMP_VAR) {
43384 					if (Z_ISREF_P(value)) {
43385 						if (IS_VAR == IS_VAR) {
43386 							zend_reference *ref = Z_REF_P(value);
43387 							if (GC_DELREF(ref) == 0) {
43388 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
43389 								efree_size(ref, sizeof(zend_reference));
43390 								value = &tmp;
43391 							} else {
43392 								value = Z_REFVAL_P(value);
43393 								Z_TRY_ADDREF_P(value);
43394 							}
43395 						} else {
43396 							value = Z_REFVAL_P(value);
43397 							Z_TRY_ADDREF_P(value);
43398 						}
43399 					} else if (IS_VAR == IS_CV) {
43400 						Z_TRY_ADDREF_P(value);
43401 					}
43402 				}
43403 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
43404 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43405 					ZVAL_COPY(EX_VAR(opline->result.var), value);
43406 				}
43407 				goto exit_assign_obj;
43408 			}
43409 		}
43410 	}
43411 
43412 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
43413 		ZVAL_DEREF(value);
43414 	}
43415 
43416 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
43417 
43418 free_and_exit_assign_obj:
43419 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43420 		ZVAL_COPY(EX_VAR(opline->result.var), value);
43421 	}
43422 	zval_ptr_dtor_nogc(free_op_data);
43423 exit_assign_obj:
43424 	zval_ptr_dtor_nogc(free_op2);
43425 
43426 	/* assign_obj has two opcodes! */
43427 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43428 }
43429 
43430 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43432 {
43433 	USE_OPLINE
43434 	zend_free_op free_op2;
43435 	zval *object, *property, *value, tmp;
43436 
43437 	SAVE_OPLINE();
43438 	object = EX_VAR(opline->op1.var);
43439 
43440 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43441 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43442 	}
43443 
43444 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43445 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43446 
43447 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
43448 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
43449 			object = Z_REFVAL_P(object);
43450 			goto assign_object;
43451 		}
43452 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
43453 		if (UNEXPECTED(!object)) {
43454 			value = &EG(uninitialized_zval);
43455 			goto free_and_exit_assign_obj;
43456 		}
43457 	}
43458 
43459 assign_object:
43460 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
43461 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
43462 		void **cache_slot = CACHE_ADDR(opline->extended_value);
43463 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
43464 		zend_object *zobj = Z_OBJ_P(object);
43465 		zval *property_val;
43466 
43467 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
43468 			property_val = OBJ_PROP(zobj, prop_offset);
43469 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
43470 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
43471 
43472 				if (UNEXPECTED(prop_info != NULL)) {
43473 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
43474 					goto free_and_exit_assign_obj;
43475 				} else {
43476 fast_assign_obj:
43477 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
43478 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43479 						ZVAL_COPY(EX_VAR(opline->result.var), value);
43480 					}
43481 					goto exit_assign_obj;
43482 				}
43483 			}
43484 		} else {
43485 			if (EXPECTED(zobj->properties != NULL)) {
43486 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
43487 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
43488 						GC_DELREF(zobj->properties);
43489 					}
43490 					zobj->properties = zend_array_dup(zobj->properties);
43491 				}
43492 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
43493 				if (property_val) {
43494 					goto fast_assign_obj;
43495 				}
43496 			}
43497 
43498 			if (!zobj->ce->__set) {
43499 
43500 				if (EXPECTED(zobj->properties == NULL)) {
43501 					rebuild_object_properties(zobj);
43502 				}
43503 				if (IS_CV == IS_CONST) {
43504 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
43505 						Z_ADDREF_P(value);
43506 					}
43507 				} else if (IS_CV != IS_TMP_VAR) {
43508 					if (Z_ISREF_P(value)) {
43509 						if (IS_CV == IS_VAR) {
43510 							zend_reference *ref = Z_REF_P(value);
43511 							if (GC_DELREF(ref) == 0) {
43512 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
43513 								efree_size(ref, sizeof(zend_reference));
43514 								value = &tmp;
43515 							} else {
43516 								value = Z_REFVAL_P(value);
43517 								Z_TRY_ADDREF_P(value);
43518 							}
43519 						} else {
43520 							value = Z_REFVAL_P(value);
43521 							Z_TRY_ADDREF_P(value);
43522 						}
43523 					} else if (IS_CV == IS_CV) {
43524 						Z_TRY_ADDREF_P(value);
43525 					}
43526 				}
43527 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
43528 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43529 					ZVAL_COPY(EX_VAR(opline->result.var), value);
43530 				}
43531 				goto exit_assign_obj;
43532 			}
43533 		}
43534 	}
43535 
43536 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
43537 		ZVAL_DEREF(value);
43538 	}
43539 
43540 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
43541 
43542 free_and_exit_assign_obj:
43543 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43544 		ZVAL_COPY(EX_VAR(opline->result.var), value);
43545 	}
43546 
43547 exit_assign_obj:
43548 	zval_ptr_dtor_nogc(free_op2);
43549 
43550 	/* assign_obj has two opcodes! */
43551 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43552 }
43553 
43554 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43555 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43556 {
43557 	USE_OPLINE
43558 
43559 	zval *object_ptr, *orig_object_ptr;
43560 	zend_free_op free_op2, free_op_data;
43561 	zval *value;
43562 	zval *variable_ptr;
43563 	zval *dim;
43564 
43565 	SAVE_OPLINE();
43566 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43567 
43568 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43569 try_assign_dim_array:
43570 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
43571 		SEPARATE_ARRAY(object_ptr);
43572 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43573 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
43574 				ZVAL_DEREF(value);
43575 			}
43576 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43577 			if (UNEXPECTED(variable_ptr == NULL)) {
43578 				zend_cannot_add_element();
43579 				goto assign_dim_error;
43580 			} else if (IS_CONST == IS_CV) {
43581 				if (Z_REFCOUNTED_P(value)) {
43582 					Z_ADDREF_P(value);
43583 				}
43584 			} else if (IS_CONST == IS_VAR) {
43585 				if (value != free_op_data) {
43586 					if (Z_REFCOUNTED_P(value)) {
43587 						Z_ADDREF_P(value);
43588 					}
43589 
43590 				}
43591 			} else if (IS_CONST == IS_CONST) {
43592 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43593 					Z_ADDREF_P(value);
43594 				}
43595 			}
43596 		} else {
43597 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43598 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43599 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43600 			} else {
43601 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43602 			}
43603 			if (UNEXPECTED(variable_ptr == NULL)) {
43604 				goto assign_dim_error;
43605 			}
43606 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
43607 		}
43608 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43609 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43610 		}
43611 	} else {
43612 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43613 			object_ptr = Z_REFVAL_P(object_ptr);
43614 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43615 				goto try_assign_dim_array;
43616 			}
43617 		}
43618 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43619 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43620 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
43621 
43622 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43623 				dim++;
43624 			}
43625 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43626 
43627 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43628 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43629 				zend_use_new_element_for_string();
43630 
43631 				UNDEF_RESULT();
43632 			} else {
43633 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43634 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
43635 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43636 
43637 			}
43638 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43639 			if (Z_ISREF_P(orig_object_ptr)
43640 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43641 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43642 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43643 
43644 				UNDEF_RESULT();
43645 			} else {
43646 				ZVAL_ARR(object_ptr, zend_new_array(8));
43647 				goto try_assign_dim_array;
43648 			}
43649 		} else {
43650 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
43651 				zend_use_scalar_as_array();
43652 			}
43653 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43654 assign_dim_error:
43655 
43656 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43657 				ZVAL_NULL(EX_VAR(opline->result.var));
43658 			}
43659 		}
43660 	}
43661 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
43662 		zval_ptr_dtor_nogc(free_op2);
43663 	}
43664 
43665 	/* assign_dim has two opcodes! */
43666 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43667 }
43668 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43669 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43670 {
43671 	USE_OPLINE
43672 
43673 	zval *object_ptr, *orig_object_ptr;
43674 	zend_free_op free_op2, free_op_data;
43675 	zval *value;
43676 	zval *variable_ptr;
43677 	zval *dim;
43678 
43679 	SAVE_OPLINE();
43680 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43681 
43682 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43683 try_assign_dim_array:
43684 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43685 		SEPARATE_ARRAY(object_ptr);
43686 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43687 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
43688 				ZVAL_DEREF(value);
43689 			}
43690 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43691 			if (UNEXPECTED(variable_ptr == NULL)) {
43692 				zend_cannot_add_element();
43693 				goto assign_dim_error;
43694 			} else if (IS_TMP_VAR == IS_CV) {
43695 				if (Z_REFCOUNTED_P(value)) {
43696 					Z_ADDREF_P(value);
43697 				}
43698 			} else if (IS_TMP_VAR == IS_VAR) {
43699 				if (value != free_op_data) {
43700 					if (Z_REFCOUNTED_P(value)) {
43701 						Z_ADDREF_P(value);
43702 					}
43703 					zval_ptr_dtor_nogc(free_op_data);
43704 				}
43705 			} else if (IS_TMP_VAR == IS_CONST) {
43706 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43707 					Z_ADDREF_P(value);
43708 				}
43709 			}
43710 		} else {
43711 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43712 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43713 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43714 			} else {
43715 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43716 			}
43717 			if (UNEXPECTED(variable_ptr == NULL)) {
43718 				goto assign_dim_error;
43719 			}
43720 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
43721 		}
43722 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43723 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43724 		}
43725 	} else {
43726 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43727 			object_ptr = Z_REFVAL_P(object_ptr);
43728 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43729 				goto try_assign_dim_array;
43730 			}
43731 		}
43732 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43733 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43734 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43735 
43736 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43737 				dim++;
43738 			}
43739 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43740 
43741 			zval_ptr_dtor_nogc(free_op_data);
43742 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43743 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43744 				zend_use_new_element_for_string();
43745 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43746 				UNDEF_RESULT();
43747 			} else {
43748 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43749 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43750 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43751 				zval_ptr_dtor_nogc(free_op_data);
43752 			}
43753 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43754 			if (Z_ISREF_P(orig_object_ptr)
43755 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43756 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43757 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43758 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43759 				UNDEF_RESULT();
43760 			} else {
43761 				ZVAL_ARR(object_ptr, zend_new_array(8));
43762 				goto try_assign_dim_array;
43763 			}
43764 		} else {
43765 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
43766 				zend_use_scalar_as_array();
43767 			}
43768 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43769 assign_dim_error:
43770 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43771 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43772 				ZVAL_NULL(EX_VAR(opline->result.var));
43773 			}
43774 		}
43775 	}
43776 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
43777 		zval_ptr_dtor_nogc(free_op2);
43778 	}
43779 
43780 	/* assign_dim has two opcodes! */
43781 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43782 }
43783 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43784 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43785 {
43786 	USE_OPLINE
43787 
43788 	zval *object_ptr, *orig_object_ptr;
43789 	zend_free_op free_op2, free_op_data;
43790 	zval *value;
43791 	zval *variable_ptr;
43792 	zval *dim;
43793 
43794 	SAVE_OPLINE();
43795 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43796 
43797 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43798 try_assign_dim_array:
43799 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43800 		SEPARATE_ARRAY(object_ptr);
43801 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43802 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
43803 				ZVAL_DEREF(value);
43804 			}
43805 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43806 			if (UNEXPECTED(variable_ptr == NULL)) {
43807 				zend_cannot_add_element();
43808 				goto assign_dim_error;
43809 			} else if (IS_VAR == IS_CV) {
43810 				if (Z_REFCOUNTED_P(value)) {
43811 					Z_ADDREF_P(value);
43812 				}
43813 			} else if (IS_VAR == IS_VAR) {
43814 				if (value != free_op_data) {
43815 					if (Z_REFCOUNTED_P(value)) {
43816 						Z_ADDREF_P(value);
43817 					}
43818 					zval_ptr_dtor_nogc(free_op_data);
43819 				}
43820 			} else if (IS_VAR == IS_CONST) {
43821 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43822 					Z_ADDREF_P(value);
43823 				}
43824 			}
43825 		} else {
43826 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43827 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43828 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43829 			} else {
43830 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43831 			}
43832 			if (UNEXPECTED(variable_ptr == NULL)) {
43833 				goto assign_dim_error;
43834 			}
43835 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
43836 		}
43837 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43838 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43839 		}
43840 	} else {
43841 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43842 			object_ptr = Z_REFVAL_P(object_ptr);
43843 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43844 				goto try_assign_dim_array;
43845 			}
43846 		}
43847 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43848 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43849 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43850 
43851 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43852 				dim++;
43853 			}
43854 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43855 
43856 			zval_ptr_dtor_nogc(free_op_data);
43857 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43858 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43859 				zend_use_new_element_for_string();
43860 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43861 				UNDEF_RESULT();
43862 			} else {
43863 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43864 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
43865 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43866 				zval_ptr_dtor_nogc(free_op_data);
43867 			}
43868 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43869 			if (Z_ISREF_P(orig_object_ptr)
43870 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43871 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43872 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43873 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43874 				UNDEF_RESULT();
43875 			} else {
43876 				ZVAL_ARR(object_ptr, zend_new_array(8));
43877 				goto try_assign_dim_array;
43878 			}
43879 		} else {
43880 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
43881 				zend_use_scalar_as_array();
43882 			}
43883 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43884 assign_dim_error:
43885 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43886 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43887 				ZVAL_NULL(EX_VAR(opline->result.var));
43888 			}
43889 		}
43890 	}
43891 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
43892 		zval_ptr_dtor_nogc(free_op2);
43893 	}
43894 
43895 	/* assign_dim has two opcodes! */
43896 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43897 }
43898 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43899 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43900 {
43901 	USE_OPLINE
43902 
43903 	zval *object_ptr, *orig_object_ptr;
43904 	zend_free_op free_op2, free_op_data;
43905 	zval *value;
43906 	zval *variable_ptr;
43907 	zval *dim;
43908 
43909 	SAVE_OPLINE();
43910 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43911 
43912 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43913 try_assign_dim_array:
43914 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43915 		SEPARATE_ARRAY(object_ptr);
43916 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43917 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
43918 				ZVAL_DEREF(value);
43919 			}
43920 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43921 			if (UNEXPECTED(variable_ptr == NULL)) {
43922 				zend_cannot_add_element();
43923 				goto assign_dim_error;
43924 			} else if (IS_CV == IS_CV) {
43925 				if (Z_REFCOUNTED_P(value)) {
43926 					Z_ADDREF_P(value);
43927 				}
43928 			} else if (IS_CV == IS_VAR) {
43929 				if (value != free_op_data) {
43930 					if (Z_REFCOUNTED_P(value)) {
43931 						Z_ADDREF_P(value);
43932 					}
43933 
43934 				}
43935 			} else if (IS_CV == IS_CONST) {
43936 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43937 					Z_ADDREF_P(value);
43938 				}
43939 			}
43940 		} else {
43941 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43942 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
43943 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43944 			} else {
43945 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43946 			}
43947 			if (UNEXPECTED(variable_ptr == NULL)) {
43948 				goto assign_dim_error;
43949 			}
43950 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
43951 		}
43952 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43953 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43954 		}
43955 	} else {
43956 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43957 			object_ptr = Z_REFVAL_P(object_ptr);
43958 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43959 				goto try_assign_dim_array;
43960 			}
43961 		}
43962 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43963 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43964 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43965 
43966 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43967 				dim++;
43968 			}
43969 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43970 
43971 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43972 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
43973 				zend_use_new_element_for_string();
43974 
43975 				UNDEF_RESULT();
43976 			} else {
43977 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43978 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43979 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43980 
43981 			}
43982 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43983 			if (Z_ISREF_P(orig_object_ptr)
43984 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43985 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43986 				dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43987 
43988 				UNDEF_RESULT();
43989 			} else {
43990 				ZVAL_ARR(object_ptr, zend_new_array(8));
43991 				goto try_assign_dim_array;
43992 			}
43993 		} else {
43994 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
43995 				zend_use_scalar_as_array();
43996 			}
43997 			dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
43998 assign_dim_error:
43999 
44000 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
44001 				ZVAL_NULL(EX_VAR(opline->result.var));
44002 			}
44003 		}
44004 	}
44005 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
44006 		zval_ptr_dtor_nogc(free_op2);
44007 	}
44008 
44009 	/* assign_dim has two opcodes! */
44010 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44011 }
44012 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44013 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44014 {
44015 	USE_OPLINE
44016 	zend_free_op free_op2, free_op_data;
44017 	zval *property, *container, *value_ptr;
44018 
44019 	SAVE_OPLINE();
44020 
44021 	container = EX_VAR(opline->op1.var);
44022 
44023 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44024 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44025 	}
44026 
44027 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44028 
44029 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
44030 
44031 	if (1) {
44032 		if (IS_CV == IS_UNUSED) {
44033 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44034 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44035 			} else {
44036 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44037 			}
44038 		} else {
44039 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44040 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44041 			} else {
44042 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44043 			}
44044 		}
44045 	} else {
44046 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
44047 	}
44048 
44049 	zval_ptr_dtor_nogc(free_op2);
44050 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
44051 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44052 }
44053 
44054 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44056 {
44057 	USE_OPLINE
44058 	zend_free_op free_op2;
44059 	zval *property, *container, *value_ptr;
44060 
44061 	SAVE_OPLINE();
44062 
44063 	container = EX_VAR(opline->op1.var);
44064 
44065 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44066 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44067 	}
44068 
44069 	property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44070 
44071 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
44072 
44073 	if (1) {
44074 		if (IS_CV == IS_UNUSED) {
44075 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44076 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44077 			} else {
44078 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44079 			}
44080 		} else {
44081 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44082 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44083 			} else {
44084 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
44085 			}
44086 		}
44087 	} else {
44088 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
44089 	}
44090 
44091 	zval_ptr_dtor_nogc(free_op2);
44092 
44093 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
44094 }
44095 
44096 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44098 {
44099 	USE_OPLINE
44100 	zend_free_op free_op2;
44101 	zval *op1, *op2;
44102 	zend_string *op1_str, *op2_str, *str;
44103 
44104 
44105 	op1 = EX_VAR(opline->op1.var);
44106 	op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44107 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
44108 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
44109 		zend_string *op1_str = Z_STR_P(op1);
44110 		zend_string *op2_str = Z_STR_P(op2);
44111 		zend_string *str;
44112 
44113 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
44114 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
44115 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
44116 			} else {
44117 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
44118 			}
44119 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44120 				zend_string_release_ex(op1_str, 0);
44121 			}
44122 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
44123 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
44124 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
44125 			} else {
44126 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
44127 			}
44128 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44129 				zend_string_release_ex(op2_str, 0);
44130 			}
44131 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
44132 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
44133 		    size_t len = ZSTR_LEN(op1_str);
44134 
44135 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
44136 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44137 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44138 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44139 				zend_string_release_ex(op2_str, 0);
44140 			}
44141 		} else {
44142 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
44143 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
44144 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44145 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44146 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44147 				zend_string_release_ex(op1_str, 0);
44148 			}
44149 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44150 				zend_string_release_ex(op2_str, 0);
44151 			}
44152 		}
44153 		ZEND_VM_NEXT_OPCODE();
44154 	}
44155 
44156 	SAVE_OPLINE();
44157 	if (IS_CV == IS_CONST) {
44158 		op1_str = Z_STR_P(op1);
44159 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44160 		op1_str = zend_string_copy(Z_STR_P(op1));
44161 	} else {
44162 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44163 			ZVAL_UNDEFINED_OP1();
44164 		}
44165 		op1_str = zval_get_string_func(op1);
44166 	}
44167 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44168 		op2_str = Z_STR_P(op2);
44169 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44170 		op2_str = zend_string_copy(Z_STR_P(op2));
44171 	} else {
44172 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44173 			ZVAL_UNDEFINED_OP2();
44174 		}
44175 		op2_str = zval_get_string_func(op2);
44176 	}
44177 	do {
44178 		if (IS_CV != IS_CONST) {
44179 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
44180 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44181 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
44182 						GC_ADDREF(op2_str);
44183 					}
44184 				}
44185 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
44186 				zend_string_release_ex(op1_str, 0);
44187 				break;
44188 			}
44189 		}
44190 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44191 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
44192 				if (IS_CV == IS_CONST) {
44193 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
44194 						GC_ADDREF(op1_str);
44195 					}
44196 				}
44197 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
44198 				zend_string_release_ex(op2_str, 0);
44199 				break;
44200 			}
44201 		}
44202 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
44203 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
44204 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44205 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44206 		if (IS_CV != IS_CONST) {
44207 			zend_string_release_ex(op1_str, 0);
44208 		}
44209 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44210 			zend_string_release_ex(op2_str, 0);
44211 		}
44212 	} while (0);
44213 
44214 	zval_ptr_dtor_nogc(free_op2);
44215 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44216 }
44217 
ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44218 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44219 {
44220 	USE_OPLINE
44221 	zval *function_name;
44222 	zend_free_op free_op1, free_op2;
44223 	zval *object;
44224 	zend_function *fbc;
44225 	zend_class_entry *called_scope;
44226 	zend_object *obj;
44227 	zend_execute_data *call;
44228 	uint32_t call_info;
44229 
44230 	SAVE_OPLINE();
44231 
44232 	object = EX_VAR(opline->op1.var);
44233 
44234 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44235 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44236 	}
44237 
44238 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44239 		function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44240 	}
44241 
44242 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
44243 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
44244 		do {
44245 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
44246 				function_name = Z_REFVAL_P(function_name);
44247 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
44248 					break;
44249 				}
44250 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
44251 				ZVAL_UNDEFINED_OP2();
44252 				if (UNEXPECTED(EG(exception) != NULL)) {
44253 
44254 					HANDLE_EXCEPTION();
44255 				}
44256 			}
44257 			zend_throw_error(NULL, "Method name must be a string");
44258 			zval_ptr_dtor_nogc(free_op2);
44259 
44260 			HANDLE_EXCEPTION();
44261 		} while (0);
44262 	}
44263 
44264 	if (IS_CV != IS_UNUSED) {
44265 		do {
44266 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
44267 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
44268 					object = Z_REFVAL_P(object);
44269 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
44270 						break;
44271 					}
44272 				}
44273 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
44274 					object = ZVAL_UNDEFINED_OP1();
44275 					if (UNEXPECTED(EG(exception) != NULL)) {
44276 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44277 							zval_ptr_dtor_nogc(free_op2);
44278 						}
44279 						HANDLE_EXCEPTION();
44280 					}
44281 				}
44282 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44283 					function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44284 				}
44285 				zend_invalid_method_call(object, function_name);
44286 				zval_ptr_dtor_nogc(free_op2);
44287 
44288 				HANDLE_EXCEPTION();
44289 			}
44290 		} while (0);
44291 	}
44292 
44293 	obj = Z_OBJ_P(object);
44294 	called_scope = obj->ce;
44295 
44296 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44297 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
44298 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
44299 	} else {
44300 	    zend_object *orig_obj = obj;
44301 
44302 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
44303 			function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44304 		}
44305 
44306 		/* First, locate the function. */
44307 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
44308 		if (UNEXPECTED(fbc == NULL)) {
44309 			if (EXPECTED(!EG(exception))) {
44310 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
44311 			}
44312 			zval_ptr_dtor_nogc(free_op2);
44313 
44314 			HANDLE_EXCEPTION();
44315 		}
44316 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
44317 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
44318 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
44319 		    EXPECTED(obj == orig_obj)) {
44320 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
44321 		}
44322 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
44323 			/* Reset "object" to trigger reference counting */
44324 			object = NULL;
44325 		}
44326 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
44327 			init_func_run_time_cache(&fbc->op_array);
44328 		}
44329 	}
44330 
44331 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44332 		zval_ptr_dtor_nogc(free_op2);
44333 	}
44334 
44335 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
44336 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
44337 
44338 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
44339 			HANDLE_EXCEPTION();
44340 		}
44341 		/* call static method */
44342 		obj = (zend_object*)called_scope;
44343 		call_info = ZEND_CALL_NESTED_FUNCTION;
44344 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
44345 		if (IS_CV == IS_CV) {
44346 			GC_ADDREF(obj); /* For $this pointer */
44347 		} else if (free_op1 != object) {
44348 			GC_ADDREF(obj); /* For $this pointer */
44349 
44350 		}
44351 		/* CV may be changed indirectly (e.g. when it's a reference) */
44352 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
44353 	}
44354 
44355 	call = zend_vm_stack_push_call_frame(call_info,
44356 		fbc, opline->extended_value, obj);
44357 	call->prev_execute_data = EX(call);
44358 	EX(call) = call;
44359 
44360 	ZEND_VM_NEXT_OPCODE();
44361 }
44362 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44364 {
44365 	USE_OPLINE
44366 
44367 	zval *expr_ptr, new_expr;
44368 
44369 	SAVE_OPLINE();
44370 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
44371 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
44372 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
44373 		if (Z_ISREF_P(expr_ptr)) {
44374 			Z_ADDREF_P(expr_ptr);
44375 		} else {
44376 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
44377 		}
44378 
44379 	} else {
44380 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44381 		if (IS_CV == IS_TMP_VAR) {
44382 			/* pass */
44383 		} else if (IS_CV == IS_CONST) {
44384 			Z_TRY_ADDREF_P(expr_ptr);
44385 		} else if (IS_CV == IS_CV) {
44386 			ZVAL_DEREF(expr_ptr);
44387 			Z_TRY_ADDREF_P(expr_ptr);
44388 		} else /* if (IS_CV == IS_VAR) */ {
44389 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
44390 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
44391 
44392 				expr_ptr = Z_REFVAL_P(expr_ptr);
44393 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
44394 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
44395 					expr_ptr = &new_expr;
44396 					efree_size(ref, sizeof(zend_reference));
44397 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
44398 					Z_ADDREF_P(expr_ptr);
44399 				}
44400 			}
44401 		}
44402 	}
44403 
44404 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
44405 		zend_free_op free_op2;
44406 		zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44407 		zend_string *str;
44408 		zend_ulong hval;
44409 
44410 add_again:
44411 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44412 			str = Z_STR_P(offset);
44413 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44414 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44415 					goto num_index;
44416 				}
44417 			}
44418 str_index:
44419 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
44420 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44421 			hval = Z_LVAL_P(offset);
44422 num_index:
44423 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
44424 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
44425 			offset = Z_REFVAL_P(offset);
44426 			goto add_again;
44427 		} else if (Z_TYPE_P(offset) == IS_NULL) {
44428 			str = ZSTR_EMPTY_ALLOC();
44429 			goto str_index;
44430 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
44431 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
44432 			goto num_index;
44433 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
44434 			hval = 0;
44435 			goto num_index;
44436 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
44437 			hval = 1;
44438 			goto num_index;
44439 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
44440 			zend_use_resource_as_offset(offset);
44441 			hval = Z_RES_HANDLE_P(offset);
44442 			goto num_index;
44443 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
44444 			ZVAL_UNDEFINED_OP2();
44445 			str = ZSTR_EMPTY_ALLOC();
44446 			goto str_index;
44447 		} else {
44448 			zend_illegal_offset();
44449 			zval_ptr_dtor_nogc(expr_ptr);
44450 		}
44451 		zval_ptr_dtor_nogc(free_op2);
44452 	} else {
44453 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
44454 			zend_cannot_add_element();
44455 			zval_ptr_dtor_nogc(expr_ptr);
44456 		}
44457 	}
44458 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44459 }
44460 
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44461 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44462 {
44463 	zval *array;
44464 	uint32_t size;
44465 	USE_OPLINE
44466 
44467 	array = EX_VAR(opline->result.var);
44468 	if (IS_CV != IS_UNUSED) {
44469 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
44470 		ZVAL_ARR(array, zend_new_array(size));
44471 		/* Explicitly initialize array as not-packed if flag is set */
44472 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
44473 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
44474 		}
44475 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44476 	} else {
44477 		ZVAL_ARR(array, zend_new_array(0));
44478 		ZEND_VM_NEXT_OPCODE();
44479 	}
44480 }
44481 
ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44483 {
44484 	USE_OPLINE
44485 	zend_free_op free_op2;
44486 	zval *container;
44487 	zval *offset;
44488 	zend_ulong hval;
44489 	zend_string *key;
44490 
44491 	SAVE_OPLINE();
44492 	container = EX_VAR(opline->op1.var);
44493 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44494 
44495 	do {
44496 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44497 			HashTable *ht;
44498 
44499 unset_dim_array:
44500 			SEPARATE_ARRAY(container);
44501 			ht = Z_ARRVAL_P(container);
44502 offset_again:
44503 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44504 				key = Z_STR_P(offset);
44505 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44506 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
44507 						goto num_index_dim;
44508 					}
44509 				}
44510 str_index_dim:
44511 				if (ht == &EG(symbol_table)) {
44512 					zend_delete_global_variable(key);
44513 				} else {
44514 					zend_hash_del(ht, key);
44515 				}
44516 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44517 				hval = Z_LVAL_P(offset);
44518 num_index_dim:
44519 				zend_hash_index_del(ht, hval);
44520 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
44521 				offset = Z_REFVAL_P(offset);
44522 				goto offset_again;
44523 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
44524 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
44525 				goto num_index_dim;
44526 			} else if (Z_TYPE_P(offset) == IS_NULL) {
44527 				key = ZSTR_EMPTY_ALLOC();
44528 				goto str_index_dim;
44529 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
44530 				hval = 0;
44531 				goto num_index_dim;
44532 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
44533 				hval = 1;
44534 				goto num_index_dim;
44535 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
44536 				hval = Z_RES_HANDLE_P(offset);
44537 				goto num_index_dim;
44538 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
44539 				ZVAL_UNDEFINED_OP2();
44540 				key = ZSTR_EMPTY_ALLOC();
44541 				goto str_index_dim;
44542 			} else {
44543 				zend_error(E_WARNING, "Illegal offset type in unset");
44544 			}
44545 			break;
44546 		} else if (Z_ISREF_P(container)) {
44547 			container = Z_REFVAL_P(container);
44548 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44549 				goto unset_dim_array;
44550 			}
44551 		}
44552 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44553 			container = ZVAL_UNDEFINED_OP1();
44554 		}
44555 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
44556 			offset = ZVAL_UNDEFINED_OP2();
44557 		}
44558 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
44559 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
44560 				offset++;
44561 			}
44562 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
44563 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
44564 			zend_throw_error(NULL, "Cannot unset string offsets");
44565 		}
44566 	} while (0);
44567 
44568 	zval_ptr_dtor_nogc(free_op2);
44569 
44570 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44571 }
44572 
ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44573 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44574 {
44575 	USE_OPLINE
44576 	zend_free_op free_op2;
44577 	zval *container;
44578 	zval *offset;
44579 
44580 	SAVE_OPLINE();
44581 	container = EX_VAR(opline->op1.var);
44582 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44583 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44584 	}
44585 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44586 
44587 	do {
44588 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44589 			if (Z_ISREF_P(container)) {
44590 				container = Z_REFVAL_P(container);
44591 				if (Z_TYPE_P(container) != IS_OBJECT) {
44592 					if (IS_CV == IS_CV
44593 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44594 						ZVAL_UNDEFINED_OP1();
44595 					}
44596 					break;
44597 				}
44598 			} else {
44599 				break;
44600 			}
44601 		}
44602 		Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
44603 	} while (0);
44604 
44605 	zval_ptr_dtor_nogc(free_op2);
44606 
44607 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44608 }
44609 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44611 {
44612 	USE_OPLINE
44613 	zend_free_op free_op2;
44614 	zval *container;
44615 	int result;
44616 	zend_ulong hval;
44617 	zval *offset;
44618 
44619 	SAVE_OPLINE();
44620 	container = EX_VAR(opline->op1.var);
44621 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44622 
44623 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44624 		HashTable *ht;
44625 		zval *value;
44626 		zend_string *str;
44627 
44628 isset_dim_obj_array:
44629 		ht = Z_ARRVAL_P(container);
44630 isset_again:
44631 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44632 			str = Z_STR_P(offset);
44633 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
44634 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44635 					goto num_index_prop;
44636 				}
44637 			}
44638 			value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
44639 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44640 			hval = Z_LVAL_P(offset);
44641 num_index_prop:
44642 			value = zend_hash_index_find(ht, hval);
44643 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
44644 			offset = Z_REFVAL_P(offset);
44645 			goto isset_again;
44646 		} else {
44647 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
44648 			if (UNEXPECTED(EG(exception))) {
44649 				result = 0;
44650 				goto isset_dim_obj_exit;
44651 			}
44652 		}
44653 
44654 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
44655 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
44656 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
44657 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
44658 
44659 			if (IS_CV & (IS_CONST|IS_CV)) {
44660 				/* avoid exception check */
44661 				zval_ptr_dtor_nogc(free_op2);
44662 				ZEND_VM_SMART_BRANCH(result, 0);
44663 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
44664 				ZEND_VM_NEXT_OPCODE();
44665 			}
44666 		} else {
44667 			result = (value == NULL || !i_zend_is_true(value));
44668 		}
44669 		goto isset_dim_obj_exit;
44670 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
44671 		container = Z_REFVAL_P(container);
44672 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44673 			goto isset_dim_obj_array;
44674 		}
44675 	}
44676 
44677 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
44678 		offset++;
44679 	}
44680 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
44681 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
44682 	} else {
44683 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
44684 	}
44685 
44686 isset_dim_obj_exit:
44687 	zval_ptr_dtor_nogc(free_op2);
44688 
44689 	ZEND_VM_SMART_BRANCH(result, 1);
44690 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44691 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44692 }
44693 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44694 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44695 {
44696 	USE_OPLINE
44697 	zend_free_op free_op2;
44698 	zval *container;
44699 	int result;
44700 	zval *offset;
44701 
44702 	SAVE_OPLINE();
44703 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
44704 
44705 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
44706 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44707 	}
44708 
44709 	offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44710 
44711 	if (IS_CV == IS_CONST ||
44712 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44713 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44714 			container = Z_REFVAL_P(container);
44715 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44716 				result = (opline->extended_value & ZEND_ISEMPTY);
44717 				goto isset_object_finish;
44718 			}
44719 		} else {
44720 			result = (opline->extended_value & ZEND_ISEMPTY);
44721 			goto isset_object_finish;
44722 		}
44723 	}
44724 
44725 	result =
44726 		(opline->extended_value & ZEND_ISEMPTY) ^
44727 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
44728 
44729 isset_object_finish:
44730 	zval_ptr_dtor_nogc(free_op2);
44731 
44732 	ZEND_VM_SMART_BRANCH(result, 1);
44733 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44734 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44735 }
44736 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44737 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44738 {
44739 	USE_OPLINE
44740 
44741 	zend_free_op free_op2;
44742 	zval *key, *subject;
44743 	HashTable *ht;
44744 	uint32_t result;
44745 
44746 	SAVE_OPLINE();
44747 
44748 	key = EX_VAR(opline->op1.var);
44749 	subject = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44750 
44751 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44752 array_key_exists_array:
44753 		ht = Z_ARRVAL_P(subject);
44754 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
44755 	} else {
44756 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
44757 			subject = Z_REFVAL_P(subject);
44758 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44759 				goto array_key_exists_array;
44760 			}
44761 		}
44762 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
44763 	}
44764 
44765 	zval_ptr_dtor_nogc(free_op2);
44766 
44767 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
44768 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
44769 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44770 }
44771 
44772 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44774 {
44775 	USE_OPLINE
44776 	zend_free_op free_op2;
44777 	zval *op1, *op2;
44778 	zend_bool result;
44779 
44780 	SAVE_OPLINE();
44781 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44782 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44783 	result = fast_is_identical_function(op1, op2);
44784 
44785 	zval_ptr_dtor_nogc(free_op2);
44786 	ZEND_VM_SMART_BRANCH(result, 1);
44787 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44788 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44789 }
44790 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44791 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44792 {
44793 	USE_OPLINE
44794 	zend_free_op free_op2;
44795 	zval *op1, *op2;
44796 	zend_bool result;
44797 
44798 	SAVE_OPLINE();
44799 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44800 	op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44801 	result = fast_is_not_identical_function(op1, op2);
44802 
44803 	zval_ptr_dtor_nogc(free_op2);
44804 	ZEND_VM_SMART_BRANCH(result, 1);
44805 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
44806 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44807 }
44808 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44809 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44810 {
44811 	USE_OPLINE
44812 	zend_free_op free_op2;
44813 	zval *value;
44814 	zval *variable_ptr;
44815 
44816 	SAVE_OPLINE();
44817 	value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44818 	variable_ptr = EX_VAR(opline->op1.var);
44819 
44820 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
44821 		zval_ptr_dtor_nogc(free_op2);
44822 		if (UNEXPECTED(0)) {
44823 			ZVAL_NULL(EX_VAR(opline->result.var));
44824 		}
44825 	} else {
44826 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
44827 		if (UNEXPECTED(0)) {
44828 			ZVAL_COPY(EX_VAR(opline->result.var), value);
44829 		}
44830 
44831 		/* zend_assign_to_variable() always takes care of op2, never free it! */
44832 	}
44833 
44834 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44835 }
44836 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44838 {
44839 	USE_OPLINE
44840 	zend_free_op free_op2;
44841 	zval *value;
44842 	zval *variable_ptr;
44843 
44844 	SAVE_OPLINE();
44845 	value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44846 	variable_ptr = EX_VAR(opline->op1.var);
44847 
44848 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
44849 		zval_ptr_dtor_nogc(free_op2);
44850 		if (UNEXPECTED(1)) {
44851 			ZVAL_NULL(EX_VAR(opline->result.var));
44852 		}
44853 	} else {
44854 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
44855 		if (UNEXPECTED(1)) {
44856 			ZVAL_COPY(EX_VAR(opline->result.var), value);
44857 		}
44858 
44859 		/* zend_assign_to_variable() always takes care of op2, never free it! */
44860 	}
44861 
44862 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44863 }
44864 
ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44866 {
44867 	USE_OPLINE
44868 
44869 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
44870 
44871 	SAVE_OPLINE();
44872 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
44873 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44874 	}
44875 
44876 	/* Destroy the previously yielded value */
44877 	zval_ptr_dtor(&generator->value);
44878 
44879 	/* Destroy the previously yielded key */
44880 	zval_ptr_dtor(&generator->key);
44881 
44882 	/* Set the new yielded value */
44883 	if (IS_CV != IS_UNUSED) {
44884 
44885 
44886 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
44887 			/* Constants and temporary variables aren't yieldable by reference,
44888 			 * but we still allow them with a notice. */
44889 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
44890 				zval *value;
44891 
44892 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44893 
44894 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44895 				ZVAL_COPY_VALUE(&generator->value, value);
44896 				if (IS_CV == IS_CONST) {
44897 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44898 						Z_ADDREF(generator->value);
44899 					}
44900 				}
44901 			} else {
44902 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
44903 
44904 				/* If a function call result is yielded and the function did
44905 				 * not return by reference we throw a notice. */
44906 				do {
44907 					if (IS_CV == IS_VAR) {
44908 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
44909 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
44910 						 && !Z_ISREF_P(value_ptr)) {
44911 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44912 							ZVAL_COPY(&generator->value, value_ptr);
44913 							break;
44914 						}
44915 					}
44916 					if (Z_ISREF_P(value_ptr)) {
44917 						Z_ADDREF_P(value_ptr);
44918 					} else {
44919 						ZVAL_MAKE_REF_EX(value_ptr, 2);
44920 					}
44921 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
44922 				} while (0);
44923 
44924 			}
44925 		} else {
44926 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44927 
44928 			/* Consts, temporary variables and references need copying */
44929 			if (IS_CV == IS_CONST) {
44930 				ZVAL_COPY_VALUE(&generator->value, value);
44931 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44932 					Z_ADDREF(generator->value);
44933 				}
44934 			} else if (IS_CV == IS_TMP_VAR) {
44935 				ZVAL_COPY_VALUE(&generator->value, value);
44936             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
44937 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
44938 
44939 			} else {
44940 				ZVAL_COPY_VALUE(&generator->value, value);
44941 				if (IS_CV == IS_CV) {
44942 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
44943 				}
44944 			}
44945 		}
44946 	} else {
44947 		/* If no value was specified yield null */
44948 		ZVAL_NULL(&generator->value);
44949 	}
44950 
44951 	/* Set the new yielded key */
44952 	if (IS_TMP_VAR != IS_UNUSED) {
44953 		zend_free_op free_op2;
44954 		zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
44955 
44956 		/* Consts, temporary variables and references need copying */
44957 		if (IS_TMP_VAR == IS_CONST) {
44958 			ZVAL_COPY_VALUE(&generator->key, key);
44959 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
44960 				Z_ADDREF(generator->key);
44961 			}
44962 		} else if (IS_TMP_VAR == IS_TMP_VAR) {
44963 			ZVAL_COPY_VALUE(&generator->key, key);
44964 		} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
44965 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
44966 
44967 		} else {
44968 			ZVAL_COPY_VALUE(&generator->key, key);
44969 			if (IS_TMP_VAR == IS_CV) {
44970 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
44971 			}
44972 		}
44973 
44974 		if (Z_TYPE(generator->key) == IS_LONG
44975 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
44976 		) {
44977 			generator->largest_used_integer_key = Z_LVAL(generator->key);
44978 		}
44979 	} else {
44980 		/* If no key was specified we use auto-increment keys */
44981 		generator->largest_used_integer_key++;
44982 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
44983 	}
44984 
44985 	if (RETURN_VALUE_USED(opline)) {
44986 		/* If the return value of yield is used set the send
44987 		 * target and initialize it to NULL */
44988 		generator->send_target = EX_VAR(opline->result.var);
44989 		ZVAL_NULL(generator->send_target);
44990 	} else {
44991 		generator->send_target = NULL;
44992 	}
44993 
44994 	/* We increment to the next op, so we are at the correct position when the
44995 	 * generator is resumed. */
44996 	ZEND_VM_INC_OPCODE();
44997 
44998 	/* The GOTO VM uses a local opline variable. We need to set the opline
44999 	 * variable in execute_data so we don't resume at an old position. */
45000 	SAVE_OPLINE();
45001 
45002 	ZEND_VM_RETURN();
45003 }
45004 
ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45005 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45006 {
45007 	USE_OPLINE
45008 	zend_free_op free_op2;
45009 	zval *op1, *op2;
45010 	zend_bool result;
45011 
45012 	SAVE_OPLINE();
45013 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45014 	op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45015 	result = fast_is_identical_function(op1, op2);
45016 
45017 	zval_ptr_dtor_nogc(free_op2);
45018 	ZEND_VM_SMART_BRANCH(result, 1);
45019 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
45020 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45021 }
45022 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45024 {
45025 	USE_OPLINE
45026 	zend_free_op free_op2;
45027 	zval *op1, *op2;
45028 	zend_bool result;
45029 
45030 	SAVE_OPLINE();
45031 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45032 	op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45033 	result = fast_is_not_identical_function(op1, op2);
45034 
45035 	zval_ptr_dtor_nogc(free_op2);
45036 	ZEND_VM_SMART_BRANCH(result, 1);
45037 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
45038 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45039 }
45040 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45042 {
45043 	USE_OPLINE
45044 	zend_free_op free_op2;
45045 	zval *value;
45046 	zval *variable_ptr;
45047 
45048 	SAVE_OPLINE();
45049 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45050 	variable_ptr = EX_VAR(opline->op1.var);
45051 
45052 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
45053 		zval_ptr_dtor_nogc(free_op2);
45054 		if (UNEXPECTED(0)) {
45055 			ZVAL_NULL(EX_VAR(opline->result.var));
45056 		}
45057 	} else {
45058 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
45059 		if (UNEXPECTED(0)) {
45060 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45061 		}
45062 
45063 		/* zend_assign_to_variable() always takes care of op2, never free it! */
45064 	}
45065 
45066 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45067 }
45068 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45070 {
45071 	USE_OPLINE
45072 	zend_free_op free_op2;
45073 	zval *value;
45074 	zval *variable_ptr;
45075 
45076 	SAVE_OPLINE();
45077 	value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45078 	variable_ptr = EX_VAR(opline->op1.var);
45079 
45080 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
45081 		zval_ptr_dtor_nogc(free_op2);
45082 		if (UNEXPECTED(1)) {
45083 			ZVAL_NULL(EX_VAR(opline->result.var));
45084 		}
45085 	} else {
45086 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
45087 		if (UNEXPECTED(1)) {
45088 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45089 		}
45090 
45091 		/* zend_assign_to_variable() always takes care of op2, never free it! */
45092 	}
45093 
45094 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45095 }
45096 
ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45097 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45098 {
45099 	USE_OPLINE
45100 	zend_free_op free_op2;
45101 	zval *variable_ptr;
45102 	zval *value_ptr;
45103 
45104 	SAVE_OPLINE();
45105 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45106 	variable_ptr = EX_VAR(opline->op1.var);
45107 
45108 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
45109 		variable_ptr = &EG(uninitialized_zval);
45110 	} else if (IS_CV == IS_VAR &&
45111 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
45112 
45113 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
45114 		variable_ptr = &EG(uninitialized_zval);
45115 	} else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
45116 		variable_ptr = &EG(uninitialized_zval);
45117 	} else if (IS_VAR == IS_VAR &&
45118 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
45119 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
45120 
45121 		variable_ptr = zend_wrong_assign_to_variable_reference(
45122 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
45123 	} else {
45124 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
45125 	}
45126 
45127 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45128 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
45129 	}
45130 
45131 	if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
45132 
45133 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45134 }
45135 
ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45137 {
45138 	USE_OPLINE
45139 
45140 	zval *expr;
45141 	zend_bool result;
45142 
45143 	SAVE_OPLINE();
45144 	expr = EX_VAR(opline->op1.var);
45145 
45146 try_instanceof:
45147 	if (Z_TYPE_P(expr) == IS_OBJECT) {
45148 		zend_class_entry *ce;
45149 
45150 		if (IS_VAR == IS_CONST) {
45151 			ce = CACHED_PTR(opline->extended_value);
45152 			if (UNEXPECTED(ce == NULL)) {
45153 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
45154 				if (EXPECTED(ce)) {
45155 					CACHE_PTR(opline->extended_value, ce);
45156 				}
45157 			}
45158 		} else if (IS_VAR == IS_UNUSED) {
45159 			ce = zend_fetch_class(NULL, opline->op2.num);
45160 			if (UNEXPECTED(ce == NULL)) {
45161 				ZEND_ASSERT(EG(exception));
45162 
45163 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45164 				HANDLE_EXCEPTION();
45165 			}
45166 		} else {
45167 			ce = Z_CE_P(EX_VAR(opline->op2.var));
45168 		}
45169 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
45170 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
45171 		expr = Z_REFVAL_P(expr);
45172 		goto try_instanceof;
45173 	} else {
45174 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
45175 			ZVAL_UNDEFINED_OP1();
45176 		}
45177 		result = 0;
45178 	}
45179 
45180 	ZEND_VM_SMART_BRANCH(result, 1);
45181 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
45182 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45183 }
45184 
ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45186 {
45187 	USE_OPLINE
45188 
45189 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
45190 
45191 	SAVE_OPLINE();
45192 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
45193 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45194 	}
45195 
45196 	/* Destroy the previously yielded value */
45197 	zval_ptr_dtor(&generator->value);
45198 
45199 	/* Destroy the previously yielded key */
45200 	zval_ptr_dtor(&generator->key);
45201 
45202 	/* Set the new yielded value */
45203 	if (IS_CV != IS_UNUSED) {
45204 
45205 
45206 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
45207 			/* Constants and temporary variables aren't yieldable by reference,
45208 			 * but we still allow them with a notice. */
45209 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
45210 				zval *value;
45211 
45212 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
45213 
45214 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45215 				ZVAL_COPY_VALUE(&generator->value, value);
45216 				if (IS_CV == IS_CONST) {
45217 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
45218 						Z_ADDREF(generator->value);
45219 					}
45220 				}
45221 			} else {
45222 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
45223 
45224 				/* If a function call result is yielded and the function did
45225 				 * not return by reference we throw a notice. */
45226 				do {
45227 					if (IS_CV == IS_VAR) {
45228 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
45229 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
45230 						 && !Z_ISREF_P(value_ptr)) {
45231 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
45232 							ZVAL_COPY(&generator->value, value_ptr);
45233 							break;
45234 						}
45235 					}
45236 					if (Z_ISREF_P(value_ptr)) {
45237 						Z_ADDREF_P(value_ptr);
45238 					} else {
45239 						ZVAL_MAKE_REF_EX(value_ptr, 2);
45240 					}
45241 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
45242 				} while (0);
45243 
45244 			}
45245 		} else {
45246 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45247 
45248 			/* Consts, temporary variables and references need copying */
45249 			if (IS_CV == IS_CONST) {
45250 				ZVAL_COPY_VALUE(&generator->value, value);
45251 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
45252 					Z_ADDREF(generator->value);
45253 				}
45254 			} else if (IS_CV == IS_TMP_VAR) {
45255 				ZVAL_COPY_VALUE(&generator->value, value);
45256             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
45257 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
45258 
45259 			} else {
45260 				ZVAL_COPY_VALUE(&generator->value, value);
45261 				if (IS_CV == IS_CV) {
45262 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
45263 				}
45264 			}
45265 		}
45266 	} else {
45267 		/* If no value was specified yield null */
45268 		ZVAL_NULL(&generator->value);
45269 	}
45270 
45271 	/* Set the new yielded key */
45272 	if (IS_VAR != IS_UNUSED) {
45273 		zend_free_op free_op2;
45274 		zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
45275 
45276 		/* Consts, temporary variables and references need copying */
45277 		if (IS_VAR == IS_CONST) {
45278 			ZVAL_COPY_VALUE(&generator->key, key);
45279 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
45280 				Z_ADDREF(generator->key);
45281 			}
45282 		} else if (IS_VAR == IS_TMP_VAR) {
45283 			ZVAL_COPY_VALUE(&generator->key, key);
45284 		} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
45285 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
45286 			zval_ptr_dtor_nogc(free_op2);
45287 		} else {
45288 			ZVAL_COPY_VALUE(&generator->key, key);
45289 			if (IS_VAR == IS_CV) {
45290 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
45291 			}
45292 		}
45293 
45294 		if (Z_TYPE(generator->key) == IS_LONG
45295 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
45296 		) {
45297 			generator->largest_used_integer_key = Z_LVAL(generator->key);
45298 		}
45299 	} else {
45300 		/* If no key was specified we use auto-increment keys */
45301 		generator->largest_used_integer_key++;
45302 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
45303 	}
45304 
45305 	if (RETURN_VALUE_USED(opline)) {
45306 		/* If the return value of yield is used set the send
45307 		 * target and initialize it to NULL */
45308 		generator->send_target = EX_VAR(opline->result.var);
45309 		ZVAL_NULL(generator->send_target);
45310 	} else {
45311 		generator->send_target = NULL;
45312 	}
45313 
45314 	/* We increment to the next op, so we are at the correct position when the
45315 	 * generator is resumed. */
45316 	ZEND_VM_INC_OPCODE();
45317 
45318 	/* The GOTO VM uses a local opline variable. We need to set the opline
45319 	 * variable in execute_data so we don't resume at an old position. */
45320 	SAVE_OPLINE();
45321 
45322 	ZEND_VM_RETURN();
45323 }
45324 
ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45326 {
45327 	USE_OPLINE
45328 	zend_free_op free_op_data1;
45329 	zval *var_ptr;
45330 	zval *value, *container, *dim;
45331 
45332 	SAVE_OPLINE();
45333 	container = EX_VAR(opline->op1.var);
45334 
45335 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45336 assign_dim_op_array:
45337 		SEPARATE_ARRAY(container);
45338 assign_dim_op_new_array:
45339 		dim = NULL;
45340 		if (IS_UNUSED == IS_UNUSED) {
45341 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
45342 			if (UNEXPECTED(!var_ptr)) {
45343 				zend_cannot_add_element();
45344 				goto assign_dim_op_ret_null;
45345 			}
45346 		} else {
45347 			if (IS_UNUSED == IS_CONST) {
45348 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
45349 			} else {
45350 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
45351 			}
45352 			if (UNEXPECTED(!var_ptr)) {
45353 				goto assign_dim_op_ret_null;
45354 			}
45355 		}
45356 
45357 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
45358 
45359 		do {
45360 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
45361 				zend_reference *ref = Z_REF_P(var_ptr);
45362 				var_ptr = Z_REFVAL_P(var_ptr);
45363 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45364 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45365 					break;
45366 				}
45367 			}
45368 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
45369 		} while (0);
45370 
45371 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45372 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
45373 		}
45374 		FREE_OP(free_op_data1);
45375 	} else {
45376 		if (EXPECTED(Z_ISREF_P(container))) {
45377 			container = Z_REFVAL_P(container);
45378 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45379 				goto assign_dim_op_array;
45380 			}
45381 		}
45382 
45383 		dim = NULL;
45384 
45385 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45386 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45387 				dim++;
45388 			}
45389 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
45390 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
45391 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
45392 				ZVAL_UNDEFINED_OP1();
45393 			}
45394 			ZVAL_ARR(container, zend_new_array(8));
45395 			goto assign_dim_op_new_array;
45396 		} else {
45397 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
45398 assign_dim_op_ret_null:
45399 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
45400 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45401 				ZVAL_NULL(EX_VAR(opline->result.var));
45402 			}
45403 		}
45404 	}
45405 
45406 
45407 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45408 }
45409 
zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)45410 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
45411 {
45412 	USE_OPLINE
45413 
45414 	zval *varname;
45415 	zval *retval;
45416 	zend_string *name, *tmp_name;
45417 	HashTable *target_symbol_table;
45418 
45419 	SAVE_OPLINE();
45420 	varname = EX_VAR(opline->op1.var);
45421 
45422 	if (IS_CV == IS_CONST) {
45423 		name = Z_STR_P(varname);
45424 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
45425 		name = Z_STR_P(varname);
45426 		tmp_name = NULL;
45427 	} else {
45428 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
45429 			ZVAL_UNDEFINED_OP1();
45430 		}
45431 		name = zval_try_get_tmp_string(varname, &tmp_name);
45432 		if (UNEXPECTED(!name)) {
45433 
45434 			ZVAL_UNDEF(EX_VAR(opline->result.var));
45435 			HANDLE_EXCEPTION();
45436 		}
45437 	}
45438 
45439 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
45440 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
45441 	if (retval == NULL) {
45442 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
45443 fetch_this:
45444 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
45445 			if (IS_CV != IS_CONST) {
45446 				zend_tmp_string_release(tmp_name);
45447 			}
45448 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45449 		}
45450 		if (type == BP_VAR_W) {
45451 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
45452 		} else if (type == BP_VAR_IS) {
45453 			retval = &EG(uninitialized_zval);
45454 		} else {
45455 			zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
45456 			if (type == BP_VAR_RW) {
45457 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
45458 			} else {
45459 				retval = &EG(uninitialized_zval);
45460 			}
45461 		}
45462 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
45463 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
45464 		retval = Z_INDIRECT_P(retval);
45465 		if (Z_TYPE_P(retval) == IS_UNDEF) {
45466 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
45467 				goto fetch_this;
45468 			}
45469 			if (type == BP_VAR_W) {
45470 				ZVAL_NULL(retval);
45471 			} else if (type == BP_VAR_IS) {
45472 				retval = &EG(uninitialized_zval);
45473 			} else {
45474 				zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name));
45475 				if (type == BP_VAR_RW) {
45476 					ZVAL_NULL(retval);
45477 				} else {
45478 					retval = &EG(uninitialized_zval);
45479 				}
45480 			}
45481 		}
45482 	}
45483 
45484 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
45485 
45486 	}
45487 
45488 	if (IS_CV != IS_CONST) {
45489 		zend_tmp_string_release(tmp_name);
45490 	}
45491 
45492 	ZEND_ASSERT(retval != NULL);
45493 	if (type == BP_VAR_R || type == BP_VAR_IS) {
45494 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45495 	} else {
45496 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
45497 	}
45498 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45499 }
45500 
ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45501 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45502 {
45503 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45504 }
45505 
ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45506 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45507 {
45508 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45509 }
45510 
ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45511 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45512 {
45513 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45514 }
45515 
ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45517 {
45518 	int fetch_type =
45519 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
45520 			BP_VAR_W : BP_VAR_R;
45521 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45522 }
45523 
ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45524 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45525 {
45526 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45527 }
45528 
ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45529 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45530 {
45531 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45532 }
45533 
45534 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45535 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45536 {
45537 	USE_OPLINE
45538 	zend_free_op free_op1;
45539 	zval *container;
45540 
45541 	SAVE_OPLINE();
45542 	container = EX_VAR(opline->op1.var);
45543 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
45544 
45545 	if (IS_CV == IS_VAR) {
45546 		zval *result = EX_VAR(opline->result.var);
45547 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
45548 	}
45549 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45550 }
45551 
ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45552 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45553 {
45554 	USE_OPLINE
45555 	zend_free_op free_op1;
45556 	zval *container;
45557 
45558 	SAVE_OPLINE();
45559 	container = EX_VAR(opline->op1.var);
45560 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
45561 
45562 	if (IS_CV == IS_VAR) {
45563 		zval *result = EX_VAR(opline->result.var);
45564 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
45565 	}
45566 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45567 }
45568 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45569 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45570 {
45571 #if 0
45572 	USE_OPLINE
45573 #endif
45574 
45575 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
45576         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45577 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45578         }
45579 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45580 	} else {
45581 		if (IS_UNUSED == IS_UNUSED) {
45582 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45583 		}
45584 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45585 	}
45586 }
45587 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45589 {
45590 	USE_OPLINE
45591 
45592 	zval *object_ptr, *orig_object_ptr;
45593 	zend_free_op free_op_data;
45594 	zval *value;
45595 	zval *variable_ptr;
45596 	zval *dim;
45597 
45598 	SAVE_OPLINE();
45599 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45600 
45601 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45602 try_assign_dim_array:
45603 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
45604 		SEPARATE_ARRAY(object_ptr);
45605 		if (IS_UNUSED == IS_UNUSED) {
45606 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
45607 				ZVAL_DEREF(value);
45608 			}
45609 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45610 			if (UNEXPECTED(variable_ptr == NULL)) {
45611 				zend_cannot_add_element();
45612 				goto assign_dim_error;
45613 			} else if (IS_CONST == IS_CV) {
45614 				if (Z_REFCOUNTED_P(value)) {
45615 					Z_ADDREF_P(value);
45616 				}
45617 			} else if (IS_CONST == IS_VAR) {
45618 				if (value != free_op_data) {
45619 					if (Z_REFCOUNTED_P(value)) {
45620 						Z_ADDREF_P(value);
45621 					}
45622 
45623 				}
45624 			} else if (IS_CONST == IS_CONST) {
45625 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45626 					Z_ADDREF_P(value);
45627 				}
45628 			}
45629 		} else {
45630 			dim = NULL;
45631 			if (IS_UNUSED == IS_CONST) {
45632 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45633 			} else {
45634 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45635 			}
45636 			if (UNEXPECTED(variable_ptr == NULL)) {
45637 				goto assign_dim_error;
45638 			}
45639 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
45640 		}
45641 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45642 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45643 		}
45644 	} else {
45645 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45646 			object_ptr = Z_REFVAL_P(object_ptr);
45647 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45648 				goto try_assign_dim_array;
45649 			}
45650 		}
45651 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45652 			dim = NULL;
45653 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
45654 
45655 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45656 				dim++;
45657 			}
45658 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45659 
45660 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45661 			if (IS_UNUSED == IS_UNUSED) {
45662 				zend_use_new_element_for_string();
45663 
45664 				UNDEF_RESULT();
45665 			} else {
45666 				dim = NULL;
45667 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
45668 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45669 
45670 			}
45671 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45672 			if (Z_ISREF_P(orig_object_ptr)
45673 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45674 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45675 				dim = NULL;
45676 
45677 				UNDEF_RESULT();
45678 			} else {
45679 				ZVAL_ARR(object_ptr, zend_new_array(8));
45680 				goto try_assign_dim_array;
45681 			}
45682 		} else {
45683 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
45684 				zend_use_scalar_as_array();
45685 			}
45686 			dim = NULL;
45687 assign_dim_error:
45688 
45689 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45690 				ZVAL_NULL(EX_VAR(opline->result.var));
45691 			}
45692 		}
45693 	}
45694 	if (IS_UNUSED != IS_UNUSED) {
45695 
45696 	}
45697 
45698 	/* assign_dim has two opcodes! */
45699 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45700 }
45701 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45702 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45703 {
45704 	USE_OPLINE
45705 
45706 	zval *object_ptr, *orig_object_ptr;
45707 	zend_free_op free_op_data;
45708 	zval *value;
45709 	zval *variable_ptr;
45710 	zval *dim;
45711 
45712 	SAVE_OPLINE();
45713 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45714 
45715 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45716 try_assign_dim_array:
45717 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45718 		SEPARATE_ARRAY(object_ptr);
45719 		if (IS_UNUSED == IS_UNUSED) {
45720 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
45721 				ZVAL_DEREF(value);
45722 			}
45723 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45724 			if (UNEXPECTED(variable_ptr == NULL)) {
45725 				zend_cannot_add_element();
45726 				goto assign_dim_error;
45727 			} else if (IS_TMP_VAR == IS_CV) {
45728 				if (Z_REFCOUNTED_P(value)) {
45729 					Z_ADDREF_P(value);
45730 				}
45731 			} else if (IS_TMP_VAR == IS_VAR) {
45732 				if (value != free_op_data) {
45733 					if (Z_REFCOUNTED_P(value)) {
45734 						Z_ADDREF_P(value);
45735 					}
45736 					zval_ptr_dtor_nogc(free_op_data);
45737 				}
45738 			} else if (IS_TMP_VAR == IS_CONST) {
45739 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45740 					Z_ADDREF_P(value);
45741 				}
45742 			}
45743 		} else {
45744 			dim = NULL;
45745 			if (IS_UNUSED == IS_CONST) {
45746 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45747 			} else {
45748 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45749 			}
45750 			if (UNEXPECTED(variable_ptr == NULL)) {
45751 				goto assign_dim_error;
45752 			}
45753 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
45754 		}
45755 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45756 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45757 		}
45758 	} else {
45759 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45760 			object_ptr = Z_REFVAL_P(object_ptr);
45761 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45762 				goto try_assign_dim_array;
45763 			}
45764 		}
45765 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45766 			dim = NULL;
45767 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45768 
45769 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45770 				dim++;
45771 			}
45772 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45773 
45774 			zval_ptr_dtor_nogc(free_op_data);
45775 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45776 			if (IS_UNUSED == IS_UNUSED) {
45777 				zend_use_new_element_for_string();
45778 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45779 				UNDEF_RESULT();
45780 			} else {
45781 				dim = NULL;
45782 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45783 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45784 				zval_ptr_dtor_nogc(free_op_data);
45785 			}
45786 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45787 			if (Z_ISREF_P(orig_object_ptr)
45788 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45789 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45790 				dim = NULL;
45791 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45792 				UNDEF_RESULT();
45793 			} else {
45794 				ZVAL_ARR(object_ptr, zend_new_array(8));
45795 				goto try_assign_dim_array;
45796 			}
45797 		} else {
45798 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
45799 				zend_use_scalar_as_array();
45800 			}
45801 			dim = NULL;
45802 assign_dim_error:
45803 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45804 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45805 				ZVAL_NULL(EX_VAR(opline->result.var));
45806 			}
45807 		}
45808 	}
45809 	if (IS_UNUSED != IS_UNUSED) {
45810 
45811 	}
45812 
45813 	/* assign_dim has two opcodes! */
45814 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45815 }
45816 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45817 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45818 {
45819 	USE_OPLINE
45820 
45821 	zval *object_ptr, *orig_object_ptr;
45822 	zend_free_op free_op_data;
45823 	zval *value;
45824 	zval *variable_ptr;
45825 	zval *dim;
45826 
45827 	SAVE_OPLINE();
45828 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45829 
45830 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45831 try_assign_dim_array:
45832 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45833 		SEPARATE_ARRAY(object_ptr);
45834 		if (IS_UNUSED == IS_UNUSED) {
45835 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
45836 				ZVAL_DEREF(value);
45837 			}
45838 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45839 			if (UNEXPECTED(variable_ptr == NULL)) {
45840 				zend_cannot_add_element();
45841 				goto assign_dim_error;
45842 			} else if (IS_VAR == IS_CV) {
45843 				if (Z_REFCOUNTED_P(value)) {
45844 					Z_ADDREF_P(value);
45845 				}
45846 			} else if (IS_VAR == IS_VAR) {
45847 				if (value != free_op_data) {
45848 					if (Z_REFCOUNTED_P(value)) {
45849 						Z_ADDREF_P(value);
45850 					}
45851 					zval_ptr_dtor_nogc(free_op_data);
45852 				}
45853 			} else if (IS_VAR == IS_CONST) {
45854 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45855 					Z_ADDREF_P(value);
45856 				}
45857 			}
45858 		} else {
45859 			dim = NULL;
45860 			if (IS_UNUSED == IS_CONST) {
45861 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45862 			} else {
45863 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45864 			}
45865 			if (UNEXPECTED(variable_ptr == NULL)) {
45866 				goto assign_dim_error;
45867 			}
45868 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
45869 		}
45870 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45871 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45872 		}
45873 	} else {
45874 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45875 			object_ptr = Z_REFVAL_P(object_ptr);
45876 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45877 				goto try_assign_dim_array;
45878 			}
45879 		}
45880 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45881 			dim = NULL;
45882 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45883 
45884 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45885 				dim++;
45886 			}
45887 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45888 
45889 			zval_ptr_dtor_nogc(free_op_data);
45890 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
45891 			if (IS_UNUSED == IS_UNUSED) {
45892 				zend_use_new_element_for_string();
45893 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45894 				UNDEF_RESULT();
45895 			} else {
45896 				dim = NULL;
45897 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
45898 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
45899 				zval_ptr_dtor_nogc(free_op_data);
45900 			}
45901 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
45902 			if (Z_ISREF_P(orig_object_ptr)
45903 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
45904 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
45905 				dim = NULL;
45906 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45907 				UNDEF_RESULT();
45908 			} else {
45909 				ZVAL_ARR(object_ptr, zend_new_array(8));
45910 				goto try_assign_dim_array;
45911 			}
45912 		} else {
45913 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
45914 				zend_use_scalar_as_array();
45915 			}
45916 			dim = NULL;
45917 assign_dim_error:
45918 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
45919 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45920 				ZVAL_NULL(EX_VAR(opline->result.var));
45921 			}
45922 		}
45923 	}
45924 	if (IS_UNUSED != IS_UNUSED) {
45925 
45926 	}
45927 
45928 	/* assign_dim has two opcodes! */
45929 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45930 }
45931 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45932 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45933 {
45934 	USE_OPLINE
45935 
45936 	zval *object_ptr, *orig_object_ptr;
45937 	zend_free_op free_op_data;
45938 	zval *value;
45939 	zval *variable_ptr;
45940 	zval *dim;
45941 
45942 	SAVE_OPLINE();
45943 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
45944 
45945 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45946 try_assign_dim_array:
45947 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
45948 		SEPARATE_ARRAY(object_ptr);
45949 		if (IS_UNUSED == IS_UNUSED) {
45950 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
45951 				ZVAL_DEREF(value);
45952 			}
45953 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
45954 			if (UNEXPECTED(variable_ptr == NULL)) {
45955 				zend_cannot_add_element();
45956 				goto assign_dim_error;
45957 			} else if (IS_CV == IS_CV) {
45958 				if (Z_REFCOUNTED_P(value)) {
45959 					Z_ADDREF_P(value);
45960 				}
45961 			} else if (IS_CV == IS_VAR) {
45962 				if (value != free_op_data) {
45963 					if (Z_REFCOUNTED_P(value)) {
45964 						Z_ADDREF_P(value);
45965 					}
45966 
45967 				}
45968 			} else if (IS_CV == IS_CONST) {
45969 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
45970 					Z_ADDREF_P(value);
45971 				}
45972 			}
45973 		} else {
45974 			dim = NULL;
45975 			if (IS_UNUSED == IS_CONST) {
45976 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45977 			} else {
45978 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
45979 			}
45980 			if (UNEXPECTED(variable_ptr == NULL)) {
45981 				goto assign_dim_error;
45982 			}
45983 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
45984 		}
45985 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45986 			ZVAL_COPY(EX_VAR(opline->result.var), value);
45987 		}
45988 	} else {
45989 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
45990 			object_ptr = Z_REFVAL_P(object_ptr);
45991 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
45992 				goto try_assign_dim_array;
45993 			}
45994 		}
45995 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
45996 			dim = NULL;
45997 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
45998 
45999 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46000 				dim++;
46001 			}
46002 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46003 
46004 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46005 			if (IS_UNUSED == IS_UNUSED) {
46006 				zend_use_new_element_for_string();
46007 
46008 				UNDEF_RESULT();
46009 			} else {
46010 				dim = NULL;
46011 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
46012 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46013 
46014 			}
46015 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46016 			if (Z_ISREF_P(orig_object_ptr)
46017 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46018 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46019 				dim = NULL;
46020 
46021 				UNDEF_RESULT();
46022 			} else {
46023 				ZVAL_ARR(object_ptr, zend_new_array(8));
46024 				goto try_assign_dim_array;
46025 			}
46026 		} else {
46027 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
46028 				zend_use_scalar_as_array();
46029 			}
46030 			dim = NULL;
46031 assign_dim_error:
46032 
46033 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46034 				ZVAL_NULL(EX_VAR(opline->result.var));
46035 			}
46036 		}
46037 	}
46038 	if (IS_UNUSED != IS_UNUSED) {
46039 
46040 	}
46041 
46042 	/* assign_dim has two opcodes! */
46043 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46044 }
46045 
ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46047 {
46048 	USE_OPLINE
46049 
46050 	SAVE_OPLINE();
46051 	if (IS_CV == IS_UNUSED) {
46052 		zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num));
46053 	} else {
46054 /* prevents "undefined variable opline" errors */
46055 #if 0 || (IS_CV != IS_UNUSED)
46056 		zval *retval_ref, *retval_ptr;
46057 
46058 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
46059 
46060 		retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46061 
46062 		if (IS_CV == IS_CONST) {
46063 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
46064 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
46065 		} else if (IS_CV == IS_VAR) {
46066 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
46067 				retval_ptr = Z_INDIRECT_P(retval_ptr);
46068 			}
46069 			ZVAL_DEREF(retval_ptr);
46070 		} else if (IS_CV == IS_CV) {
46071 			ZVAL_DEREF(retval_ptr);
46072 		}
46073 
46074 		if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
46075 			&& ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
46076 			&& ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
46077 			&& !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
46078 			&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
46079 			&& retval_ref != retval_ptr)
46080 		) {
46081 			/* A cast might happen - unwrap the reference if this is a by-value return */
46082 			if (Z_REFCOUNT_P(retval_ref) == 1) {
46083 				ZVAL_UNREF(retval_ref);
46084 			} else {
46085 				Z_DELREF_P(retval_ref);
46086 				ZVAL_COPY(retval_ref, retval_ptr);
46087 			}
46088 			retval_ptr = retval_ref;
46089 		}
46090 		zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
46091 #endif
46092 	}
46093 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46094 }
46095 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46097 {
46098 	USE_OPLINE
46099 
46100 	zval *expr_ptr, new_expr;
46101 
46102 	SAVE_OPLINE();
46103 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
46104 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
46105 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
46106 		if (Z_ISREF_P(expr_ptr)) {
46107 			Z_ADDREF_P(expr_ptr);
46108 		} else {
46109 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
46110 		}
46111 
46112 	} else {
46113 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46114 		if (IS_CV == IS_TMP_VAR) {
46115 			/* pass */
46116 		} else if (IS_CV == IS_CONST) {
46117 			Z_TRY_ADDREF_P(expr_ptr);
46118 		} else if (IS_CV == IS_CV) {
46119 			ZVAL_DEREF(expr_ptr);
46120 			Z_TRY_ADDREF_P(expr_ptr);
46121 		} else /* if (IS_CV == IS_VAR) */ {
46122 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
46123 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
46124 
46125 				expr_ptr = Z_REFVAL_P(expr_ptr);
46126 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
46127 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
46128 					expr_ptr = &new_expr;
46129 					efree_size(ref, sizeof(zend_reference));
46130 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
46131 					Z_ADDREF_P(expr_ptr);
46132 				}
46133 			}
46134 		}
46135 	}
46136 
46137 	if (IS_UNUSED != IS_UNUSED) {
46138 
46139 		zval *offset = NULL;
46140 		zend_string *str;
46141 		zend_ulong hval;
46142 
46143 add_again:
46144 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
46145 			str = Z_STR_P(offset);
46146 			if (IS_UNUSED != IS_CONST) {
46147 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
46148 					goto num_index;
46149 				}
46150 			}
46151 str_index:
46152 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
46153 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
46154 			hval = Z_LVAL_P(offset);
46155 num_index:
46156 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
46157 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
46158 			offset = Z_REFVAL_P(offset);
46159 			goto add_again;
46160 		} else if (Z_TYPE_P(offset) == IS_NULL) {
46161 			str = ZSTR_EMPTY_ALLOC();
46162 			goto str_index;
46163 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
46164 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
46165 			goto num_index;
46166 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
46167 			hval = 0;
46168 			goto num_index;
46169 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
46170 			hval = 1;
46171 			goto num_index;
46172 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
46173 			zend_use_resource_as_offset(offset);
46174 			hval = Z_RES_HANDLE_P(offset);
46175 			goto num_index;
46176 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
46177 			ZVAL_UNDEFINED_OP2();
46178 			str = ZSTR_EMPTY_ALLOC();
46179 			goto str_index;
46180 		} else {
46181 			zend_illegal_offset();
46182 			zval_ptr_dtor_nogc(expr_ptr);
46183 		}
46184 
46185 	} else {
46186 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
46187 			zend_cannot_add_element();
46188 			zval_ptr_dtor_nogc(expr_ptr);
46189 		}
46190 	}
46191 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46192 }
46193 
ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46194 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46195 {
46196 	zval *array;
46197 	uint32_t size;
46198 	USE_OPLINE
46199 
46200 	array = EX_VAR(opline->result.var);
46201 	if (IS_CV != IS_UNUSED) {
46202 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
46203 		ZVAL_ARR(array, zend_new_array(size));
46204 		/* Explicitly initialize array as not-packed if flag is set */
46205 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
46206 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
46207 		}
46208 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46209 	} else {
46210 		ZVAL_ARR(array, zend_new_array(0));
46211 		ZEND_VM_NEXT_OPCODE();
46212 	}
46213 }
46214 
ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46215 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46216 {
46217 	USE_OPLINE
46218 	zval *var = EX_VAR(opline->op1.var);
46219 
46220 	if (Z_REFCOUNTED_P(var)) {
46221 		zend_refcounted *garbage = Z_COUNTED_P(var);
46222 
46223 		ZVAL_UNDEF(var);
46224 		SAVE_OPLINE();
46225 		if (!GC_DELREF(garbage)) {
46226 			rc_dtor_func(garbage);
46227 		} else {
46228 			gc_check_possible_root(garbage);
46229 		}
46230 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46231 	} else {
46232 		ZVAL_UNDEF(var);
46233 	}
46234 	ZEND_VM_NEXT_OPCODE();
46235 }
46236 
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46237 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46238 {
46239 	USE_OPLINE
46240 	zval *varname;
46241 	zend_string *name, *tmp_name;
46242 	HashTable *target_symbol_table;
46243 
46244 
46245 	SAVE_OPLINE();
46246 
46247 	varname = EX_VAR(opline->op1.var);
46248 
46249 	if (IS_CV == IS_CONST) {
46250 		name = Z_STR_P(varname);
46251 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
46252 		name = Z_STR_P(varname);
46253 		tmp_name = NULL;
46254 	} else {
46255 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
46256 			varname = ZVAL_UNDEFINED_OP1();
46257 		}
46258 		name = zval_try_get_tmp_string(varname, &tmp_name);
46259 		if (UNEXPECTED(!name)) {
46260 
46261 			HANDLE_EXCEPTION();
46262 		}
46263 	}
46264 
46265 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
46266 	zend_hash_del_ind(target_symbol_table, name);
46267 
46268 	if (IS_CV != IS_CONST) {
46269 		zend_tmp_string_release(tmp_name);
46270 	}
46271 
46272 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46273 }
46274 
46275 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46276 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46277 {
46278 	USE_OPLINE
46279 	zval *value;
46280 
46281 	value = EX_VAR(opline->op1.var);
46282 	if (!(0)) {
46283 		if (Z_TYPE_P(value) > IS_NULL &&
46284 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
46285 			ZEND_VM_SMART_BRANCH_TRUE();
46286 			ZVAL_TRUE(EX_VAR(opline->result.var));
46287 			ZEND_VM_NEXT_OPCODE();
46288 		} else {
46289 			ZEND_VM_SMART_BRANCH_FALSE();
46290 			ZVAL_FALSE(EX_VAR(opline->result.var));
46291 			ZEND_VM_NEXT_OPCODE();
46292 		}
46293 	} else {
46294 		int result;
46295 
46296 		SAVE_OPLINE();
46297 		result = !i_zend_is_true(value);
46298 		if (UNEXPECTED(EG(exception))) {
46299 			ZVAL_UNDEF(EX_VAR(opline->result.var));
46300 			HANDLE_EXCEPTION();
46301 		}
46302 		ZEND_VM_SMART_BRANCH(result, 0);
46303 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
46304 		ZEND_VM_NEXT_OPCODE();
46305 	}
46306 }
46307 
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46308 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46309 {
46310 	USE_OPLINE
46311 	zval *value;
46312 
46313 	value = EX_VAR(opline->op1.var);
46314 	if (!(1)) {
46315 		if (Z_TYPE_P(value) > IS_NULL &&
46316 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
46317 			ZEND_VM_SMART_BRANCH_TRUE();
46318 			ZVAL_TRUE(EX_VAR(opline->result.var));
46319 			ZEND_VM_NEXT_OPCODE();
46320 		} else {
46321 			ZEND_VM_SMART_BRANCH_FALSE();
46322 			ZVAL_FALSE(EX_VAR(opline->result.var));
46323 			ZEND_VM_NEXT_OPCODE();
46324 		}
46325 	} else {
46326 		int result;
46327 
46328 		SAVE_OPLINE();
46329 		result = !i_zend_is_true(value);
46330 		if (UNEXPECTED(EG(exception))) {
46331 			ZVAL_UNDEF(EX_VAR(opline->result.var));
46332 			HANDLE_EXCEPTION();
46333 		}
46334 		ZEND_VM_SMART_BRANCH(result, 0);
46335 		ZVAL_BOOL(EX_VAR(opline->result.var), result);
46336 		ZEND_VM_NEXT_OPCODE();
46337 	}
46338 }
46339 
ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46341 {
46342 	USE_OPLINE
46343 	zval *value;
46344 	int result;
46345 
46346 	zval *varname;
46347 	zend_string *name, *tmp_name;
46348 	HashTable *target_symbol_table;
46349 
46350 	SAVE_OPLINE();
46351 	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
46352 	if (IS_CV == IS_CONST) {
46353 		name = Z_STR_P(varname);
46354 	} else {
46355 		name = zval_get_tmp_string(varname, &tmp_name);
46356 	}
46357 
46358 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
46359 	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
46360 
46361 	if (IS_CV != IS_CONST) {
46362 		zend_tmp_string_release(tmp_name);
46363 	}
46364 
46365 	if (!value) {
46366 		result = (opline->extended_value & ZEND_ISEMPTY);
46367 	} else {
46368 		if (Z_TYPE_P(value) == IS_INDIRECT) {
46369 			value = Z_INDIRECT_P(value);
46370 		}
46371 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
46372 			if (Z_ISREF_P(value)) {
46373 				value = Z_REFVAL_P(value);
46374 			}
46375 			result = Z_TYPE_P(value) > IS_NULL;
46376 		} else {
46377 			result = !i_zend_is_true(value);
46378 		}
46379 	}
46380 
46381 	ZEND_VM_SMART_BRANCH(result, 1);
46382 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
46383 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46384 }
46385 
46386 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46388 {
46389 	USE_OPLINE
46390 
46391 	zval *expr;
46392 	zend_bool result;
46393 
46394 	SAVE_OPLINE();
46395 	expr = EX_VAR(opline->op1.var);
46396 
46397 try_instanceof:
46398 	if (Z_TYPE_P(expr) == IS_OBJECT) {
46399 		zend_class_entry *ce;
46400 
46401 		if (IS_UNUSED == IS_CONST) {
46402 			ce = CACHED_PTR(opline->extended_value);
46403 			if (UNEXPECTED(ce == NULL)) {
46404 				ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
46405 				if (EXPECTED(ce)) {
46406 					CACHE_PTR(opline->extended_value, ce);
46407 				}
46408 			}
46409 		} else if (IS_UNUSED == IS_UNUSED) {
46410 			ce = zend_fetch_class(NULL, opline->op2.num);
46411 			if (UNEXPECTED(ce == NULL)) {
46412 				ZEND_ASSERT(EG(exception));
46413 
46414 				ZVAL_UNDEF(EX_VAR(opline->result.var));
46415 				HANDLE_EXCEPTION();
46416 			}
46417 		} else {
46418 			ce = Z_CE_P(EX_VAR(opline->op2.var));
46419 		}
46420 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
46421 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
46422 		expr = Z_REFVAL_P(expr);
46423 		goto try_instanceof;
46424 	} else {
46425 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
46426 			ZVAL_UNDEFINED_OP1();
46427 		}
46428 		result = 0;
46429 	}
46430 
46431 	ZEND_VM_SMART_BRANCH(result, 1);
46432 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
46433 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46434 }
46435 
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46436 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46437 {
46438 	USE_OPLINE
46439 
46440 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
46441 
46442 	SAVE_OPLINE();
46443 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
46444 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
46445 	}
46446 
46447 	/* Destroy the previously yielded value */
46448 	zval_ptr_dtor(&generator->value);
46449 
46450 	/* Destroy the previously yielded key */
46451 	zval_ptr_dtor(&generator->key);
46452 
46453 	/* Set the new yielded value */
46454 	if (IS_CV != IS_UNUSED) {
46455 
46456 
46457 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
46458 			/* Constants and temporary variables aren't yieldable by reference,
46459 			 * but we still allow them with a notice. */
46460 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
46461 				zval *value;
46462 
46463 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46464 
46465 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46466 				ZVAL_COPY_VALUE(&generator->value, value);
46467 				if (IS_CV == IS_CONST) {
46468 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46469 						Z_ADDREF(generator->value);
46470 					}
46471 				}
46472 			} else {
46473 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
46474 
46475 				/* If a function call result is yielded and the function did
46476 				 * not return by reference we throw a notice. */
46477 				do {
46478 					if (IS_CV == IS_VAR) {
46479 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
46480 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
46481 						 && !Z_ISREF_P(value_ptr)) {
46482 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
46483 							ZVAL_COPY(&generator->value, value_ptr);
46484 							break;
46485 						}
46486 					}
46487 					if (Z_ISREF_P(value_ptr)) {
46488 						Z_ADDREF_P(value_ptr);
46489 					} else {
46490 						ZVAL_MAKE_REF_EX(value_ptr, 2);
46491 					}
46492 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
46493 				} while (0);
46494 
46495 			}
46496 		} else {
46497 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46498 
46499 			/* Consts, temporary variables and references need copying */
46500 			if (IS_CV == IS_CONST) {
46501 				ZVAL_COPY_VALUE(&generator->value, value);
46502 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
46503 					Z_ADDREF(generator->value);
46504 				}
46505 			} else if (IS_CV == IS_TMP_VAR) {
46506 				ZVAL_COPY_VALUE(&generator->value, value);
46507             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
46508 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
46509 
46510 			} else {
46511 				ZVAL_COPY_VALUE(&generator->value, value);
46512 				if (IS_CV == IS_CV) {
46513 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
46514 				}
46515 			}
46516 		}
46517 	} else {
46518 		/* If no value was specified yield null */
46519 		ZVAL_NULL(&generator->value);
46520 	}
46521 
46522 	/* Set the new yielded key */
46523 	if (IS_UNUSED != IS_UNUSED) {
46524 
46525 		zval *key = NULL;
46526 
46527 		/* Consts, temporary variables and references need copying */
46528 		if (IS_UNUSED == IS_CONST) {
46529 			ZVAL_COPY_VALUE(&generator->key, key);
46530 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
46531 				Z_ADDREF(generator->key);
46532 			}
46533 		} else if (IS_UNUSED == IS_TMP_VAR) {
46534 			ZVAL_COPY_VALUE(&generator->key, key);
46535 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
46536 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
46537 
46538 		} else {
46539 			ZVAL_COPY_VALUE(&generator->key, key);
46540 			if (IS_UNUSED == IS_CV) {
46541 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
46542 			}
46543 		}
46544 
46545 		if (Z_TYPE(generator->key) == IS_LONG
46546 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
46547 		) {
46548 			generator->largest_used_integer_key = Z_LVAL(generator->key);
46549 		}
46550 	} else {
46551 		/* If no key was specified we use auto-increment keys */
46552 		generator->largest_used_integer_key++;
46553 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
46554 	}
46555 
46556 	if (RETURN_VALUE_USED(opline)) {
46557 		/* If the return value of yield is used set the send
46558 		 * target and initialize it to NULL */
46559 		generator->send_target = EX_VAR(opline->result.var);
46560 		ZVAL_NULL(generator->send_target);
46561 	} else {
46562 		generator->send_target = NULL;
46563 	}
46564 
46565 	/* We increment to the next op, so we are at the correct position when the
46566 	 * generator is resumed. */
46567 	ZEND_VM_INC_OPCODE();
46568 
46569 	/* The GOTO VM uses a local opline variable. We need to set the opline
46570 	 * variable in execute_data so we don't resume at an old position. */
46571 	SAVE_OPLINE();
46572 
46573 	ZEND_VM_RETURN();
46574 }
46575 
ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46577 {
46578 	USE_OPLINE
46579 
46580 	HashTable *ht;
46581 	zval *value;
46582 	zval *variable_ptr;
46583 
46584 	variable_ptr = EX_VAR(opline->op1.var);
46585 	i_zval_ptr_dtor(variable_ptr);
46586 
46587 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
46588 	if (!ht) {
46589 		ZEND_ASSERT(EX(func)->op_array.fn_flags & (ZEND_ACC_IMMUTABLE|ZEND_ACC_PRELOADED));
46590 		ht = zend_array_dup(EX(func)->op_array.static_variables);
46591 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
46592 	} else if (GC_REFCOUNT(ht) > 1) {
46593 		if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46594 			GC_DELREF(ht);
46595 		}
46596 		ht = zend_array_dup(ht);
46597 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
46598 	}
46599 
46600 	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)));
46601 
46602 	if (opline->extended_value & ZEND_BIND_REF) {
46603 		if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
46604 			SAVE_OPLINE();
46605 			if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
46606 				ZVAL_NULL(variable_ptr);
46607 				HANDLE_EXCEPTION();
46608 			}
46609 		}
46610 		if (UNEXPECTED(!Z_ISREF_P(value))) {
46611 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
46612 			GC_SET_REFCOUNT(ref, 2);
46613 			GC_TYPE_INFO(ref) = IS_REFERENCE;
46614 			ZVAL_COPY_VALUE(&ref->val, value);
46615 			ref->sources.ptr = NULL;
46616 			Z_REF_P(value) = ref;
46617 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
46618 			ZVAL_REF(variable_ptr, ref);
46619 		} else {
46620 			Z_ADDREF_P(value);
46621 			ZVAL_REF(variable_ptr, Z_REF_P(value));
46622 		}
46623 	} else {
46624 		ZVAL_COPY(variable_ptr, value);
46625 	}
46626 
46627 	ZEND_VM_NEXT_OPCODE();
46628 }
46629 
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46630 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46631 {
46632 	USE_OPLINE
46633 	zval *op1 = EX_VAR(opline->op1.var);
46634 
46635 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
46636 		SAVE_OPLINE();
46637 		ZVAL_UNDEFINED_OP1();
46638 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46639 	}
46640 	ZEND_VM_NEXT_OPCODE();
46641 }
46642 
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46644 {
46645 	USE_OPLINE
46646 	zval *op1 = EX_VAR(opline->op1.var);
46647 
46648 	if (IS_CV == IS_CV) {
46649 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46650 			ZVAL_NEW_EMPTY_REF(op1);
46651 			Z_SET_REFCOUNT_P(op1, 2);
46652 			ZVAL_NULL(Z_REFVAL_P(op1));
46653 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
46654 		} else {
46655 			if (Z_ISREF_P(op1)) {
46656 				Z_ADDREF_P(op1);
46657 			} else {
46658 				ZVAL_MAKE_REF_EX(op1, 2);
46659 			}
46660 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
46661 		}
46662 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
46663 		op1 = Z_INDIRECT_P(op1);
46664 		if (EXPECTED(!Z_ISREF_P(op1))) {
46665 			ZVAL_MAKE_REF_EX(op1, 2);
46666 		} else {
46667 			GC_ADDREF(Z_REF_P(op1));
46668 		}
46669 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
46670 	} else {
46671 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
46672 	}
46673 	ZEND_VM_NEXT_OPCODE();
46674 }
46675 
ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46677 {
46678 	USE_OPLINE
46679 
46680 	zval *op1;
46681 	zend_long count;
46682 
46683 	SAVE_OPLINE();
46684 	op1 = EX_VAR(opline->op1.var);
46685 	while (1) {
46686 		if (Z_TYPE_P(op1) == IS_ARRAY) {
46687 			count = zend_array_count(Z_ARRVAL_P(op1));
46688 			break;
46689 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
46690 			/* first, we check if the handler is defined */
46691 			if (Z_OBJ_HT_P(op1)->count_elements) {
46692 				if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
46693 					break;
46694 				}
46695 				if (UNEXPECTED(EG(exception))) {
46696 					count = 0;
46697 					break;
46698 				}
46699 			}
46700 
46701 			/* if not and the object implements Countable we call its count() method */
46702 			if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
46703 				zval retval;
46704 
46705 				zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
46706 				count = zval_get_long(&retval);
46707 				zval_ptr_dtor(&retval);
46708 				break;
46709 			}
46710 
46711 			/* If There's no handler and it doesn't implement Countable then add a warning */
46712 			count = 1;
46713 		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
46714 			op1 = Z_REFVAL_P(op1);
46715 			continue;
46716 		} else if (Z_TYPE_P(op1) <= IS_NULL) {
46717 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46718 				ZVAL_UNDEFINED_OP1();
46719 			}
46720 			count = 0;
46721 		} else {
46722 			count = 1;
46723 		}
46724 		zend_error(E_WARNING, "%s(): Parameter must be an array or an object that implements Countable", opline->extended_value ? "sizeof" : "count");
46725 		break;
46726 	}
46727 
46728 	ZVAL_LONG(EX_VAR(opline->result.var), count);
46729 
46730 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46731 }
46732 
ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46733 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46734 {
46735 	USE_OPLINE
46736 
46737 	if (IS_CV == IS_UNUSED) {
46738 		if (UNEXPECTED(!EX(func)->common.scope)) {
46739 			SAVE_OPLINE();
46740 			zend_error(E_WARNING, "get_class() called without object from outside a class");
46741 			ZVAL_FALSE(EX_VAR(opline->result.var));
46742 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46743 		} else {
46744 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
46745 			ZEND_VM_NEXT_OPCODE();
46746 		}
46747 	} else {
46748 
46749 		zval *op1;
46750 
46751 		SAVE_OPLINE();
46752 		op1 = EX_VAR(opline->op1.var);
46753 		while (1) {
46754 			if (Z_TYPE_P(op1) == IS_OBJECT) {
46755 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
46756 			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
46757 				op1 = Z_REFVAL_P(op1);
46758 				continue;
46759 			} else {
46760 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46761 					ZVAL_UNDEFINED_OP1();
46762 				}
46763 				zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
46764 				ZVAL_FALSE(EX_VAR(opline->result.var));
46765 			}
46766 			break;
46767 		}
46768 
46769 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46770 	}
46771 }
46772 
ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46774 {
46775 	USE_OPLINE
46776 
46777 	zval *op1;
46778 	zend_string *type;
46779 
46780 	SAVE_OPLINE();
46781 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46782 	type = zend_zval_get_type(op1);
46783 	if (EXPECTED(type)) {
46784 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
46785 	} else {
46786 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
46787 	}
46788 
46789 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46790 }
46791 
ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46793 {
46794 	USE_OPLINE
46795 
46796 	zval *op1, *op2;
46797 
46798 	SAVE_OPLINE();
46799 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46800 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
46801 	fast_div_function(EX_VAR(opline->result.var), op1, op2);
46802 
46803 
46804 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46805 }
46806 
ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46808 {
46809 	USE_OPLINE
46810 
46811 	zval *op1, *op2;
46812 
46813 	SAVE_OPLINE();
46814 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46815 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
46816 	pow_function(EX_VAR(opline->result.var), op1, op2);
46817 
46818 
46819 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46820 }
46821 
ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46823 {
46824 	USE_OPLINE
46825 
46826 	zval *op1, *op2;
46827 
46828 	op1 = EX_VAR(opline->op1.var);
46829 	op2 = EX_VAR(opline->op2.var);
46830 
46831 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
46832 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
46833 		zend_string *op1_str = Z_STR_P(op1);
46834 		zend_string *op2_str = Z_STR_P(op2);
46835 		zend_string *str;
46836 
46837 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
46838 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
46839 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
46840 			} else {
46841 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
46842 			}
46843 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46844 				zend_string_release_ex(op1_str, 0);
46845 			}
46846 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
46847 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
46848 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
46849 			} else {
46850 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
46851 			}
46852 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46853 				zend_string_release_ex(op2_str, 0);
46854 			}
46855 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
46856 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
46857 		    size_t len = ZSTR_LEN(op1_str);
46858 
46859 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
46860 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
46861 			}
46862 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
46863 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
46864 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
46865 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46866 				zend_string_release_ex(op2_str, 0);
46867 			}
46868 		} else {
46869 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
46870 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
46871 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
46872 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
46873 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46874 				zend_string_release_ex(op1_str, 0);
46875 			}
46876 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46877 				zend_string_release_ex(op2_str, 0);
46878 			}
46879 		}
46880 		ZEND_VM_NEXT_OPCODE();
46881 	} else {
46882 		SAVE_OPLINE();
46883 
46884 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
46885 			op1 = ZVAL_UNDEFINED_OP1();
46886 		}
46887 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
46888 			op2 = ZVAL_UNDEFINED_OP2();
46889 		}
46890 		concat_function(EX_VAR(opline->result.var), op1, op2);
46891 
46892 
46893 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46894 	}
46895 }
46896 
ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46898 {
46899 	USE_OPLINE
46900 
46901 	zval *op1, *op2;
46902 	zend_bool result;
46903 
46904 	SAVE_OPLINE();
46905 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46906 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
46907 	result = fast_is_identical_function(op1, op2);
46908 
46909 
46910 	ZEND_VM_SMART_BRANCH(result, 1);
46911 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
46912 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46913 }
46914 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46915 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46916 {
46917 	USE_OPLINE
46918 
46919 	zval *op1, *op2;
46920 	zend_bool result;
46921 
46922 	SAVE_OPLINE();
46923 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
46924 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
46925 	result = fast_is_not_identical_function(op1, op2);
46926 
46927 
46928 	ZEND_VM_SMART_BRANCH(result, 1);
46929 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
46930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
46931 }
46932 
ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46934 {
46935 	USE_OPLINE
46936 
46937 	zval *op1, *op2;
46938 	double d1, d2;
46939 
46940 	op1 = EX_VAR(opline->op1.var);
46941 	op2 = EX_VAR(opline->op2.var);
46942 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
46943 		/* pass */
46944 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
46945 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
46946 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
46947 is_equal_true:
46948 
46949 				ZVAL_TRUE(EX_VAR(opline->result.var));
46950 				ZEND_VM_NEXT_OPCODE();
46951 			} else {
46952 is_equal_false:
46953 
46954 				ZVAL_FALSE(EX_VAR(opline->result.var));
46955 				ZEND_VM_NEXT_OPCODE();
46956 			}
46957 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
46958 			d1 = (double)Z_LVAL_P(op1);
46959 			d2 = Z_DVAL_P(op2);
46960 			goto is_equal_double;
46961 		}
46962 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
46963 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
46964 			d1 = Z_DVAL_P(op1);
46965 			d2 = Z_DVAL_P(op2);
46966 is_equal_double:
46967 			if (d1 == d2) {
46968 				goto is_equal_true;
46969 			} else {
46970 				goto is_equal_false;
46971 			}
46972 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
46973 			d1 = Z_DVAL_P(op1);
46974 			d2 = (double)Z_LVAL_P(op2);
46975 			goto is_equal_double;
46976 		}
46977 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
46978 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
46979 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
46980 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46981 				zval_ptr_dtor_str(op1);
46982 			}
46983 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
46984 				zval_ptr_dtor_str(op2);
46985 			}
46986 			if (result) {
46987 				goto is_equal_true;
46988 			} else {
46989 				goto is_equal_false;
46990 			}
46991 		}
46992 	}
46993 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46994 }
46995 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46997 {
46998 	USE_OPLINE
46999 
47000 	zval *op1, *op2;
47001 	double d1, d2;
47002 
47003 	op1 = EX_VAR(opline->op1.var);
47004 	op2 = EX_VAR(opline->op2.var);
47005 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
47006 		/* pass */
47007 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47008 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47009 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
47010 is_equal_true:
47011 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
47012 				ZVAL_TRUE(EX_VAR(opline->result.var));
47013 				ZEND_VM_NEXT_OPCODE();
47014 			} else {
47015 is_equal_false:
47016 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
47017 				ZVAL_FALSE(EX_VAR(opline->result.var));
47018 				ZEND_VM_NEXT_OPCODE();
47019 			}
47020 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47021 			d1 = (double)Z_LVAL_P(op1);
47022 			d2 = Z_DVAL_P(op2);
47023 			goto is_equal_double;
47024 		}
47025 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47026 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47027 			d1 = Z_DVAL_P(op1);
47028 			d2 = Z_DVAL_P(op2);
47029 is_equal_double:
47030 			if (d1 == d2) {
47031 				goto is_equal_true;
47032 			} else {
47033 				goto is_equal_false;
47034 			}
47035 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47036 			d1 = Z_DVAL_P(op1);
47037 			d2 = (double)Z_LVAL_P(op2);
47038 			goto is_equal_double;
47039 		}
47040 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47041 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47042 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
47043 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47044 				zval_ptr_dtor_str(op1);
47045 			}
47046 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47047 				zval_ptr_dtor_str(op2);
47048 			}
47049 			if (result) {
47050 				goto is_equal_true;
47051 			} else {
47052 				goto is_equal_false;
47053 			}
47054 		}
47055 	}
47056 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47057 }
47058 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47060 {
47061 	USE_OPLINE
47062 
47063 	zval *op1, *op2;
47064 	double d1, d2;
47065 
47066 	op1 = EX_VAR(opline->op1.var);
47067 	op2 = EX_VAR(opline->op2.var);
47068 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
47069 		/* pass */
47070 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47071 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47072 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
47073 is_equal_true:
47074 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
47075 				ZVAL_TRUE(EX_VAR(opline->result.var));
47076 				ZEND_VM_NEXT_OPCODE();
47077 			} else {
47078 is_equal_false:
47079 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
47080 				ZVAL_FALSE(EX_VAR(opline->result.var));
47081 				ZEND_VM_NEXT_OPCODE();
47082 			}
47083 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47084 			d1 = (double)Z_LVAL_P(op1);
47085 			d2 = Z_DVAL_P(op2);
47086 			goto is_equal_double;
47087 		}
47088 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47089 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47090 			d1 = Z_DVAL_P(op1);
47091 			d2 = Z_DVAL_P(op2);
47092 is_equal_double:
47093 			if (d1 == d2) {
47094 				goto is_equal_true;
47095 			} else {
47096 				goto is_equal_false;
47097 			}
47098 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47099 			d1 = Z_DVAL_P(op1);
47100 			d2 = (double)Z_LVAL_P(op2);
47101 			goto is_equal_double;
47102 		}
47103 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47104 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47105 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
47106 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47107 				zval_ptr_dtor_str(op1);
47108 			}
47109 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47110 				zval_ptr_dtor_str(op2);
47111 			}
47112 			if (result) {
47113 				goto is_equal_true;
47114 			} else {
47115 				goto is_equal_false;
47116 			}
47117 		}
47118 	}
47119 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47120 }
47121 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47122 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47123 {
47124 	USE_OPLINE
47125 
47126 	zval *op1, *op2;
47127 	double d1, d2;
47128 
47129 	op1 = EX_VAR(opline->op1.var);
47130 	op2 = EX_VAR(opline->op2.var);
47131 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
47132 		/* pass */
47133 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47134 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47135 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
47136 is_not_equal_true:
47137 
47138 				ZVAL_TRUE(EX_VAR(opline->result.var));
47139 				ZEND_VM_NEXT_OPCODE();
47140 			} else {
47141 is_not_equal_false:
47142 
47143 				ZVAL_FALSE(EX_VAR(opline->result.var));
47144 				ZEND_VM_NEXT_OPCODE();
47145 			}
47146 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47147 			d1 = (double)Z_LVAL_P(op1);
47148 			d2 = Z_DVAL_P(op2);
47149 			goto is_not_equal_double;
47150 		}
47151 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47152 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47153 			d1 = Z_DVAL_P(op1);
47154 			d2 = Z_DVAL_P(op2);
47155 is_not_equal_double:
47156 			if (d1 != d2) {
47157 				goto is_not_equal_true;
47158 			} else {
47159 				goto is_not_equal_false;
47160 			}
47161 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47162 			d1 = Z_DVAL_P(op1);
47163 			d2 = (double)Z_LVAL_P(op2);
47164 			goto is_not_equal_double;
47165 		}
47166 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47167 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47168 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
47169 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47170 				zval_ptr_dtor_str(op1);
47171 			}
47172 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47173 				zval_ptr_dtor_str(op2);
47174 			}
47175 			if (!result) {
47176 				goto is_not_equal_true;
47177 			} else {
47178 				goto is_not_equal_false;
47179 			}
47180 		}
47181 	}
47182 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47183 }
47184 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47186 {
47187 	USE_OPLINE
47188 
47189 	zval *op1, *op2;
47190 	double d1, d2;
47191 
47192 	op1 = EX_VAR(opline->op1.var);
47193 	op2 = EX_VAR(opline->op2.var);
47194 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
47195 		/* pass */
47196 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47197 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47198 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
47199 is_not_equal_true:
47200 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
47201 				ZVAL_TRUE(EX_VAR(opline->result.var));
47202 				ZEND_VM_NEXT_OPCODE();
47203 			} else {
47204 is_not_equal_false:
47205 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
47206 				ZVAL_FALSE(EX_VAR(opline->result.var));
47207 				ZEND_VM_NEXT_OPCODE();
47208 			}
47209 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47210 			d1 = (double)Z_LVAL_P(op1);
47211 			d2 = Z_DVAL_P(op2);
47212 			goto is_not_equal_double;
47213 		}
47214 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47215 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47216 			d1 = Z_DVAL_P(op1);
47217 			d2 = Z_DVAL_P(op2);
47218 is_not_equal_double:
47219 			if (d1 != d2) {
47220 				goto is_not_equal_true;
47221 			} else {
47222 				goto is_not_equal_false;
47223 			}
47224 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47225 			d1 = Z_DVAL_P(op1);
47226 			d2 = (double)Z_LVAL_P(op2);
47227 			goto is_not_equal_double;
47228 		}
47229 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47230 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47231 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
47232 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47233 				zval_ptr_dtor_str(op1);
47234 			}
47235 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47236 				zval_ptr_dtor_str(op2);
47237 			}
47238 			if (!result) {
47239 				goto is_not_equal_true;
47240 			} else {
47241 				goto is_not_equal_false;
47242 			}
47243 		}
47244 	}
47245 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47246 }
47247 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47248 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47249 {
47250 	USE_OPLINE
47251 
47252 	zval *op1, *op2;
47253 	double d1, d2;
47254 
47255 	op1 = EX_VAR(opline->op1.var);
47256 	op2 = EX_VAR(opline->op2.var);
47257 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
47258 		/* pass */
47259 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
47260 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47261 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
47262 is_not_equal_true:
47263 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
47264 				ZVAL_TRUE(EX_VAR(opline->result.var));
47265 				ZEND_VM_NEXT_OPCODE();
47266 			} else {
47267 is_not_equal_false:
47268 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
47269 				ZVAL_FALSE(EX_VAR(opline->result.var));
47270 				ZEND_VM_NEXT_OPCODE();
47271 			}
47272 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47273 			d1 = (double)Z_LVAL_P(op1);
47274 			d2 = Z_DVAL_P(op2);
47275 			goto is_not_equal_double;
47276 		}
47277 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
47278 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
47279 			d1 = Z_DVAL_P(op1);
47280 			d2 = Z_DVAL_P(op2);
47281 is_not_equal_double:
47282 			if (d1 != d2) {
47283 				goto is_not_equal_true;
47284 			} else {
47285 				goto is_not_equal_false;
47286 			}
47287 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
47288 			d1 = Z_DVAL_P(op1);
47289 			d2 = (double)Z_LVAL_P(op2);
47290 			goto is_not_equal_double;
47291 		}
47292 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47293 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47294 			int result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
47295 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47296 				zval_ptr_dtor_str(op1);
47297 			}
47298 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47299 				zval_ptr_dtor_str(op2);
47300 			}
47301 			if (!result) {
47302 				goto is_not_equal_true;
47303 			} else {
47304 				goto is_not_equal_false;
47305 			}
47306 		}
47307 	}
47308 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
47309 }
47310 
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47312 {
47313 	USE_OPLINE
47314 
47315 	zval *op1, *op2;
47316 
47317 	SAVE_OPLINE();
47318 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47319 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47320 	compare_function(EX_VAR(opline->result.var), op1, op2);
47321 
47322 
47323 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47324 }
47325 
ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47326 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47327 {
47328 	USE_OPLINE
47329 
47330 	zval *op1, *op2;
47331 
47332 	SAVE_OPLINE();
47333 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47334 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47335 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
47336 
47337 
47338 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47339 }
47340 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47341 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47342 {
47343 	USE_OPLINE
47344 	zend_free_op free_op_data;
47345 	zval *object;
47346 	zval *property;
47347 	zval *value;
47348 	zval *zptr;
47349 	void **cache_slot;
47350 	zend_property_info *prop_info;
47351 
47352 	SAVE_OPLINE();
47353 	object = EX_VAR(opline->op1.var);
47354 
47355 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47356 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47357 	}
47358 
47359 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47360 
47361 	do {
47362 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data);
47363 
47364 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
47365 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
47366 				object = Z_REFVAL_P(object);
47367 				goto assign_op_object;
47368 			}
47369 			if (IS_CV == IS_CV
47370 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47371 				ZVAL_UNDEFINED_OP1();
47372 			}
47373 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
47374 			if (UNEXPECTED(!object)) {
47375 				break;
47376 			}
47377 		}
47378 
47379 assign_op_object:
47380 		/* here we are sure we are dealing with an object */
47381 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
47382 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
47383 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
47384 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47385 					ZVAL_NULL(EX_VAR(opline->result.var));
47386 				}
47387 			} else {
47388 				zval *orig_zptr = zptr;
47389 				zend_reference *ref;
47390 
47391 				do {
47392 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
47393 						ref = Z_REF_P(zptr);
47394 						zptr = Z_REFVAL_P(zptr);
47395 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
47396 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
47397 							break;
47398 						}
47399 					}
47400 
47401 					if (IS_CV == IS_CONST) {
47402 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
47403 					} else {
47404 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
47405 					}
47406 					if (UNEXPECTED(prop_info)) {
47407 						/* special case for typed properties */
47408 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
47409 					} else {
47410 						zend_binary_op(zptr, zptr, value OPLINE_CC);
47411 					}
47412 				} while (0);
47413 
47414 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47415 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
47416 				}
47417 			}
47418 		} else {
47419 			zend_assign_op_overloaded_property(object, property, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
47420 		}
47421 	} while (0);
47422 
47423 	FREE_OP(free_op_data);
47424 
47425 
47426 	/* assign_obj has two opcodes! */
47427 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47428 }
47429 
47430 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47432 {
47433 	USE_OPLINE
47434 	zend_free_op free_op_data1;
47435 	zval *var_ptr;
47436 	zval *value, *container, *dim;
47437 
47438 	SAVE_OPLINE();
47439 	container = EX_VAR(opline->op1.var);
47440 
47441 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47442 assign_dim_op_array:
47443 		SEPARATE_ARRAY(container);
47444 assign_dim_op_new_array:
47445 		dim = EX_VAR(opline->op2.var);
47446 		if (IS_CV == IS_UNUSED) {
47447 			var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
47448 			if (UNEXPECTED(!var_ptr)) {
47449 				zend_cannot_add_element();
47450 				goto assign_dim_op_ret_null;
47451 			}
47452 		} else {
47453 			if (IS_CV == IS_CONST) {
47454 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
47455 			} else {
47456 				var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
47457 			}
47458 			if (UNEXPECTED(!var_ptr)) {
47459 				goto assign_dim_op_ret_null;
47460 			}
47461 		}
47462 
47463 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
47464 
47465 		do {
47466 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
47467 				zend_reference *ref = Z_REF_P(var_ptr);
47468 				var_ptr = Z_REFVAL_P(var_ptr);
47469 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
47470 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
47471 					break;
47472 				}
47473 			}
47474 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
47475 		} while (0);
47476 
47477 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47478 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
47479 		}
47480 		FREE_OP(free_op_data1);
47481 	} else {
47482 		if (EXPECTED(Z_ISREF_P(container))) {
47483 			container = Z_REFVAL_P(container);
47484 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47485 				goto assign_dim_op_array;
47486 			}
47487 		}
47488 
47489 		dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47490 
47491 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47492 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47493 				dim++;
47494 			}
47495 			zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
47496 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
47497 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
47498 				ZVAL_UNDEFINED_OP1();
47499 			}
47500 			ZVAL_ARR(container, zend_new_array(8));
47501 			goto assign_dim_op_new_array;
47502 		} else {
47503 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
47504 assign_dim_op_ret_null:
47505 			FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
47506 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47507 				ZVAL_NULL(EX_VAR(opline->result.var));
47508 			}
47509 		}
47510 	}
47511 
47512 
47513 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47514 }
47515 
ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47516 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47517 {
47518 	USE_OPLINE
47519 
47520 	zval *var_ptr;
47521 	zval *value;
47522 
47523 	SAVE_OPLINE();
47524 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47525 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
47526 
47527 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
47528 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47529 			ZVAL_NULL(EX_VAR(opline->result.var));
47530 		}
47531 	} else {
47532 		do {
47533 			if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
47534 				zend_reference *ref = Z_REF_P(var_ptr);
47535 				var_ptr = Z_REFVAL_P(var_ptr);
47536 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
47537 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
47538 					break;
47539 				}
47540 			}
47541 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
47542 		} while (0);
47543 
47544 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47545 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
47546 		}
47547 	}
47548 
47549 
47550 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47551 }
47552 
ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47554 {
47555 	USE_OPLINE
47556 
47557 	zval *object;
47558 	zval *property;
47559 	zval *zptr;
47560 	void **cache_slot;
47561 	zend_property_info *prop_info;
47562 
47563 	SAVE_OPLINE();
47564 	object = EX_VAR(opline->op1.var);
47565 
47566 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47567 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47568 	}
47569 
47570 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47571 
47572 	do {
47573 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
47574 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
47575 				object = Z_REFVAL_P(object);
47576 				goto pre_incdec_object;
47577 			}
47578 			if (IS_CV == IS_CV
47579 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47580 				ZVAL_UNDEFINED_OP1();
47581 			}
47582 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
47583 			if (UNEXPECTED(!object)) {
47584 				break;
47585 			}
47586 		}
47587 
47588 pre_incdec_object:
47589 		/* here we are sure we are dealing with an object */
47590 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
47591 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
47592 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
47593 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47594 					ZVAL_NULL(EX_VAR(opline->result.var));
47595 				}
47596 			} else {
47597 				if (IS_CV == IS_CONST) {
47598 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
47599 				} else {
47600 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
47601 				}
47602 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
47603 			}
47604 		} else {
47605 			zend_pre_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
47606 		}
47607 	} while (0);
47608 
47609 
47610 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47611 }
47612 
ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47614 {
47615 	USE_OPLINE
47616 
47617 	zval *object;
47618 	zval *property;
47619 	zval *zptr;
47620 	void **cache_slot;
47621 	zend_property_info *prop_info;
47622 
47623 	SAVE_OPLINE();
47624 	object = EX_VAR(opline->op1.var);
47625 
47626 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47627 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47628 	}
47629 
47630 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47631 
47632 	do {
47633 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
47634 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
47635 				object = Z_REFVAL_P(object);
47636 				goto post_incdec_object;
47637 			}
47638 			if (IS_CV == IS_CV
47639 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47640 				ZVAL_UNDEFINED_OP1();
47641 			}
47642 			object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
47643 			if (UNEXPECTED(!object)) {
47644 				break;
47645 			}
47646 		}
47647 
47648 post_incdec_object:
47649 		/* here we are sure we are dealing with an object */
47650 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
47651 		if (EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, cache_slot)) != NULL)) {
47652 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
47653 				ZVAL_NULL(EX_VAR(opline->result.var));
47654 			} else {
47655 				if (IS_CV == IS_CONST) {
47656 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
47657 				} else {
47658 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
47659 				}
47660 
47661 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
47662 			}
47663 		} else {
47664 			zend_post_incdec_overloaded_property(object, property, cache_slot OPLINE_CC EXECUTE_DATA_CC);
47665 		}
47666 	} while (0);
47667 
47668 
47669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47670 }
47671 
ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47673 {
47674 	USE_OPLINE
47675 
47676 	zval *container, *dim, *value;
47677 
47678 	SAVE_OPLINE();
47679 	container = EX_VAR(opline->op1.var);
47680 	dim = EX_VAR(opline->op2.var);
47681 	if (IS_CV != IS_CONST) {
47682 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47683 fetch_dim_r_array:
47684 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
47685 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
47686 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
47687 			container = Z_REFVAL_P(container);
47688 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47689 				goto fetch_dim_r_array;
47690 			} else {
47691 				goto fetch_dim_r_slow;
47692 			}
47693 		} else {
47694 fetch_dim_r_slow:
47695 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
47696 				dim++;
47697 			}
47698 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
47699 		}
47700 	} else {
47701 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
47702 	}
47703 
47704 
47705 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47706 }
47707 
ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47709 {
47710 	USE_OPLINE
47711 	zend_free_op free_op1;
47712 	zval *container;
47713 
47714 	SAVE_OPLINE();
47715 	container = EX_VAR(opline->op1.var);
47716 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
47717 
47718 	if (IS_CV == IS_VAR) {
47719 		zval *result = EX_VAR(opline->result.var);
47720 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
47721 	}
47722 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47723 }
47724 
ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47726 {
47727 	USE_OPLINE
47728 	zend_free_op free_op1;
47729 	zval *container;
47730 
47731 	SAVE_OPLINE();
47732 	container = EX_VAR(opline->op1.var);
47733 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
47734 
47735 	if (IS_CV == IS_VAR) {
47736 		zval *result = EX_VAR(opline->result.var);
47737 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
47738 	}
47739 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47740 }
47741 
ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47743 {
47744 	USE_OPLINE
47745 
47746 	zval *container;
47747 
47748 	SAVE_OPLINE();
47749 	container = EX_VAR(opline->op1.var);
47750 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
47751 
47752 
47753 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47754 }
47755 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47757 {
47758 #if 0
47759 	USE_OPLINE
47760 #endif
47761 
47762 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
47763         if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
47764 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47765         }
47766 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47767 	} else {
47768 		if (IS_CV == IS_UNUSED) {
47769 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47770 		}
47771 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47772 	}
47773 }
47774 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47776 {
47777 	USE_OPLINE
47778 	zend_free_op free_op1;
47779 	zval *container;
47780 
47781 	SAVE_OPLINE();
47782 	container = EX_VAR(opline->op1.var);
47783 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
47784 
47785 	if (IS_CV == IS_VAR) {
47786 		zval *result = EX_VAR(opline->result.var);
47787 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
47788 	}
47789 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47790 }
47791 
ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47793 {
47794 	USE_OPLINE
47795 
47796 	zval *container;
47797 
47798 	zval *offset;
47799 	void **cache_slot = NULL;
47800 
47801 	SAVE_OPLINE();
47802 	container = EX_VAR(opline->op1.var);
47803 
47804 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47805 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47806 	}
47807 
47808 	offset = EX_VAR(opline->op2.var);
47809 
47810 	if (IS_CV == IS_CONST ||
47811 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
47812 	    do {
47813 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
47814 				container = Z_REFVAL_P(container);
47815 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47816 					break;
47817 				}
47818 			}
47819 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47820 				ZVAL_UNDEFINED_OP1();
47821 			}
47822 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
47823 				ZVAL_UNDEFINED_OP2();
47824 			}
47825 			zend_wrong_property_read(offset);
47826 			ZVAL_NULL(EX_VAR(opline->result.var));
47827 			goto fetch_obj_r_finish;
47828 		} while (0);
47829 	}
47830 
47831 	/* here we are sure we are dealing with an object */
47832 	do {
47833 		zend_object *zobj = Z_OBJ_P(container);
47834 		zval *retval;
47835 
47836 		if (IS_CV == IS_CONST) {
47837 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
47838 
47839 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
47840 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
47841 
47842 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
47843 					retval = OBJ_PROP(zobj, prop_offset);
47844 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
47845 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
47846 							goto fetch_obj_r_copy;
47847 						} else {
47848 fetch_obj_r_fast_copy:
47849 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
47850 							ZEND_VM_NEXT_OPCODE();
47851 						}
47852 					}
47853 				} else if (EXPECTED(zobj->properties != NULL)) {
47854 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
47855 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
47856 
47857 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
47858 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
47859 
47860 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
47861 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
47862 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
47863 						          EXPECTED(p->key != NULL) &&
47864 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
47865 								retval = &p->val;
47866 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
47867 									goto fetch_obj_r_copy;
47868 								} else {
47869 									goto fetch_obj_r_fast_copy;
47870 								}
47871 							}
47872 						}
47873 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
47874 					}
47875 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
47876 					if (EXPECTED(retval)) {
47877 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
47878 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
47879 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
47880 							goto fetch_obj_r_copy;
47881 						} else {
47882 							goto fetch_obj_r_fast_copy;
47883 						}
47884 					}
47885 				}
47886 			}
47887 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) {
47888 			ZVAL_UNDEFINED_OP2();
47889 		}
47890 
47891 		retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
47892 
47893 		if (retval != EX_VAR(opline->result.var)) {
47894 fetch_obj_r_copy:
47895 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
47896 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
47897 			zend_unwrap_reference(retval);
47898 		}
47899 	} while (0);
47900 
47901 fetch_obj_r_finish:
47902 
47903 
47904 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47905 }
47906 
ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47907 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47908 {
47909 	USE_OPLINE
47910 	zend_free_op free_op1;
47911 	zval *property, *container, *result;
47912 
47913 	SAVE_OPLINE();
47914 
47915 	container = EX_VAR(opline->op1.var);
47916 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47917 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47918 	}
47919 
47920 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47921 	result = EX_VAR(opline->result.var);
47922 	zend_fetch_property_address(
47923 		result, container, IS_CV, property, IS_CV,
47924 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
47925 		BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
47926 
47927 	if (IS_CV == IS_VAR) {
47928 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
47929 	}
47930 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47931 }
47932 
ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47933 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47934 {
47935 	USE_OPLINE
47936 	zend_free_op free_op1;
47937 	zval *property, *container, *result;
47938 
47939 	SAVE_OPLINE();
47940 	container = EX_VAR(opline->op1.var);
47941 
47942 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47943 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47944 	}
47945 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47946 	result = EX_VAR(opline->result.var);
47947 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
47948 
47949 	if (IS_CV == IS_VAR) {
47950 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
47951 	}
47952 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47953 }
47954 
ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47955 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47956 {
47957 	USE_OPLINE
47958 
47959 	zval *container;
47960 
47961 	zval *offset;
47962 	void **cache_slot = NULL;
47963 
47964 	SAVE_OPLINE();
47965 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
47966 
47967 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47968 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47969 	}
47970 
47971 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
47972 
47973 	if (IS_CV == IS_CONST ||
47974 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
47975 		do {
47976 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
47977 				container = Z_REFVAL_P(container);
47978 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47979 					break;
47980 				}
47981 			}
47982 			ZVAL_NULL(EX_VAR(opline->result.var));
47983 			goto fetch_obj_is_finish;
47984 		} while (0);
47985 	}
47986 
47987 	/* here we are sure we are dealing with an object */
47988 	do {
47989 		zend_object *zobj = Z_OBJ_P(container);
47990 		zval *retval;
47991 
47992 		if (IS_CV == IS_CONST) {
47993 			cache_slot = CACHE_ADDR(opline->extended_value);
47994 
47995 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
47996 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
47997 
47998 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
47999 					retval = OBJ_PROP(zobj, prop_offset);
48000 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
48001 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
48002 							goto fetch_obj_is_copy;
48003 						} else {
48004 fetch_obj_is_fast_copy:
48005 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
48006 							ZEND_VM_NEXT_OPCODE();
48007 						}
48008 					}
48009 				} else if (EXPECTED(zobj->properties != NULL)) {
48010 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
48011 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
48012 
48013 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
48014 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
48015 
48016 							if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
48017 						        (EXPECTED(p->key == Z_STR_P(offset)) ||
48018 						         (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
48019 						          EXPECTED(p->key != NULL) &&
48020 						          EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
48021 								retval = &p->val;
48022 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
48023 									goto fetch_obj_is_copy;
48024 								} else {
48025 									goto fetch_obj_is_fast_copy;
48026 								}
48027 							}
48028 						}
48029 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
48030 					}
48031 					retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1);
48032 					if (EXPECTED(retval)) {
48033 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
48034 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
48035 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
48036 							goto fetch_obj_is_copy;
48037 						} else {
48038 							goto fetch_obj_is_fast_copy;
48039 						}
48040 					}
48041 				}
48042 			}
48043 		}
48044 
48045 		retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
48046 
48047 		if (retval != EX_VAR(opline->result.var)) {
48048 fetch_obj_is_copy:
48049 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
48050 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
48051 			zend_unwrap_reference(retval);
48052 		}
48053 	} while (0);
48054 
48055 fetch_obj_is_finish:
48056 
48057 
48058 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48059 }
48060 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48061 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48062 {
48063 #if 0
48064 	USE_OPLINE
48065 #endif
48066 
48067 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
48068 		/* Behave like FETCH_OBJ_W */
48069 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
48070 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48071 		}
48072 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48073 	} else {
48074 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48075 	}
48076 }
48077 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48079 {
48080 	USE_OPLINE
48081 	zend_free_op free_op1;
48082 	zval *container, *property, *result;
48083 
48084 	SAVE_OPLINE();
48085 	container = EX_VAR(opline->op1.var);
48086 
48087 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
48088 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48089 	}
48090 
48091 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48092 	result = EX_VAR(opline->result.var);
48093 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
48094 
48095 	if (IS_CV == IS_VAR) {
48096 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result);
48097 	}
48098 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48099 }
48100 
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48102 {
48103 	USE_OPLINE
48104 
48105 	zval *object, *property, *value, tmp;
48106 
48107 	SAVE_OPLINE();
48108 	object = EX_VAR(opline->op1.var);
48109 
48110 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48111 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48112 	}
48113 
48114 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48115 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
48116 
48117 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48118 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48119 			object = Z_REFVAL_P(object);
48120 			goto assign_object;
48121 		}
48122 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
48123 		if (UNEXPECTED(!object)) {
48124 			value = &EG(uninitialized_zval);
48125 			goto free_and_exit_assign_obj;
48126 		}
48127 	}
48128 
48129 assign_object:
48130 	if (IS_CV == IS_CONST &&
48131 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
48132 		void **cache_slot = CACHE_ADDR(opline->extended_value);
48133 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
48134 		zend_object *zobj = Z_OBJ_P(object);
48135 		zval *property_val;
48136 
48137 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
48138 			property_val = OBJ_PROP(zobj, prop_offset);
48139 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
48140 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
48141 
48142 				if (UNEXPECTED(prop_info != NULL)) {
48143 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
48144 					goto free_and_exit_assign_obj;
48145 				} else {
48146 fast_assign_obj:
48147 					value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
48148 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48149 						ZVAL_COPY(EX_VAR(opline->result.var), value);
48150 					}
48151 					goto exit_assign_obj;
48152 				}
48153 			}
48154 		} else {
48155 			if (EXPECTED(zobj->properties != NULL)) {
48156 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
48157 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
48158 						GC_DELREF(zobj->properties);
48159 					}
48160 					zobj->properties = zend_array_dup(zobj->properties);
48161 				}
48162 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
48163 				if (property_val) {
48164 					goto fast_assign_obj;
48165 				}
48166 			}
48167 
48168 			if (!zobj->ce->__set) {
48169 
48170 				if (EXPECTED(zobj->properties == NULL)) {
48171 					rebuild_object_properties(zobj);
48172 				}
48173 				if (IS_CONST == IS_CONST) {
48174 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
48175 						Z_ADDREF_P(value);
48176 					}
48177 				} else if (IS_CONST != IS_TMP_VAR) {
48178 					if (Z_ISREF_P(value)) {
48179 						if (IS_CONST == IS_VAR) {
48180 							zend_reference *ref = Z_REF_P(value);
48181 							if (GC_DELREF(ref) == 0) {
48182 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
48183 								efree_size(ref, sizeof(zend_reference));
48184 								value = &tmp;
48185 							} else {
48186 								value = Z_REFVAL_P(value);
48187 								Z_TRY_ADDREF_P(value);
48188 							}
48189 						} else {
48190 							value = Z_REFVAL_P(value);
48191 							Z_TRY_ADDREF_P(value);
48192 						}
48193 					} else if (IS_CONST == IS_CV) {
48194 						Z_TRY_ADDREF_P(value);
48195 					}
48196 				}
48197 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
48198 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48199 					ZVAL_COPY(EX_VAR(opline->result.var), value);
48200 				}
48201 				goto exit_assign_obj;
48202 			}
48203 		}
48204 	}
48205 
48206 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
48207 		ZVAL_DEREF(value);
48208 	}
48209 
48210 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
48211 
48212 free_and_exit_assign_obj:
48213 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48214 		ZVAL_COPY(EX_VAR(opline->result.var), value);
48215 	}
48216 
48217 exit_assign_obj:
48218 
48219 
48220 	/* assign_obj has two opcodes! */
48221 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48222 }
48223 
48224 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48225 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48226 {
48227 	USE_OPLINE
48228 	zend_free_op free_op_data;
48229 	zval *object, *property, *value, tmp;
48230 
48231 	SAVE_OPLINE();
48232 	object = EX_VAR(opline->op1.var);
48233 
48234 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48235 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48236 	}
48237 
48238 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48239 	value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48240 
48241 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48242 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48243 			object = Z_REFVAL_P(object);
48244 			goto assign_object;
48245 		}
48246 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
48247 		if (UNEXPECTED(!object)) {
48248 			value = &EG(uninitialized_zval);
48249 			goto free_and_exit_assign_obj;
48250 		}
48251 	}
48252 
48253 assign_object:
48254 	if (IS_CV == IS_CONST &&
48255 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
48256 		void **cache_slot = CACHE_ADDR(opline->extended_value);
48257 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
48258 		zend_object *zobj = Z_OBJ_P(object);
48259 		zval *property_val;
48260 
48261 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
48262 			property_val = OBJ_PROP(zobj, prop_offset);
48263 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
48264 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
48265 
48266 				if (UNEXPECTED(prop_info != NULL)) {
48267 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
48268 					goto free_and_exit_assign_obj;
48269 				} else {
48270 fast_assign_obj:
48271 					value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
48272 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48273 						ZVAL_COPY(EX_VAR(opline->result.var), value);
48274 					}
48275 					goto exit_assign_obj;
48276 				}
48277 			}
48278 		} else {
48279 			if (EXPECTED(zobj->properties != NULL)) {
48280 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
48281 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
48282 						GC_DELREF(zobj->properties);
48283 					}
48284 					zobj->properties = zend_array_dup(zobj->properties);
48285 				}
48286 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
48287 				if (property_val) {
48288 					goto fast_assign_obj;
48289 				}
48290 			}
48291 
48292 			if (!zobj->ce->__set) {
48293 
48294 				if (EXPECTED(zobj->properties == NULL)) {
48295 					rebuild_object_properties(zobj);
48296 				}
48297 				if (IS_TMP_VAR == IS_CONST) {
48298 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
48299 						Z_ADDREF_P(value);
48300 					}
48301 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
48302 					if (Z_ISREF_P(value)) {
48303 						if (IS_TMP_VAR == IS_VAR) {
48304 							zend_reference *ref = Z_REF_P(value);
48305 							if (GC_DELREF(ref) == 0) {
48306 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
48307 								efree_size(ref, sizeof(zend_reference));
48308 								value = &tmp;
48309 							} else {
48310 								value = Z_REFVAL_P(value);
48311 								Z_TRY_ADDREF_P(value);
48312 							}
48313 						} else {
48314 							value = Z_REFVAL_P(value);
48315 							Z_TRY_ADDREF_P(value);
48316 						}
48317 					} else if (IS_TMP_VAR == IS_CV) {
48318 						Z_TRY_ADDREF_P(value);
48319 					}
48320 				}
48321 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
48322 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48323 					ZVAL_COPY(EX_VAR(opline->result.var), value);
48324 				}
48325 				goto exit_assign_obj;
48326 			}
48327 		}
48328 	}
48329 
48330 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
48331 		ZVAL_DEREF(value);
48332 	}
48333 
48334 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
48335 
48336 free_and_exit_assign_obj:
48337 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48338 		ZVAL_COPY(EX_VAR(opline->result.var), value);
48339 	}
48340 	zval_ptr_dtor_nogc(free_op_data);
48341 exit_assign_obj:
48342 
48343 
48344 	/* assign_obj has two opcodes! */
48345 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48346 }
48347 
48348 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48350 {
48351 	USE_OPLINE
48352 	zend_free_op free_op_data;
48353 	zval *object, *property, *value, tmp;
48354 
48355 	SAVE_OPLINE();
48356 	object = EX_VAR(opline->op1.var);
48357 
48358 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48359 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48360 	}
48361 
48362 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48363 	value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48364 
48365 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48366 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48367 			object = Z_REFVAL_P(object);
48368 			goto assign_object;
48369 		}
48370 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
48371 		if (UNEXPECTED(!object)) {
48372 			value = &EG(uninitialized_zval);
48373 			goto free_and_exit_assign_obj;
48374 		}
48375 	}
48376 
48377 assign_object:
48378 	if (IS_CV == IS_CONST &&
48379 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
48380 		void **cache_slot = CACHE_ADDR(opline->extended_value);
48381 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
48382 		zend_object *zobj = Z_OBJ_P(object);
48383 		zval *property_val;
48384 
48385 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
48386 			property_val = OBJ_PROP(zobj, prop_offset);
48387 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
48388 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
48389 
48390 				if (UNEXPECTED(prop_info != NULL)) {
48391 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
48392 					goto free_and_exit_assign_obj;
48393 				} else {
48394 fast_assign_obj:
48395 					value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
48396 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48397 						ZVAL_COPY(EX_VAR(opline->result.var), value);
48398 					}
48399 					goto exit_assign_obj;
48400 				}
48401 			}
48402 		} else {
48403 			if (EXPECTED(zobj->properties != NULL)) {
48404 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
48405 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
48406 						GC_DELREF(zobj->properties);
48407 					}
48408 					zobj->properties = zend_array_dup(zobj->properties);
48409 				}
48410 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
48411 				if (property_val) {
48412 					goto fast_assign_obj;
48413 				}
48414 			}
48415 
48416 			if (!zobj->ce->__set) {
48417 
48418 				if (EXPECTED(zobj->properties == NULL)) {
48419 					rebuild_object_properties(zobj);
48420 				}
48421 				if (IS_VAR == IS_CONST) {
48422 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
48423 						Z_ADDREF_P(value);
48424 					}
48425 				} else if (IS_VAR != IS_TMP_VAR) {
48426 					if (Z_ISREF_P(value)) {
48427 						if (IS_VAR == IS_VAR) {
48428 							zend_reference *ref = Z_REF_P(value);
48429 							if (GC_DELREF(ref) == 0) {
48430 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
48431 								efree_size(ref, sizeof(zend_reference));
48432 								value = &tmp;
48433 							} else {
48434 								value = Z_REFVAL_P(value);
48435 								Z_TRY_ADDREF_P(value);
48436 							}
48437 						} else {
48438 							value = Z_REFVAL_P(value);
48439 							Z_TRY_ADDREF_P(value);
48440 						}
48441 					} else if (IS_VAR == IS_CV) {
48442 						Z_TRY_ADDREF_P(value);
48443 					}
48444 				}
48445 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
48446 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48447 					ZVAL_COPY(EX_VAR(opline->result.var), value);
48448 				}
48449 				goto exit_assign_obj;
48450 			}
48451 		}
48452 	}
48453 
48454 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
48455 		ZVAL_DEREF(value);
48456 	}
48457 
48458 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
48459 
48460 free_and_exit_assign_obj:
48461 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48462 		ZVAL_COPY(EX_VAR(opline->result.var), value);
48463 	}
48464 	zval_ptr_dtor_nogc(free_op_data);
48465 exit_assign_obj:
48466 
48467 
48468 	/* assign_obj has two opcodes! */
48469 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48470 }
48471 
48472 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48473 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48474 {
48475 	USE_OPLINE
48476 
48477 	zval *object, *property, *value, tmp;
48478 
48479 	SAVE_OPLINE();
48480 	object = EX_VAR(opline->op1.var);
48481 
48482 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
48483 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48484 	}
48485 
48486 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48487 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
48488 
48489 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
48490 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
48491 			object = Z_REFVAL_P(object);
48492 			goto assign_object;
48493 		}
48494 		object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
48495 		if (UNEXPECTED(!object)) {
48496 			value = &EG(uninitialized_zval);
48497 			goto free_and_exit_assign_obj;
48498 		}
48499 	}
48500 
48501 assign_object:
48502 	if (IS_CV == IS_CONST &&
48503 	    EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) {
48504 		void **cache_slot = CACHE_ADDR(opline->extended_value);
48505 		uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
48506 		zend_object *zobj = Z_OBJ_P(object);
48507 		zval *property_val;
48508 
48509 		if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
48510 			property_val = OBJ_PROP(zobj, prop_offset);
48511 			if (Z_TYPE_P(property_val) != IS_UNDEF) {
48512 				zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
48513 
48514 				if (UNEXPECTED(prop_info != NULL)) {
48515 					value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
48516 					goto free_and_exit_assign_obj;
48517 				} else {
48518 fast_assign_obj:
48519 					value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
48520 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48521 						ZVAL_COPY(EX_VAR(opline->result.var), value);
48522 					}
48523 					goto exit_assign_obj;
48524 				}
48525 			}
48526 		} else {
48527 			if (EXPECTED(zobj->properties != NULL)) {
48528 				if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
48529 					if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
48530 						GC_DELREF(zobj->properties);
48531 					}
48532 					zobj->properties = zend_array_dup(zobj->properties);
48533 				}
48534 				property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
48535 				if (property_val) {
48536 					goto fast_assign_obj;
48537 				}
48538 			}
48539 
48540 			if (!zobj->ce->__set) {
48541 
48542 				if (EXPECTED(zobj->properties == NULL)) {
48543 					rebuild_object_properties(zobj);
48544 				}
48545 				if (IS_CV == IS_CONST) {
48546 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
48547 						Z_ADDREF_P(value);
48548 					}
48549 				} else if (IS_CV != IS_TMP_VAR) {
48550 					if (Z_ISREF_P(value)) {
48551 						if (IS_CV == IS_VAR) {
48552 							zend_reference *ref = Z_REF_P(value);
48553 							if (GC_DELREF(ref) == 0) {
48554 								ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
48555 								efree_size(ref, sizeof(zend_reference));
48556 								value = &tmp;
48557 							} else {
48558 								value = Z_REFVAL_P(value);
48559 								Z_TRY_ADDREF_P(value);
48560 							}
48561 						} else {
48562 							value = Z_REFVAL_P(value);
48563 							Z_TRY_ADDREF_P(value);
48564 						}
48565 					} else if (IS_CV == IS_CV) {
48566 						Z_TRY_ADDREF_P(value);
48567 					}
48568 				}
48569 				zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
48570 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48571 					ZVAL_COPY(EX_VAR(opline->result.var), value);
48572 				}
48573 				goto exit_assign_obj;
48574 			}
48575 		}
48576 	}
48577 
48578 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
48579 		ZVAL_DEREF(value);
48580 	}
48581 
48582 	value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
48583 
48584 free_and_exit_assign_obj:
48585 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48586 		ZVAL_COPY(EX_VAR(opline->result.var), value);
48587 	}
48588 
48589 exit_assign_obj:
48590 
48591 
48592 	/* assign_obj has two opcodes! */
48593 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48594 }
48595 
48596 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48598 {
48599 	USE_OPLINE
48600 
48601 	zval *object_ptr, *orig_object_ptr;
48602 	zend_free_op free_op_data;
48603 	zval *value;
48604 	zval *variable_ptr;
48605 	zval *dim;
48606 
48607 	SAVE_OPLINE();
48608 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48609 
48610 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48611 try_assign_dim_array:
48612 		value = RT_CONSTANT((opline+1), (opline+1)->op1);
48613 		SEPARATE_ARRAY(object_ptr);
48614 		if (IS_CV == IS_UNUSED) {
48615 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
48616 				ZVAL_DEREF(value);
48617 			}
48618 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48619 			if (UNEXPECTED(variable_ptr == NULL)) {
48620 				zend_cannot_add_element();
48621 				goto assign_dim_error;
48622 			} else if (IS_CONST == IS_CV) {
48623 				if (Z_REFCOUNTED_P(value)) {
48624 					Z_ADDREF_P(value);
48625 				}
48626 			} else if (IS_CONST == IS_VAR) {
48627 				if (value != free_op_data) {
48628 					if (Z_REFCOUNTED_P(value)) {
48629 						Z_ADDREF_P(value);
48630 					}
48631 
48632 				}
48633 			} else if (IS_CONST == IS_CONST) {
48634 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48635 					Z_ADDREF_P(value);
48636 				}
48637 			}
48638 		} else {
48639 			dim = EX_VAR(opline->op2.var);
48640 			if (IS_CV == IS_CONST) {
48641 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48642 			} else {
48643 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48644 			}
48645 			if (UNEXPECTED(variable_ptr == NULL)) {
48646 				goto assign_dim_error;
48647 			}
48648 			value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
48649 		}
48650 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48651 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48652 		}
48653 	} else {
48654 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48655 			object_ptr = Z_REFVAL_P(object_ptr);
48656 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48657 				goto try_assign_dim_array;
48658 			}
48659 		}
48660 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48661 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48662 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48663 
48664 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48665 				dim++;
48666 			}
48667 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48668 
48669 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48670 			if (IS_CV == IS_UNUSED) {
48671 				zend_use_new_element_for_string();
48672 
48673 				UNDEF_RESULT();
48674 			} else {
48675 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48676 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
48677 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48678 
48679 			}
48680 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48681 			if (Z_ISREF_P(orig_object_ptr)
48682 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48683 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48684 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48685 
48686 				UNDEF_RESULT();
48687 			} else {
48688 				ZVAL_ARR(object_ptr, zend_new_array(8));
48689 				goto try_assign_dim_array;
48690 			}
48691 		} else {
48692 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
48693 				zend_use_scalar_as_array();
48694 			}
48695 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48696 assign_dim_error:
48697 
48698 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48699 				ZVAL_NULL(EX_VAR(opline->result.var));
48700 			}
48701 		}
48702 	}
48703 	if (IS_CV != IS_UNUSED) {
48704 
48705 	}
48706 
48707 	/* assign_dim has two opcodes! */
48708 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48709 }
48710 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48711 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48712 {
48713 	USE_OPLINE
48714 
48715 	zval *object_ptr, *orig_object_ptr;
48716 	zend_free_op free_op_data;
48717 	zval *value;
48718 	zval *variable_ptr;
48719 	zval *dim;
48720 
48721 	SAVE_OPLINE();
48722 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48723 
48724 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48725 try_assign_dim_array:
48726 		value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48727 		SEPARATE_ARRAY(object_ptr);
48728 		if (IS_CV == IS_UNUSED) {
48729 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
48730 				ZVAL_DEREF(value);
48731 			}
48732 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48733 			if (UNEXPECTED(variable_ptr == NULL)) {
48734 				zend_cannot_add_element();
48735 				goto assign_dim_error;
48736 			} else if (IS_TMP_VAR == IS_CV) {
48737 				if (Z_REFCOUNTED_P(value)) {
48738 					Z_ADDREF_P(value);
48739 				}
48740 			} else if (IS_TMP_VAR == IS_VAR) {
48741 				if (value != free_op_data) {
48742 					if (Z_REFCOUNTED_P(value)) {
48743 						Z_ADDREF_P(value);
48744 					}
48745 					zval_ptr_dtor_nogc(free_op_data);
48746 				}
48747 			} else if (IS_TMP_VAR == IS_CONST) {
48748 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48749 					Z_ADDREF_P(value);
48750 				}
48751 			}
48752 		} else {
48753 			dim = EX_VAR(opline->op2.var);
48754 			if (IS_CV == IS_CONST) {
48755 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48756 			} else {
48757 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48758 			}
48759 			if (UNEXPECTED(variable_ptr == NULL)) {
48760 				goto assign_dim_error;
48761 			}
48762 			value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
48763 		}
48764 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48765 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48766 		}
48767 	} else {
48768 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48769 			object_ptr = Z_REFVAL_P(object_ptr);
48770 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48771 				goto try_assign_dim_array;
48772 			}
48773 		}
48774 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48775 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48776 			value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48777 
48778 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48779 				dim++;
48780 			}
48781 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48782 
48783 			zval_ptr_dtor_nogc(free_op_data);
48784 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48785 			if (IS_CV == IS_UNUSED) {
48786 				zend_use_new_element_for_string();
48787 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48788 				UNDEF_RESULT();
48789 			} else {
48790 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48791 				value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48792 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48793 				zval_ptr_dtor_nogc(free_op_data);
48794 			}
48795 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48796 			if (Z_ISREF_P(orig_object_ptr)
48797 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48798 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48799 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48800 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48801 				UNDEF_RESULT();
48802 			} else {
48803 				ZVAL_ARR(object_ptr, zend_new_array(8));
48804 				goto try_assign_dim_array;
48805 			}
48806 		} else {
48807 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
48808 				zend_use_scalar_as_array();
48809 			}
48810 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48811 assign_dim_error:
48812 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48813 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48814 				ZVAL_NULL(EX_VAR(opline->result.var));
48815 			}
48816 		}
48817 	}
48818 	if (IS_CV != IS_UNUSED) {
48819 
48820 	}
48821 
48822 	/* assign_dim has two opcodes! */
48823 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48824 }
48825 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48826 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48827 {
48828 	USE_OPLINE
48829 
48830 	zval *object_ptr, *orig_object_ptr;
48831 	zend_free_op free_op_data;
48832 	zval *value;
48833 	zval *variable_ptr;
48834 	zval *dim;
48835 
48836 	SAVE_OPLINE();
48837 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48838 
48839 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48840 try_assign_dim_array:
48841 		value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48842 		SEPARATE_ARRAY(object_ptr);
48843 		if (IS_CV == IS_UNUSED) {
48844 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
48845 				ZVAL_DEREF(value);
48846 			}
48847 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48848 			if (UNEXPECTED(variable_ptr == NULL)) {
48849 				zend_cannot_add_element();
48850 				goto assign_dim_error;
48851 			} else if (IS_VAR == IS_CV) {
48852 				if (Z_REFCOUNTED_P(value)) {
48853 					Z_ADDREF_P(value);
48854 				}
48855 			} else if (IS_VAR == IS_VAR) {
48856 				if (value != free_op_data) {
48857 					if (Z_REFCOUNTED_P(value)) {
48858 						Z_ADDREF_P(value);
48859 					}
48860 					zval_ptr_dtor_nogc(free_op_data);
48861 				}
48862 			} else if (IS_VAR == IS_CONST) {
48863 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48864 					Z_ADDREF_P(value);
48865 				}
48866 			}
48867 		} else {
48868 			dim = EX_VAR(opline->op2.var);
48869 			if (IS_CV == IS_CONST) {
48870 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48871 			} else {
48872 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48873 			}
48874 			if (UNEXPECTED(variable_ptr == NULL)) {
48875 				goto assign_dim_error;
48876 			}
48877 			value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
48878 		}
48879 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48880 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48881 		}
48882 	} else {
48883 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48884 			object_ptr = Z_REFVAL_P(object_ptr);
48885 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48886 				goto try_assign_dim_array;
48887 			}
48888 		}
48889 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48890 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48891 			value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48892 
48893 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48894 				dim++;
48895 			}
48896 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48897 
48898 			zval_ptr_dtor_nogc(free_op_data);
48899 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48900 			if (IS_CV == IS_UNUSED) {
48901 				zend_use_new_element_for_string();
48902 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48903 				UNDEF_RESULT();
48904 			} else {
48905 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48906 				value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
48907 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48908 				zval_ptr_dtor_nogc(free_op_data);
48909 			}
48910 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48911 			if (Z_ISREF_P(orig_object_ptr)
48912 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48913 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48914 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48915 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48916 				UNDEF_RESULT();
48917 			} else {
48918 				ZVAL_ARR(object_ptr, zend_new_array(8));
48919 				goto try_assign_dim_array;
48920 			}
48921 		} else {
48922 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
48923 				zend_use_scalar_as_array();
48924 			}
48925 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
48926 assign_dim_error:
48927 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48928 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48929 				ZVAL_NULL(EX_VAR(opline->result.var));
48930 			}
48931 		}
48932 	}
48933 	if (IS_CV != IS_UNUSED) {
48934 
48935 	}
48936 
48937 	/* assign_dim has two opcodes! */
48938 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48939 }
48940 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48941 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48942 {
48943 	USE_OPLINE
48944 
48945 	zval *object_ptr, *orig_object_ptr;
48946 	zend_free_op free_op_data;
48947 	zval *value;
48948 	zval *variable_ptr;
48949 	zval *dim;
48950 
48951 	SAVE_OPLINE();
48952 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48953 
48954 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48955 try_assign_dim_array:
48956 		value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
48957 		SEPARATE_ARRAY(object_ptr);
48958 		if (IS_CV == IS_UNUSED) {
48959 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
48960 				ZVAL_DEREF(value);
48961 			}
48962 			variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48963 			if (UNEXPECTED(variable_ptr == NULL)) {
48964 				zend_cannot_add_element();
48965 				goto assign_dim_error;
48966 			} else if (IS_CV == IS_CV) {
48967 				if (Z_REFCOUNTED_P(value)) {
48968 					Z_ADDREF_P(value);
48969 				}
48970 			} else if (IS_CV == IS_VAR) {
48971 				if (value != free_op_data) {
48972 					if (Z_REFCOUNTED_P(value)) {
48973 						Z_ADDREF_P(value);
48974 					}
48975 
48976 				}
48977 			} else if (IS_CV == IS_CONST) {
48978 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48979 					Z_ADDREF_P(value);
48980 				}
48981 			}
48982 		} else {
48983 			dim = EX_VAR(opline->op2.var);
48984 			if (IS_CV == IS_CONST) {
48985 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48986 			} else {
48987 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48988 			}
48989 			if (UNEXPECTED(variable_ptr == NULL)) {
48990 				goto assign_dim_error;
48991 			}
48992 			value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
48993 		}
48994 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48995 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48996 		}
48997 	} else {
48998 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48999 			object_ptr = Z_REFVAL_P(object_ptr);
49000 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49001 				goto try_assign_dim_array;
49002 			}
49003 		}
49004 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
49005 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49006 			value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
49007 
49008 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49009 				dim++;
49010 			}
49011 			zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49012 
49013 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49014 			if (IS_CV == IS_UNUSED) {
49015 				zend_use_new_element_for_string();
49016 
49017 				UNDEF_RESULT();
49018 			} else {
49019 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49020 				value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
49021 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49022 
49023 			}
49024 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
49025 			if (Z_ISREF_P(orig_object_ptr)
49026 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
49027 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
49028 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49029 
49030 				UNDEF_RESULT();
49031 			} else {
49032 				ZVAL_ARR(object_ptr, zend_new_array(8));
49033 				goto try_assign_dim_array;
49034 			}
49035 		} else {
49036 			if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
49037 				zend_use_scalar_as_array();
49038 			}
49039 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49040 assign_dim_error:
49041 
49042 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49043 				ZVAL_NULL(EX_VAR(opline->result.var));
49044 			}
49045 		}
49046 	}
49047 	if (IS_CV != IS_UNUSED) {
49048 
49049 	}
49050 
49051 	/* assign_dim has two opcodes! */
49052 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49053 }
49054 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49056 {
49057 	USE_OPLINE
49058 
49059 	zval *value;
49060 	zval *variable_ptr;
49061 
49062 	SAVE_OPLINE();
49063 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49064 	variable_ptr = EX_VAR(opline->op1.var);
49065 
49066 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
49067 
49068 		if (UNEXPECTED(0)) {
49069 			ZVAL_NULL(EX_VAR(opline->result.var));
49070 		}
49071 	} else {
49072 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
49073 		if (UNEXPECTED(0)) {
49074 			ZVAL_COPY(EX_VAR(opline->result.var), value);
49075 		}
49076 
49077 		/* zend_assign_to_variable() always takes care of op2, never free it! */
49078 	}
49079 
49080 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49081 }
49082 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49083 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49084 {
49085 	USE_OPLINE
49086 
49087 	zval *value;
49088 	zval *variable_ptr;
49089 
49090 	SAVE_OPLINE();
49091 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49092 	variable_ptr = EX_VAR(opline->op1.var);
49093 
49094 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
49095 
49096 		if (UNEXPECTED(1)) {
49097 			ZVAL_NULL(EX_VAR(opline->result.var));
49098 		}
49099 	} else {
49100 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
49101 		if (UNEXPECTED(1)) {
49102 			ZVAL_COPY(EX_VAR(opline->result.var), value);
49103 		}
49104 
49105 		/* zend_assign_to_variable() always takes care of op2, never free it! */
49106 	}
49107 
49108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49109 }
49110 
ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49112 {
49113 	USE_OPLINE
49114 
49115 	zval *variable_ptr;
49116 	zval *value_ptr;
49117 
49118 	SAVE_OPLINE();
49119 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
49120 	variable_ptr = EX_VAR(opline->op1.var);
49121 
49122 	if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
49123 		variable_ptr = &EG(uninitialized_zval);
49124 	} else if (IS_CV == IS_VAR &&
49125 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
49126 
49127 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
49128 		variable_ptr = &EG(uninitialized_zval);
49129 	} else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) {
49130 		variable_ptr = &EG(uninitialized_zval);
49131 	} else if (IS_CV == IS_VAR &&
49132 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
49133 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
49134 
49135 		variable_ptr = zend_wrong_assign_to_variable_reference(
49136 			variable_ptr, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49137 	} else {
49138 		zend_assign_to_variable_reference(variable_ptr, value_ptr);
49139 	}
49140 
49141 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49142 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
49143 	}
49144 
49145 
49146 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49147 }
49148 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49149 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49150 {
49151 	USE_OPLINE
49152 	zend_free_op free_op_data;
49153 	zval *property, *container, *value_ptr;
49154 
49155 	SAVE_OPLINE();
49156 
49157 	container = EX_VAR(opline->op1.var);
49158 
49159 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49160 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49161 	}
49162 
49163 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49164 
49165 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
49166 
49167 	if (1) {
49168 		if (IS_CV == IS_UNUSED) {
49169 			if (IS_CV == IS_CONST) {
49170 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49171 			} else {
49172 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49173 			}
49174 		} else {
49175 			if (IS_CV == IS_CONST) {
49176 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49177 			} else {
49178 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49179 			}
49180 		}
49181 	} else {
49182 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49183 	}
49184 
49185 
49186 	if (UNEXPECTED(free_op_data)) {zval_ptr_dtor_nogc(free_op_data);};
49187 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49188 }
49189 
49190 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49192 {
49193 	USE_OPLINE
49194 
49195 	zval *property, *container, *value_ptr;
49196 
49197 	SAVE_OPLINE();
49198 
49199 	container = EX_VAR(opline->op1.var);
49200 
49201 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49202 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49203 	}
49204 
49205 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49206 
49207 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
49208 
49209 	if (1) {
49210 		if (IS_CV == IS_UNUSED) {
49211 			if (IS_CV == IS_CONST) {
49212 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49213 			} else {
49214 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49215 			}
49216 		} else {
49217 			if (IS_CV == IS_CONST) {
49218 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49219 			} else {
49220 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49221 			}
49222 		}
49223 	} else {
49224 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
49225 	}
49226 
49227 
49228 
49229 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49230 }
49231 
49232 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49233 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49234 {
49235 	USE_OPLINE
49236 
49237 	zval *op1, *op2;
49238 	zend_string *op1_str, *op2_str, *str;
49239 
49240 
49241 	op1 = EX_VAR(opline->op1.var);
49242 	op2 = EX_VAR(opline->op2.var);
49243 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
49244 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
49245 		zend_string *op1_str = Z_STR_P(op1);
49246 		zend_string *op2_str = Z_STR_P(op2);
49247 		zend_string *str;
49248 
49249 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
49250 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
49251 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
49252 			} else {
49253 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
49254 			}
49255 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49256 				zend_string_release_ex(op1_str, 0);
49257 			}
49258 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
49259 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
49260 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
49261 			} else {
49262 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
49263 			}
49264 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49265 				zend_string_release_ex(op2_str, 0);
49266 			}
49267 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
49268 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
49269 		    size_t len = ZSTR_LEN(op1_str);
49270 
49271 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
49272 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
49273 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
49274 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49275 				zend_string_release_ex(op2_str, 0);
49276 			}
49277 		} else {
49278 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
49279 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
49280 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
49281 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
49282 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49283 				zend_string_release_ex(op1_str, 0);
49284 			}
49285 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
49286 				zend_string_release_ex(op2_str, 0);
49287 			}
49288 		}
49289 		ZEND_VM_NEXT_OPCODE();
49290 	}
49291 
49292 	SAVE_OPLINE();
49293 	if (IS_CV == IS_CONST) {
49294 		op1_str = Z_STR_P(op1);
49295 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
49296 		op1_str = zend_string_copy(Z_STR_P(op1));
49297 	} else {
49298 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
49299 			ZVAL_UNDEFINED_OP1();
49300 		}
49301 		op1_str = zval_get_string_func(op1);
49302 	}
49303 	if (IS_CV == IS_CONST) {
49304 		op2_str = Z_STR_P(op2);
49305 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
49306 		op2_str = zend_string_copy(Z_STR_P(op2));
49307 	} else {
49308 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
49309 			ZVAL_UNDEFINED_OP2();
49310 		}
49311 		op2_str = zval_get_string_func(op2);
49312 	}
49313 	do {
49314 		if (IS_CV != IS_CONST) {
49315 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
49316 				if (IS_CV == IS_CONST) {
49317 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
49318 						GC_ADDREF(op2_str);
49319 					}
49320 				}
49321 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
49322 				zend_string_release_ex(op1_str, 0);
49323 				break;
49324 			}
49325 		}
49326 		if (IS_CV != IS_CONST) {
49327 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
49328 				if (IS_CV == IS_CONST) {
49329 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
49330 						GC_ADDREF(op1_str);
49331 					}
49332 				}
49333 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
49334 				zend_string_release_ex(op2_str, 0);
49335 				break;
49336 			}
49337 		}
49338 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
49339 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
49340 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
49341 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
49342 		if (IS_CV != IS_CONST) {
49343 			zend_string_release_ex(op1_str, 0);
49344 		}
49345 		if (IS_CV != IS_CONST) {
49346 			zend_string_release_ex(op2_str, 0);
49347 		}
49348 	} while (0);
49349 
49350 
49351 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49352 }
49353 
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49355 {
49356 	USE_OPLINE
49357 	zval *function_name;
49358 	zend_free_op free_op1;
49359 	zval *object;
49360 	zend_function *fbc;
49361 	zend_class_entry *called_scope;
49362 	zend_object *obj;
49363 	zend_execute_data *call;
49364 	uint32_t call_info;
49365 
49366 	SAVE_OPLINE();
49367 
49368 	object = EX_VAR(opline->op1.var);
49369 
49370 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49371 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49372 	}
49373 
49374 	if (IS_CV != IS_CONST) {
49375 		function_name = EX_VAR(opline->op2.var);
49376 	}
49377 
49378 	if (IS_CV != IS_CONST &&
49379 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
49380 		do {
49381 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
49382 				function_name = Z_REFVAL_P(function_name);
49383 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
49384 					break;
49385 				}
49386 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
49387 				ZVAL_UNDEFINED_OP2();
49388 				if (UNEXPECTED(EG(exception) != NULL)) {
49389 
49390 					HANDLE_EXCEPTION();
49391 				}
49392 			}
49393 			zend_throw_error(NULL, "Method name must be a string");
49394 
49395 
49396 			HANDLE_EXCEPTION();
49397 		} while (0);
49398 	}
49399 
49400 	if (IS_CV != IS_UNUSED) {
49401 		do {
49402 			if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
49403 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
49404 					object = Z_REFVAL_P(object);
49405 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
49406 						break;
49407 					}
49408 				}
49409 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
49410 					object = ZVAL_UNDEFINED_OP1();
49411 					if (UNEXPECTED(EG(exception) != NULL)) {
49412 						if (IS_CV != IS_CONST) {
49413 
49414 						}
49415 						HANDLE_EXCEPTION();
49416 					}
49417 				}
49418 				if (IS_CV == IS_CONST) {
49419 					function_name = EX_VAR(opline->op2.var);
49420 				}
49421 				zend_invalid_method_call(object, function_name);
49422 
49423 
49424 				HANDLE_EXCEPTION();
49425 			}
49426 		} while (0);
49427 	}
49428 
49429 	obj = Z_OBJ_P(object);
49430 	called_scope = obj->ce;
49431 
49432 	if (IS_CV == IS_CONST &&
49433 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
49434 	    fbc = CACHED_PTR(opline->result.num + sizeof(void*));
49435 	} else {
49436 	    zend_object *orig_obj = obj;
49437 
49438 		if (IS_CV == IS_CONST) {
49439 			function_name = EX_VAR(opline->op2.var);
49440 		}
49441 
49442 		/* First, locate the function. */
49443 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
49444 		if (UNEXPECTED(fbc == NULL)) {
49445 			if (EXPECTED(!EG(exception))) {
49446 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
49447 			}
49448 
49449 
49450 			HANDLE_EXCEPTION();
49451 		}
49452 		if (IS_CV == IS_CONST &&
49453 		    EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
49454 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
49455 		    EXPECTED(obj == orig_obj)) {
49456 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
49457 		}
49458 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
49459 			/* Reset "object" to trigger reference counting */
49460 			object = NULL;
49461 		}
49462 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
49463 			init_func_run_time_cache(&fbc->op_array);
49464 		}
49465 	}
49466 
49467 	if (IS_CV != IS_CONST) {
49468 
49469 	}
49470 
49471 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
49472 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
49473 
49474 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
49475 			HANDLE_EXCEPTION();
49476 		}
49477 		/* call static method */
49478 		obj = (zend_object*)called_scope;
49479 		call_info = ZEND_CALL_NESTED_FUNCTION;
49480 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
49481 		if (IS_CV == IS_CV) {
49482 			GC_ADDREF(obj); /* For $this pointer */
49483 		} else if (free_op1 != object) {
49484 			GC_ADDREF(obj); /* For $this pointer */
49485 
49486 		}
49487 		/* CV may be changed indirectly (e.g. when it's a reference) */
49488 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
49489 	}
49490 
49491 	call = zend_vm_stack_push_call_frame(call_info,
49492 		fbc, opline->extended_value, obj);
49493 	call->prev_execute_data = EX(call);
49494 	EX(call) = call;
49495 
49496 	ZEND_VM_NEXT_OPCODE();
49497 }
49498 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49499 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49500 {
49501 	USE_OPLINE
49502 
49503 	zval *expr_ptr, new_expr;
49504 
49505 	SAVE_OPLINE();
49506 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
49507 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
49508 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49509 		if (Z_ISREF_P(expr_ptr)) {
49510 			Z_ADDREF_P(expr_ptr);
49511 		} else {
49512 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
49513 		}
49514 
49515 	} else {
49516 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49517 		if (IS_CV == IS_TMP_VAR) {
49518 			/* pass */
49519 		} else if (IS_CV == IS_CONST) {
49520 			Z_TRY_ADDREF_P(expr_ptr);
49521 		} else if (IS_CV == IS_CV) {
49522 			ZVAL_DEREF(expr_ptr);
49523 			Z_TRY_ADDREF_P(expr_ptr);
49524 		} else /* if (IS_CV == IS_VAR) */ {
49525 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
49526 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
49527 
49528 				expr_ptr = Z_REFVAL_P(expr_ptr);
49529 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49530 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
49531 					expr_ptr = &new_expr;
49532 					efree_size(ref, sizeof(zend_reference));
49533 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
49534 					Z_ADDREF_P(expr_ptr);
49535 				}
49536 			}
49537 		}
49538 	}
49539 
49540 	if (IS_CV != IS_UNUSED) {
49541 
49542 		zval *offset = EX_VAR(opline->op2.var);
49543 		zend_string *str;
49544 		zend_ulong hval;
49545 
49546 add_again:
49547 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
49548 			str = Z_STR_P(offset);
49549 			if (IS_CV != IS_CONST) {
49550 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
49551 					goto num_index;
49552 				}
49553 			}
49554 str_index:
49555 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
49556 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
49557 			hval = Z_LVAL_P(offset);
49558 num_index:
49559 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
49560 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
49561 			offset = Z_REFVAL_P(offset);
49562 			goto add_again;
49563 		} else if (Z_TYPE_P(offset) == IS_NULL) {
49564 			str = ZSTR_EMPTY_ALLOC();
49565 			goto str_index;
49566 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
49567 			hval = zend_dval_to_lval(Z_DVAL_P(offset));
49568 			goto num_index;
49569 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
49570 			hval = 0;
49571 			goto num_index;
49572 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
49573 			hval = 1;
49574 			goto num_index;
49575 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
49576 			zend_use_resource_as_offset(offset);
49577 			hval = Z_RES_HANDLE_P(offset);
49578 			goto num_index;
49579 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
49580 			ZVAL_UNDEFINED_OP2();
49581 			str = ZSTR_EMPTY_ALLOC();
49582 			goto str_index;
49583 		} else {
49584 			zend_illegal_offset();
49585 			zval_ptr_dtor_nogc(expr_ptr);
49586 		}
49587 
49588 	} else {
49589 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
49590 			zend_cannot_add_element();
49591 			zval_ptr_dtor_nogc(expr_ptr);
49592 		}
49593 	}
49594 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49595 }
49596 
ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49597 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49598 {
49599 	zval *array;
49600 	uint32_t size;
49601 	USE_OPLINE
49602 
49603 	array = EX_VAR(opline->result.var);
49604 	if (IS_CV != IS_UNUSED) {
49605 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
49606 		ZVAL_ARR(array, zend_new_array(size));
49607 		/* Explicitly initialize array as not-packed if flag is set */
49608 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
49609 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
49610 		}
49611 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49612 	} else {
49613 		ZVAL_ARR(array, zend_new_array(0));
49614 		ZEND_VM_NEXT_OPCODE();
49615 	}
49616 }
49617 
ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49618 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49619 {
49620 	USE_OPLINE
49621 
49622 	zval *container;
49623 	zval *offset;
49624 	zend_ulong hval;
49625 	zend_string *key;
49626 
49627 	SAVE_OPLINE();
49628 	container = EX_VAR(opline->op1.var);
49629 	offset = EX_VAR(opline->op2.var);
49630 
49631 	do {
49632 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49633 			HashTable *ht;
49634 
49635 unset_dim_array:
49636 			SEPARATE_ARRAY(container);
49637 			ht = Z_ARRVAL_P(container);
49638 offset_again:
49639 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
49640 				key = Z_STR_P(offset);
49641 				if (IS_CV != IS_CONST) {
49642 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
49643 						goto num_index_dim;
49644 					}
49645 				}
49646 str_index_dim:
49647 				if (ht == &EG(symbol_table)) {
49648 					zend_delete_global_variable(key);
49649 				} else {
49650 					zend_hash_del(ht, key);
49651 				}
49652 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
49653 				hval = Z_LVAL_P(offset);
49654 num_index_dim:
49655 				zend_hash_index_del(ht, hval);
49656 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
49657 				offset = Z_REFVAL_P(offset);
49658 				goto offset_again;
49659 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
49660 				hval = zend_dval_to_lval(Z_DVAL_P(offset));
49661 				goto num_index_dim;
49662 			} else if (Z_TYPE_P(offset) == IS_NULL) {
49663 				key = ZSTR_EMPTY_ALLOC();
49664 				goto str_index_dim;
49665 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
49666 				hval = 0;
49667 				goto num_index_dim;
49668 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
49669 				hval = 1;
49670 				goto num_index_dim;
49671 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
49672 				hval = Z_RES_HANDLE_P(offset);
49673 				goto num_index_dim;
49674 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
49675 				ZVAL_UNDEFINED_OP2();
49676 				key = ZSTR_EMPTY_ALLOC();
49677 				goto str_index_dim;
49678 			} else {
49679 				zend_error(E_WARNING, "Illegal offset type in unset");
49680 			}
49681 			break;
49682 		} else if (Z_ISREF_P(container)) {
49683 			container = Z_REFVAL_P(container);
49684 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49685 				goto unset_dim_array;
49686 			}
49687 		}
49688 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49689 			container = ZVAL_UNDEFINED_OP1();
49690 		}
49691 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
49692 			offset = ZVAL_UNDEFINED_OP2();
49693 		}
49694 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
49695 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
49696 				offset++;
49697 			}
49698 			Z_OBJ_HT_P(container)->unset_dimension(container, offset);
49699 		} else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
49700 			zend_throw_error(NULL, "Cannot unset string offsets");
49701 		}
49702 	} while (0);
49703 
49704 
49705 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49706 }
49707 
ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49708 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49709 {
49710 	USE_OPLINE
49711 
49712 	zval *container;
49713 	zval *offset;
49714 
49715 	SAVE_OPLINE();
49716 	container = EX_VAR(opline->op1.var);
49717 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49718 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49719 	}
49720 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49721 
49722 	do {
49723 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
49724 			if (Z_ISREF_P(container)) {
49725 				container = Z_REFVAL_P(container);
49726 				if (Z_TYPE_P(container) != IS_OBJECT) {
49727 					if (IS_CV == IS_CV
49728 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49729 						ZVAL_UNDEFINED_OP1();
49730 					}
49731 					break;
49732 				}
49733 			} else {
49734 				break;
49735 			}
49736 		}
49737 		Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
49738 	} while (0);
49739 
49740 
49741 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49742 }
49743 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49745 {
49746 	USE_OPLINE
49747 
49748 	zval *container;
49749 	int result;
49750 	zend_ulong hval;
49751 	zval *offset;
49752 
49753 	SAVE_OPLINE();
49754 	container = EX_VAR(opline->op1.var);
49755 	offset = EX_VAR(opline->op2.var);
49756 
49757 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49758 		HashTable *ht;
49759 		zval *value;
49760 		zend_string *str;
49761 
49762 isset_dim_obj_array:
49763 		ht = Z_ARRVAL_P(container);
49764 isset_again:
49765 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
49766 			str = Z_STR_P(offset);
49767 			if (IS_CV != IS_CONST) {
49768 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
49769 					goto num_index_prop;
49770 				}
49771 			}
49772 			value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST);
49773 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
49774 			hval = Z_LVAL_P(offset);
49775 num_index_prop:
49776 			value = zend_hash_index_find(ht, hval);
49777 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
49778 			offset = Z_REFVAL_P(offset);
49779 			goto isset_again;
49780 		} else {
49781 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
49782 			if (UNEXPECTED(EG(exception))) {
49783 				result = 0;
49784 				goto isset_dim_obj_exit;
49785 			}
49786 		}
49787 
49788 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
49789 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
49790 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
49791 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
49792 
49793 			if (IS_CV & (IS_CONST|IS_CV)) {
49794 				/* avoid exception check */
49795 
49796 				ZEND_VM_SMART_BRANCH(result, 0);
49797 				ZVAL_BOOL(EX_VAR(opline->result.var), result);
49798 				ZEND_VM_NEXT_OPCODE();
49799 			}
49800 		} else {
49801 			result = (value == NULL || !i_zend_is_true(value));
49802 		}
49803 		goto isset_dim_obj_exit;
49804 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
49805 		container = Z_REFVAL_P(container);
49806 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
49807 			goto isset_dim_obj_array;
49808 		}
49809 	}
49810 
49811 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
49812 		offset++;
49813 	}
49814 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
49815 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
49816 	} else {
49817 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
49818 	}
49819 
49820 isset_dim_obj_exit:
49821 
49822 
49823 	ZEND_VM_SMART_BRANCH(result, 1);
49824 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
49825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49826 }
49827 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49829 {
49830 	USE_OPLINE
49831 
49832 	zval *container;
49833 	int result;
49834 	zval *offset;
49835 
49836 	SAVE_OPLINE();
49837 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
49838 
49839 	if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
49840 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49841 	}
49842 
49843 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49844 
49845 	if (IS_CV == IS_CONST ||
49846 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
49847 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
49848 			container = Z_REFVAL_P(container);
49849 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
49850 				result = (opline->extended_value & ZEND_ISEMPTY);
49851 				goto isset_object_finish;
49852 			}
49853 		} else {
49854 			result = (opline->extended_value & ZEND_ISEMPTY);
49855 			goto isset_object_finish;
49856 		}
49857 	}
49858 
49859 	result =
49860 		(opline->extended_value & ZEND_ISEMPTY) ^
49861 		Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL));
49862 
49863 isset_object_finish:
49864 
49865 
49866 	ZEND_VM_SMART_BRANCH(result, 1);
49867 	ZVAL_BOOL(EX_VAR(opline->result.var), result);
49868 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49869 }
49870 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49871 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49872 {
49873 	USE_OPLINE
49874 
49875 
49876 	zval *key, *subject;
49877 	HashTable *ht;
49878 	uint32_t result;
49879 
49880 	SAVE_OPLINE();
49881 
49882 	key = EX_VAR(opline->op1.var);
49883 	subject = EX_VAR(opline->op2.var);
49884 
49885 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
49886 array_key_exists_array:
49887 		ht = Z_ARRVAL_P(subject);
49888 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
49889 	} else {
49890 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
49891 			subject = Z_REFVAL_P(subject);
49892 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
49893 				goto array_key_exists_array;
49894 			}
49895 		}
49896 		result = zend_array_key_exists_slow(subject, key OPLINE_CC EXECUTE_DATA_CC);
49897 	}
49898 
49899 
49900 	ZEND_VM_SMART_BRANCH(result == IS_TRUE, 1);
49901 	Z_TYPE_INFO_P(EX_VAR(opline->result.var)) = result;
49902 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49903 }
49904 
49905 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49907 {
49908 	USE_OPLINE
49909 
49910 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
49911 
49912 	SAVE_OPLINE();
49913 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
49914 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49915 	}
49916 
49917 	/* Destroy the previously yielded value */
49918 	zval_ptr_dtor(&generator->value);
49919 
49920 	/* Destroy the previously yielded key */
49921 	zval_ptr_dtor(&generator->key);
49922 
49923 	/* Set the new yielded value */
49924 	if (IS_CV != IS_UNUSED) {
49925 
49926 
49927 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
49928 			/* Constants and temporary variables aren't yieldable by reference,
49929 			 * but we still allow them with a notice. */
49930 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
49931 				zval *value;
49932 
49933 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49934 
49935 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49936 				ZVAL_COPY_VALUE(&generator->value, value);
49937 				if (IS_CV == IS_CONST) {
49938 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
49939 						Z_ADDREF(generator->value);
49940 					}
49941 				}
49942 			} else {
49943 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49944 
49945 				/* If a function call result is yielded and the function did
49946 				 * not return by reference we throw a notice. */
49947 				do {
49948 					if (IS_CV == IS_VAR) {
49949 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
49950 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
49951 						 && !Z_ISREF_P(value_ptr)) {
49952 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49953 							ZVAL_COPY(&generator->value, value_ptr);
49954 							break;
49955 						}
49956 					}
49957 					if (Z_ISREF_P(value_ptr)) {
49958 						Z_ADDREF_P(value_ptr);
49959 					} else {
49960 						ZVAL_MAKE_REF_EX(value_ptr, 2);
49961 					}
49962 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
49963 				} while (0);
49964 
49965 			}
49966 		} else {
49967 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49968 
49969 			/* Consts, temporary variables and references need copying */
49970 			if (IS_CV == IS_CONST) {
49971 				ZVAL_COPY_VALUE(&generator->value, value);
49972 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
49973 					Z_ADDREF(generator->value);
49974 				}
49975 			} else if (IS_CV == IS_TMP_VAR) {
49976 				ZVAL_COPY_VALUE(&generator->value, value);
49977             } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
49978 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
49979 
49980 			} else {
49981 				ZVAL_COPY_VALUE(&generator->value, value);
49982 				if (IS_CV == IS_CV) {
49983 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
49984 				}
49985 			}
49986 		}
49987 	} else {
49988 		/* If no value was specified yield null */
49989 		ZVAL_NULL(&generator->value);
49990 	}
49991 
49992 	/* Set the new yielded key */
49993 	if (IS_CV != IS_UNUSED) {
49994 
49995 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49996 
49997 		/* Consts, temporary variables and references need copying */
49998 		if (IS_CV == IS_CONST) {
49999 			ZVAL_COPY_VALUE(&generator->key, key);
50000 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) {
50001 				Z_ADDREF(generator->key);
50002 			}
50003 		} else if (IS_CV == IS_TMP_VAR) {
50004 			ZVAL_COPY_VALUE(&generator->key, key);
50005 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
50006 			ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
50007 
50008 		} else {
50009 			ZVAL_COPY_VALUE(&generator->key, key);
50010 			if (IS_CV == IS_CV) {
50011 				if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
50012 			}
50013 		}
50014 
50015 		if (Z_TYPE(generator->key) == IS_LONG
50016 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
50017 		) {
50018 			generator->largest_used_integer_key = Z_LVAL(generator->key);
50019 		}
50020 	} else {
50021 		/* If no key was specified we use auto-increment keys */
50022 		generator->largest_used_integer_key++;
50023 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
50024 	}
50025 
50026 	if (RETURN_VALUE_USED(opline)) {
50027 		/* If the return value of yield is used set the send
50028 		 * target and initialize it to NULL */
50029 		generator->send_target = EX_VAR(opline->result.var);
50030 		ZVAL_NULL(generator->send_target);
50031 	} else {
50032 		generator->send_target = NULL;
50033 	}
50034 
50035 	/* We increment to the next op, so we are at the correct position when the
50036 	 * generator is resumed. */
50037 	ZEND_VM_INC_OPCODE();
50038 
50039 	/* The GOTO VM uses a local opline variable. We need to set the opline
50040 	 * variable in execute_data so we don't resume at an old position. */
50041 	SAVE_OPLINE();
50042 
50043 	ZEND_VM_RETURN();
50044 }
50045 
ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50046 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50047 {
50048 	USE_OPLINE
50049 
50050 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
50051 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
50052 }
50053 
50054 
50055 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
50056 # undef ZEND_VM_TAIL_CALL
50057 # undef ZEND_VM_CONTINUE
50058 # undef ZEND_VM_RETURN
50059 
50060 # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
50061 # define ZEND_VM_CONTINUE()      HYBRID_NEXT()
50062 # define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
50063 #endif
50064 
50065 
50066 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
50067 # pragma GCC push_options
50068 # pragma GCC optimize("no-gcse")
50069 # pragma GCC optimize("no-ivopts")
50070 #endif
execute_ex(zend_execute_data * ex)50071 ZEND_API void execute_ex(zend_execute_data *ex)
50072 {
50073 	DCL_OPLINE
50074 
50075 #ifdef ZEND_VM_IP_GLOBAL_REG
50076 	const zend_op *orig_opline = opline;
50077 #endif
50078 #ifdef ZEND_VM_FP_GLOBAL_REG
50079 	zend_execute_data *orig_execute_data = execute_data;
50080 	execute_data = ex;
50081 #else
50082 	zend_execute_data *execute_data = ex;
50083 #endif
50084 
50085 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
50086 	if (UNEXPECTED(execute_data == NULL)) {
50087 		static const void * const labels[] = {
50088 			(void*)&&ZEND_NOP_SPEC_LABEL,
50089 			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
50090 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
50091 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
50092 			(void*)&&ZEND_NULL_LABEL,
50093 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
50094 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
50095 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50096 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50097 			(void*)&&ZEND_NULL_LABEL,
50098 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50099 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
50100 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50101 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50102 			(void*)&&ZEND_NULL_LABEL,
50103 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50104 			(void*)&&ZEND_NULL_LABEL,
50105 			(void*)&&ZEND_NULL_LABEL,
50106 			(void*)&&ZEND_NULL_LABEL,
50107 			(void*)&&ZEND_NULL_LABEL,
50108 			(void*)&&ZEND_NULL_LABEL,
50109 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
50110 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50111 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50112 			(void*)&&ZEND_NULL_LABEL,
50113 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50114 			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
50115 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
50116 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
50117 			(void*)&&ZEND_NULL_LABEL,
50118 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
50119 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
50120 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50121 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50122 			(void*)&&ZEND_NULL_LABEL,
50123 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50124 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
50125 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50126 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50127 			(void*)&&ZEND_NULL_LABEL,
50128 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50129 			(void*)&&ZEND_NULL_LABEL,
50130 			(void*)&&ZEND_NULL_LABEL,
50131 			(void*)&&ZEND_NULL_LABEL,
50132 			(void*)&&ZEND_NULL_LABEL,
50133 			(void*)&&ZEND_NULL_LABEL,
50134 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
50135 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50136 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50137 			(void*)&&ZEND_NULL_LABEL,
50138 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
50139 			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
50140 			(void*)&&ZEND_NULL_LABEL,
50141 			(void*)&&ZEND_NULL_LABEL,
50142 			(void*)&&ZEND_NULL_LABEL,
50143 			(void*)&&ZEND_NULL_LABEL,
50144 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
50145 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50146 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50147 			(void*)&&ZEND_NULL_LABEL,
50148 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50149 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
50150 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50151 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50152 			(void*)&&ZEND_NULL_LABEL,
50153 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50154 			(void*)&&ZEND_NULL_LABEL,
50155 			(void*)&&ZEND_NULL_LABEL,
50156 			(void*)&&ZEND_NULL_LABEL,
50157 			(void*)&&ZEND_NULL_LABEL,
50158 			(void*)&&ZEND_NULL_LABEL,
50159 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
50160 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50161 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50162 			(void*)&&ZEND_NULL_LABEL,
50163 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50164 			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
50165 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
50166 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
50167 			(void*)&&ZEND_NULL_LABEL,
50168 			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
50169 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
50170 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
50171 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
50172 			(void*)&&ZEND_NULL_LABEL,
50173 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
50174 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
50175 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
50176 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
50177 			(void*)&&ZEND_NULL_LABEL,
50178 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
50179 			(void*)&&ZEND_NULL_LABEL,
50180 			(void*)&&ZEND_NULL_LABEL,
50181 			(void*)&&ZEND_NULL_LABEL,
50182 			(void*)&&ZEND_NULL_LABEL,
50183 			(void*)&&ZEND_NULL_LABEL,
50184 			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
50185 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
50186 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
50187 			(void*)&&ZEND_NULL_LABEL,
50188 			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
50189 			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
50190 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
50191 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
50192 			(void*)&&ZEND_NULL_LABEL,
50193 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
50194 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
50195 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50196 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50197 			(void*)&&ZEND_NULL_LABEL,
50198 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50199 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
50200 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50201 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50202 			(void*)&&ZEND_NULL_LABEL,
50203 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50204 			(void*)&&ZEND_NULL_LABEL,
50205 			(void*)&&ZEND_NULL_LABEL,
50206 			(void*)&&ZEND_NULL_LABEL,
50207 			(void*)&&ZEND_NULL_LABEL,
50208 			(void*)&&ZEND_NULL_LABEL,
50209 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
50210 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50211 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50212 			(void*)&&ZEND_NULL_LABEL,
50213 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
50214 			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
50215 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
50216 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
50217 			(void*)&&ZEND_NULL_LABEL,
50218 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
50219 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
50220 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50221 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50222 			(void*)&&ZEND_NULL_LABEL,
50223 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50224 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
50225 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50226 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50227 			(void*)&&ZEND_NULL_LABEL,
50228 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50229 			(void*)&&ZEND_NULL_LABEL,
50230 			(void*)&&ZEND_NULL_LABEL,
50231 			(void*)&&ZEND_NULL_LABEL,
50232 			(void*)&&ZEND_NULL_LABEL,
50233 			(void*)&&ZEND_NULL_LABEL,
50234 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
50235 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50236 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50237 			(void*)&&ZEND_NULL_LABEL,
50238 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50239 			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
50240 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
50241 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
50242 			(void*)&&ZEND_NULL_LABEL,
50243 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
50244 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
50245 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50246 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50247 			(void*)&&ZEND_NULL_LABEL,
50248 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50249 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
50250 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50251 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50252 			(void*)&&ZEND_NULL_LABEL,
50253 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50254 			(void*)&&ZEND_NULL_LABEL,
50255 			(void*)&&ZEND_NULL_LABEL,
50256 			(void*)&&ZEND_NULL_LABEL,
50257 			(void*)&&ZEND_NULL_LABEL,
50258 			(void*)&&ZEND_NULL_LABEL,
50259 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
50260 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50261 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50262 			(void*)&&ZEND_NULL_LABEL,
50263 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50264 			(void*)&&ZEND_NULL_LABEL,
50265 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
50266 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
50267 			(void*)&&ZEND_NULL_LABEL,
50268 			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
50269 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
50270 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
50271 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
50272 			(void*)&&ZEND_NULL_LABEL,
50273 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
50274 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
50275 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
50276 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
50277 			(void*)&&ZEND_NULL_LABEL,
50278 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
50279 			(void*)&&ZEND_NULL_LABEL,
50280 			(void*)&&ZEND_NULL_LABEL,
50281 			(void*)&&ZEND_NULL_LABEL,
50282 			(void*)&&ZEND_NULL_LABEL,
50283 			(void*)&&ZEND_NULL_LABEL,
50284 			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
50285 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
50286 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
50287 			(void*)&&ZEND_NULL_LABEL,
50288 			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
50289 			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
50290 			(void*)&&ZEND_NULL_LABEL,
50291 			(void*)&&ZEND_NULL_LABEL,
50292 			(void*)&&ZEND_NULL_LABEL,
50293 			(void*)&&ZEND_NULL_LABEL,
50294 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
50295 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50296 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50297 			(void*)&&ZEND_NULL_LABEL,
50298 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50299 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
50300 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50301 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50302 			(void*)&&ZEND_NULL_LABEL,
50303 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50304 			(void*)&&ZEND_NULL_LABEL,
50305 			(void*)&&ZEND_NULL_LABEL,
50306 			(void*)&&ZEND_NULL_LABEL,
50307 			(void*)&&ZEND_NULL_LABEL,
50308 			(void*)&&ZEND_NULL_LABEL,
50309 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
50310 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50311 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50312 			(void*)&&ZEND_NULL_LABEL,
50313 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50314 			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
50315 			(void*)&&ZEND_NULL_LABEL,
50316 			(void*)&&ZEND_NULL_LABEL,
50317 			(void*)&&ZEND_NULL_LABEL,
50318 			(void*)&&ZEND_NULL_LABEL,
50319 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
50320 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50321 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50322 			(void*)&&ZEND_NULL_LABEL,
50323 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50324 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
50325 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50326 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50327 			(void*)&&ZEND_NULL_LABEL,
50328 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50329 			(void*)&&ZEND_NULL_LABEL,
50330 			(void*)&&ZEND_NULL_LABEL,
50331 			(void*)&&ZEND_NULL_LABEL,
50332 			(void*)&&ZEND_NULL_LABEL,
50333 			(void*)&&ZEND_NULL_LABEL,
50334 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
50335 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50336 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50337 			(void*)&&ZEND_NULL_LABEL,
50338 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
50339 			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
50340 			(void*)&&ZEND_NULL_LABEL,
50341 			(void*)&&ZEND_NULL_LABEL,
50342 			(void*)&&ZEND_NULL_LABEL,
50343 			(void*)&&ZEND_NULL_LABEL,
50344 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
50345 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50346 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50347 			(void*)&&ZEND_NULL_LABEL,
50348 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50349 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
50350 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50351 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50352 			(void*)&&ZEND_NULL_LABEL,
50353 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50354 			(void*)&&ZEND_NULL_LABEL,
50355 			(void*)&&ZEND_NULL_LABEL,
50356 			(void*)&&ZEND_NULL_LABEL,
50357 			(void*)&&ZEND_NULL_LABEL,
50358 			(void*)&&ZEND_NULL_LABEL,
50359 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
50360 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50361 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50362 			(void*)&&ZEND_NULL_LABEL,
50363 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
50364 			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
50365 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
50366 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
50367 			(void*)&&ZEND_NULL_LABEL,
50368 			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
50369 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
50370 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
50371 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
50372 			(void*)&&ZEND_NULL_LABEL,
50373 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
50374 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
50375 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
50376 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
50377 			(void*)&&ZEND_NULL_LABEL,
50378 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
50379 			(void*)&&ZEND_NULL_LABEL,
50380 			(void*)&&ZEND_NULL_LABEL,
50381 			(void*)&&ZEND_NULL_LABEL,
50382 			(void*)&&ZEND_NULL_LABEL,
50383 			(void*)&&ZEND_NULL_LABEL,
50384 			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
50385 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
50386 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
50387 			(void*)&&ZEND_NULL_LABEL,
50388 			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
50389 			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
50390 			(void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
50391 			(void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
50392 			(void*)&&ZEND_NULL_LABEL,
50393 			(void*)&&ZEND_BW_NOT_SPEC_CV_LABEL,
50394 			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
50395 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
50396 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
50397 			(void*)&&ZEND_NULL_LABEL,
50398 			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
50399 			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
50400 			(void*)&&ZEND_NULL_LABEL,
50401 			(void*)&&ZEND_NULL_LABEL,
50402 			(void*)&&ZEND_NULL_LABEL,
50403 			(void*)&&ZEND_NULL_LABEL,
50404 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
50405 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
50406 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
50407 			(void*)&&ZEND_NULL_LABEL,
50408 			(void*)&&ZEND_NULL_LABEL,
50409 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
50410 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
50411 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
50412 			(void*)&&ZEND_NULL_LABEL,
50413 			(void*)&&ZEND_NULL_LABEL,
50414 			(void*)&&ZEND_NULL_LABEL,
50415 			(void*)&&ZEND_NULL_LABEL,
50416 			(void*)&&ZEND_NULL_LABEL,
50417 			(void*)&&ZEND_NULL_LABEL,
50418 			(void*)&&ZEND_NULL_LABEL,
50419 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
50420 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
50421 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
50422 			(void*)&&ZEND_NULL_LABEL,
50423 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
50424 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
50425 			(void*)&&ZEND_NULL_LABEL,
50426 			(void*)&&ZEND_NULL_LABEL,
50427 			(void*)&&ZEND_NULL_LABEL,
50428 			(void*)&&ZEND_NULL_LABEL,
50429 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
50430 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
50431 			(void*)&&ZEND_NULL_LABEL,
50432 			(void*)&&ZEND_NULL_LABEL,
50433 			(void*)&&ZEND_NULL_LABEL,
50434 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
50435 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
50436 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
50437 			(void*)&&ZEND_NULL_LABEL,
50438 			(void*)&&ZEND_NULL_LABEL,
50439 			(void*)&&ZEND_NULL_LABEL,
50440 			(void*)&&ZEND_NULL_LABEL,
50441 			(void*)&&ZEND_NULL_LABEL,
50442 			(void*)&&ZEND_NULL_LABEL,
50443 			(void*)&&ZEND_NULL_LABEL,
50444 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
50445 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
50446 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
50447 			(void*)&&ZEND_NULL_LABEL,
50448 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
50449 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
50450 			(void*)&&ZEND_NULL_LABEL,
50451 			(void*)&&ZEND_NULL_LABEL,
50452 			(void*)&&ZEND_NULL_LABEL,
50453 			(void*)&&ZEND_NULL_LABEL,
50454 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
50455 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
50456 			(void*)&&ZEND_NULL_LABEL,
50457 			(void*)&&ZEND_NULL_LABEL,
50458 			(void*)&&ZEND_NULL_LABEL,
50459 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
50460 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
50461 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
50462 			(void*)&&ZEND_NULL_LABEL,
50463 			(void*)&&ZEND_NULL_LABEL,
50464 			(void*)&&ZEND_NULL_LABEL,
50465 			(void*)&&ZEND_NULL_LABEL,
50466 			(void*)&&ZEND_NULL_LABEL,
50467 			(void*)&&ZEND_NULL_LABEL,
50468 			(void*)&&ZEND_NULL_LABEL,
50469 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
50470 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
50471 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
50472 			(void*)&&ZEND_NULL_LABEL,
50473 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
50474 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
50475 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
50476 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
50477 			(void*)&&ZEND_NULL_LABEL,
50478 			(void*)&&ZEND_NULL_LABEL,
50479 			(void*)&&ZEND_NULL_LABEL,
50480 			(void*)&&ZEND_NULL_LABEL,
50481 			(void*)&&ZEND_NULL_LABEL,
50482 			(void*)&&ZEND_NULL_LABEL,
50483 			(void*)&&ZEND_NULL_LABEL,
50484 			(void*)&&ZEND_NULL_LABEL,
50485 			(void*)&&ZEND_NULL_LABEL,
50486 			(void*)&&ZEND_NULL_LABEL,
50487 			(void*)&&ZEND_NULL_LABEL,
50488 			(void*)&&ZEND_NULL_LABEL,
50489 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
50490 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
50491 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
50492 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50493 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50494 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50495 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50496 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50497 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50498 			(void*)&&ZEND_NULL_LABEL,
50499 			(void*)&&ZEND_NULL_LABEL,
50500 			(void*)&&ZEND_NULL_LABEL,
50501 			(void*)&&ZEND_NULL_LABEL,
50502 			(void*)&&ZEND_NULL_LABEL,
50503 			(void*)&&ZEND_NULL_LABEL,
50504 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
50505 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
50506 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
50507 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50508 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50509 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50510 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50511 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50512 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50513 			(void*)&&ZEND_NULL_LABEL,
50514 			(void*)&&ZEND_NULL_LABEL,
50515 			(void*)&&ZEND_NULL_LABEL,
50516 			(void*)&&ZEND_NULL_LABEL,
50517 			(void*)&&ZEND_NULL_LABEL,
50518 			(void*)&&ZEND_NULL_LABEL,
50519 			(void*)&&ZEND_NULL_LABEL,
50520 			(void*)&&ZEND_NULL_LABEL,
50521 			(void*)&&ZEND_NULL_LABEL,
50522 			(void*)&&ZEND_NULL_LABEL,
50523 			(void*)&&ZEND_NULL_LABEL,
50524 			(void*)&&ZEND_NULL_LABEL,
50525 			(void*)&&ZEND_NULL_LABEL,
50526 			(void*)&&ZEND_NULL_LABEL,
50527 			(void*)&&ZEND_NULL_LABEL,
50528 			(void*)&&ZEND_NULL_LABEL,
50529 			(void*)&&ZEND_NULL_LABEL,
50530 			(void*)&&ZEND_NULL_LABEL,
50531 			(void*)&&ZEND_NULL_LABEL,
50532 			(void*)&&ZEND_NULL_LABEL,
50533 			(void*)&&ZEND_NULL_LABEL,
50534 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
50535 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
50536 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
50537 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
50538 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
50539 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
50540 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
50541 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
50542 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
50543 			(void*)&&ZEND_NULL_LABEL,
50544 			(void*)&&ZEND_NULL_LABEL,
50545 			(void*)&&ZEND_NULL_LABEL,
50546 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
50547 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
50548 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
50549 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
50550 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
50551 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
50552 			(void*)&&ZEND_NULL_LABEL,
50553 			(void*)&&ZEND_NULL_LABEL,
50554 			(void*)&&ZEND_NULL_LABEL,
50555 			(void*)&&ZEND_NULL_LABEL,
50556 			(void*)&&ZEND_NULL_LABEL,
50557 			(void*)&&ZEND_NULL_LABEL,
50558 			(void*)&&ZEND_NULL_LABEL,
50559 			(void*)&&ZEND_NULL_LABEL,
50560 			(void*)&&ZEND_NULL_LABEL,
50561 			(void*)&&ZEND_NULL_LABEL,
50562 			(void*)&&ZEND_NULL_LABEL,
50563 			(void*)&&ZEND_NULL_LABEL,
50564 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
50565 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
50566 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
50567 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50568 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50569 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50570 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50571 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50572 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50573 			(void*)&&ZEND_NULL_LABEL,
50574 			(void*)&&ZEND_NULL_LABEL,
50575 			(void*)&&ZEND_NULL_LABEL,
50576 			(void*)&&ZEND_NULL_LABEL,
50577 			(void*)&&ZEND_NULL_LABEL,
50578 			(void*)&&ZEND_NULL_LABEL,
50579 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
50580 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
50581 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
50582 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50583 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50584 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50585 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
50586 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
50587 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
50588 			(void*)&&ZEND_NULL_LABEL,
50589 			(void*)&&ZEND_NULL_LABEL,
50590 			(void*)&&ZEND_NULL_LABEL,
50591 			(void*)&&ZEND_NULL_LABEL,
50592 			(void*)&&ZEND_NULL_LABEL,
50593 			(void*)&&ZEND_NULL_LABEL,
50594 			(void*)&&ZEND_NULL_LABEL,
50595 			(void*)&&ZEND_NULL_LABEL,
50596 			(void*)&&ZEND_NULL_LABEL,
50597 			(void*)&&ZEND_NULL_LABEL,
50598 			(void*)&&ZEND_NULL_LABEL,
50599 			(void*)&&ZEND_NULL_LABEL,
50600 			(void*)&&ZEND_NULL_LABEL,
50601 			(void*)&&ZEND_NULL_LABEL,
50602 			(void*)&&ZEND_NULL_LABEL,
50603 			(void*)&&ZEND_NULL_LABEL,
50604 			(void*)&&ZEND_NULL_LABEL,
50605 			(void*)&&ZEND_NULL_LABEL,
50606 			(void*)&&ZEND_NULL_LABEL,
50607 			(void*)&&ZEND_NULL_LABEL,
50608 			(void*)&&ZEND_NULL_LABEL,
50609 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
50610 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
50611 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
50612 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
50613 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
50614 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
50615 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
50616 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
50617 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
50618 			(void*)&&ZEND_NULL_LABEL,
50619 			(void*)&&ZEND_NULL_LABEL,
50620 			(void*)&&ZEND_NULL_LABEL,
50621 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
50622 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
50623 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
50624 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
50625 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
50626 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
50627 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
50628 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50629 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50630 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
50631 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50632 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50633 			(void*)&&ZEND_NULL_LABEL,
50634 			(void*)&&ZEND_NULL_LABEL,
50635 			(void*)&&ZEND_NULL_LABEL,
50636 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
50637 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50638 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50639 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
50640 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50641 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50642 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50643 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50644 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50645 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50646 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50647 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50648 			(void*)&&ZEND_NULL_LABEL,
50649 			(void*)&&ZEND_NULL_LABEL,
50650 			(void*)&&ZEND_NULL_LABEL,
50651 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50652 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50653 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50654 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
50655 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50656 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50657 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50658 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50659 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50660 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50661 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50662 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50663 			(void*)&&ZEND_NULL_LABEL,
50664 			(void*)&&ZEND_NULL_LABEL,
50665 			(void*)&&ZEND_NULL_LABEL,
50666 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50667 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50668 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50669 			(void*)&&ZEND_NULL_LABEL,
50670 			(void*)&&ZEND_NULL_LABEL,
50671 			(void*)&&ZEND_NULL_LABEL,
50672 			(void*)&&ZEND_NULL_LABEL,
50673 			(void*)&&ZEND_NULL_LABEL,
50674 			(void*)&&ZEND_NULL_LABEL,
50675 			(void*)&&ZEND_NULL_LABEL,
50676 			(void*)&&ZEND_NULL_LABEL,
50677 			(void*)&&ZEND_NULL_LABEL,
50678 			(void*)&&ZEND_NULL_LABEL,
50679 			(void*)&&ZEND_NULL_LABEL,
50680 			(void*)&&ZEND_NULL_LABEL,
50681 			(void*)&&ZEND_NULL_LABEL,
50682 			(void*)&&ZEND_NULL_LABEL,
50683 			(void*)&&ZEND_NULL_LABEL,
50684 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
50685 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50686 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50687 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50688 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50689 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50690 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50691 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50692 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50693 			(void*)&&ZEND_NULL_LABEL,
50694 			(void*)&&ZEND_NULL_LABEL,
50695 			(void*)&&ZEND_NULL_LABEL,
50696 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
50697 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50698 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50699 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
50700 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
50701 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
50702 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
50703 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50704 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50705 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
50706 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50707 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50708 			(void*)&&ZEND_NULL_LABEL,
50709 			(void*)&&ZEND_NULL_LABEL,
50710 			(void*)&&ZEND_NULL_LABEL,
50711 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
50712 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
50713 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
50714 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
50715 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50716 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50717 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50718 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50719 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50720 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50721 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50722 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50723 			(void*)&&ZEND_NULL_LABEL,
50724 			(void*)&&ZEND_NULL_LABEL,
50725 			(void*)&&ZEND_NULL_LABEL,
50726 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50727 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50728 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50729 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
50730 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50731 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50732 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50733 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50734 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50735 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50736 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50737 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50738 			(void*)&&ZEND_NULL_LABEL,
50739 			(void*)&&ZEND_NULL_LABEL,
50740 			(void*)&&ZEND_NULL_LABEL,
50741 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50742 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50743 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50744 			(void*)&&ZEND_NULL_LABEL,
50745 			(void*)&&ZEND_NULL_LABEL,
50746 			(void*)&&ZEND_NULL_LABEL,
50747 			(void*)&&ZEND_NULL_LABEL,
50748 			(void*)&&ZEND_NULL_LABEL,
50749 			(void*)&&ZEND_NULL_LABEL,
50750 			(void*)&&ZEND_NULL_LABEL,
50751 			(void*)&&ZEND_NULL_LABEL,
50752 			(void*)&&ZEND_NULL_LABEL,
50753 			(void*)&&ZEND_NULL_LABEL,
50754 			(void*)&&ZEND_NULL_LABEL,
50755 			(void*)&&ZEND_NULL_LABEL,
50756 			(void*)&&ZEND_NULL_LABEL,
50757 			(void*)&&ZEND_NULL_LABEL,
50758 			(void*)&&ZEND_NULL_LABEL,
50759 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
50760 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
50761 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
50762 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50763 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50764 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50765 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50766 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50767 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50768 			(void*)&&ZEND_NULL_LABEL,
50769 			(void*)&&ZEND_NULL_LABEL,
50770 			(void*)&&ZEND_NULL_LABEL,
50771 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
50772 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
50773 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
50774 			(void*)&&ZEND_NULL_LABEL,
50775 			(void*)&&ZEND_NULL_LABEL,
50776 			(void*)&&ZEND_NULL_LABEL,
50777 			(void*)&&ZEND_NULL_LABEL,
50778 			(void*)&&ZEND_NULL_LABEL,
50779 			(void*)&&ZEND_NULL_LABEL,
50780 			(void*)&&ZEND_NULL_LABEL,
50781 			(void*)&&ZEND_NULL_LABEL,
50782 			(void*)&&ZEND_NULL_LABEL,
50783 			(void*)&&ZEND_NULL_LABEL,
50784 			(void*)&&ZEND_NULL_LABEL,
50785 			(void*)&&ZEND_NULL_LABEL,
50786 			(void*)&&ZEND_NULL_LABEL,
50787 			(void*)&&ZEND_NULL_LABEL,
50788 			(void*)&&ZEND_NULL_LABEL,
50789 			(void*)&&ZEND_NULL_LABEL,
50790 			(void*)&&ZEND_NULL_LABEL,
50791 			(void*)&&ZEND_NULL_LABEL,
50792 			(void*)&&ZEND_NULL_LABEL,
50793 			(void*)&&ZEND_NULL_LABEL,
50794 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
50795 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
50796 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
50797 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
50798 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
50799 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
50800 			(void*)&&ZEND_NULL_LABEL,
50801 			(void*)&&ZEND_NULL_LABEL,
50802 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
50803 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
50804 			(void*)&&ZEND_NULL_LABEL,
50805 			(void*)&&ZEND_NULL_LABEL,
50806 			(void*)&&ZEND_NULL_LABEL,
50807 			(void*)&&ZEND_NULL_LABEL,
50808 			(void*)&&ZEND_NULL_LABEL,
50809 			(void*)&&ZEND_NULL_LABEL,
50810 			(void*)&&ZEND_NULL_LABEL,
50811 			(void*)&&ZEND_NULL_LABEL,
50812 			(void*)&&ZEND_NULL_LABEL,
50813 			(void*)&&ZEND_NULL_LABEL,
50814 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
50815 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
50816 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
50817 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
50818 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
50819 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
50820 			(void*)&&ZEND_NULL_LABEL,
50821 			(void*)&&ZEND_NULL_LABEL,
50822 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
50823 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
50824 			(void*)&&ZEND_NULL_LABEL,
50825 			(void*)&&ZEND_NULL_LABEL,
50826 			(void*)&&ZEND_NULL_LABEL,
50827 			(void*)&&ZEND_NULL_LABEL,
50828 			(void*)&&ZEND_NULL_LABEL,
50829 			(void*)&&ZEND_NULL_LABEL,
50830 			(void*)&&ZEND_NULL_LABEL,
50831 			(void*)&&ZEND_NULL_LABEL,
50832 			(void*)&&ZEND_NULL_LABEL,
50833 			(void*)&&ZEND_NULL_LABEL,
50834 			(void*)&&ZEND_NULL_LABEL,
50835 			(void*)&&ZEND_NULL_LABEL,
50836 			(void*)&&ZEND_NULL_LABEL,
50837 			(void*)&&ZEND_NULL_LABEL,
50838 			(void*)&&ZEND_NULL_LABEL,
50839 			(void*)&&ZEND_NULL_LABEL,
50840 			(void*)&&ZEND_NULL_LABEL,
50841 			(void*)&&ZEND_NULL_LABEL,
50842 			(void*)&&ZEND_NULL_LABEL,
50843 			(void*)&&ZEND_NULL_LABEL,
50844 			(void*)&&ZEND_NULL_LABEL,
50845 			(void*)&&ZEND_NULL_LABEL,
50846 			(void*)&&ZEND_NULL_LABEL,
50847 			(void*)&&ZEND_NULL_LABEL,
50848 			(void*)&&ZEND_NULL_LABEL,
50849 			(void*)&&ZEND_NULL_LABEL,
50850 			(void*)&&ZEND_NULL_LABEL,
50851 			(void*)&&ZEND_NULL_LABEL,
50852 			(void*)&&ZEND_NULL_LABEL,
50853 			(void*)&&ZEND_NULL_LABEL,
50854 			(void*)&&ZEND_NULL_LABEL,
50855 			(void*)&&ZEND_NULL_LABEL,
50856 			(void*)&&ZEND_NULL_LABEL,
50857 			(void*)&&ZEND_NULL_LABEL,
50858 			(void*)&&ZEND_NULL_LABEL,
50859 			(void*)&&ZEND_NULL_LABEL,
50860 			(void*)&&ZEND_NULL_LABEL,
50861 			(void*)&&ZEND_NULL_LABEL,
50862 			(void*)&&ZEND_NULL_LABEL,
50863 			(void*)&&ZEND_NULL_LABEL,
50864 			(void*)&&ZEND_NULL_LABEL,
50865 			(void*)&&ZEND_NULL_LABEL,
50866 			(void*)&&ZEND_NULL_LABEL,
50867 			(void*)&&ZEND_NULL_LABEL,
50868 			(void*)&&ZEND_NULL_LABEL,
50869 			(void*)&&ZEND_NULL_LABEL,
50870 			(void*)&&ZEND_NULL_LABEL,
50871 			(void*)&&ZEND_NULL_LABEL,
50872 			(void*)&&ZEND_NULL_LABEL,
50873 			(void*)&&ZEND_NULL_LABEL,
50874 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
50875 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
50876 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
50877 			(void*)&&ZEND_NULL_LABEL,
50878 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
50879 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
50880 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
50881 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
50882 			(void*)&&ZEND_NULL_LABEL,
50883 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
50884 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
50885 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
50886 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
50887 			(void*)&&ZEND_NULL_LABEL,
50888 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
50889 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
50890 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
50891 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
50892 			(void*)&&ZEND_NULL_LABEL,
50893 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
50894 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
50895 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
50896 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
50897 			(void*)&&ZEND_NULL_LABEL,
50898 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
50899 			(void*)&&ZEND_NULL_LABEL,
50900 			(void*)&&ZEND_NULL_LABEL,
50901 			(void*)&&ZEND_NULL_LABEL,
50902 			(void*)&&ZEND_NULL_LABEL,
50903 			(void*)&&ZEND_NULL_LABEL,
50904 			(void*)&&ZEND_NULL_LABEL,
50905 			(void*)&&ZEND_NULL_LABEL,
50906 			(void*)&&ZEND_NULL_LABEL,
50907 			(void*)&&ZEND_NULL_LABEL,
50908 			(void*)&&ZEND_NULL_LABEL,
50909 			(void*)&&ZEND_NULL_LABEL,
50910 			(void*)&&ZEND_NULL_LABEL,
50911 			(void*)&&ZEND_NULL_LABEL,
50912 			(void*)&&ZEND_NULL_LABEL,
50913 			(void*)&&ZEND_NULL_LABEL,
50914 			(void*)&&ZEND_NULL_LABEL,
50915 			(void*)&&ZEND_NULL_LABEL,
50916 			(void*)&&ZEND_NULL_LABEL,
50917 			(void*)&&ZEND_NULL_LABEL,
50918 			(void*)&&ZEND_NULL_LABEL,
50919 			(void*)&&ZEND_NULL_LABEL,
50920 			(void*)&&ZEND_NULL_LABEL,
50921 			(void*)&&ZEND_NULL_LABEL,
50922 			(void*)&&ZEND_NULL_LABEL,
50923 			(void*)&&ZEND_NULL_LABEL,
50924 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
50925 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
50926 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
50927 			(void*)&&ZEND_NULL_LABEL,
50928 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
50929 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
50930 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
50931 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
50932 			(void*)&&ZEND_NULL_LABEL,
50933 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
50934 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
50935 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
50936 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
50937 			(void*)&&ZEND_NULL_LABEL,
50938 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
50939 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
50940 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
50941 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
50942 			(void*)&&ZEND_NULL_LABEL,
50943 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
50944 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
50945 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
50946 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
50947 			(void*)&&ZEND_NULL_LABEL,
50948 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
50949 			(void*)&&ZEND_NULL_LABEL,
50950 			(void*)&&ZEND_NULL_LABEL,
50951 			(void*)&&ZEND_NULL_LABEL,
50952 			(void*)&&ZEND_NULL_LABEL,
50953 			(void*)&&ZEND_NULL_LABEL,
50954 			(void*)&&ZEND_NULL_LABEL,
50955 			(void*)&&ZEND_NULL_LABEL,
50956 			(void*)&&ZEND_NULL_LABEL,
50957 			(void*)&&ZEND_NULL_LABEL,
50958 			(void*)&&ZEND_NULL_LABEL,
50959 			(void*)&&ZEND_NULL_LABEL,
50960 			(void*)&&ZEND_NULL_LABEL,
50961 			(void*)&&ZEND_NULL_LABEL,
50962 			(void*)&&ZEND_NULL_LABEL,
50963 			(void*)&&ZEND_NULL_LABEL,
50964 			(void*)&&ZEND_NULL_LABEL,
50965 			(void*)&&ZEND_NULL_LABEL,
50966 			(void*)&&ZEND_NULL_LABEL,
50967 			(void*)&&ZEND_NULL_LABEL,
50968 			(void*)&&ZEND_NULL_LABEL,
50969 			(void*)&&ZEND_NULL_LABEL,
50970 			(void*)&&ZEND_NULL_LABEL,
50971 			(void*)&&ZEND_NULL_LABEL,
50972 			(void*)&&ZEND_NULL_LABEL,
50973 			(void*)&&ZEND_NULL_LABEL,
50974 			(void*)&&ZEND_NULL_LABEL,
50975 			(void*)&&ZEND_NULL_LABEL,
50976 			(void*)&&ZEND_NULL_LABEL,
50977 			(void*)&&ZEND_NULL_LABEL,
50978 			(void*)&&ZEND_NULL_LABEL,
50979 			(void*)&&ZEND_NULL_LABEL,
50980 			(void*)&&ZEND_NULL_LABEL,
50981 			(void*)&&ZEND_NULL_LABEL,
50982 			(void*)&&ZEND_NULL_LABEL,
50983 			(void*)&&ZEND_NULL_LABEL,
50984 			(void*)&&ZEND_NULL_LABEL,
50985 			(void*)&&ZEND_NULL_LABEL,
50986 			(void*)&&ZEND_NULL_LABEL,
50987 			(void*)&&ZEND_NULL_LABEL,
50988 			(void*)&&ZEND_NULL_LABEL,
50989 			(void*)&&ZEND_NULL_LABEL,
50990 			(void*)&&ZEND_NULL_LABEL,
50991 			(void*)&&ZEND_NULL_LABEL,
50992 			(void*)&&ZEND_NULL_LABEL,
50993 			(void*)&&ZEND_NULL_LABEL,
50994 			(void*)&&ZEND_NULL_LABEL,
50995 			(void*)&&ZEND_NULL_LABEL,
50996 			(void*)&&ZEND_NULL_LABEL,
50997 			(void*)&&ZEND_NULL_LABEL,
50998 			(void*)&&ZEND_NULL_LABEL,
50999 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
51000 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
51001 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
51002 			(void*)&&ZEND_NULL_LABEL,
51003 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
51004 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
51005 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
51006 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
51007 			(void*)&&ZEND_NULL_LABEL,
51008 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
51009 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
51010 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
51011 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
51012 			(void*)&&ZEND_NULL_LABEL,
51013 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
51014 			(void*)&&ZEND_NULL_LABEL,
51015 			(void*)&&ZEND_NULL_LABEL,
51016 			(void*)&&ZEND_NULL_LABEL,
51017 			(void*)&&ZEND_NULL_LABEL,
51018 			(void*)&&ZEND_NULL_LABEL,
51019 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
51020 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
51021 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
51022 			(void*)&&ZEND_NULL_LABEL,
51023 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
51024 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
51025 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
51026 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
51027 			(void*)&&ZEND_NULL_LABEL,
51028 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
51029 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
51030 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
51031 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
51032 			(void*)&&ZEND_NULL_LABEL,
51033 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
51034 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
51035 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
51036 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
51037 			(void*)&&ZEND_NULL_LABEL,
51038 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
51039 			(void*)&&ZEND_NULL_LABEL,
51040 			(void*)&&ZEND_NULL_LABEL,
51041 			(void*)&&ZEND_NULL_LABEL,
51042 			(void*)&&ZEND_NULL_LABEL,
51043 			(void*)&&ZEND_NULL_LABEL,
51044 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
51045 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
51046 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
51047 			(void*)&&ZEND_NULL_LABEL,
51048 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
51049 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
51050 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
51051 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
51052 			(void*)&&ZEND_NULL_LABEL,
51053 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
51054 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
51055 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
51056 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
51057 			(void*)&&ZEND_NULL_LABEL,
51058 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
51059 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
51060 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
51061 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
51062 			(void*)&&ZEND_NULL_LABEL,
51063 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
51064 			(void*)&&ZEND_NULL_LABEL,
51065 			(void*)&&ZEND_NULL_LABEL,
51066 			(void*)&&ZEND_NULL_LABEL,
51067 			(void*)&&ZEND_NULL_LABEL,
51068 			(void*)&&ZEND_NULL_LABEL,
51069 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
51070 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
51071 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
51072 			(void*)&&ZEND_NULL_LABEL,
51073 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
51074 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
51075 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
51076 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
51077 			(void*)&&ZEND_NULL_LABEL,
51078 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
51079 			(void*)&&ZEND_NULL_LABEL,
51080 			(void*)&&ZEND_NULL_LABEL,
51081 			(void*)&&ZEND_NULL_LABEL,
51082 			(void*)&&ZEND_NULL_LABEL,
51083 			(void*)&&ZEND_NULL_LABEL,
51084 			(void*)&&ZEND_NULL_LABEL,
51085 			(void*)&&ZEND_NULL_LABEL,
51086 			(void*)&&ZEND_NULL_LABEL,
51087 			(void*)&&ZEND_NULL_LABEL,
51088 			(void*)&&ZEND_NULL_LABEL,
51089 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
51090 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
51091 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
51092 			(void*)&&ZEND_NULL_LABEL,
51093 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_LABEL,
51094 			(void*)&&ZEND_NULL_LABEL,
51095 			(void*)&&ZEND_NULL_LABEL,
51096 			(void*)&&ZEND_NULL_LABEL,
51097 			(void*)&&ZEND_NULL_LABEL,
51098 			(void*)&&ZEND_NULL_LABEL,
51099 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CONST_LABEL,
51100 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
51101 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
51102 			(void*)&&ZEND_NULL_LABEL,
51103 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
51104 			(void*)&&ZEND_NULL_LABEL,
51105 			(void*)&&ZEND_NULL_LABEL,
51106 			(void*)&&ZEND_NULL_LABEL,
51107 			(void*)&&ZEND_NULL_LABEL,
51108 			(void*)&&ZEND_NULL_LABEL,
51109 			(void*)&&ZEND_NULL_LABEL,
51110 			(void*)&&ZEND_NULL_LABEL,
51111 			(void*)&&ZEND_NULL_LABEL,
51112 			(void*)&&ZEND_NULL_LABEL,
51113 			(void*)&&ZEND_NULL_LABEL,
51114 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
51115 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
51116 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
51117 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
51118 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
51119 			(void*)&&ZEND_NULL_LABEL,
51120 			(void*)&&ZEND_NULL_LABEL,
51121 			(void*)&&ZEND_NULL_LABEL,
51122 			(void*)&&ZEND_NULL_LABEL,
51123 			(void*)&&ZEND_NULL_LABEL,
51124 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
51125 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
51126 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
51127 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
51128 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
51129 			(void*)&&ZEND_NULL_LABEL,
51130 			(void*)&&ZEND_NULL_LABEL,
51131 			(void*)&&ZEND_NULL_LABEL,
51132 			(void*)&&ZEND_NULL_LABEL,
51133 			(void*)&&ZEND_NULL_LABEL,
51134 			(void*)&&ZEND_NULL_LABEL,
51135 			(void*)&&ZEND_NULL_LABEL,
51136 			(void*)&&ZEND_NULL_LABEL,
51137 			(void*)&&ZEND_NULL_LABEL,
51138 			(void*)&&ZEND_NULL_LABEL,
51139 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
51140 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
51141 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
51142 			(void*)&&ZEND_NULL_LABEL,
51143 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
51144 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
51145 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
51146 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
51147 			(void*)&&ZEND_NULL_LABEL,
51148 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
51149 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
51150 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
51151 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
51152 			(void*)&&ZEND_NULL_LABEL,
51153 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
51154 			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
51155 			(void*)&&ZEND_NULL_LABEL,
51156 			(void*)&&ZEND_NULL_LABEL,
51157 			(void*)&&ZEND_NULL_LABEL,
51158 			(void*)&&ZEND_NULL_LABEL,
51159 			(void*)&&ZEND_NULL_LABEL,
51160 			(void*)&&ZEND_NULL_LABEL,
51161 			(void*)&&ZEND_NULL_LABEL,
51162 			(void*)&&ZEND_NULL_LABEL,
51163 			(void*)&&ZEND_NULL_LABEL,
51164 			(void*)&&ZEND_NULL_LABEL,
51165 			(void*)&&ZEND_NULL_LABEL,
51166 			(void*)&&ZEND_NULL_LABEL,
51167 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
51168 			(void*)&&ZEND_NULL_LABEL,
51169 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
51170 			(void*)&&ZEND_NULL_LABEL,
51171 			(void*)&&ZEND_NULL_LABEL,
51172 			(void*)&&ZEND_NULL_LABEL,
51173 			(void*)&&ZEND_NULL_LABEL,
51174 			(void*)&&ZEND_NULL_LABEL,
51175 			(void*)&&ZEND_NULL_LABEL,
51176 			(void*)&&ZEND_NULL_LABEL,
51177 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
51178 			(void*)&&ZEND_NULL_LABEL,
51179 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
51180 			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
51181 			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
51182 			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
51183 			(void*)&&ZEND_NULL_LABEL,
51184 			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
51185 			(void*)&&ZEND_NULL_LABEL,
51186 			(void*)&&ZEND_NULL_LABEL,
51187 			(void*)&&ZEND_NULL_LABEL,
51188 			(void*)&&ZEND_NULL_LABEL,
51189 			(void*)&&ZEND_NULL_LABEL,
51190 			(void*)&&ZEND_NULL_LABEL,
51191 			(void*)&&ZEND_NULL_LABEL,
51192 			(void*)&&ZEND_NULL_LABEL,
51193 			(void*)&&ZEND_NULL_LABEL,
51194 			(void*)&&ZEND_NULL_LABEL,
51195 			(void*)&&ZEND_NULL_LABEL,
51196 			(void*)&&ZEND_NULL_LABEL,
51197 			(void*)&&ZEND_NULL_LABEL,
51198 			(void*)&&ZEND_NULL_LABEL,
51199 			(void*)&&ZEND_NULL_LABEL,
51200 			(void*)&&ZEND_NULL_LABEL,
51201 			(void*)&&ZEND_NULL_LABEL,
51202 			(void*)&&ZEND_NULL_LABEL,
51203 			(void*)&&ZEND_NULL_LABEL,
51204 			(void*)&&ZEND_NULL_LABEL,
51205 			(void*)&&ZEND_NULL_LABEL,
51206 			(void*)&&ZEND_NULL_LABEL,
51207 			(void*)&&ZEND_NULL_LABEL,
51208 			(void*)&&ZEND_NULL_LABEL,
51209 			(void*)&&ZEND_NULL_LABEL,
51210 			(void*)&&ZEND_NULL_LABEL,
51211 			(void*)&&ZEND_NULL_LABEL,
51212 			(void*)&&ZEND_NULL_LABEL,
51213 			(void*)&&ZEND_NULL_LABEL,
51214 			(void*)&&ZEND_NULL_LABEL,
51215 			(void*)&&ZEND_NULL_LABEL,
51216 			(void*)&&ZEND_NULL_LABEL,
51217 			(void*)&&ZEND_NULL_LABEL,
51218 			(void*)&&ZEND_NULL_LABEL,
51219 			(void*)&&ZEND_NULL_LABEL,
51220 			(void*)&&ZEND_NULL_LABEL,
51221 			(void*)&&ZEND_NULL_LABEL,
51222 			(void*)&&ZEND_NULL_LABEL,
51223 			(void*)&&ZEND_NULL_LABEL,
51224 			(void*)&&ZEND_NULL_LABEL,
51225 			(void*)&&ZEND_NULL_LABEL,
51226 			(void*)&&ZEND_NULL_LABEL,
51227 			(void*)&&ZEND_NULL_LABEL,
51228 			(void*)&&ZEND_NULL_LABEL,
51229 			(void*)&&ZEND_NULL_LABEL,
51230 			(void*)&&ZEND_NULL_LABEL,
51231 			(void*)&&ZEND_NULL_LABEL,
51232 			(void*)&&ZEND_NULL_LABEL,
51233 			(void*)&&ZEND_NULL_LABEL,
51234 			(void*)&&ZEND_NULL_LABEL,
51235 			(void*)&&ZEND_NULL_LABEL,
51236 			(void*)&&ZEND_NULL_LABEL,
51237 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
51238 			(void*)&&ZEND_NULL_LABEL,
51239 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
51240 			(void*)&&ZEND_NULL_LABEL,
51241 			(void*)&&ZEND_NULL_LABEL,
51242 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
51243 			(void*)&&ZEND_NULL_LABEL,
51244 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
51245 			(void*)&&ZEND_NULL_LABEL,
51246 			(void*)&&ZEND_NULL_LABEL,
51247 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
51248 			(void*)&&ZEND_NULL_LABEL,
51249 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
51250 			(void*)&&ZEND_NULL_LABEL,
51251 			(void*)&&ZEND_NULL_LABEL,
51252 			(void*)&&ZEND_NULL_LABEL,
51253 			(void*)&&ZEND_NULL_LABEL,
51254 			(void*)&&ZEND_NULL_LABEL,
51255 			(void*)&&ZEND_NULL_LABEL,
51256 			(void*)&&ZEND_NULL_LABEL,
51257 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
51258 			(void*)&&ZEND_NULL_LABEL,
51259 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
51260 			(void*)&&ZEND_NULL_LABEL,
51261 			(void*)&&ZEND_NULL_LABEL,
51262 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
51263 			(void*)&&ZEND_NULL_LABEL,
51264 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
51265 			(void*)&&ZEND_NULL_LABEL,
51266 			(void*)&&ZEND_NULL_LABEL,
51267 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
51268 			(void*)&&ZEND_NULL_LABEL,
51269 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
51270 			(void*)&&ZEND_NULL_LABEL,
51271 			(void*)&&ZEND_NULL_LABEL,
51272 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
51273 			(void*)&&ZEND_NULL_LABEL,
51274 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
51275 			(void*)&&ZEND_NULL_LABEL,
51276 			(void*)&&ZEND_NULL_LABEL,
51277 			(void*)&&ZEND_NULL_LABEL,
51278 			(void*)&&ZEND_NULL_LABEL,
51279 			(void*)&&ZEND_NULL_LABEL,
51280 			(void*)&&ZEND_NULL_LABEL,
51281 			(void*)&&ZEND_NULL_LABEL,
51282 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
51283 			(void*)&&ZEND_NULL_LABEL,
51284 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
51285 			(void*)&&ZEND_NULL_LABEL,
51286 			(void*)&&ZEND_NULL_LABEL,
51287 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
51288 			(void*)&&ZEND_NULL_LABEL,
51289 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
51290 			(void*)&&ZEND_NULL_LABEL,
51291 			(void*)&&ZEND_NULL_LABEL,
51292 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
51293 			(void*)&&ZEND_NULL_LABEL,
51294 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
51295 			(void*)&&ZEND_NULL_LABEL,
51296 			(void*)&&ZEND_NULL_LABEL,
51297 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
51298 			(void*)&&ZEND_NULL_LABEL,
51299 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
51300 			(void*)&&ZEND_NULL_LABEL,
51301 			(void*)&&ZEND_NULL_LABEL,
51302 			(void*)&&ZEND_NULL_LABEL,
51303 			(void*)&&ZEND_NULL_LABEL,
51304 			(void*)&&ZEND_NULL_LABEL,
51305 			(void*)&&ZEND_NULL_LABEL,
51306 			(void*)&&ZEND_NULL_LABEL,
51307 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
51308 			(void*)&&ZEND_NULL_LABEL,
51309 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
51310 			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
51311 			(void*)&&ZEND_NULL_LABEL,
51312 			(void*)&&ZEND_NULL_LABEL,
51313 			(void*)&&ZEND_NULL_LABEL,
51314 			(void*)&&ZEND_NULL_LABEL,
51315 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
51316 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
51317 			(void*)&&ZEND_NULL_LABEL,
51318 			(void*)&&ZEND_NULL_LABEL,
51319 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
51320 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
51321 			(void*)&&ZEND_NULL_LABEL,
51322 			(void*)&&ZEND_NULL_LABEL,
51323 			(void*)&&ZEND_NULL_LABEL,
51324 			(void*)&&ZEND_NULL_LABEL,
51325 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
51326 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
51327 			(void*)&&ZEND_NULL_LABEL,
51328 			(void*)&&ZEND_NULL_LABEL,
51329 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
51330 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
51331 			(void*)&&ZEND_NULL_LABEL,
51332 			(void*)&&ZEND_NULL_LABEL,
51333 			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
51334 			(void*)&&ZEND_NULL_LABEL,
51335 			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
51336 			(void*)&&ZEND_NULL_LABEL,
51337 			(void*)&&ZEND_NULL_LABEL,
51338 			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
51339 			(void*)&&ZEND_NULL_LABEL,
51340 			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
51341 			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
51342 			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
51343 			(void*)&&ZEND_JMP_SPEC_LABEL,
51344 			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
51345 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
51346 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
51347 			(void*)&&ZEND_NULL_LABEL,
51348 			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
51349 			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
51350 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
51351 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
51352 			(void*)&&ZEND_NULL_LABEL,
51353 			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
51354 			(void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
51355 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
51356 			(void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
51357 			(void*)&&ZEND_NULL_LABEL,
51358 			(void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
51359 			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
51360 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
51361 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
51362 			(void*)&&ZEND_NULL_LABEL,
51363 			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
51364 			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
51365 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
51366 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
51367 			(void*)&&ZEND_NULL_LABEL,
51368 			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
51369 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
51370 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
51371 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
51372 			(void*)&&ZEND_NULL_LABEL,
51373 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
51374 			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
51375 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_LABEL,
51376 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_LABEL,
51377 			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
51378 			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
51379 			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
51380 			(void*)&&ZEND_NULL_LABEL,
51381 			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
51382 			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
51383 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
51384 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
51385 			(void*)&&ZEND_NULL_LABEL,
51386 			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
51387 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
51388 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
51389 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
51390 			(void*)&&ZEND_NULL_LABEL,
51391 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
51392 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
51393 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51394 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51395 			(void*)&&ZEND_NULL_LABEL,
51396 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
51397 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
51398 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51399 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
51400 			(void*)&&ZEND_NULL_LABEL,
51401 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
51402 			(void*)&&ZEND_NULL_LABEL,
51403 			(void*)&&ZEND_NULL_LABEL,
51404 			(void*)&&ZEND_NULL_LABEL,
51405 			(void*)&&ZEND_NULL_LABEL,
51406 			(void*)&&ZEND_NULL_LABEL,
51407 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
51408 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
51409 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
51410 			(void*)&&ZEND_NULL_LABEL,
51411 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
51412 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
51413 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
51414 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
51415 			(void*)&&ZEND_NULL_LABEL,
51416 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
51417 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
51418 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
51419 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
51420 			(void*)&&ZEND_NULL_LABEL,
51421 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
51422 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
51423 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
51424 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
51425 			(void*)&&ZEND_NULL_LABEL,
51426 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
51427 			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
51428 			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
51429 			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
51430 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
51431 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
51432 			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
51433 			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
51434 			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
51435 			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
51436 			(void*)&&ZEND_NULL_LABEL,
51437 			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
51438 			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
51439 			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
51440 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_LABEL,
51441 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
51442 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
51443 			(void*)&&ZEND_NULL_LABEL,
51444 			(void*)&&ZEND_NULL_LABEL,
51445 			(void*)&&ZEND_NULL_LABEL,
51446 			(void*)&&ZEND_NULL_LABEL,
51447 			(void*)&&ZEND_NULL_LABEL,
51448 			(void*)&&ZEND_NULL_LABEL,
51449 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_LABEL,
51450 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_LABEL,
51451 			(void*)&&ZEND_NULL_LABEL,
51452 			(void*)&&ZEND_NULL_LABEL,
51453 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_LABEL,
51454 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_QUICK_LABEL,
51455 			(void*)&&ZEND_NULL_LABEL,
51456 			(void*)&&ZEND_NULL_LABEL,
51457 			(void*)&&ZEND_SEND_REF_SPEC_VAR_LABEL,
51458 			(void*)&&ZEND_NULL_LABEL,
51459 			(void*)&&ZEND_SEND_REF_SPEC_CV_LABEL,
51460 			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
51461 			(void*)&&ZEND_NULL_LABEL,
51462 			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
51463 			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
51464 			(void*)&&ZEND_NULL_LABEL,
51465 			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
51466 			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
51467 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
51468 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
51469 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
51470 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
51471 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
51472 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
51473 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
51474 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
51475 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
51476 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
51477 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
51478 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
51479 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
51480 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
51481 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
51482 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
51483 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
51484 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
51485 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
51486 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
51487 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
51488 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
51489 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
51490 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
51491 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
51492 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
51493 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
51494 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
51495 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
51496 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
51497 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
51498 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
51499 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
51500 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
51501 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
51502 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
51503 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
51504 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
51505 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
51506 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
51507 			(void*)&&ZEND_NULL_LABEL,
51508 			(void*)&&ZEND_NULL_LABEL,
51509 			(void*)&&ZEND_NULL_LABEL,
51510 			(void*)&&ZEND_NULL_LABEL,
51511 			(void*)&&ZEND_NULL_LABEL,
51512 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
51513 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
51514 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
51515 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
51516 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
51517 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
51518 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
51519 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
51520 			(void*)&&ZEND_NULL_LABEL,
51521 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
51522 			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
51523 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
51524 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
51525 			(void*)&&ZEND_NULL_LABEL,
51526 			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
51527 			(void*)&&ZEND_NULL_LABEL,
51528 			(void*)&&ZEND_NULL_LABEL,
51529 			(void*)&&ZEND_NULL_LABEL,
51530 			(void*)&&ZEND_NULL_LABEL,
51531 			(void*)&&ZEND_NULL_LABEL,
51532 			(void*)&&ZEND_NULL_LABEL,
51533 			(void*)&&ZEND_NULL_LABEL,
51534 			(void*)&&ZEND_NULL_LABEL,
51535 			(void*)&&ZEND_NULL_LABEL,
51536 			(void*)&&ZEND_NULL_LABEL,
51537 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
51538 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
51539 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
51540 			(void*)&&ZEND_NULL_LABEL,
51541 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
51542 			(void*)&&ZEND_NULL_LABEL,
51543 			(void*)&&ZEND_NULL_LABEL,
51544 			(void*)&&ZEND_NULL_LABEL,
51545 			(void*)&&ZEND_NULL_LABEL,
51546 			(void*)&&ZEND_NULL_LABEL,
51547 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
51548 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
51549 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
51550 			(void*)&&ZEND_NULL_LABEL,
51551 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
51552 			(void*)&&ZEND_NULL_LABEL,
51553 			(void*)&&ZEND_NULL_LABEL,
51554 			(void*)&&ZEND_NULL_LABEL,
51555 			(void*)&&ZEND_NULL_LABEL,
51556 			(void*)&&ZEND_NULL_LABEL,
51557 			(void*)&&ZEND_NULL_LABEL,
51558 			(void*)&&ZEND_NULL_LABEL,
51559 			(void*)&&ZEND_NULL_LABEL,
51560 			(void*)&&ZEND_NULL_LABEL,
51561 			(void*)&&ZEND_NULL_LABEL,
51562 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
51563 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
51564 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
51565 			(void*)&&ZEND_NULL_LABEL,
51566 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
51567 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
51568 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
51569 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
51570 			(void*)&&ZEND_NULL_LABEL,
51571 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
51572 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
51573 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
51574 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
51575 			(void*)&&ZEND_NULL_LABEL,
51576 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
51577 			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
51578 			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
51579 			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
51580 			(void*)&&ZEND_NULL_LABEL,
51581 			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
51582 			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
51583 			(void*)&&ZEND_EXIT_SPEC_LABEL,
51584 			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
51585 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
51586 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
51587 			(void*)&&ZEND_NULL_LABEL,
51588 			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
51589 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
51590 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
51591 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
51592 			(void*)&&ZEND_NULL_LABEL,
51593 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
51594 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
51595 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
51596 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
51597 			(void*)&&ZEND_NULL_LABEL,
51598 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
51599 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
51600 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
51601 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
51602 			(void*)&&ZEND_NULL_LABEL,
51603 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
51604 			(void*)&&ZEND_NULL_LABEL,
51605 			(void*)&&ZEND_NULL_LABEL,
51606 			(void*)&&ZEND_NULL_LABEL,
51607 			(void*)&&ZEND_NULL_LABEL,
51608 			(void*)&&ZEND_NULL_LABEL,
51609 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
51610 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
51611 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
51612 			(void*)&&ZEND_NULL_LABEL,
51613 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
51614 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
51615 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
51616 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
51617 			(void*)&&ZEND_NULL_LABEL,
51618 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
51619 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
51620 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
51621 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
51622 			(void*)&&ZEND_NULL_LABEL,
51623 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
51624 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
51625 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
51626 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
51627 			(void*)&&ZEND_NULL_LABEL,
51628 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
51629 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
51630 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
51631 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
51632 			(void*)&&ZEND_NULL_LABEL,
51633 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
51634 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
51635 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
51636 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
51637 			(void*)&&ZEND_NULL_LABEL,
51638 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
51639 			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
51640 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
51641 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
51642 			(void*)&&ZEND_NULL_LABEL,
51643 			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
51644 			(void*)&&ZEND_NULL_LABEL,
51645 			(void*)&&ZEND_NULL_LABEL,
51646 			(void*)&&ZEND_NULL_LABEL,
51647 			(void*)&&ZEND_NULL_LABEL,
51648 			(void*)&&ZEND_NULL_LABEL,
51649 			(void*)&&ZEND_NULL_LABEL,
51650 			(void*)&&ZEND_NULL_LABEL,
51651 			(void*)&&ZEND_NULL_LABEL,
51652 			(void*)&&ZEND_NULL_LABEL,
51653 			(void*)&&ZEND_NULL_LABEL,
51654 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
51655 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
51656 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
51657 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
51658 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
51659 			(void*)&&ZEND_NULL_LABEL,
51660 			(void*)&&ZEND_NULL_LABEL,
51661 			(void*)&&ZEND_NULL_LABEL,
51662 			(void*)&&ZEND_NULL_LABEL,
51663 			(void*)&&ZEND_NULL_LABEL,
51664 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
51665 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
51666 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
51667 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
51668 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
51669 			(void*)&&ZEND_NULL_LABEL,
51670 			(void*)&&ZEND_NULL_LABEL,
51671 			(void*)&&ZEND_NULL_LABEL,
51672 			(void*)&&ZEND_NULL_LABEL,
51673 			(void*)&&ZEND_NULL_LABEL,
51674 			(void*)&&ZEND_NULL_LABEL,
51675 			(void*)&&ZEND_NULL_LABEL,
51676 			(void*)&&ZEND_NULL_LABEL,
51677 			(void*)&&ZEND_NULL_LABEL,
51678 			(void*)&&ZEND_NULL_LABEL,
51679 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
51680 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
51681 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
51682 			(void*)&&ZEND_NULL_LABEL,
51683 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
51684 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
51685 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
51686 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
51687 			(void*)&&ZEND_NULL_LABEL,
51688 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
51689 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
51690 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
51691 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
51692 			(void*)&&ZEND_NULL_LABEL,
51693 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
51694 			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
51695 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
51696 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
51697 			(void*)&&ZEND_NULL_LABEL,
51698 			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
51699 			(void*)&&ZEND_NULL_LABEL,
51700 			(void*)&&ZEND_NULL_LABEL,
51701 			(void*)&&ZEND_NULL_LABEL,
51702 			(void*)&&ZEND_NULL_LABEL,
51703 			(void*)&&ZEND_NULL_LABEL,
51704 			(void*)&&ZEND_NULL_LABEL,
51705 			(void*)&&ZEND_NULL_LABEL,
51706 			(void*)&&ZEND_NULL_LABEL,
51707 			(void*)&&ZEND_NULL_LABEL,
51708 			(void*)&&ZEND_NULL_LABEL,
51709 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
51710 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
51711 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
51712 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
51713 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
51714 			(void*)&&ZEND_NULL_LABEL,
51715 			(void*)&&ZEND_NULL_LABEL,
51716 			(void*)&&ZEND_NULL_LABEL,
51717 			(void*)&&ZEND_NULL_LABEL,
51718 			(void*)&&ZEND_NULL_LABEL,
51719 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
51720 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
51721 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
51722 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
51723 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
51724 			(void*)&&ZEND_NULL_LABEL,
51725 			(void*)&&ZEND_NULL_LABEL,
51726 			(void*)&&ZEND_NULL_LABEL,
51727 			(void*)&&ZEND_NULL_LABEL,
51728 			(void*)&&ZEND_NULL_LABEL,
51729 			(void*)&&ZEND_NULL_LABEL,
51730 			(void*)&&ZEND_NULL_LABEL,
51731 			(void*)&&ZEND_NULL_LABEL,
51732 			(void*)&&ZEND_NULL_LABEL,
51733 			(void*)&&ZEND_NULL_LABEL,
51734 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
51735 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
51736 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
51737 			(void*)&&ZEND_NULL_LABEL,
51738 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
51739 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
51740 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
51741 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
51742 			(void*)&&ZEND_NULL_LABEL,
51743 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
51744 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
51745 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
51746 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
51747 			(void*)&&ZEND_NULL_LABEL,
51748 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
51749 			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
51750 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
51751 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
51752 			(void*)&&ZEND_NULL_LABEL,
51753 			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
51754 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
51755 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
51756 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
51757 			(void*)&&ZEND_NULL_LABEL,
51758 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
51759 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
51760 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51761 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51762 			(void*)&&ZEND_NULL_LABEL,
51763 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
51764 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
51765 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51766 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51767 			(void*)&&ZEND_NULL_LABEL,
51768 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
51769 			(void*)&&ZEND_NULL_LABEL,
51770 			(void*)&&ZEND_NULL_LABEL,
51771 			(void*)&&ZEND_NULL_LABEL,
51772 			(void*)&&ZEND_NULL_LABEL,
51773 			(void*)&&ZEND_NULL_LABEL,
51774 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
51775 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
51776 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
51777 			(void*)&&ZEND_NULL_LABEL,
51778 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
51779 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
51780 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
51781 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
51782 			(void*)&&ZEND_NULL_LABEL,
51783 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
51784 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
51785 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51786 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51787 			(void*)&&ZEND_NULL_LABEL,
51788 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
51789 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
51790 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51791 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
51792 			(void*)&&ZEND_NULL_LABEL,
51793 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
51794 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
51795 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
51796 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
51797 			(void*)&&ZEND_NULL_LABEL,
51798 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
51799 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
51800 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
51801 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
51802 			(void*)&&ZEND_NULL_LABEL,
51803 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
51804 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
51805 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
51806 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
51807 			(void*)&&ZEND_NULL_LABEL,
51808 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
51809 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
51810 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
51811 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
51812 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
51813 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
51814 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
51815 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
51816 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
51817 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
51818 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
51819 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
51820 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
51821 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
51822 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
51823 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
51824 			(void*)&&ZEND_NULL_LABEL,
51825 			(void*)&&ZEND_NULL_LABEL,
51826 			(void*)&&ZEND_NULL_LABEL,
51827 			(void*)&&ZEND_NULL_LABEL,
51828 			(void*)&&ZEND_NULL_LABEL,
51829 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
51830 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
51831 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
51832 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
51833 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
51834 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
51835 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
51836 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
51837 			(void*)&&ZEND_NULL_LABEL,
51838 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
51839 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
51840 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
51841 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
51842 			(void*)&&ZEND_NULL_LABEL,
51843 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
51844 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
51845 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
51846 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
51847 			(void*)&&ZEND_NULL_LABEL,
51848 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
51849 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
51850 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
51851 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
51852 			(void*)&&ZEND_NULL_LABEL,
51853 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
51854 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
51855 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
51856 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
51857 			(void*)&&ZEND_NULL_LABEL,
51858 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
51859 			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
51860 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
51861 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
51862 			(void*)&&ZEND_NULL_LABEL,
51863 			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
51864 			(void*)&&ZEND_NULL_LABEL,
51865 			(void*)&&ZEND_NULL_LABEL,
51866 			(void*)&&ZEND_NULL_LABEL,
51867 			(void*)&&ZEND_NULL_LABEL,
51868 			(void*)&&ZEND_NULL_LABEL,
51869 			(void*)&&ZEND_NULL_LABEL,
51870 			(void*)&&ZEND_NULL_LABEL,
51871 			(void*)&&ZEND_NULL_LABEL,
51872 			(void*)&&ZEND_NULL_LABEL,
51873 			(void*)&&ZEND_NULL_LABEL,
51874 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
51875 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
51876 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
51877 			(void*)&&ZEND_NULL_LABEL,
51878 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
51879 			(void*)&&ZEND_NULL_LABEL,
51880 			(void*)&&ZEND_NULL_LABEL,
51881 			(void*)&&ZEND_NULL_LABEL,
51882 			(void*)&&ZEND_NULL_LABEL,
51883 			(void*)&&ZEND_NULL_LABEL,
51884 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
51885 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
51886 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
51887 			(void*)&&ZEND_NULL_LABEL,
51888 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
51889 			(void*)&&ZEND_NULL_LABEL,
51890 			(void*)&&ZEND_NULL_LABEL,
51891 			(void*)&&ZEND_NULL_LABEL,
51892 			(void*)&&ZEND_NULL_LABEL,
51893 			(void*)&&ZEND_NULL_LABEL,
51894 			(void*)&&ZEND_NULL_LABEL,
51895 			(void*)&&ZEND_NULL_LABEL,
51896 			(void*)&&ZEND_NULL_LABEL,
51897 			(void*)&&ZEND_NULL_LABEL,
51898 			(void*)&&ZEND_NULL_LABEL,
51899 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
51900 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
51901 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
51902 			(void*)&&ZEND_NULL_LABEL,
51903 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
51904 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
51905 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
51906 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
51907 			(void*)&&ZEND_NULL_LABEL,
51908 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
51909 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
51910 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
51911 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
51912 			(void*)&&ZEND_NULL_LABEL,
51913 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
51914 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
51915 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
51916 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
51917 			(void*)&&ZEND_NULL_LABEL,
51918 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
51919 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
51920 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51921 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51922 			(void*)&&ZEND_NULL_LABEL,
51923 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
51924 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
51925 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51926 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51927 			(void*)&&ZEND_NULL_LABEL,
51928 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
51929 			(void*)&&ZEND_NULL_LABEL,
51930 			(void*)&&ZEND_NULL_LABEL,
51931 			(void*)&&ZEND_NULL_LABEL,
51932 			(void*)&&ZEND_NULL_LABEL,
51933 			(void*)&&ZEND_NULL_LABEL,
51934 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
51935 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51936 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
51937 			(void*)&&ZEND_NULL_LABEL,
51938 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
51939 			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
51940 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_LABEL,
51941 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_LABEL,
51942 			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
51943 			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
51944 			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
51945 			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
51946 			(void*)&&ZEND_TICKS_SPEC_LABEL,
51947 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_LABEL,
51948 			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
51949 			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
51950 			(void*)&&ZEND_THROW_SPEC_TMP_LABEL,
51951 			(void*)&&ZEND_THROW_SPEC_VAR_LABEL,
51952 			(void*)&&ZEND_NULL_LABEL,
51953 			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
51954 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
51955 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
51956 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
51957 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
51958 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
51959 			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
51960 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
51961 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
51962 			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
51963 			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
51964 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
51965 			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
51966 			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
51967 			(void*)&&ZEND_NULL_LABEL,
51968 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
51969 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
51970 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
51971 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
51972 			(void*)&&ZEND_NULL_LABEL,
51973 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
51974 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
51975 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
51976 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
51977 			(void*)&&ZEND_NULL_LABEL,
51978 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
51979 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
51980 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
51981 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
51982 			(void*)&&ZEND_NULL_LABEL,
51983 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
51984 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
51985 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
51986 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
51987 			(void*)&&ZEND_NULL_LABEL,
51988 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
51989 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
51990 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
51991 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
51992 			(void*)&&ZEND_NULL_LABEL,
51993 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
51994 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
51995 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
51996 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
51997 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
51998 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
51999 			(void*)&&ZEND_NULL_LABEL,
52000 			(void*)&&ZEND_NULL_LABEL,
52001 			(void*)&&ZEND_NULL_LABEL,
52002 			(void*)&&ZEND_NULL_LABEL,
52003 			(void*)&&ZEND_NULL_LABEL,
52004 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
52005 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
52006 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
52007 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
52008 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
52009 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
52010 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
52011 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
52012 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
52013 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
52014 			(void*)&&ZEND_NULL_LABEL,
52015 			(void*)&&ZEND_NULL_LABEL,
52016 			(void*)&&ZEND_NULL_LABEL,
52017 			(void*)&&ZEND_NULL_LABEL,
52018 			(void*)&&ZEND_NULL_LABEL,
52019 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
52020 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
52021 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
52022 			(void*)&&ZEND_NULL_LABEL,
52023 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
52024 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
52025 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
52026 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
52027 			(void*)&&ZEND_NULL_LABEL,
52028 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
52029 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
52030 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52031 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52032 			(void*)&&ZEND_NULL_LABEL,
52033 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
52034 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
52035 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52036 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52037 			(void*)&&ZEND_NULL_LABEL,
52038 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
52039 			(void*)&&ZEND_NULL_LABEL,
52040 			(void*)&&ZEND_NULL_LABEL,
52041 			(void*)&&ZEND_NULL_LABEL,
52042 			(void*)&&ZEND_NULL_LABEL,
52043 			(void*)&&ZEND_NULL_LABEL,
52044 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
52045 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
52046 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
52047 			(void*)&&ZEND_NULL_LABEL,
52048 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
52049 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_LABEL,
52050 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_LABEL,
52051 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_LABEL,
52052 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_LABEL,
52053 			(void*)&&ZEND_NULL_LABEL,
52054 			(void*)&&ZEND_NULL_LABEL,
52055 			(void*)&&ZEND_NULL_LABEL,
52056 			(void*)&&ZEND_NULL_LABEL,
52057 			(void*)&&ZEND_NULL_LABEL,
52058 			(void*)&&ZEND_NULL_LABEL,
52059 			(void*)&&ZEND_NULL_LABEL,
52060 			(void*)&&ZEND_NULL_LABEL,
52061 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_LABEL,
52062 			(void*)&&ZEND_NULL_LABEL,
52063 			(void*)&&ZEND_SEND_VAR_SPEC_CV_LABEL,
52064 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
52065 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
52066 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
52067 			(void*)&&ZEND_NULL_LABEL,
52068 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
52069 			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
52070 			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
52071 			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
52072 			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
52073 			(void*)&&ZEND_NULL_LABEL,
52074 			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
52075 			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
52076 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
52077 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
52078 			(void*)&&ZEND_NULL_LABEL,
52079 			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
52080 			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
52081 			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
52082 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
52083 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
52084 			(void*)&&ZEND_NULL_LABEL,
52085 			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
52086 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
52087 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
52088 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
52089 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
52090 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
52091 			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
52092 			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
52093 			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
52094 			(void*)&&ZEND_NULL_LABEL,
52095 			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
52096 			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
52097 			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
52098 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
52099 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
52100 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
52101 			(void*)&&ZEND_NULL_LABEL,
52102 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
52103 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
52104 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
52105 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
52106 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
52107 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
52108 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
52109 			(void*)&&ZEND_NULL_LABEL,
52110 			(void*)&&ZEND_NULL_LABEL,
52111 			(void*)&&ZEND_NULL_LABEL,
52112 			(void*)&&ZEND_NULL_LABEL,
52113 			(void*)&&ZEND_NULL_LABEL,
52114 			(void*)&&ZEND_NULL_LABEL,
52115 			(void*)&&ZEND_NULL_LABEL,
52116 			(void*)&&ZEND_NULL_LABEL,
52117 			(void*)&&ZEND_NULL_LABEL,
52118 			(void*)&&ZEND_NULL_LABEL,
52119 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
52120 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
52121 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
52122 			(void*)&&ZEND_NULL_LABEL,
52123 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
52124 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
52125 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52126 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52127 			(void*)&&ZEND_NULL_LABEL,
52128 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
52129 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
52130 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
52131 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
52132 			(void*)&&ZEND_NULL_LABEL,
52133 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
52134 			(void*)&&ZEND_NULL_LABEL,
52135 			(void*)&&ZEND_NULL_LABEL,
52136 			(void*)&&ZEND_NULL_LABEL,
52137 			(void*)&&ZEND_NULL_LABEL,
52138 			(void*)&&ZEND_NULL_LABEL,
52139 			(void*)&&ZEND_NULL_LABEL,
52140 			(void*)&&ZEND_NULL_LABEL,
52141 			(void*)&&ZEND_NULL_LABEL,
52142 			(void*)&&ZEND_NULL_LABEL,
52143 			(void*)&&ZEND_NULL_LABEL,
52144 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
52145 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
52146 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
52147 			(void*)&&ZEND_NULL_LABEL,
52148 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
52149 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
52150 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52151 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52152 			(void*)&&ZEND_NULL_LABEL,
52153 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
52154 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
52155 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
52156 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
52157 			(void*)&&ZEND_NULL_LABEL,
52158 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
52159 			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
52160 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
52161 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
52162 			(void*)&&ZEND_NULL_LABEL,
52163 			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
52164 			(void*)&&ZEND_NULL_LABEL,
52165 			(void*)&&ZEND_NULL_LABEL,
52166 			(void*)&&ZEND_NULL_LABEL,
52167 			(void*)&&ZEND_NULL_LABEL,
52168 			(void*)&&ZEND_NULL_LABEL,
52169 			(void*)&&ZEND_NULL_LABEL,
52170 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
52171 			(void*)&&ZEND_NULL_LABEL,
52172 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
52173 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
52174 			(void*)&&ZEND_NULL_LABEL,
52175 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
52176 			(void*)&&ZEND_NULL_LABEL,
52177 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
52178 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
52179 			(void*)&&ZEND_NULL_LABEL,
52180 			(void*)&&ZEND_NULL_LABEL,
52181 			(void*)&&ZEND_NULL_LABEL,
52182 			(void*)&&ZEND_NULL_LABEL,
52183 			(void*)&&ZEND_NULL_LABEL,
52184 			(void*)&&ZEND_NULL_LABEL,
52185 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
52186 			(void*)&&ZEND_NULL_LABEL,
52187 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
52188 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
52189 			(void*)&&ZEND_NULL_LABEL,
52190 			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
52191 			(void*)&&ZEND_NULL_LABEL,
52192 			(void*)&&ZEND_NULL_LABEL,
52193 			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
52194 			(void*)&&ZEND_NULL_LABEL,
52195 			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
52196 			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
52197 			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_LABEL,
52198 			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
52199 			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
52200 			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
52201 			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
52202 			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
52203 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
52204 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
52205 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
52206 			(void*)&&ZEND_NULL_LABEL,
52207 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
52208 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
52209 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52210 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52211 			(void*)&&ZEND_NULL_LABEL,
52212 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
52213 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
52214 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52215 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
52216 			(void*)&&ZEND_NULL_LABEL,
52217 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
52218 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
52219 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52220 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
52221 			(void*)&&ZEND_NULL_LABEL,
52222 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
52223 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
52224 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
52225 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
52226 			(void*)&&ZEND_NULL_LABEL,
52227 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
52228 			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
52229 			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
52230 			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
52231 			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
52232 			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
52233 			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
52234 			(void*)&&ZEND_NULL_LABEL,
52235 			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
52236 			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
52237 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
52238 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
52239 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
52240 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
52241 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
52242 			(void*)&&ZEND_NULL_LABEL,
52243 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
52244 			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
52245 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
52246 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
52247 			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
52248 			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
52249 			(void*)&&ZEND_YIELD_SPEC_CONST_TMP_LABEL,
52250 			(void*)&&ZEND_YIELD_SPEC_CONST_VAR_LABEL,
52251 			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
52252 			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
52253 			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
52254 			(void*)&&ZEND_YIELD_SPEC_TMP_TMP_LABEL,
52255 			(void*)&&ZEND_YIELD_SPEC_TMP_VAR_LABEL,
52256 			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
52257 			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
52258 			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
52259 			(void*)&&ZEND_YIELD_SPEC_VAR_TMP_LABEL,
52260 			(void*)&&ZEND_YIELD_SPEC_VAR_VAR_LABEL,
52261 			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
52262 			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
52263 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
52264 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMP_LABEL,
52265 			(void*)&&ZEND_YIELD_SPEC_UNUSED_VAR_LABEL,
52266 			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
52267 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
52268 			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
52269 			(void*)&&ZEND_YIELD_SPEC_CV_TMP_LABEL,
52270 			(void*)&&ZEND_YIELD_SPEC_CV_VAR_LABEL,
52271 			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
52272 			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
52273 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
52274 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
52275 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
52276 			(void*)&&ZEND_NULL_LABEL,
52277 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
52278 			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
52279 			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
52280 			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
52281 			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
52282 			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
52283 			(void*)&&ZEND_YIELD_FROM_SPEC_TMP_LABEL,
52284 			(void*)&&ZEND_YIELD_FROM_SPEC_VAR_LABEL,
52285 			(void*)&&ZEND_NULL_LABEL,
52286 			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
52287 			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
52288 			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
52289 			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
52290 			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
52291 			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
52292 			(void*)&&ZEND_NULL_LABEL,
52293 			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
52294 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
52295 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
52296 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
52297 			(void*)&&ZEND_NULL_LABEL,
52298 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
52299 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
52300 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
52301 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
52302 			(void*)&&ZEND_NULL_LABEL,
52303 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
52304 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
52305 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
52306 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
52307 			(void*)&&ZEND_NULL_LABEL,
52308 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
52309 			(void*)&&ZEND_NULL_LABEL,
52310 			(void*)&&ZEND_NULL_LABEL,
52311 			(void*)&&ZEND_NULL_LABEL,
52312 			(void*)&&ZEND_NULL_LABEL,
52313 			(void*)&&ZEND_NULL_LABEL,
52314 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
52315 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
52316 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
52317 			(void*)&&ZEND_NULL_LABEL,
52318 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
52319 			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
52320 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
52321 			(void*)&&ZEND_NULL_LABEL,
52322 			(void*)&&ZEND_NULL_LABEL,
52323 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
52324 			(void*)&&ZEND_NULL_LABEL,
52325 			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
52326 			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
52327 			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
52328 			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
52329 			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
52330 			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
52331 			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
52332 			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
52333 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
52334 			(void*)&&ZEND_NULL_LABEL,
52335 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
52336 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
52337 			(void*)&&ZEND_NULL_LABEL,
52338 			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
52339 			(void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
52340 			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
52341 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_LABEL,
52342 			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
52343 			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
52344 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
52345 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
52346 			(void*)&&ZEND_NULL_LABEL,
52347 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
52348 			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
52349 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
52350 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
52351 			(void*)&&ZEND_NULL_LABEL,
52352 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
52353 			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
52354 			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
52355 			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
52356 			(void*)&&ZEND_NULL_LABEL,
52357 			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
52358 			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
52359 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
52360 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
52361 			(void*)&&ZEND_NULL_LABEL,
52362 			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
52363 			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
52364 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
52365 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
52366 			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
52367 			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
52368 			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
52369 			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
52370 			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
52371 			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
52372 			(void*)&&ZEND_NULL_LABEL,
52373 			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
52374 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
52375 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
52376 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
52377 			(void*)&&ZEND_NULL_LABEL,
52378 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
52379 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
52380 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
52381 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
52382 			(void*)&&ZEND_NULL_LABEL,
52383 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
52384 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
52385 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
52386 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
52387 			(void*)&&ZEND_NULL_LABEL,
52388 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
52389 			(void*)&&ZEND_NULL_LABEL,
52390 			(void*)&&ZEND_NULL_LABEL,
52391 			(void*)&&ZEND_NULL_LABEL,
52392 			(void*)&&ZEND_NULL_LABEL,
52393 			(void*)&&ZEND_NULL_LABEL,
52394 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
52395 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
52396 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
52397 			(void*)&&ZEND_NULL_LABEL,
52398 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
52399 			(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
52400 			(void*)&&ZEND_NULL_LABEL,
52401 			(void*)&&ZEND_NULL_LABEL,
52402 			(void*)&&ZEND_NULL_LABEL,
52403 			(void*)&&ZEND_NULL_LABEL,
52404 			(void*)&&ZEND_NULL_LABEL,
52405 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52406 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52407 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52408 			(void*)&&ZEND_NULL_LABEL,
52409 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52410 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52411 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52412 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52413 			(void*)&&ZEND_NULL_LABEL,
52414 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52415 			(void*)&&ZEND_NULL_LABEL,
52416 			(void*)&&ZEND_NULL_LABEL,
52417 			(void*)&&ZEND_NULL_LABEL,
52418 			(void*)&&ZEND_NULL_LABEL,
52419 			(void*)&&ZEND_NULL_LABEL,
52420 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52421 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52422 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52423 			(void*)&&ZEND_NULL_LABEL,
52424 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52425 			(void*)&&ZEND_NULL_LABEL,
52426 			(void*)&&ZEND_NULL_LABEL,
52427 			(void*)&&ZEND_NULL_LABEL,
52428 			(void*)&&ZEND_NULL_LABEL,
52429 			(void*)&&ZEND_NULL_LABEL,
52430 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
52431 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52432 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52433 			(void*)&&ZEND_NULL_LABEL,
52434 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52435 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
52436 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52437 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52438 			(void*)&&ZEND_NULL_LABEL,
52439 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52440 			(void*)&&ZEND_NULL_LABEL,
52441 			(void*)&&ZEND_NULL_LABEL,
52442 			(void*)&&ZEND_NULL_LABEL,
52443 			(void*)&&ZEND_NULL_LABEL,
52444 			(void*)&&ZEND_NULL_LABEL,
52445 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
52446 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52447 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52448 			(void*)&&ZEND_NULL_LABEL,
52449 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52450 			(void*)&&ZEND_NULL_LABEL,
52451 			(void*)&&ZEND_NULL_LABEL,
52452 			(void*)&&ZEND_NULL_LABEL,
52453 			(void*)&&ZEND_NULL_LABEL,
52454 			(void*)&&ZEND_NULL_LABEL,
52455 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52456 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52457 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52458 			(void*)&&ZEND_NULL_LABEL,
52459 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52460 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52461 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52462 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52463 			(void*)&&ZEND_NULL_LABEL,
52464 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52465 			(void*)&&ZEND_NULL_LABEL,
52466 			(void*)&&ZEND_NULL_LABEL,
52467 			(void*)&&ZEND_NULL_LABEL,
52468 			(void*)&&ZEND_NULL_LABEL,
52469 			(void*)&&ZEND_NULL_LABEL,
52470 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52471 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52472 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52473 			(void*)&&ZEND_NULL_LABEL,
52474 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52475 			(void*)&&ZEND_NULL_LABEL,
52476 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
52477 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
52478 			(void*)&&ZEND_NULL_LABEL,
52479 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
52480 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52481 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52482 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52483 			(void*)&&ZEND_NULL_LABEL,
52484 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52485 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52486 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52487 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52488 			(void*)&&ZEND_NULL_LABEL,
52489 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52490 			(void*)&&ZEND_NULL_LABEL,
52491 			(void*)&&ZEND_NULL_LABEL,
52492 			(void*)&&ZEND_NULL_LABEL,
52493 			(void*)&&ZEND_NULL_LABEL,
52494 			(void*)&&ZEND_NULL_LABEL,
52495 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52496 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52497 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52498 			(void*)&&ZEND_NULL_LABEL,
52499 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52500 			(void*)&&ZEND_NULL_LABEL,
52501 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
52502 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
52503 			(void*)&&ZEND_NULL_LABEL,
52504 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
52505 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
52506 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52507 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52508 			(void*)&&ZEND_NULL_LABEL,
52509 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52510 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
52511 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52512 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52513 			(void*)&&ZEND_NULL_LABEL,
52514 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52515 			(void*)&&ZEND_NULL_LABEL,
52516 			(void*)&&ZEND_NULL_LABEL,
52517 			(void*)&&ZEND_NULL_LABEL,
52518 			(void*)&&ZEND_NULL_LABEL,
52519 			(void*)&&ZEND_NULL_LABEL,
52520 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
52521 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52522 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52523 			(void*)&&ZEND_NULL_LABEL,
52524 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52525 			(void*)&&ZEND_NULL_LABEL,
52526 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
52527 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
52528 			(void*)&&ZEND_NULL_LABEL,
52529 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
52530 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52531 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52532 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52533 			(void*)&&ZEND_NULL_LABEL,
52534 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52535 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52536 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52537 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52538 			(void*)&&ZEND_NULL_LABEL,
52539 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52540 			(void*)&&ZEND_NULL_LABEL,
52541 			(void*)&&ZEND_NULL_LABEL,
52542 			(void*)&&ZEND_NULL_LABEL,
52543 			(void*)&&ZEND_NULL_LABEL,
52544 			(void*)&&ZEND_NULL_LABEL,
52545 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52546 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52547 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52548 			(void*)&&ZEND_NULL_LABEL,
52549 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52550 			(void*)&&ZEND_NULL_LABEL,
52551 			(void*)&&ZEND_NULL_LABEL,
52552 			(void*)&&ZEND_NULL_LABEL,
52553 			(void*)&&ZEND_NULL_LABEL,
52554 			(void*)&&ZEND_NULL_LABEL,
52555 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52556 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52557 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52558 			(void*)&&ZEND_NULL_LABEL,
52559 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52560 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52561 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52562 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52563 			(void*)&&ZEND_NULL_LABEL,
52564 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52565 			(void*)&&ZEND_NULL_LABEL,
52566 			(void*)&&ZEND_NULL_LABEL,
52567 			(void*)&&ZEND_NULL_LABEL,
52568 			(void*)&&ZEND_NULL_LABEL,
52569 			(void*)&&ZEND_NULL_LABEL,
52570 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
52571 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52572 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52573 			(void*)&&ZEND_NULL_LABEL,
52574 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
52575 			(void*)&&ZEND_NULL_LABEL,
52576 			(void*)&&ZEND_NULL_LABEL,
52577 			(void*)&&ZEND_NULL_LABEL,
52578 			(void*)&&ZEND_NULL_LABEL,
52579 			(void*)&&ZEND_NULL_LABEL,
52580 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52581 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52582 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52583 			(void*)&&ZEND_NULL_LABEL,
52584 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52585 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52586 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52587 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52588 			(void*)&&ZEND_NULL_LABEL,
52589 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52590 			(void*)&&ZEND_NULL_LABEL,
52591 			(void*)&&ZEND_NULL_LABEL,
52592 			(void*)&&ZEND_NULL_LABEL,
52593 			(void*)&&ZEND_NULL_LABEL,
52594 			(void*)&&ZEND_NULL_LABEL,
52595 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52596 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52597 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52598 			(void*)&&ZEND_NULL_LABEL,
52599 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52600 			(void*)&&ZEND_NULL_LABEL,
52601 			(void*)&&ZEND_NULL_LABEL,
52602 			(void*)&&ZEND_NULL_LABEL,
52603 			(void*)&&ZEND_NULL_LABEL,
52604 			(void*)&&ZEND_NULL_LABEL,
52605 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52606 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52607 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52608 			(void*)&&ZEND_NULL_LABEL,
52609 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52610 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52611 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52612 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52613 			(void*)&&ZEND_NULL_LABEL,
52614 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52615 			(void*)&&ZEND_NULL_LABEL,
52616 			(void*)&&ZEND_NULL_LABEL,
52617 			(void*)&&ZEND_NULL_LABEL,
52618 			(void*)&&ZEND_NULL_LABEL,
52619 			(void*)&&ZEND_NULL_LABEL,
52620 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52621 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52622 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52623 			(void*)&&ZEND_NULL_LABEL,
52624 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52625 			(void*)&&ZEND_NULL_LABEL,
52626 			(void*)&&ZEND_NULL_LABEL,
52627 			(void*)&&ZEND_NULL_LABEL,
52628 			(void*)&&ZEND_NULL_LABEL,
52629 			(void*)&&ZEND_NULL_LABEL,
52630 			(void*)&&ZEND_NULL_LABEL,
52631 			(void*)&&ZEND_NULL_LABEL,
52632 			(void*)&&ZEND_NULL_LABEL,
52633 			(void*)&&ZEND_NULL_LABEL,
52634 			(void*)&&ZEND_NULL_LABEL,
52635 			(void*)&&ZEND_NULL_LABEL,
52636 			(void*)&&ZEND_NULL_LABEL,
52637 			(void*)&&ZEND_NULL_LABEL,
52638 			(void*)&&ZEND_NULL_LABEL,
52639 			(void*)&&ZEND_NULL_LABEL,
52640 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52641 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52642 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52643 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52644 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52645 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52646 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52647 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52648 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52649 			(void*)&&ZEND_NULL_LABEL,
52650 			(void*)&&ZEND_NULL_LABEL,
52651 			(void*)&&ZEND_NULL_LABEL,
52652 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52653 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52654 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52655 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52656 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52657 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52658 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52659 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52660 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52661 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52662 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52663 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52664 			(void*)&&ZEND_NULL_LABEL,
52665 			(void*)&&ZEND_NULL_LABEL,
52666 			(void*)&&ZEND_NULL_LABEL,
52667 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52668 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52669 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52670 			(void*)&&ZEND_NULL_LABEL,
52671 			(void*)&&ZEND_NULL_LABEL,
52672 			(void*)&&ZEND_NULL_LABEL,
52673 			(void*)&&ZEND_NULL_LABEL,
52674 			(void*)&&ZEND_NULL_LABEL,
52675 			(void*)&&ZEND_NULL_LABEL,
52676 			(void*)&&ZEND_NULL_LABEL,
52677 			(void*)&&ZEND_NULL_LABEL,
52678 			(void*)&&ZEND_NULL_LABEL,
52679 			(void*)&&ZEND_NULL_LABEL,
52680 			(void*)&&ZEND_NULL_LABEL,
52681 			(void*)&&ZEND_NULL_LABEL,
52682 			(void*)&&ZEND_NULL_LABEL,
52683 			(void*)&&ZEND_NULL_LABEL,
52684 			(void*)&&ZEND_NULL_LABEL,
52685 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52686 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52687 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52688 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52689 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52690 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52691 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52692 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52693 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52694 			(void*)&&ZEND_NULL_LABEL,
52695 			(void*)&&ZEND_NULL_LABEL,
52696 			(void*)&&ZEND_NULL_LABEL,
52697 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52698 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52699 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52700 			(void*)&&ZEND_NULL_LABEL,
52701 			(void*)&&ZEND_NULL_LABEL,
52702 			(void*)&&ZEND_NULL_LABEL,
52703 			(void*)&&ZEND_NULL_LABEL,
52704 			(void*)&&ZEND_NULL_LABEL,
52705 			(void*)&&ZEND_NULL_LABEL,
52706 			(void*)&&ZEND_NULL_LABEL,
52707 			(void*)&&ZEND_NULL_LABEL,
52708 			(void*)&&ZEND_NULL_LABEL,
52709 			(void*)&&ZEND_NULL_LABEL,
52710 			(void*)&&ZEND_NULL_LABEL,
52711 			(void*)&&ZEND_NULL_LABEL,
52712 			(void*)&&ZEND_NULL_LABEL,
52713 			(void*)&&ZEND_NULL_LABEL,
52714 			(void*)&&ZEND_NULL_LABEL,
52715 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52716 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52717 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52718 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52719 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52720 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52721 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52722 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52723 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52724 			(void*)&&ZEND_NULL_LABEL,
52725 			(void*)&&ZEND_NULL_LABEL,
52726 			(void*)&&ZEND_NULL_LABEL,
52727 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52728 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52729 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52730 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52731 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52732 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52733 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52734 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52735 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52736 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52737 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52738 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52739 			(void*)&&ZEND_NULL_LABEL,
52740 			(void*)&&ZEND_NULL_LABEL,
52741 			(void*)&&ZEND_NULL_LABEL,
52742 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52743 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52744 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52745 			(void*)&&ZEND_NULL_LABEL,
52746 			(void*)&&ZEND_NULL_LABEL,
52747 			(void*)&&ZEND_NULL_LABEL,
52748 			(void*)&&ZEND_NULL_LABEL,
52749 			(void*)&&ZEND_NULL_LABEL,
52750 			(void*)&&ZEND_NULL_LABEL,
52751 			(void*)&&ZEND_NULL_LABEL,
52752 			(void*)&&ZEND_NULL_LABEL,
52753 			(void*)&&ZEND_NULL_LABEL,
52754 			(void*)&&ZEND_NULL_LABEL,
52755 			(void*)&&ZEND_NULL_LABEL,
52756 			(void*)&&ZEND_NULL_LABEL,
52757 			(void*)&&ZEND_NULL_LABEL,
52758 			(void*)&&ZEND_NULL_LABEL,
52759 			(void*)&&ZEND_NULL_LABEL,
52760 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52761 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52762 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52763 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52764 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52765 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52766 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52767 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52768 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52769 			(void*)&&ZEND_NULL_LABEL,
52770 			(void*)&&ZEND_NULL_LABEL,
52771 			(void*)&&ZEND_NULL_LABEL,
52772 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52773 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52774 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52775 			(void*)&&ZEND_NULL_LABEL,
52776 			(void*)&&ZEND_NULL_LABEL,
52777 			(void*)&&ZEND_NULL_LABEL,
52778 			(void*)&&ZEND_NULL_LABEL,
52779 			(void*)&&ZEND_NULL_LABEL,
52780 			(void*)&&ZEND_NULL_LABEL,
52781 			(void*)&&ZEND_NULL_LABEL,
52782 			(void*)&&ZEND_NULL_LABEL,
52783 			(void*)&&ZEND_NULL_LABEL,
52784 			(void*)&&ZEND_NULL_LABEL,
52785 			(void*)&&ZEND_NULL_LABEL,
52786 			(void*)&&ZEND_NULL_LABEL,
52787 			(void*)&&ZEND_NULL_LABEL,
52788 			(void*)&&ZEND_NULL_LABEL,
52789 			(void*)&&ZEND_NULL_LABEL,
52790 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52791 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52792 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52793 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52794 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52795 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52796 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52797 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52798 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52799 			(void*)&&ZEND_NULL_LABEL,
52800 			(void*)&&ZEND_NULL_LABEL,
52801 			(void*)&&ZEND_NULL_LABEL,
52802 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52803 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52804 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52805 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52806 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52807 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52808 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52809 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52810 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52811 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52812 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52813 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52814 			(void*)&&ZEND_NULL_LABEL,
52815 			(void*)&&ZEND_NULL_LABEL,
52816 			(void*)&&ZEND_NULL_LABEL,
52817 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52818 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52819 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52820 			(void*)&&ZEND_NULL_LABEL,
52821 			(void*)&&ZEND_NULL_LABEL,
52822 			(void*)&&ZEND_NULL_LABEL,
52823 			(void*)&&ZEND_NULL_LABEL,
52824 			(void*)&&ZEND_NULL_LABEL,
52825 			(void*)&&ZEND_NULL_LABEL,
52826 			(void*)&&ZEND_NULL_LABEL,
52827 			(void*)&&ZEND_NULL_LABEL,
52828 			(void*)&&ZEND_NULL_LABEL,
52829 			(void*)&&ZEND_NULL_LABEL,
52830 			(void*)&&ZEND_NULL_LABEL,
52831 			(void*)&&ZEND_NULL_LABEL,
52832 			(void*)&&ZEND_NULL_LABEL,
52833 			(void*)&&ZEND_NULL_LABEL,
52834 			(void*)&&ZEND_NULL_LABEL,
52835 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
52836 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52837 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52838 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52839 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52840 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52841 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52842 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52843 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52844 			(void*)&&ZEND_NULL_LABEL,
52845 			(void*)&&ZEND_NULL_LABEL,
52846 			(void*)&&ZEND_NULL_LABEL,
52847 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52848 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52849 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52850 			(void*)&&ZEND_NULL_LABEL,
52851 			(void*)&&ZEND_NULL_LABEL,
52852 			(void*)&&ZEND_NULL_LABEL,
52853 			(void*)&&ZEND_NULL_LABEL,
52854 			(void*)&&ZEND_NULL_LABEL,
52855 			(void*)&&ZEND_NULL_LABEL,
52856 			(void*)&&ZEND_NULL_LABEL,
52857 			(void*)&&ZEND_NULL_LABEL,
52858 			(void*)&&ZEND_NULL_LABEL,
52859 			(void*)&&ZEND_NULL_LABEL,
52860 			(void*)&&ZEND_NULL_LABEL,
52861 			(void*)&&ZEND_NULL_LABEL,
52862 			(void*)&&ZEND_NULL_LABEL,
52863 			(void*)&&ZEND_NULL_LABEL,
52864 			(void*)&&ZEND_NULL_LABEL,
52865 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52866 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52867 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52868 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52869 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52870 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52871 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52872 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52873 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52874 			(void*)&&ZEND_NULL_LABEL,
52875 			(void*)&&ZEND_NULL_LABEL,
52876 			(void*)&&ZEND_NULL_LABEL,
52877 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52878 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52879 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52880 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52881 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52882 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52883 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52884 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52885 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52886 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52887 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52888 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52889 			(void*)&&ZEND_NULL_LABEL,
52890 			(void*)&&ZEND_NULL_LABEL,
52891 			(void*)&&ZEND_NULL_LABEL,
52892 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52893 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52894 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52895 			(void*)&&ZEND_NULL_LABEL,
52896 			(void*)&&ZEND_NULL_LABEL,
52897 			(void*)&&ZEND_NULL_LABEL,
52898 			(void*)&&ZEND_NULL_LABEL,
52899 			(void*)&&ZEND_NULL_LABEL,
52900 			(void*)&&ZEND_NULL_LABEL,
52901 			(void*)&&ZEND_NULL_LABEL,
52902 			(void*)&&ZEND_NULL_LABEL,
52903 			(void*)&&ZEND_NULL_LABEL,
52904 			(void*)&&ZEND_NULL_LABEL,
52905 			(void*)&&ZEND_NULL_LABEL,
52906 			(void*)&&ZEND_NULL_LABEL,
52907 			(void*)&&ZEND_NULL_LABEL,
52908 			(void*)&&ZEND_NULL_LABEL,
52909 			(void*)&&ZEND_NULL_LABEL,
52910 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
52911 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52912 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52913 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52914 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52915 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52916 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52917 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52918 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52919 			(void*)&&ZEND_NULL_LABEL,
52920 			(void*)&&ZEND_NULL_LABEL,
52921 			(void*)&&ZEND_NULL_LABEL,
52922 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
52923 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52924 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52925 			(void*)&&ZEND_NULL_LABEL,
52926 			(void*)&&ZEND_NULL_LABEL,
52927 			(void*)&&ZEND_NULL_LABEL,
52928 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
52929 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52930 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52931 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
52932 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52933 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52934 			(void*)&&ZEND_NULL_LABEL,
52935 			(void*)&&ZEND_NULL_LABEL,
52936 			(void*)&&ZEND_NULL_LABEL,
52937 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
52938 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
52939 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
52940 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
52941 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52942 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52943 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52944 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52945 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52946 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52947 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52948 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52949 			(void*)&&ZEND_NULL_LABEL,
52950 			(void*)&&ZEND_NULL_LABEL,
52951 			(void*)&&ZEND_NULL_LABEL,
52952 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52953 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52954 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52955 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
52956 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52957 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52958 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52959 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52960 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52961 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52962 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52963 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52964 			(void*)&&ZEND_NULL_LABEL,
52965 			(void*)&&ZEND_NULL_LABEL,
52966 			(void*)&&ZEND_NULL_LABEL,
52967 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52968 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52969 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52970 			(void*)&&ZEND_NULL_LABEL,
52971 			(void*)&&ZEND_NULL_LABEL,
52972 			(void*)&&ZEND_NULL_LABEL,
52973 			(void*)&&ZEND_NULL_LABEL,
52974 			(void*)&&ZEND_NULL_LABEL,
52975 			(void*)&&ZEND_NULL_LABEL,
52976 			(void*)&&ZEND_NULL_LABEL,
52977 			(void*)&&ZEND_NULL_LABEL,
52978 			(void*)&&ZEND_NULL_LABEL,
52979 			(void*)&&ZEND_NULL_LABEL,
52980 			(void*)&&ZEND_NULL_LABEL,
52981 			(void*)&&ZEND_NULL_LABEL,
52982 			(void*)&&ZEND_NULL_LABEL,
52983 			(void*)&&ZEND_NULL_LABEL,
52984 			(void*)&&ZEND_NULL_LABEL,
52985 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
52986 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
52987 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
52988 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52989 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52990 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52991 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52992 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52993 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
52994 			(void*)&&ZEND_NULL_LABEL,
52995 			(void*)&&ZEND_NULL_LABEL,
52996 			(void*)&&ZEND_NULL_LABEL,
52997 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
52998 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
52999 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53000 			(void*)&&ZEND_NULL_LABEL,
53001 			(void*)&&ZEND_NULL_LABEL,
53002 			(void*)&&ZEND_NULL_LABEL,
53003 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53004 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53005 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53006 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53007 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53008 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53009 			(void*)&&ZEND_NULL_LABEL,
53010 			(void*)&&ZEND_NULL_LABEL,
53011 			(void*)&&ZEND_NULL_LABEL,
53012 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53013 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53014 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53015 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53016 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53017 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53018 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53019 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53020 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53021 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53022 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53023 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53024 			(void*)&&ZEND_NULL_LABEL,
53025 			(void*)&&ZEND_NULL_LABEL,
53026 			(void*)&&ZEND_NULL_LABEL,
53027 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53028 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53029 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53030 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53031 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53032 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53033 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53034 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53035 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53036 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53037 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53038 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53039 			(void*)&&ZEND_NULL_LABEL,
53040 			(void*)&&ZEND_NULL_LABEL,
53041 			(void*)&&ZEND_NULL_LABEL,
53042 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53043 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53044 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53045 			(void*)&&ZEND_NULL_LABEL,
53046 			(void*)&&ZEND_NULL_LABEL,
53047 			(void*)&&ZEND_NULL_LABEL,
53048 			(void*)&&ZEND_NULL_LABEL,
53049 			(void*)&&ZEND_NULL_LABEL,
53050 			(void*)&&ZEND_NULL_LABEL,
53051 			(void*)&&ZEND_NULL_LABEL,
53052 			(void*)&&ZEND_NULL_LABEL,
53053 			(void*)&&ZEND_NULL_LABEL,
53054 			(void*)&&ZEND_NULL_LABEL,
53055 			(void*)&&ZEND_NULL_LABEL,
53056 			(void*)&&ZEND_NULL_LABEL,
53057 			(void*)&&ZEND_NULL_LABEL,
53058 			(void*)&&ZEND_NULL_LABEL,
53059 			(void*)&&ZEND_NULL_LABEL,
53060 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53061 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53062 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53063 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53064 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53065 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53066 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53067 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53068 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53069 			(void*)&&ZEND_NULL_LABEL,
53070 			(void*)&&ZEND_NULL_LABEL,
53071 			(void*)&&ZEND_NULL_LABEL,
53072 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53073 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53074 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53075 			(void*)&&ZEND_NULL_LABEL,
53076 			(void*)&&ZEND_NULL_LABEL,
53077 			(void*)&&ZEND_NULL_LABEL,
53078 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
53079 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53080 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53081 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
53082 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53083 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53084 			(void*)&&ZEND_NULL_LABEL,
53085 			(void*)&&ZEND_NULL_LABEL,
53086 			(void*)&&ZEND_NULL_LABEL,
53087 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
53088 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53089 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53090 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
53091 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53092 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53093 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53094 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53095 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53096 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53097 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53098 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53099 			(void*)&&ZEND_NULL_LABEL,
53100 			(void*)&&ZEND_NULL_LABEL,
53101 			(void*)&&ZEND_NULL_LABEL,
53102 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53103 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53104 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53105 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
53106 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53107 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53108 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53109 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53110 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53111 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53112 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53113 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53114 			(void*)&&ZEND_NULL_LABEL,
53115 			(void*)&&ZEND_NULL_LABEL,
53116 			(void*)&&ZEND_NULL_LABEL,
53117 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53118 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53119 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53120 			(void*)&&ZEND_NULL_LABEL,
53121 			(void*)&&ZEND_NULL_LABEL,
53122 			(void*)&&ZEND_NULL_LABEL,
53123 			(void*)&&ZEND_NULL_LABEL,
53124 			(void*)&&ZEND_NULL_LABEL,
53125 			(void*)&&ZEND_NULL_LABEL,
53126 			(void*)&&ZEND_NULL_LABEL,
53127 			(void*)&&ZEND_NULL_LABEL,
53128 			(void*)&&ZEND_NULL_LABEL,
53129 			(void*)&&ZEND_NULL_LABEL,
53130 			(void*)&&ZEND_NULL_LABEL,
53131 			(void*)&&ZEND_NULL_LABEL,
53132 			(void*)&&ZEND_NULL_LABEL,
53133 			(void*)&&ZEND_NULL_LABEL,
53134 			(void*)&&ZEND_NULL_LABEL,
53135 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
53136 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53137 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53138 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53139 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53140 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53141 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53142 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53143 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53144 			(void*)&&ZEND_NULL_LABEL,
53145 			(void*)&&ZEND_NULL_LABEL,
53146 			(void*)&&ZEND_NULL_LABEL,
53147 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
53148 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53149 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53150 			(void*)&&ZEND_NULL_LABEL,
53151 			(void*)&&ZEND_NULL_LABEL,
53152 			(void*)&&ZEND_NULL_LABEL,
53153 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53154 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53155 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53156 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53157 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53158 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53159 			(void*)&&ZEND_NULL_LABEL,
53160 			(void*)&&ZEND_NULL_LABEL,
53161 			(void*)&&ZEND_NULL_LABEL,
53162 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
53163 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
53164 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
53165 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53166 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53167 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53168 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53169 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53170 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53171 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53172 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53173 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53174 			(void*)&&ZEND_NULL_LABEL,
53175 			(void*)&&ZEND_NULL_LABEL,
53176 			(void*)&&ZEND_NULL_LABEL,
53177 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53178 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53179 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53180 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53181 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53182 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53183 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53184 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53185 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53186 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53187 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53188 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53189 			(void*)&&ZEND_NULL_LABEL,
53190 			(void*)&&ZEND_NULL_LABEL,
53191 			(void*)&&ZEND_NULL_LABEL,
53192 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53193 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53194 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53195 			(void*)&&ZEND_NULL_LABEL,
53196 			(void*)&&ZEND_NULL_LABEL,
53197 			(void*)&&ZEND_NULL_LABEL,
53198 			(void*)&&ZEND_NULL_LABEL,
53199 			(void*)&&ZEND_NULL_LABEL,
53200 			(void*)&&ZEND_NULL_LABEL,
53201 			(void*)&&ZEND_NULL_LABEL,
53202 			(void*)&&ZEND_NULL_LABEL,
53203 			(void*)&&ZEND_NULL_LABEL,
53204 			(void*)&&ZEND_NULL_LABEL,
53205 			(void*)&&ZEND_NULL_LABEL,
53206 			(void*)&&ZEND_NULL_LABEL,
53207 			(void*)&&ZEND_NULL_LABEL,
53208 			(void*)&&ZEND_NULL_LABEL,
53209 			(void*)&&ZEND_NULL_LABEL,
53210 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
53211 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
53212 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
53213 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53214 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53215 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53216 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53217 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53218 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53219 			(void*)&&ZEND_NULL_LABEL,
53220 			(void*)&&ZEND_NULL_LABEL,
53221 			(void*)&&ZEND_NULL_LABEL,
53222 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
53223 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
53224 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
53225 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
53226 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
53227 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
53228 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
53229 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
53230 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
53231 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
53232 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
53233 			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
53234 			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
53235 			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
53236 			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
53237 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
53238 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
53239 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
53240 			(void*)&&ZEND_NULL_LABEL,
53241 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
53242 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
53243 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
53244 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
53245 			(void*)&&ZEND_NULL_LABEL,
53246 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
53247 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
53248 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
53249 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
53250 			(void*)&&ZEND_NULL_LABEL,
53251 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
53252 			(void*)&&ZEND_NULL_LABEL,
53253 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
53254 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
53255 			(void*)&&ZEND_NULL_LABEL,
53256 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
53257 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
53258 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53259 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53260 			(void*)&&ZEND_NULL_LABEL,
53261 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53262 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
53263 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53264 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53265 			(void*)&&ZEND_NULL_LABEL,
53266 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
53267 			(void*)&&ZEND_NULL_LABEL,
53268 			(void*)&&ZEND_NULL_LABEL,
53269 			(void*)&&ZEND_NULL_LABEL,
53270 			(void*)&&ZEND_NULL_LABEL,
53271 			(void*)&&ZEND_NULL_LABEL,
53272 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
53273 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
53274 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
53275 			(void*)&&ZEND_NULL_LABEL,
53276 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
53277 			(void*)&&ZEND_NULL_LABEL,
53278 			(void*)&&ZEND_NULL_LABEL,
53279 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
53280 			(void*)&&ZEND_NULL_LABEL,
53281 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
53282 			(void*)&&ZEND_NULL_LABEL,
53283 			(void*)&&ZEND_NULL_LABEL,
53284 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_LABEL,
53285 			(void*)&&ZEND_NULL_LABEL,
53286 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_LABEL,
53287 			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
53288 			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
53289 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
53290 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
53291 			(void*)&&ZEND_NULL_LABEL
53292 		};
53293 		zend_opcode_handlers = (const void **) labels;
53294 		zend_handlers_count = sizeof(labels) / sizeof(void*);
53295 		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
53296 		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
53297 		goto HYBRID_HALT_LABEL;
53298 	}
53299 #endif
53300 
53301 	LOAD_OPLINE();
53302 	ZEND_VM_LOOP_INTERRUPT_CHECK();
53303 
53304 	while (1) {
53305 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
53306 			int ret;
53307 #endif
53308 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53309 		HYBRID_SWITCH() {
53310 #else
53311 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
53312 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53313 		if (UNEXPECTED(!OPLINE)) {
53314 #else
53315 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
53316 #endif
53317 #endif
53318 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53319 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
53320 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
53321 				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53322 				HYBRID_BREAK();
53323 			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
53324 				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
53325 				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53326 				HYBRID_BREAK();
53327 			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
53328 				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
53329 				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53330 				HYBRID_BREAK();
53331 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
53332 				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
53333 				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53334 				HYBRID_BREAK();
53335 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
53336 				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
53337 				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53338 				HYBRID_BREAK();
53339 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
53340 				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
53341 				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53342 				HYBRID_BREAK();
53343 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
53344 				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
53345 				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53346 				HYBRID_BREAK();
53347 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
53348 				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
53349 				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53350 				HYBRID_BREAK();
53351 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
53352 				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
53353 				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53354 				HYBRID_BREAK();
53355 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
53356 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
53357 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53358 				HYBRID_BREAK();
53359 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
53360 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
53361 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53362 				HYBRID_BREAK();
53363 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
53364 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
53365 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53366 				HYBRID_BREAK();
53367 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
53368 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
53369 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53370 				HYBRID_BREAK();
53371 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
53372 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
53373 				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53374 				HYBRID_BREAK();
53375 zend_leave_helper_SPEC_LABEL:
53376 {
53377 	zend_execute_data *old_execute_data;
53378 	uint32_t call_info = EX_CALL_INFO();
53379 	SAVE_OPLINE();
53380 
53381 	if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) {
53382 		EG(current_execute_data) = EX(prev_execute_data);
53383 		i_free_compiled_variables(execute_data);
53384 
53385 #ifdef ZEND_PREFER_RELOAD
53386 		call_info = EX_CALL_INFO();
53387 #endif
53388 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
53389 			OBJ_RELEASE(Z_OBJ(execute_data->This));
53390 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
53391 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
53392 		}
53393 		EG(vm_stack_top) = (zval*)execute_data;
53394 		execute_data = EX(prev_execute_data);
53395 
53396 		if (UNEXPECTED(EG(exception) != NULL)) {
53397 			zend_rethrow_exception(execute_data);
53398 			HANDLE_EXCEPTION_LEAVE();
53399 		}
53400 
53401 		LOAD_NEXT_OPLINE();
53402 		ZEND_VM_LEAVE();
53403 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
53404 		EG(current_execute_data) = EX(prev_execute_data);
53405 		i_free_compiled_variables(execute_data);
53406 
53407 #ifdef ZEND_PREFER_RELOAD
53408 		call_info = EX_CALL_INFO();
53409 #endif
53410 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
53411 			zend_clean_and_cache_symbol_table(EX(symbol_table));
53412 		}
53413 
53414 		/* Free extra args before releasing the closure,
53415 		 * as that may free the op_array. */
53416 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
53417 
53418 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
53419 			OBJ_RELEASE(Z_OBJ(execute_data->This));
53420 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
53421 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
53422 		}
53423 
53424 		old_execute_data = execute_data;
53425 		execute_data = EX(prev_execute_data);
53426 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
53427 
53428 		if (UNEXPECTED(EG(exception) != NULL)) {
53429 			zend_rethrow_exception(execute_data);
53430 			HANDLE_EXCEPTION_LEAVE();
53431 		}
53432 
53433 		LOAD_NEXT_OPLINE();
53434 		ZEND_VM_LEAVE();
53435 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
53436 		zend_detach_symbol_table(execute_data);
53437 		destroy_op_array(&EX(func)->op_array);
53438 		efree_size(EX(func), sizeof(zend_op_array));
53439 #ifdef ZEND_PREFER_RELOAD
53440 		call_info = EX_CALL_INFO();
53441 #endif
53442 		old_execute_data = execute_data;
53443 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
53444 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
53445 
53446 		zend_attach_symbol_table(execute_data);
53447 		if (UNEXPECTED(EG(exception) != NULL)) {
53448 			zend_rethrow_exception(execute_data);
53449 			HANDLE_EXCEPTION_LEAVE();
53450 		}
53451 
53452 		LOAD_NEXT_OPLINE();
53453 		ZEND_VM_LEAVE();
53454 	} else {
53455 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
53456 			EG(current_execute_data) = EX(prev_execute_data);
53457 			i_free_compiled_variables(execute_data);
53458 #ifdef ZEND_PREFER_RELOAD
53459 			call_info = EX_CALL_INFO();
53460 #endif
53461 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) {
53462 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
53463 					zend_clean_and_cache_symbol_table(EX(symbol_table));
53464 				}
53465 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
53466 			}
53467 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
53468 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
53469 			}
53470 			ZEND_VM_RETURN();
53471 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
53472 			zend_array *symbol_table = EX(symbol_table);
53473 
53474 			zend_detach_symbol_table(execute_data);
53475 			old_execute_data = EX(prev_execute_data);
53476 			while (old_execute_data) {
53477 				if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
53478 					if (old_execute_data->symbol_table == symbol_table) {
53479 						zend_attach_symbol_table(old_execute_data);
53480 					}
53481 					break;
53482 				}
53483 				old_execute_data = old_execute_data->prev_execute_data;
53484 			}
53485 			EG(current_execute_data) = EX(prev_execute_data);
53486 			ZEND_VM_RETURN();
53487 		}
53488 	}
53489 }
53490 
53491 			HYBRID_CASE(ZEND_JMP_SPEC):
53492 				VM_TRACE(ZEND_JMP_SPEC)
53493 				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53494 				HYBRID_BREAK();
53495 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
53496 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
53497 				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53498 				HYBRID_BREAK();
53499 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
53500 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
53501 				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53502 				HYBRID_BREAK();
53503 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
53504 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
53505 				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53506 				HYBRID_BREAK();
53507 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
53508 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
53509 				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53510 				HYBRID_BREAK();
53511 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
53512 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
53513 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53514 				HYBRID_BREAK();
53515 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
53516 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
53517 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53518 				HYBRID_BREAK();
53519 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
53520 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
53521 				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53522 				HYBRID_BREAK();
53523 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
53524 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
53525 				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53526 				HYBRID_BREAK();
53527 			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
53528 				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
53529 				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53530 				HYBRID_BREAK();
53531 			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
53532 				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
53533 				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53534 				HYBRID_BREAK();
53535 			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
53536 				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
53537 				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53538 				HYBRID_BREAK();
53539 			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
53540 				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
53541 				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53542 				HYBRID_BREAK();
53543 			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
53544 				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
53545 				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53546 				HYBRID_BREAK();
53547 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
53548 				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
53549 				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53550 				HYBRID_BREAK();
53551 			HYBRID_CASE(ZEND_EXIT_SPEC):
53552 				VM_TRACE(ZEND_EXIT_SPEC)
53553 				ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53554 				HYBRID_BREAK();
53555 			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
53556 				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
53557 				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53558 				HYBRID_BREAK();
53559 			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
53560 				VM_TRACE(ZEND_EXT_STMT_SPEC)
53561 				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53562 				HYBRID_BREAK();
53563 			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
53564 				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
53565 				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53566 				HYBRID_BREAK();
53567 			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
53568 				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
53569 				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53570 				HYBRID_BREAK();
53571 			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
53572 				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
53573 				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53574 				HYBRID_BREAK();
53575 			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
53576 				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
53577 				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53578 				HYBRID_BREAK();
53579 			HYBRID_CASE(ZEND_TICKS_SPEC):
53580 				VM_TRACE(ZEND_TICKS_SPEC)
53581 				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53582 				HYBRID_BREAK();
53583 			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
53584 				VM_TRACE(ZEND_EXT_NOP_SPEC)
53585 				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53586 				HYBRID_BREAK();
53587 			HYBRID_CASE(ZEND_NOP_SPEC):
53588 				VM_TRACE(ZEND_NOP_SPEC)
53589 				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53590 				HYBRID_BREAK();
53591 			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
53592 				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
53593 				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53594 				HYBRID_BREAK();
53595 			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
53596 				VM_TRACE(ZEND_USER_OPCODE_SPEC)
53597 				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53598 				HYBRID_BREAK();
53599 			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
53600 				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
53601 				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53602 				HYBRID_BREAK();
53603 			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
53604 				VM_TRACE(ZEND_FAST_CALL_SPEC)
53605 				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53606 				HYBRID_BREAK();
53607 			HYBRID_CASE(ZEND_FAST_RET_SPEC):
53608 				VM_TRACE(ZEND_FAST_RET_SPEC)
53609 				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53610 				HYBRID_BREAK();
53611 			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
53612 				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
53613 				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53614 				HYBRID_BREAK();
53615 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
53616 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
53617 				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53618 				HYBRID_BREAK();
53619 			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
53620 				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
53621 				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53622 				HYBRID_BREAK();
53623 			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
53624 				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
53625 				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53626 				HYBRID_BREAK();
53627 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
53628 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
53629 				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53630 				HYBRID_BREAK();
53631 			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
53632 				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
53633 				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53634 				HYBRID_BREAK();
53635 			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
53636 				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
53637 				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53638 				HYBRID_BREAK();
53639 			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
53640 				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
53641 				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53642 				HYBRID_BREAK();
53643 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
53644 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
53645 				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53646 				HYBRID_BREAK();
53647 			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
53648 				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
53649 				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53650 				HYBRID_BREAK();
53651 			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
53652 				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
53653 				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53654 				HYBRID_BREAK();
53655 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
53656 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
53657 				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53658 				HYBRID_BREAK();
53659 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
53660 				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
53661 				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53662 				HYBRID_BREAK();
53663 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
53664 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
53665 				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53666 				HYBRID_BREAK();
53667 			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
53668 				VM_TRACE(ZEND_ECHO_SPEC_CONST)
53669 				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53670 				HYBRID_BREAK();
53671 			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
53672 				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
53673 				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53674 				HYBRID_BREAK();
53675 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
53676 				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
53677 				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53678 				HYBRID_BREAK();
53679 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
53680 				VM_TRACE(ZEND_JMPZNZ_SPEC_CONST)
53681 				ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53682 				HYBRID_BREAK();
53683 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
53684 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
53685 				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53686 				HYBRID_BREAK();
53687 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
53688 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
53689 				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53690 				HYBRID_BREAK();
53691 			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
53692 				VM_TRACE(ZEND_RETURN_SPEC_CONST)
53693 {
53694 	USE_OPLINE
53695 	zval *retval_ptr;
53696 	zval *return_value;
53697 	zend_free_op free_op1;
53698 
53699 	retval_ptr = RT_CONSTANT(opline, opline->op1);
53700 	return_value = EX(return_value);
53701 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
53702 		SAVE_OPLINE();
53703 		retval_ptr = ZVAL_UNDEFINED_OP1();
53704 		if (return_value) {
53705 			ZVAL_NULL(return_value);
53706 		}
53707 	} else if (!return_value) {
53708 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
53709 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
53710 				SAVE_OPLINE();
53711 				rc_dtor_func(Z_COUNTED_P(free_op1));
53712 			}
53713 		}
53714 	} else {
53715 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
53716 			ZVAL_COPY_VALUE(return_value, retval_ptr);
53717 			if (IS_CONST == IS_CONST) {
53718 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
53719 					Z_ADDREF_P(return_value);
53720 				}
53721 			}
53722 		} else if (IS_CONST == IS_CV) {
53723 			do {
53724 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
53725 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
53726 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
53727 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
53728 							ZVAL_COPY_VALUE(return_value, retval_ptr);
53729 							if (GC_MAY_LEAK(ref)) {
53730 								gc_possible_root(ref);
53731 							}
53732 							ZVAL_NULL(retval_ptr);
53733 							break;
53734 						} else {
53735 							Z_ADDREF_P(retval_ptr);
53736 						}
53737 					} else {
53738 						retval_ptr = Z_REFVAL_P(retval_ptr);
53739 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
53740 							Z_ADDREF_P(retval_ptr);
53741 						}
53742 					}
53743 				}
53744 				ZVAL_COPY_VALUE(return_value, retval_ptr);
53745 			} while (0);
53746 		} else /* if (IS_CONST == IS_VAR) */ {
53747 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
53748 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
53749 
53750 				retval_ptr = Z_REFVAL_P(retval_ptr);
53751 				ZVAL_COPY_VALUE(return_value, retval_ptr);
53752 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
53753 					efree_size(ref, sizeof(zend_reference));
53754 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
53755 					Z_ADDREF_P(retval_ptr);
53756 				}
53757 			} else {
53758 				ZVAL_COPY_VALUE(return_value, retval_ptr);
53759 			}
53760 		}
53761 	}
53762 	goto zend_leave_helper_SPEC_LABEL;
53763 }
53764 
53765 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
53766 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
53767 				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53768 				HYBRID_BREAK();
53769 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
53770 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
53771 				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53772 				HYBRID_BREAK();
53773 			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
53774 				VM_TRACE(ZEND_THROW_SPEC_CONST)
53775 				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53776 				HYBRID_BREAK();
53777 			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
53778 				VM_TRACE(ZEND_CATCH_SPEC_CONST)
53779 				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53780 				HYBRID_BREAK();
53781 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST):
53782 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST)
53783 				ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53784 				HYBRID_BREAK();
53785 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST):
53786 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST)
53787 				ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53788 				HYBRID_BREAK();
53789 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK):
53790 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK)
53791 				ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53792 				HYBRID_BREAK();
53793 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
53794 				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
53795 				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53796 				HYBRID_BREAK();
53797 			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
53798 				VM_TRACE(ZEND_BOOL_SPEC_CONST)
53799 				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53800 				HYBRID_BREAK();
53801 			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
53802 				VM_TRACE(ZEND_CLONE_SPEC_CONST)
53803 				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53804 				HYBRID_BREAK();
53805 			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
53806 				VM_TRACE(ZEND_CAST_SPEC_CONST)
53807 				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53808 				HYBRID_BREAK();
53809 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
53810 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
53811 				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53812 				HYBRID_BREAK();
53813 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
53814 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
53815 				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53816 				HYBRID_BREAK();
53817 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
53818 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
53819 				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53820 				HYBRID_BREAK();
53821 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
53822 				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
53823 				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53824 				HYBRID_BREAK();
53825 			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
53826 				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
53827 				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53828 				HYBRID_BREAK();
53829 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
53830 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
53831 				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53832 				HYBRID_BREAK();
53833 			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
53834 				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
53835 				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53836 				HYBRID_BREAK();
53837 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
53838 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
53839 				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53840 				HYBRID_BREAK();
53841 			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
53842 				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
53843 				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53844 				HYBRID_BREAK();
53845 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
53846 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
53847 				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53848 				HYBRID_BREAK();
53849 			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
53850 				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
53851 				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53852 				HYBRID_BREAK();
53853 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
53854 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
53855 				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53856 				HYBRID_BREAK();
53857 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
53858 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
53859 				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53860 				HYBRID_BREAK();
53861 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
53862 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
53863 				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53864 				HYBRID_BREAK();
53865 			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
53866 				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
53867 				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53868 				HYBRID_BREAK();
53869 			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
53870 				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
53871 				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53872 				HYBRID_BREAK();
53873 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
53874 				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
53875 				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53876 				HYBRID_BREAK();
53877 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
53878 				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
53879 				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53880 				HYBRID_BREAK();
53881 			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
53882 				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
53883 				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53884 				HYBRID_BREAK();
53885 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
53886 				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
53887 				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53888 				HYBRID_BREAK();
53889 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
53890 				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
53891 				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53892 				HYBRID_BREAK();
53893 			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
53894 				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
53895 				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53896 				HYBRID_BREAK();
53897 			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
53898 				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
53899 				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53900 				HYBRID_BREAK();
53901 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
53902 				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
53903 				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53904 				HYBRID_BREAK();
53905 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
53906 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
53907 				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53908 				HYBRID_BREAK();
53909 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
53910 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
53911 				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53912 				HYBRID_BREAK();
53913 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
53914 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
53915 				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53916 				HYBRID_BREAK();
53917 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
53918 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
53919 				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53920 				HYBRID_BREAK();
53921 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
53922 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
53923 				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53924 				HYBRID_BREAK();
53925 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
53926 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
53927 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53928 				HYBRID_BREAK();
53929 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
53930 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
53931 				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53932 				HYBRID_BREAK();
53933 			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
53934 				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
53935 				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53936 				HYBRID_BREAK();
53937 			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
53938 				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
53939 				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53940 				HYBRID_BREAK();
53941 			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
53942 				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
53943 				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53944 				HYBRID_BREAK();
53945 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
53946 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
53947 				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53948 				HYBRID_BREAK();
53949 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
53950 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
53951 				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53952 				HYBRID_BREAK();
53953 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
53954 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
53955 				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53956 				HYBRID_BREAK();
53957 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
53958 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
53959 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53960 				HYBRID_BREAK();
53961 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
53962 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
53963 				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53964 				HYBRID_BREAK();
53965 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
53966 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
53967 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53968 				HYBRID_BREAK();
53969 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
53970 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
53971 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53972 				HYBRID_BREAK();
53973 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
53974 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
53975 				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53976 				HYBRID_BREAK();
53977 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
53978 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
53979 				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53980 				HYBRID_BREAK();
53981 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
53982 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
53983 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53984 				HYBRID_BREAK();
53985 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
53986 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
53987 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53988 				HYBRID_BREAK();
53989 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
53990 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
53991 				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53992 				HYBRID_BREAK();
53993 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
53994 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
53995 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
53996 				HYBRID_BREAK();
53997 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
53998 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
53999 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54000 				HYBRID_BREAK();
54001 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
54002 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
54003 				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54004 				HYBRID_BREAK();
54005 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
54006 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
54007 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54008 				HYBRID_BREAK();
54009 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
54010 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
54011 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54012 				HYBRID_BREAK();
54013 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
54014 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
54015 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54016 				HYBRID_BREAK();
54017 			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
54018 				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
54019 				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54020 				HYBRID_BREAK();
54021 			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
54022 				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
54023 				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54024 				HYBRID_BREAK();
54025 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
54026 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
54027 				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54028 				HYBRID_BREAK();
54029 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
54030 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
54031 				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54032 				HYBRID_BREAK();
54033 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
54034 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
54035 				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54036 				HYBRID_BREAK();
54037 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
54038 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
54039 				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54040 				HYBRID_BREAK();
54041 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
54042 				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
54043 				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54044 				HYBRID_BREAK();
54045 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
54046 				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
54047 				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54048 				HYBRID_BREAK();
54049 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
54050 				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
54051 				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54052 				HYBRID_BREAK();
54053 			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
54054 				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
54055 				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54056 				HYBRID_BREAK();
54057 			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
54058 				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
54059 				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54060 				HYBRID_BREAK();
54061 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
54062 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
54063 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54064 				HYBRID_BREAK();
54065 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
54066 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
54067 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54068 				HYBRID_BREAK();
54069 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
54070 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
54071 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54072 				HYBRID_BREAK();
54073 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
54074 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
54075 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54076 				HYBRID_BREAK();
54077 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
54078 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
54079 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54080 				HYBRID_BREAK();
54081 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
54082 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
54083 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54084 				HYBRID_BREAK();
54085 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
54086 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
54087 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54088 				HYBRID_BREAK();
54089 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
54090 				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
54091 				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54092 				HYBRID_BREAK();
54093 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
54094 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
54095 				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54096 				HYBRID_BREAK();
54097 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
54098 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
54099 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54100 				HYBRID_BREAK();
54101 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
54102 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
54103 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54104 				HYBRID_BREAK();
54105 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
54106 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
54107 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54108 				HYBRID_BREAK();
54109 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
54110 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
54111 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54112 				HYBRID_BREAK();
54113 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
54114 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
54115 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54116 				HYBRID_BREAK();
54117 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
54118 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
54119 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54120 				HYBRID_BREAK();
54121 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
54122 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
54123 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54124 				HYBRID_BREAK();
54125 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
54126 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
54127 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54128 				HYBRID_BREAK();
54129 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
54130 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
54131 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54132 				HYBRID_BREAK();
54133 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
54134 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
54135 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54136 				HYBRID_BREAK();
54137 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
54138 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
54139 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54140 				HYBRID_BREAK();
54141 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
54142 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
54143 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54144 				HYBRID_BREAK();
54145 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
54146 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
54147 				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54148 				HYBRID_BREAK();
54149 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
54150 				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
54151 				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54152 				HYBRID_BREAK();
54153 			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
54154 				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
54155 				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54156 				HYBRID_BREAK();
54157 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
54158 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
54159 				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54160 				HYBRID_BREAK();
54161 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
54162 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
54163 				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54164 				HYBRID_BREAK();
54165 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
54166 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
54167 				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54168 				HYBRID_BREAK();
54169 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
54170 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
54171 				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54172 				HYBRID_BREAK();
54173 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
54174 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
54175 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54176 				HYBRID_BREAK();
54177 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
54178 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
54179 				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54180 				HYBRID_BREAK();
54181 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
54182 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
54183 				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54184 				HYBRID_BREAK();
54185 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
54186 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
54187 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54188 				HYBRID_BREAK();
54189 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
54190 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
54191 				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54192 				HYBRID_BREAK();
54193 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
54194 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
54195 				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54196 				HYBRID_BREAK();
54197 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
54198 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
54199 				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54200 				HYBRID_BREAK();
54201 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
54202 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
54203 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54204 				HYBRID_BREAK();
54205 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
54206 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
54207 				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54208 				HYBRID_BREAK();
54209 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
54210 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
54211 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54212 				HYBRID_BREAK();
54213 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
54214 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
54215 				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54216 				HYBRID_BREAK();
54217 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
54218 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
54219 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54220 				HYBRID_BREAK();
54221 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
54222 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
54223 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54224 				HYBRID_BREAK();
54225 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
54226 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
54227 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54228 				HYBRID_BREAK();
54229 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMP):
54230 				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMP)
54231 				ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54232 				HYBRID_BREAK();
54233 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_VAR):
54234 				VM_TRACE(ZEND_YIELD_SPEC_CONST_VAR)
54235 				ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54236 				HYBRID_BREAK();
54237 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
54238 				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
54239 				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54240 				HYBRID_BREAK();
54241 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
54242 				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
54243 				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54244 				HYBRID_BREAK();
54245 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
54246 				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
54247 				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54248 				HYBRID_BREAK();
54249 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
54250 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
54251 				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54252 				HYBRID_BREAK();
54253 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
54254 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
54255 				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54256 				HYBRID_BREAK();
54257 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
54258 				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
54259 				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54260 				HYBRID_BREAK();
54261 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
54262 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
54263 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54264 				HYBRID_BREAK();
54265 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
54266 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
54267 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54268 				HYBRID_BREAK();
54269 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
54270 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
54271 				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54272 				HYBRID_BREAK();
54273 			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
54274 				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
54275 				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54276 				HYBRID_BREAK();
54277 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
54278 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
54279 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54280 				HYBRID_BREAK();
54281 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
54282 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
54283 				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54284 				HYBRID_BREAK();
54285 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
54286 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
54287 				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54288 				HYBRID_BREAK();
54289 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
54290 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
54291 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54292 				HYBRID_BREAK();
54293 			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED):
54294 				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED)
54295 				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54296 				HYBRID_BREAK();
54297 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
54298 				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
54299 				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54300 				HYBRID_BREAK();
54301 			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
54302 				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
54303 				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54304 				HYBRID_BREAK();
54305 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
54306 				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
54307 				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54308 				HYBRID_BREAK();
54309 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
54310 				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
54311 				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54312 				HYBRID_BREAK();
54313 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
54314 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
54315 				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54316 				HYBRID_BREAK();
54317 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
54318 				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
54319 				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54320 				HYBRID_BREAK();
54321 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
54322 				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
54323 				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54324 				HYBRID_BREAK();
54325 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
54326 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
54327 				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54328 				HYBRID_BREAK();
54329 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
54330 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
54331 				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54332 				HYBRID_BREAK();
54333 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
54334 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
54335 				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54336 				HYBRID_BREAK();
54337 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
54338 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
54339 				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54340 				HYBRID_BREAK();
54341 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
54342 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
54343 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54344 				HYBRID_BREAK();
54345 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
54346 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
54347 				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54348 				HYBRID_BREAK();
54349 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
54350 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
54351 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54352 				HYBRID_BREAK();
54353 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
54354 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
54355 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54356 				HYBRID_BREAK();
54357 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
54358 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
54359 				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54360 				HYBRID_BREAK();
54361 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
54362 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
54363 				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54364 				HYBRID_BREAK();
54365 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
54366 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
54367 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54368 				HYBRID_BREAK();
54369 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
54370 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
54371 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54372 				HYBRID_BREAK();
54373 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
54374 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
54375 				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54376 				HYBRID_BREAK();
54377 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
54378 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
54379 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54380 				HYBRID_BREAK();
54381 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
54382 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
54383 				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54384 				HYBRID_BREAK();
54385 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
54386 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
54387 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54388 				HYBRID_BREAK();
54389 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
54390 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
54391 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54392 				HYBRID_BREAK();
54393 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
54394 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
54395 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54396 				HYBRID_BREAK();
54397 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
54398 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
54399 				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54400 				HYBRID_BREAK();
54401 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
54402 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
54403 				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54404 				HYBRID_BREAK();
54405 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
54406 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
54407 				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54408 				HYBRID_BREAK();
54409 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
54410 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
54411 				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54412 				HYBRID_BREAK();
54413 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
54414 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
54415 				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54416 				HYBRID_BREAK();
54417 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
54418 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
54419 				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54420 				HYBRID_BREAK();
54421 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
54422 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
54423 				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54424 				HYBRID_BREAK();
54425 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
54426 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
54427 				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54428 				HYBRID_BREAK();
54429 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
54430 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
54431 				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54432 				HYBRID_BREAK();
54433 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
54434 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
54435 				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54436 				HYBRID_BREAK();
54437 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
54438 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
54439 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54440 				HYBRID_BREAK();
54441 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
54442 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
54443 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54444 				HYBRID_BREAK();
54445 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
54446 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
54447 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54448 				HYBRID_BREAK();
54449 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
54450 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
54451 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54452 				HYBRID_BREAK();
54453 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
54454 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
54455 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54456 				HYBRID_BREAK();
54457 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
54458 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
54459 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54460 				HYBRID_BREAK();
54461 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
54462 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
54463 				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54464 				HYBRID_BREAK();
54465 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
54466 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
54467 				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54468 				HYBRID_BREAK();
54469 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
54470 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
54471 				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54472 				HYBRID_BREAK();
54473 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
54474 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
54475 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54476 				HYBRID_BREAK();
54477 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
54478 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
54479 				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54480 				HYBRID_BREAK();
54481 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
54482 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
54483 				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54484 				HYBRID_BREAK();
54485 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
54486 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
54487 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54488 				HYBRID_BREAK();
54489 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
54490 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
54491 				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54492 				HYBRID_BREAK();
54493 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
54494 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
54495 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54496 				HYBRID_BREAK();
54497 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
54498 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
54499 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54500 				HYBRID_BREAK();
54501 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
54502 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
54503 				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54504 				HYBRID_BREAK();
54505 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
54506 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
54507 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54508 				HYBRID_BREAK();
54509 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
54510 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
54511 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54512 				HYBRID_BREAK();
54513 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
54514 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
54515 				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54516 				HYBRID_BREAK();
54517 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
54518 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
54519 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54520 				HYBRID_BREAK();
54521 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
54522 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
54523 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54524 				HYBRID_BREAK();
54525 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
54526 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
54527 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54528 				HYBRID_BREAK();
54529 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
54530 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
54531 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54532 				HYBRID_BREAK();
54533 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
54534 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
54535 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54536 				HYBRID_BREAK();
54537 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
54538 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
54539 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54540 				HYBRID_BREAK();
54541 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
54542 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
54543 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54544 				HYBRID_BREAK();
54545 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
54546 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
54547 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54548 				HYBRID_BREAK();
54549 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
54550 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
54551 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54552 				HYBRID_BREAK();
54553 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
54554 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
54555 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54556 				HYBRID_BREAK();
54557 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
54558 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
54559 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54560 				HYBRID_BREAK();
54561 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
54562 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
54563 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54564 				HYBRID_BREAK();
54565 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
54566 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
54567 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54568 				HYBRID_BREAK();
54569 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
54570 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
54571 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54572 				HYBRID_BREAK();
54573 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
54574 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
54575 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54576 				HYBRID_BREAK();
54577 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
54578 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
54579 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54580 				HYBRID_BREAK();
54581 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
54582 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
54583 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54584 				HYBRID_BREAK();
54585 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
54586 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
54587 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54588 				HYBRID_BREAK();
54589 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
54590 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
54591 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54592 				HYBRID_BREAK();
54593 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
54594 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
54595 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54596 				HYBRID_BREAK();
54597 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
54598 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
54599 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54600 				HYBRID_BREAK();
54601 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
54602 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
54603 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54604 				HYBRID_BREAK();
54605 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
54606 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
54607 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54608 				HYBRID_BREAK();
54609 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
54610 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
54611 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54612 				HYBRID_BREAK();
54613 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
54614 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
54615 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54616 				HYBRID_BREAK();
54617 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
54618 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
54619 				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54620 				HYBRID_BREAK();
54621 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
54622 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
54623 				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54624 				HYBRID_BREAK();
54625 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
54626 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
54627 				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54628 				HYBRID_BREAK();
54629 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
54630 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
54631 				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54632 				HYBRID_BREAK();
54633 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
54634 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
54635 				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54636 				HYBRID_BREAK();
54637 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
54638 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
54639 				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54640 				HYBRID_BREAK();
54641 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
54642 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
54643 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54644 				HYBRID_BREAK();
54645 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54646 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54647 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54648 				HYBRID_BREAK();
54649 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54650 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54651 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54652 				HYBRID_BREAK();
54653 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
54654 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
54655 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54656 				HYBRID_BREAK();
54657 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54658 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54659 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54660 				HYBRID_BREAK();
54661 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54662 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54663 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54664 				HYBRID_BREAK();
54665 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
54666 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
54667 				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54668 				HYBRID_BREAK();
54669 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
54670 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
54671 				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54672 				HYBRID_BREAK();
54673 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
54674 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
54675 				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54676 				HYBRID_BREAK();
54677 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
54678 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
54679 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54680 				HYBRID_BREAK();
54681 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
54682 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
54683 				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54684 				HYBRID_BREAK();
54685 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54686 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54687 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54688 				HYBRID_BREAK();
54689 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
54690 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
54691 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54692 				HYBRID_BREAK();
54693 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
54694 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
54695 				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54696 				HYBRID_BREAK();
54697 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54698 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54699 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54700 				HYBRID_BREAK();
54701 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
54702 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
54703 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54704 				HYBRID_BREAK();
54705 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
54706 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
54707 				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54708 				HYBRID_BREAK();
54709 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54710 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54711 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54712 				HYBRID_BREAK();
54713 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
54714 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
54715 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54716 				HYBRID_BREAK();
54717 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54718 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54719 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54720 				HYBRID_BREAK();
54721 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54722 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54723 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54724 				HYBRID_BREAK();
54725 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54726 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54727 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54728 				HYBRID_BREAK();
54729 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54730 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54731 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54732 				HYBRID_BREAK();
54733 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54734 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54735 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54736 				HYBRID_BREAK();
54737 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
54738 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
54739 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54740 				HYBRID_BREAK();
54741 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54742 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54743 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54744 				HYBRID_BREAK();
54745 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54746 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54747 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54748 				HYBRID_BREAK();
54749 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54750 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54751 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54752 				HYBRID_BREAK();
54753 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54754 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54755 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54756 				HYBRID_BREAK();
54757 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54758 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54759 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54760 				HYBRID_BREAK();
54761 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
54762 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
54763 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54764 				HYBRID_BREAK();
54765 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54766 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54767 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54768 				HYBRID_BREAK();
54769 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54770 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54771 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54772 				HYBRID_BREAK();
54773 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54774 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54775 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54776 				HYBRID_BREAK();
54777 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54778 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54779 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54780 				HYBRID_BREAK();
54781 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54782 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54783 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54784 				HYBRID_BREAK();
54785 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
54786 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
54787 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54788 				HYBRID_BREAK();
54789 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54790 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54791 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54792 				HYBRID_BREAK();
54793 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54794 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54795 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54796 				HYBRID_BREAK();
54797 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
54798 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
54799 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54800 				HYBRID_BREAK();
54801 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
54802 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
54803 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54804 				HYBRID_BREAK();
54805 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
54806 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
54807 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54808 				HYBRID_BREAK();
54809 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
54810 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
54811 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54812 				HYBRID_BREAK();
54813 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
54814 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
54815 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54816 				HYBRID_BREAK();
54817 			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVAR):
54818 				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVAR)
54819 				ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54820 				HYBRID_BREAK();
54821 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
54822 				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
54823 				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54824 				HYBRID_BREAK();
54825 			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
54826 				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
54827 				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54828 				HYBRID_BREAK();
54829 			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
54830 				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
54831 				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54832 				HYBRID_BREAK();
54833 			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
54834 				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
54835 				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54836 				HYBRID_BREAK();
54837 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
54838 				VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR)
54839 				ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54840 				HYBRID_BREAK();
54841 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
54842 				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
54843 				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54844 				HYBRID_BREAK();
54845 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
54846 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
54847 				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54848 				HYBRID_BREAK();
54849 			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
54850 				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
54851 				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54852 				HYBRID_BREAK();
54853 			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
54854 				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
54855 				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54856 				HYBRID_BREAK();
54857 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR):
54858 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR)
54859 				ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54860 				HYBRID_BREAK();
54861 			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
54862 				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
54863 				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54864 				HYBRID_BREAK();
54865 			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
54866 				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
54867 				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54868 				HYBRID_BREAK();
54869 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
54870 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
54871 				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54872 				HYBRID_BREAK();
54873 			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
54874 				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
54875 				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54876 				HYBRID_BREAK();
54877 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
54878 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
54879 				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54880 				HYBRID_BREAK();
54881 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
54882 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
54883 				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54884 				HYBRID_BREAK();
54885 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
54886 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
54887 				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54888 				HYBRID_BREAK();
54889 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
54890 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
54891 				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54892 				HYBRID_BREAK();
54893 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
54894 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
54895 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54896 				HYBRID_BREAK();
54897 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
54898 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
54899 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54900 				HYBRID_BREAK();
54901 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
54902 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
54903 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54904 				HYBRID_BREAK();
54905 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
54906 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
54907 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54908 				HYBRID_BREAK();
54909 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
54910 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
54911 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54912 				HYBRID_BREAK();
54913 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
54914 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
54915 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54916 				HYBRID_BREAK();
54917 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
54918 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
54919 				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54920 				HYBRID_BREAK();
54921 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
54922 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
54923 				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54924 				HYBRID_BREAK();
54925 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
54926 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
54927 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54928 				HYBRID_BREAK();
54929 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
54930 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
54931 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54932 				HYBRID_BREAK();
54933 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
54934 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
54935 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54936 				HYBRID_BREAK();
54937 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
54938 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
54939 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54940 				HYBRID_BREAK();
54941 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
54942 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
54943 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54944 				HYBRID_BREAK();
54945 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
54946 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
54947 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54948 				HYBRID_BREAK();
54949 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
54950 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
54951 				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54952 				HYBRID_BREAK();
54953 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
54954 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
54955 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54956 				HYBRID_BREAK();
54957 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
54958 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
54959 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54960 				HYBRID_BREAK();
54961 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
54962 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
54963 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54964 				HYBRID_BREAK();
54965 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
54966 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
54967 				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54968 				HYBRID_BREAK();
54969 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
54970 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
54971 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54972 				HYBRID_BREAK();
54973 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
54974 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
54975 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54976 				HYBRID_BREAK();
54977 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
54978 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
54979 				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54980 				HYBRID_BREAK();
54981 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
54982 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
54983 				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54984 				HYBRID_BREAK();
54985 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
54986 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
54987 				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54988 				HYBRID_BREAK();
54989 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
54990 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
54991 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54992 				HYBRID_BREAK();
54993 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
54994 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
54995 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
54996 				HYBRID_BREAK();
54997 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
54998 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
54999 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55000 				HYBRID_BREAK();
55001 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
55002 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
55003 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55004 				HYBRID_BREAK();
55005 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
55006 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
55007 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55008 				HYBRID_BREAK();
55009 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
55010 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
55011 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55012 				HYBRID_BREAK();
55013 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
55014 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
55015 				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55016 				HYBRID_BREAK();
55017 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
55018 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
55019 				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55020 				HYBRID_BREAK();
55021 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
55022 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
55023 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55024 				HYBRID_BREAK();
55025 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
55026 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
55027 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55028 				HYBRID_BREAK();
55029 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
55030 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
55031 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55032 				HYBRID_BREAK();
55033 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
55034 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
55035 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55036 				HYBRID_BREAK();
55037 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
55038 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
55039 				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55040 				HYBRID_BREAK();
55041 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
55042 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
55043 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55044 				HYBRID_BREAK();
55045 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
55046 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
55047 				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55048 				HYBRID_BREAK();
55049 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
55050 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
55051 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55052 				HYBRID_BREAK();
55053 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
55054 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
55055 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55056 				HYBRID_BREAK();
55057 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
55058 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
55059 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55060 				HYBRID_BREAK();
55061 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
55062 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
55063 				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55064 				HYBRID_BREAK();
55065 			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
55066 				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
55067 				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55068 				HYBRID_BREAK();
55069 			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
55070 				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
55071 				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55072 				HYBRID_BREAK();
55073 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
55074 				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
55075 				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55076 				HYBRID_BREAK();
55077 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
55078 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
55079 				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55080 				HYBRID_BREAK();
55081 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
55082 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
55083 				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55084 				HYBRID_BREAK();
55085 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
55086 				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
55087 				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55088 				HYBRID_BREAK();
55089 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
55090 				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
55091 				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55092 				HYBRID_BREAK();
55093 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
55094 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
55095 				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55096 				HYBRID_BREAK();
55097 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
55098 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
55099 				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55100 				HYBRID_BREAK();
55101 			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
55102 				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
55103 				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55104 				HYBRID_BREAK();
55105 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
55106 				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
55107 				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55108 				HYBRID_BREAK();
55109 			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
55110 				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
55111 				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55112 				HYBRID_BREAK();
55113 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
55114 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
55115 				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55116 				HYBRID_BREAK();
55117 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
55118 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
55119 				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55120 				HYBRID_BREAK();
55121 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
55122 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
55123 				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55124 				HYBRID_BREAK();
55125 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
55126 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
55127 				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55128 				HYBRID_BREAK();
55129 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
55130 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
55131 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55132 				HYBRID_BREAK();
55133 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
55134 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
55135 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55136 				HYBRID_BREAK();
55137 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
55138 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
55139 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55140 				HYBRID_BREAK();
55141 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
55142 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
55143 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55144 				HYBRID_BREAK();
55145 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
55146 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
55147 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55148 				HYBRID_BREAK();
55149 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
55150 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
55151 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55152 				HYBRID_BREAK();
55153 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
55154 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
55155 				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55156 				HYBRID_BREAK();
55157 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
55158 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
55159 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55160 				HYBRID_BREAK();
55161 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
55162 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
55163 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55164 				HYBRID_BREAK();
55165 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
55166 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
55167 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55168 				HYBRID_BREAK();
55169 			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
55170 				VM_TRACE(ZEND_RETURN_SPEC_TMP)
55171 {
55172 	USE_OPLINE
55173 	zval *retval_ptr;
55174 	zval *return_value;
55175 	zend_free_op free_op1;
55176 
55177 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
55178 	return_value = EX(return_value);
55179 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
55180 		SAVE_OPLINE();
55181 		retval_ptr = ZVAL_UNDEFINED_OP1();
55182 		if (return_value) {
55183 			ZVAL_NULL(return_value);
55184 		}
55185 	} else if (!return_value) {
55186 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
55187 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
55188 				SAVE_OPLINE();
55189 				rc_dtor_func(Z_COUNTED_P(free_op1));
55190 			}
55191 		}
55192 	} else {
55193 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
55194 			ZVAL_COPY_VALUE(return_value, retval_ptr);
55195 			if (IS_TMP_VAR == IS_CONST) {
55196 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
55197 					Z_ADDREF_P(return_value);
55198 				}
55199 			}
55200 		} else if (IS_TMP_VAR == IS_CV) {
55201 			do {
55202 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55203 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
55204 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
55205 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55206 							ZVAL_COPY_VALUE(return_value, retval_ptr);
55207 							if (GC_MAY_LEAK(ref)) {
55208 								gc_possible_root(ref);
55209 							}
55210 							ZVAL_NULL(retval_ptr);
55211 							break;
55212 						} else {
55213 							Z_ADDREF_P(retval_ptr);
55214 						}
55215 					} else {
55216 						retval_ptr = Z_REFVAL_P(retval_ptr);
55217 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55218 							Z_ADDREF_P(retval_ptr);
55219 						}
55220 					}
55221 				}
55222 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55223 			} while (0);
55224 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
55225 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
55226 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55227 
55228 				retval_ptr = Z_REFVAL_P(retval_ptr);
55229 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55230 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
55231 					efree_size(ref, sizeof(zend_reference));
55232 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55233 					Z_ADDREF_P(retval_ptr);
55234 				}
55235 			} else {
55236 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55237 			}
55238 		}
55239 	}
55240 	goto zend_leave_helper_SPEC_LABEL;
55241 }
55242 
55243 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
55244 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
55245 				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55246 				HYBRID_BREAK();
55247 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
55248 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
55249 				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55250 				HYBRID_BREAK();
55251 			HYBRID_CASE(ZEND_THROW_SPEC_TMP):
55252 				VM_TRACE(ZEND_THROW_SPEC_TMP)
55253 				ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55254 				HYBRID_BREAK();
55255 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP):
55256 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP)
55257 				ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55258 				HYBRID_BREAK();
55259 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK):
55260 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK)
55261 				ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55262 				HYBRID_BREAK();
55263 			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
55264 				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
55265 				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55266 				HYBRID_BREAK();
55267 			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
55268 				VM_TRACE(ZEND_CAST_SPEC_TMP)
55269 				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55270 				HYBRID_BREAK();
55271 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
55272 				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
55273 				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55274 				HYBRID_BREAK();
55275 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
55276 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
55277 				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55278 				HYBRID_BREAK();
55279 			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
55280 				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
55281 				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55282 				HYBRID_BREAK();
55283 			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
55284 				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
55285 				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55286 				HYBRID_BREAK();
55287 			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
55288 				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
55289 				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55290 				HYBRID_BREAK();
55291 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
55292 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
55293 				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55294 				HYBRID_BREAK();
55295 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMP):
55296 				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMP)
55297 				ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55298 				HYBRID_BREAK();
55299 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
55300 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
55301 				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55302 				HYBRID_BREAK();
55303 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
55304 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
55305 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55306 				HYBRID_BREAK();
55307 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
55308 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
55309 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55310 				HYBRID_BREAK();
55311 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
55312 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
55313 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55314 				HYBRID_BREAK();
55315 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
55316 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
55317 				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55318 				HYBRID_BREAK();
55319 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
55320 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
55321 				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55322 				HYBRID_BREAK();
55323 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
55324 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
55325 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55326 				HYBRID_BREAK();
55327 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
55328 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
55329 				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55330 				HYBRID_BREAK();
55331 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
55332 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
55333 				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55334 				HYBRID_BREAK();
55335 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
55336 				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
55337 				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55338 				HYBRID_BREAK();
55339 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
55340 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
55341 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55342 				HYBRID_BREAK();
55343 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
55344 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
55345 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55346 				HYBRID_BREAK();
55347 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
55348 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
55349 				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55350 				HYBRID_BREAK();
55351 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
55352 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
55353 				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55354 				HYBRID_BREAK();
55355 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
55356 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
55357 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55358 				HYBRID_BREAK();
55359 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
55360 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
55361 				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55362 				HYBRID_BREAK();
55363 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
55364 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
55365 				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55366 				HYBRID_BREAK();
55367 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
55368 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
55369 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55370 				HYBRID_BREAK();
55371 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMP):
55372 				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMP)
55373 				ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55374 				HYBRID_BREAK();
55375 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_VAR):
55376 				VM_TRACE(ZEND_YIELD_SPEC_TMP_VAR)
55377 				ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55378 				HYBRID_BREAK();
55379 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
55380 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
55381 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55382 				HYBRID_BREAK();
55383 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
55384 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
55385 				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55386 				HYBRID_BREAK();
55387 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
55388 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
55389 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55390 				HYBRID_BREAK();
55391 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
55392 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
55393 				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55394 				HYBRID_BREAK();
55395 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
55396 				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
55397 				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55398 				HYBRID_BREAK();
55399 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
55400 				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
55401 				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55402 				HYBRID_BREAK();
55403 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
55404 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
55405 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55406 				HYBRID_BREAK();
55407 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
55408 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
55409 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55410 				HYBRID_BREAK();
55411 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
55412 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
55413 				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55414 				HYBRID_BREAK();
55415 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
55416 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
55417 				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55418 				HYBRID_BREAK();
55419 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
55420 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
55421 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55422 				HYBRID_BREAK();
55423 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
55424 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
55425 				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55426 				HYBRID_BREAK();
55427 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
55428 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
55429 				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55430 				HYBRID_BREAK();
55431 			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
55432 				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
55433 				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55434 				HYBRID_BREAK();
55435 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
55436 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
55437 				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55438 				HYBRID_BREAK();
55439 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
55440 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
55441 				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55442 				HYBRID_BREAK();
55443 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
55444 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
55445 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55446 				HYBRID_BREAK();
55447 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
55448 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
55449 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55450 				HYBRID_BREAK();
55451 			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
55452 				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
55453 				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55454 				HYBRID_BREAK();
55455 			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
55456 				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
55457 				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55458 				HYBRID_BREAK();
55459 			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
55460 				VM_TRACE(ZEND_RETURN_SPEC_VAR)
55461 {
55462 	USE_OPLINE
55463 	zval *retval_ptr;
55464 	zval *return_value;
55465 	zend_free_op free_op1;
55466 
55467 	retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
55468 	return_value = EX(return_value);
55469 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
55470 		SAVE_OPLINE();
55471 		retval_ptr = ZVAL_UNDEFINED_OP1();
55472 		if (return_value) {
55473 			ZVAL_NULL(return_value);
55474 		}
55475 	} else if (!return_value) {
55476 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
55477 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
55478 				SAVE_OPLINE();
55479 				rc_dtor_func(Z_COUNTED_P(free_op1));
55480 			}
55481 		}
55482 	} else {
55483 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
55484 			ZVAL_COPY_VALUE(return_value, retval_ptr);
55485 			if (IS_VAR == IS_CONST) {
55486 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
55487 					Z_ADDREF_P(return_value);
55488 				}
55489 			}
55490 		} else if (IS_VAR == IS_CV) {
55491 			do {
55492 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55493 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
55494 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
55495 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55496 							ZVAL_COPY_VALUE(return_value, retval_ptr);
55497 							if (GC_MAY_LEAK(ref)) {
55498 								gc_possible_root(ref);
55499 							}
55500 							ZVAL_NULL(retval_ptr);
55501 							break;
55502 						} else {
55503 							Z_ADDREF_P(retval_ptr);
55504 						}
55505 					} else {
55506 						retval_ptr = Z_REFVAL_P(retval_ptr);
55507 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55508 							Z_ADDREF_P(retval_ptr);
55509 						}
55510 					}
55511 				}
55512 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55513 			} while (0);
55514 		} else /* if (IS_VAR == IS_VAR) */ {
55515 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
55516 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
55517 
55518 				retval_ptr = Z_REFVAL_P(retval_ptr);
55519 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55520 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
55521 					efree_size(ref, sizeof(zend_reference));
55522 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
55523 					Z_ADDREF_P(retval_ptr);
55524 				}
55525 			} else {
55526 				ZVAL_COPY_VALUE(return_value, retval_ptr);
55527 			}
55528 		}
55529 	}
55530 	goto zend_leave_helper_SPEC_LABEL;
55531 }
55532 
55533 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
55534 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
55535 				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55536 				HYBRID_BREAK();
55537 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
55538 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
55539 				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55540 				HYBRID_BREAK();
55541 			HYBRID_CASE(ZEND_THROW_SPEC_VAR):
55542 				VM_TRACE(ZEND_THROW_SPEC_VAR)
55543 				ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55544 				HYBRID_BREAK();
55545 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR):
55546 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR)
55547 				ZEND_SEND_VAR_SPEC_VAR_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55548 				HYBRID_BREAK();
55549 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR):
55550 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR)
55551 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55552 				HYBRID_BREAK();
55553 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR):
55554 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR)
55555 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55556 				HYBRID_BREAK();
55557 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK):
55558 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK)
55559 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55560 				HYBRID_BREAK();
55561 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR):
55562 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR)
55563 				ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55564 				HYBRID_BREAK();
55565 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR):
55566 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR)
55567 				ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55568 				HYBRID_BREAK();
55569 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK):
55570 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK)
55571 				ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55572 				HYBRID_BREAK();
55573 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR):
55574 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR)
55575 				ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55576 				HYBRID_BREAK();
55577 			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
55578 				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
55579 				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55580 				HYBRID_BREAK();
55581 			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
55582 				VM_TRACE(ZEND_CAST_SPEC_VAR)
55583 				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55584 				HYBRID_BREAK();
55585 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
55586 				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
55587 				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55588 				HYBRID_BREAK();
55589 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
55590 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
55591 				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55592 				HYBRID_BREAK();
55593 			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
55594 				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
55595 				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55596 				HYBRID_BREAK();
55597 			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
55598 				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
55599 				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55600 				HYBRID_BREAK();
55601 			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
55602 				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
55603 				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55604 				HYBRID_BREAK();
55605 			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
55606 				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
55607 				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55608 				HYBRID_BREAK();
55609 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
55610 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
55611 				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55612 				HYBRID_BREAK();
55613 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_VAR):
55614 				VM_TRACE(ZEND_YIELD_FROM_SPEC_VAR)
55615 				ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55616 				HYBRID_BREAK();
55617 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
55618 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
55619 				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55620 				HYBRID_BREAK();
55621 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR):
55622 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR)
55623 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55624 				HYBRID_BREAK();
55625 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
55626 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
55627 				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55628 				HYBRID_BREAK();
55629 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
55630 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
55631 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55632 				HYBRID_BREAK();
55633 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
55634 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
55635 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55636 				HYBRID_BREAK();
55637 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
55638 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
55639 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55640 				HYBRID_BREAK();
55641 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
55642 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
55643 				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55644 				HYBRID_BREAK();
55645 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
55646 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
55647 				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55648 				HYBRID_BREAK();
55649 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
55650 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
55651 				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55652 				HYBRID_BREAK();
55653 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
55654 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
55655 				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55656 				HYBRID_BREAK();
55657 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
55658 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
55659 				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55660 				HYBRID_BREAK();
55661 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
55662 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
55663 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55664 				HYBRID_BREAK();
55665 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
55666 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
55667 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55668 				HYBRID_BREAK();
55669 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
55670 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
55671 				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55672 				HYBRID_BREAK();
55673 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
55674 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
55675 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55676 				HYBRID_BREAK();
55677 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
55678 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
55679 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55680 				HYBRID_BREAK();
55681 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
55682 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
55683 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55684 				HYBRID_BREAK();
55685 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
55686 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
55687 				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55688 				HYBRID_BREAK();
55689 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
55690 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
55691 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55692 				HYBRID_BREAK();
55693 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
55694 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
55695 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55696 				HYBRID_BREAK();
55697 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
55698 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
55699 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55700 				HYBRID_BREAK();
55701 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
55702 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
55703 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55704 				HYBRID_BREAK();
55705 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
55706 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
55707 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55708 				HYBRID_BREAK();
55709 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
55710 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
55711 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55712 				HYBRID_BREAK();
55713 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
55714 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
55715 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55716 				HYBRID_BREAK();
55717 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
55718 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
55719 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55720 				HYBRID_BREAK();
55721 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
55722 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
55723 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55724 				HYBRID_BREAK();
55725 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
55726 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
55727 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55728 				HYBRID_BREAK();
55729 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
55730 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
55731 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55732 				HYBRID_BREAK();
55733 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
55734 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
55735 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55736 				HYBRID_BREAK();
55737 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
55738 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
55739 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55740 				HYBRID_BREAK();
55741 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
55742 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
55743 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55744 				HYBRID_BREAK();
55745 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
55746 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
55747 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55748 				HYBRID_BREAK();
55749 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
55750 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
55751 				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55752 				HYBRID_BREAK();
55753 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
55754 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
55755 				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55756 				HYBRID_BREAK();
55757 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
55758 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
55759 				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55760 				HYBRID_BREAK();
55761 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
55762 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
55763 				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55764 				HYBRID_BREAK();
55765 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
55766 				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
55767 				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55768 				HYBRID_BREAK();
55769 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
55770 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
55771 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55772 				HYBRID_BREAK();
55773 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
55774 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
55775 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55776 				HYBRID_BREAK();
55777 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
55778 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
55779 				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55780 				HYBRID_BREAK();
55781 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
55782 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
55783 				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55784 				HYBRID_BREAK();
55785 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
55786 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
55787 				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55788 				HYBRID_BREAK();
55789 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
55790 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
55791 				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55792 				HYBRID_BREAK();
55793 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
55794 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
55795 				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55796 				HYBRID_BREAK();
55797 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
55798 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
55799 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55800 				HYBRID_BREAK();
55801 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
55802 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
55803 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55804 				HYBRID_BREAK();
55805 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
55806 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
55807 				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55808 				HYBRID_BREAK();
55809 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
55810 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
55811 				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55812 				HYBRID_BREAK();
55813 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
55814 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
55815 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55816 				HYBRID_BREAK();
55817 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
55818 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
55819 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55820 				HYBRID_BREAK();
55821 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
55822 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
55823 				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55824 				HYBRID_BREAK();
55825 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
55826 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
55827 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55828 				HYBRID_BREAK();
55829 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
55830 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
55831 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55832 				HYBRID_BREAK();
55833 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
55834 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
55835 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55836 				HYBRID_BREAK();
55837 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
55838 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
55839 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55840 				HYBRID_BREAK();
55841 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
55842 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
55843 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55844 				HYBRID_BREAK();
55845 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
55846 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
55847 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55848 				HYBRID_BREAK();
55849 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
55850 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
55851 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55852 				HYBRID_BREAK();
55853 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
55854 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
55855 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55856 				HYBRID_BREAK();
55857 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
55858 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
55859 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55860 				HYBRID_BREAK();
55861 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
55862 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
55863 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55864 				HYBRID_BREAK();
55865 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
55866 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
55867 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55868 				HYBRID_BREAK();
55869 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
55870 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
55871 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55872 				HYBRID_BREAK();
55873 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
55874 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
55875 				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55876 				HYBRID_BREAK();
55877 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
55878 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
55879 				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55880 				HYBRID_BREAK();
55881 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
55882 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
55883 				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55884 				HYBRID_BREAK();
55885 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
55886 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
55887 				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55888 				HYBRID_BREAK();
55889 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
55890 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
55891 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55892 				HYBRID_BREAK();
55893 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
55894 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
55895 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55896 				HYBRID_BREAK();
55897 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
55898 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
55899 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55900 				HYBRID_BREAK();
55901 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMP):
55902 				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMP)
55903 				ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55904 				HYBRID_BREAK();
55905 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
55906 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
55907 				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55908 				HYBRID_BREAK();
55909 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
55910 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
55911 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55912 				HYBRID_BREAK();
55913 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
55914 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
55915 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55916 				HYBRID_BREAK();
55917 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
55918 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
55919 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55920 				HYBRID_BREAK();
55921 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
55922 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
55923 				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55924 				HYBRID_BREAK();
55925 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_VAR):
55926 				VM_TRACE(ZEND_YIELD_SPEC_VAR_VAR)
55927 				ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55928 				HYBRID_BREAK();
55929 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
55930 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
55931 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55932 				HYBRID_BREAK();
55933 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
55934 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
55935 				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55936 				HYBRID_BREAK();
55937 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
55938 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
55939 				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55940 				HYBRID_BREAK();
55941 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
55942 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
55943 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55944 				HYBRID_BREAK();
55945 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
55946 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
55947 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55948 				HYBRID_BREAK();
55949 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
55950 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
55951 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55952 				HYBRID_BREAK();
55953 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
55954 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
55955 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55956 				HYBRID_BREAK();
55957 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
55958 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
55959 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55960 				HYBRID_BREAK();
55961 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
55962 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
55963 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55964 				HYBRID_BREAK();
55965 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
55966 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
55967 				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55968 				HYBRID_BREAK();
55969 			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
55970 				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
55971 				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55972 				HYBRID_BREAK();
55973 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
55974 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
55975 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55976 				HYBRID_BREAK();
55977 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
55978 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
55979 				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55980 				HYBRID_BREAK();
55981 			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
55982 				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
55983 				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55984 				HYBRID_BREAK();
55985 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
55986 				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
55987 				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55988 				HYBRID_BREAK();
55989 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
55990 				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
55991 				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55992 				HYBRID_BREAK();
55993 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
55994 				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
55995 				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
55996 				HYBRID_BREAK();
55997 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
55998 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
55999 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56000 				HYBRID_BREAK();
56001 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
56002 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
56003 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56004 				HYBRID_BREAK();
56005 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
56006 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
56007 				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56008 				HYBRID_BREAK();
56009 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
56010 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
56011 				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56012 				HYBRID_BREAK();
56013 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
56014 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
56015 				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56016 				HYBRID_BREAK();
56017 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
56018 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
56019 				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56020 				HYBRID_BREAK();
56021 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
56022 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
56023 				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56024 				HYBRID_BREAK();
56025 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
56026 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
56027 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56028 				HYBRID_BREAK();
56029 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
56030 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
56031 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56032 				HYBRID_BREAK();
56033 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
56034 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
56035 				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56036 				HYBRID_BREAK();
56037 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
56038 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
56039 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56040 				HYBRID_BREAK();
56041 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
56042 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
56043 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56044 				HYBRID_BREAK();
56045 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
56046 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
56047 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56048 				HYBRID_BREAK();
56049 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
56050 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
56051 				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56052 				HYBRID_BREAK();
56053 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
56054 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
56055 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56056 				HYBRID_BREAK();
56057 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
56058 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
56059 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56060 				HYBRID_BREAK();
56061 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
56062 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
56063 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56064 				HYBRID_BREAK();
56065 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
56066 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
56067 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56068 				HYBRID_BREAK();
56069 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
56070 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
56071 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56072 				HYBRID_BREAK();
56073 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
56074 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
56075 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56076 				HYBRID_BREAK();
56077 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
56078 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
56079 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56080 				HYBRID_BREAK();
56081 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
56082 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
56083 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56084 				HYBRID_BREAK();
56085 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
56086 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
56087 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56088 				HYBRID_BREAK();
56089 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
56090 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
56091 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56092 				HYBRID_BREAK();
56093 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
56094 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
56095 				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56096 				HYBRID_BREAK();
56097 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
56098 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
56099 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56100 				HYBRID_BREAK();
56101 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
56102 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
56103 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56104 				HYBRID_BREAK();
56105 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
56106 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
56107 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56108 				HYBRID_BREAK();
56109 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
56110 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
56111 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56112 				HYBRID_BREAK();
56113 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
56114 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
56115 				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56116 				HYBRID_BREAK();
56117 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
56118 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
56119 				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56120 				HYBRID_BREAK();
56121 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
56122 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
56123 				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56124 				HYBRID_BREAK();
56125 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
56126 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
56127 				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56128 				HYBRID_BREAK();
56129 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
56130 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
56131 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56132 				HYBRID_BREAK();
56133 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
56134 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
56135 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56136 				HYBRID_BREAK();
56137 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED):
56138 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED)
56139 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56140 				HYBRID_BREAK();
56141 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK):
56142 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK)
56143 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56144 				HYBRID_BREAK();
56145 			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
56146 				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
56147 				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56148 				HYBRID_BREAK();
56149 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
56150 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
56151 				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56152 				HYBRID_BREAK();
56153 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
56154 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
56155 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56156 				HYBRID_BREAK();
56157 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
56158 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
56159 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56160 				HYBRID_BREAK();
56161 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
56162 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
56163 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56164 				HYBRID_BREAK();
56165 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
56166 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
56167 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56168 				HYBRID_BREAK();
56169 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
56170 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
56171 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56172 				HYBRID_BREAK();
56173 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
56174 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
56175 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56176 				HYBRID_BREAK();
56177 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
56178 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
56179 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56180 				HYBRID_BREAK();
56181 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
56182 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
56183 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56184 				HYBRID_BREAK();
56185 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
56186 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
56187 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56188 				HYBRID_BREAK();
56189 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
56190 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
56191 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56192 				HYBRID_BREAK();
56193 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
56194 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
56195 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56196 				HYBRID_BREAK();
56197 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
56198 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
56199 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56200 				HYBRID_BREAK();
56201 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
56202 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
56203 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56204 				HYBRID_BREAK();
56205 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
56206 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
56207 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56208 				HYBRID_BREAK();
56209 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
56210 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
56211 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56212 				HYBRID_BREAK();
56213 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
56214 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
56215 				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56216 				HYBRID_BREAK();
56217 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
56218 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
56219 				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56220 				HYBRID_BREAK();
56221 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
56222 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
56223 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56224 				HYBRID_BREAK();
56225 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
56226 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
56227 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56228 				HYBRID_BREAK();
56229 			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
56230 				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
56231 				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56232 				HYBRID_BREAK();
56233 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
56234 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
56235 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56236 				HYBRID_BREAK();
56237 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
56238 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
56239 				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56240 				HYBRID_BREAK();
56241 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
56242 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
56243 				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56244 				HYBRID_BREAK();
56245 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
56246 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
56247 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56248 				HYBRID_BREAK();
56249 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
56250 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
56251 				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56252 				HYBRID_BREAK();
56253 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
56254 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
56255 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56256 				HYBRID_BREAK();
56257 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
56258 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
56259 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56260 				HYBRID_BREAK();
56261 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
56262 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
56263 				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56264 				HYBRID_BREAK();
56265 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
56266 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
56267 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56268 				HYBRID_BREAK();
56269 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
56270 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
56271 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56272 				HYBRID_BREAK();
56273 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
56274 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
56275 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56276 				HYBRID_BREAK();
56277 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
56278 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
56279 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56280 				HYBRID_BREAK();
56281 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
56282 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
56283 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56284 				HYBRID_BREAK();
56285 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
56286 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
56287 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56288 				HYBRID_BREAK();
56289 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
56290 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
56291 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56292 				HYBRID_BREAK();
56293 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
56294 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
56295 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56296 				HYBRID_BREAK();
56297 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
56298 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
56299 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56300 				HYBRID_BREAK();
56301 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
56302 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
56303 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56304 				HYBRID_BREAK();
56305 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
56306 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
56307 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56308 				HYBRID_BREAK();
56309 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
56310 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
56311 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56312 				HYBRID_BREAK();
56313 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
56314 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
56315 				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56316 				HYBRID_BREAK();
56317 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
56318 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
56319 				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56320 				HYBRID_BREAK();
56321 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
56322 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
56323 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56324 				HYBRID_BREAK();
56325 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
56326 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
56327 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56328 				HYBRID_BREAK();
56329 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
56330 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
56331 				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56332 				HYBRID_BREAK();
56333 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
56334 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
56335 				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56336 				HYBRID_BREAK();
56337 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
56338 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
56339 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56340 				HYBRID_BREAK();
56341 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMP):
56342 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMP)
56343 				ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56344 				HYBRID_BREAK();
56345 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_VAR):
56346 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_VAR)
56347 				ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56348 				HYBRID_BREAK();
56349 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
56350 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
56351 				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56352 				HYBRID_BREAK();
56353 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
56354 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
56355 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56356 				HYBRID_BREAK();
56357 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
56358 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
56359 				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56360 				HYBRID_BREAK();
56361 			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
56362 				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
56363 				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56364 				HYBRID_BREAK();
56365 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
56366 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
56367 				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56368 				HYBRID_BREAK();
56369 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
56370 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
56371 				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56372 				HYBRID_BREAK();
56373 			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
56374 				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
56375 				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56376 				HYBRID_BREAK();
56377 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
56378 				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
56379 				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56380 				HYBRID_BREAK();
56381 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
56382 				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
56383 				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56384 				HYBRID_BREAK();
56385 			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
56386 				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
56387 				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56388 				HYBRID_BREAK();
56389 			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
56390 				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
56391 				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56392 				HYBRID_BREAK();
56393 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
56394 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
56395 				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56396 				HYBRID_BREAK();
56397 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
56398 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
56399 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56400 				HYBRID_BREAK();
56401 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
56402 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
56403 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56404 				HYBRID_BREAK();
56405 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
56406 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
56407 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56408 				HYBRID_BREAK();
56409 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
56410 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
56411 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56412 				HYBRID_BREAK();
56413 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
56414 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
56415 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56416 				HYBRID_BREAK();
56417 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
56418 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
56419 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56420 				HYBRID_BREAK();
56421 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
56422 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
56423 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56424 				HYBRID_BREAK();
56425 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
56426 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
56427 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56428 				HYBRID_BREAK();
56429 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
56430 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
56431 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56432 				HYBRID_BREAK();
56433 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
56434 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
56435 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56436 				HYBRID_BREAK();
56437 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
56438 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
56439 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56440 				HYBRID_BREAK();
56441 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
56442 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
56443 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56444 				HYBRID_BREAK();
56445 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
56446 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
56447 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56448 				HYBRID_BREAK();
56449 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
56450 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
56451 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56452 				HYBRID_BREAK();
56453 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
56454 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
56455 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56456 				HYBRID_BREAK();
56457 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
56458 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
56459 				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56460 				HYBRID_BREAK();
56461 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
56462 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
56463 				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56464 				HYBRID_BREAK();
56465 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
56466 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
56467 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56468 				HYBRID_BREAK();
56469 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
56470 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
56471 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56472 				HYBRID_BREAK();
56473 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
56474 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
56475 				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56476 				HYBRID_BREAK();
56477 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
56478 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
56479 				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56480 				HYBRID_BREAK();
56481 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
56482 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
56483 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56484 				HYBRID_BREAK();
56485 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
56486 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
56487 				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56488 				HYBRID_BREAK();
56489 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CV):
56490 				VM_TRACE(ZEND_BW_NOT_SPEC_CV)
56491 				ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56492 				HYBRID_BREAK();
56493 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
56494 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
56495 				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56496 				HYBRID_BREAK();
56497 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
56498 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
56499 				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56500 				HYBRID_BREAK();
56501 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
56502 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
56503 				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56504 				HYBRID_BREAK();
56505 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
56506 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
56507 				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56508 				HYBRID_BREAK();
56509 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
56510 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
56511 				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56512 				HYBRID_BREAK();
56513 			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
56514 				VM_TRACE(ZEND_POST_INC_SPEC_CV)
56515 				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56516 				HYBRID_BREAK();
56517 			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
56518 				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
56519 				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56520 				HYBRID_BREAK();
56521 			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
56522 				VM_TRACE(ZEND_ECHO_SPEC_CV)
56523 				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56524 				HYBRID_BREAK();
56525 			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
56526 				VM_TRACE(ZEND_JMPZ_SPEC_CV)
56527 				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56528 				HYBRID_BREAK();
56529 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
56530 				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
56531 				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56532 				HYBRID_BREAK();
56533 			HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
56534 				VM_TRACE(ZEND_JMPZNZ_SPEC_CV)
56535 				ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56536 				HYBRID_BREAK();
56537 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
56538 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
56539 				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56540 				HYBRID_BREAK();
56541 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
56542 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
56543 				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56544 				HYBRID_BREAK();
56545 			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
56546 				VM_TRACE(ZEND_RETURN_SPEC_CV)
56547 {
56548 	USE_OPLINE
56549 	zval *retval_ptr;
56550 	zval *return_value;
56551 	zend_free_op free_op1;
56552 
56553 	retval_ptr = EX_VAR(opline->op1.var);
56554 	return_value = EX(return_value);
56555 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
56556 		SAVE_OPLINE();
56557 		retval_ptr = ZVAL_UNDEFINED_OP1();
56558 		if (return_value) {
56559 			ZVAL_NULL(return_value);
56560 		}
56561 	} else if (!return_value) {
56562 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
56563 			if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) {
56564 				SAVE_OPLINE();
56565 				rc_dtor_func(Z_COUNTED_P(free_op1));
56566 			}
56567 		}
56568 	} else {
56569 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
56570 			ZVAL_COPY_VALUE(return_value, retval_ptr);
56571 			if (IS_CV == IS_CONST) {
56572 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
56573 					Z_ADDREF_P(return_value);
56574 				}
56575 			}
56576 		} else if (IS_CV == IS_CV) {
56577 			do {
56578 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56579 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
56580 						if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
56581 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56582 							ZVAL_COPY_VALUE(return_value, retval_ptr);
56583 							if (GC_MAY_LEAK(ref)) {
56584 								gc_possible_root(ref);
56585 							}
56586 							ZVAL_NULL(retval_ptr);
56587 							break;
56588 						} else {
56589 							Z_ADDREF_P(retval_ptr);
56590 						}
56591 					} else {
56592 						retval_ptr = Z_REFVAL_P(retval_ptr);
56593 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56594 							Z_ADDREF_P(retval_ptr);
56595 						}
56596 					}
56597 				}
56598 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56599 			} while (0);
56600 		} else /* if (IS_CV == IS_VAR) */ {
56601 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
56602 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
56603 
56604 				retval_ptr = Z_REFVAL_P(retval_ptr);
56605 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56606 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
56607 					efree_size(ref, sizeof(zend_reference));
56608 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
56609 					Z_ADDREF_P(retval_ptr);
56610 				}
56611 			} else {
56612 				ZVAL_COPY_VALUE(return_value, retval_ptr);
56613 			}
56614 		}
56615 	}
56616 	goto zend_leave_helper_SPEC_LABEL;
56617 }
56618 
56619 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
56620 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
56621 				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56622 				HYBRID_BREAK();
56623 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
56624 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
56625 				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56626 				HYBRID_BREAK();
56627 			HYBRID_CASE(ZEND_THROW_SPEC_CV):
56628 				VM_TRACE(ZEND_THROW_SPEC_CV)
56629 				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56630 				HYBRID_BREAK();
56631 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV):
56632 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV)
56633 				ZEND_SEND_VAR_SPEC_CV_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56634 				HYBRID_BREAK();
56635 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV):
56636 				VM_TRACE(ZEND_SEND_REF_SPEC_CV)
56637 				ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56638 				HYBRID_BREAK();
56639 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV):
56640 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV)
56641 				ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56642 				HYBRID_BREAK();
56643 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK):
56644 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK)
56645 				ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56646 				HYBRID_BREAK();
56647 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
56648 				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
56649 				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56650 				HYBRID_BREAK();
56651 			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
56652 				VM_TRACE(ZEND_BOOL_SPEC_CV)
56653 				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56654 				HYBRID_BREAK();
56655 			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
56656 				VM_TRACE(ZEND_CLONE_SPEC_CV)
56657 				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56658 				HYBRID_BREAK();
56659 			HYBRID_CASE(ZEND_CAST_SPEC_CV):
56660 				VM_TRACE(ZEND_CAST_SPEC_CV)
56661 				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56662 				HYBRID_BREAK();
56663 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
56664 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
56665 				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56666 				HYBRID_BREAK();
56667 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
56668 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
56669 				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56670 				HYBRID_BREAK();
56671 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
56672 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
56673 				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56674 				HYBRID_BREAK();
56675 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
56676 				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
56677 				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56678 				HYBRID_BREAK();
56679 			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
56680 				VM_TRACE(ZEND_COALESCE_SPEC_CV)
56681 				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56682 				HYBRID_BREAK();
56683 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
56684 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
56685 				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56686 				HYBRID_BREAK();
56687 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
56688 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
56689 				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56690 				HYBRID_BREAK();
56691 			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
56692 				VM_TRACE(ZEND_STRLEN_SPEC_CV)
56693 				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56694 				HYBRID_BREAK();
56695 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
56696 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
56697 				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56698 				HYBRID_BREAK();
56699 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
56700 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
56701 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56702 				HYBRID_BREAK();
56703 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
56704 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
56705 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56706 				HYBRID_BREAK();
56707 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
56708 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
56709 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56710 				HYBRID_BREAK();
56711 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
56712 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
56713 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56714 				HYBRID_BREAK();
56715 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
56716 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
56717 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56718 				HYBRID_BREAK();
56719 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
56720 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
56721 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56722 				HYBRID_BREAK();
56723 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
56724 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
56725 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56726 				HYBRID_BREAK();
56727 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
56728 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
56729 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56730 				HYBRID_BREAK();
56731 			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
56732 				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
56733 				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56734 				HYBRID_BREAK();
56735 			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
56736 				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
56737 				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56738 				HYBRID_BREAK();
56739 			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
56740 				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
56741 				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56742 				HYBRID_BREAK();
56743 			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
56744 				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
56745 				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56746 				HYBRID_BREAK();
56747 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
56748 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
56749 				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56750 				HYBRID_BREAK();
56751 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV):
56752 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV)
56753 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56754 				HYBRID_BREAK();
56755 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
56756 				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
56757 				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56758 				HYBRID_BREAK();
56759 			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
56760 				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
56761 				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56762 				HYBRID_BREAK();
56763 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
56764 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
56765 				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56766 				HYBRID_BREAK();
56767 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
56768 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
56769 				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56770 				HYBRID_BREAK();
56771 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
56772 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
56773 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56774 				HYBRID_BREAK();
56775 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
56776 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
56777 				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56778 				HYBRID_BREAK();
56779 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
56780 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
56781 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56782 				HYBRID_BREAK();
56783 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
56784 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
56785 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56786 				HYBRID_BREAK();
56787 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
56788 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
56789 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56790 				HYBRID_BREAK();
56791 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
56792 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
56793 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56794 				HYBRID_BREAK();
56795 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
56796 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
56797 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56798 				HYBRID_BREAK();
56799 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
56800 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
56801 				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56802 				HYBRID_BREAK();
56803 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
56804 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
56805 				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56806 				HYBRID_BREAK();
56807 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
56808 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
56809 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56810 				HYBRID_BREAK();
56811 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
56812 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
56813 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56814 				HYBRID_BREAK();
56815 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
56816 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
56817 				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56818 				HYBRID_BREAK();
56819 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
56820 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
56821 				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56822 				HYBRID_BREAK();
56823 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
56824 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
56825 				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56826 				HYBRID_BREAK();
56827 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
56828 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
56829 				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56830 				HYBRID_BREAK();
56831 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
56832 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
56833 				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56834 				HYBRID_BREAK();
56835 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
56836 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
56837 				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56838 				HYBRID_BREAK();
56839 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
56840 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
56841 				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56842 				HYBRID_BREAK();
56843 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
56844 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
56845 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56846 				HYBRID_BREAK();
56847 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
56848 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
56849 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56850 				HYBRID_BREAK();
56851 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
56852 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
56853 				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56854 				HYBRID_BREAK();
56855 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
56856 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
56857 				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56858 				HYBRID_BREAK();
56859 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
56860 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
56861 				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56862 				HYBRID_BREAK();
56863 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
56864 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
56865 				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56866 				HYBRID_BREAK();
56867 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
56868 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
56869 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56870 				HYBRID_BREAK();
56871 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
56872 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
56873 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56874 				HYBRID_BREAK();
56875 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
56876 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
56877 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56878 				HYBRID_BREAK();
56879 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
56880 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
56881 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56882 				HYBRID_BREAK();
56883 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
56884 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
56885 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56886 				HYBRID_BREAK();
56887 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
56888 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
56889 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56890 				HYBRID_BREAK();
56891 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
56892 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
56893 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56894 				HYBRID_BREAK();
56895 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
56896 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
56897 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56898 				HYBRID_BREAK();
56899 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
56900 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
56901 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56902 				HYBRID_BREAK();
56903 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
56904 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
56905 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56906 				HYBRID_BREAK();
56907 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
56908 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
56909 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56910 				HYBRID_BREAK();
56911 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
56912 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
56913 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56914 				HYBRID_BREAK();
56915 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
56916 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
56917 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56918 				HYBRID_BREAK();
56919 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
56920 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
56921 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56922 				HYBRID_BREAK();
56923 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
56924 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
56925 				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56926 				HYBRID_BREAK();
56927 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
56928 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
56929 				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56930 				HYBRID_BREAK();
56931 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
56932 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
56933 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56934 				HYBRID_BREAK();
56935 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
56936 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
56937 				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56938 				HYBRID_BREAK();
56939 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
56940 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
56941 				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56942 				HYBRID_BREAK();
56943 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
56944 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
56945 				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56946 				HYBRID_BREAK();
56947 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
56948 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
56949 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56950 				HYBRID_BREAK();
56951 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
56952 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
56953 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56954 				HYBRID_BREAK();
56955 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
56956 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
56957 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56958 				HYBRID_BREAK();
56959 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
56960 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
56961 				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56962 				HYBRID_BREAK();
56963 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
56964 				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
56965 				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56966 				HYBRID_BREAK();
56967 			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
56968 				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
56969 				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56970 				HYBRID_BREAK();
56971 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
56972 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
56973 				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56974 				HYBRID_BREAK();
56975 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
56976 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
56977 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56978 				HYBRID_BREAK();
56979 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
56980 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
56981 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56982 				HYBRID_BREAK();
56983 			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
56984 				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
56985 				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56986 				HYBRID_BREAK();
56987 			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
56988 				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
56989 				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56990 				HYBRID_BREAK();
56991 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
56992 				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
56993 				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56994 				HYBRID_BREAK();
56995 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
56996 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
56997 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56998 				HYBRID_BREAK();
56999 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
57000 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
57001 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57002 				HYBRID_BREAK();
57003 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
57004 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
57005 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57006 				HYBRID_BREAK();
57007 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
57008 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
57009 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57010 				HYBRID_BREAK();
57011 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
57012 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
57013 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57014 				HYBRID_BREAK();
57015 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
57016 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
57017 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57018 				HYBRID_BREAK();
57019 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
57020 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
57021 				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57022 				HYBRID_BREAK();
57023 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
57024 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
57025 				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57026 				HYBRID_BREAK();
57027 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
57028 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
57029 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57030 				HYBRID_BREAK();
57031 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
57032 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
57033 				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57034 				HYBRID_BREAK();
57035 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
57036 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
57037 				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57038 				HYBRID_BREAK();
57039 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
57040 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
57041 				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57042 				HYBRID_BREAK();
57043 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
57044 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
57045 				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57046 				HYBRID_BREAK();
57047 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
57048 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
57049 				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57050 				HYBRID_BREAK();
57051 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
57052 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
57053 				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57054 				HYBRID_BREAK();
57055 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
57056 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
57057 				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57058 				HYBRID_BREAK();
57059 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
57060 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
57061 				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57062 				HYBRID_BREAK();
57063 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
57064 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
57065 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57066 				HYBRID_BREAK();
57067 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
57068 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
57069 				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57070 				HYBRID_BREAK();
57071 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
57072 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
57073 				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57074 				HYBRID_BREAK();
57075 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
57076 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
57077 				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57078 				HYBRID_BREAK();
57079 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
57080 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
57081 				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57082 				HYBRID_BREAK();
57083 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
57084 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
57085 				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57086 				HYBRID_BREAK();
57087 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
57088 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
57089 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57090 				HYBRID_BREAK();
57091 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
57092 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
57093 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57094 				HYBRID_BREAK();
57095 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
57096 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
57097 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57098 				HYBRID_BREAK();
57099 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
57100 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
57101 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57102 				HYBRID_BREAK();
57103 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
57104 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
57105 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57106 				HYBRID_BREAK();
57107 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
57108 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
57109 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57110 				HYBRID_BREAK();
57111 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
57112 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
57113 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57114 				HYBRID_BREAK();
57115 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
57116 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
57117 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57118 				HYBRID_BREAK();
57119 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
57120 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
57121 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57122 				HYBRID_BREAK();
57123 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
57124 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
57125 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57126 				HYBRID_BREAK();
57127 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
57128 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
57129 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57130 				HYBRID_BREAK();
57131 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
57132 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
57133 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57134 				HYBRID_BREAK();
57135 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
57136 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
57137 				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57138 				HYBRID_BREAK();
57139 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
57140 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
57141 				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57142 				HYBRID_BREAK();
57143 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
57144 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
57145 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57146 				HYBRID_BREAK();
57147 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
57148 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
57149 				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57150 				HYBRID_BREAK();
57151 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
57152 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
57153 				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57154 				HYBRID_BREAK();
57155 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
57156 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
57157 				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57158 				HYBRID_BREAK();
57159 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
57160 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
57161 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57162 				HYBRID_BREAK();
57163 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
57164 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
57165 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57166 				HYBRID_BREAK();
57167 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
57168 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
57169 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57170 				HYBRID_BREAK();
57171 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
57172 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
57173 				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57174 				HYBRID_BREAK();
57175 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
57176 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
57177 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57178 				HYBRID_BREAK();
57179 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
57180 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
57181 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57182 				HYBRID_BREAK();
57183 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
57184 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
57185 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57186 				HYBRID_BREAK();
57187 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMP):
57188 				VM_TRACE(ZEND_YIELD_SPEC_CV_TMP)
57189 				ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57190 				HYBRID_BREAK();
57191 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
57192 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
57193 				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57194 				HYBRID_BREAK();
57195 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
57196 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
57197 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57198 				HYBRID_BREAK();
57199 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
57200 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
57201 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57202 				HYBRID_BREAK();
57203 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
57204 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
57205 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57206 				HYBRID_BREAK();
57207 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
57208 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
57209 				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57210 				HYBRID_BREAK();
57211 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
57212 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
57213 				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57214 				HYBRID_BREAK();
57215 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_VAR):
57216 				VM_TRACE(ZEND_YIELD_SPEC_CV_VAR)
57217 				ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57218 				HYBRID_BREAK();
57219 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
57220 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
57221 				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57222 				HYBRID_BREAK();
57223 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
57224 				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
57225 				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57226 				HYBRID_BREAK();
57227 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
57228 				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
57229 				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57230 				HYBRID_BREAK();
57231 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
57232 				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
57233 				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57234 				HYBRID_BREAK();
57235 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
57236 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
57237 				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57238 				HYBRID_BREAK();
57239 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
57240 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
57241 				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57242 				HYBRID_BREAK();
57243 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
57244 				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
57245 				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57246 				HYBRID_BREAK();
57247 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
57248 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
57249 				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57250 				HYBRID_BREAK();
57251 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
57252 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
57253 				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57254 				HYBRID_BREAK();
57255 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
57256 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
57257 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57258 				HYBRID_BREAK();
57259 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
57260 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
57261 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57262 				HYBRID_BREAK();
57263 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
57264 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
57265 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57266 				HYBRID_BREAK();
57267 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
57268 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
57269 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57270 				HYBRID_BREAK();
57271 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
57272 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
57273 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57274 				HYBRID_BREAK();
57275 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
57276 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
57277 				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57278 				HYBRID_BREAK();
57279 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
57280 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
57281 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57282 				HYBRID_BREAK();
57283 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
57284 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
57285 				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57286 				HYBRID_BREAK();
57287 			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
57288 				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
57289 				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57290 				HYBRID_BREAK();
57291 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
57292 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
57293 				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57294 				HYBRID_BREAK();
57295 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
57296 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
57297 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57298 				HYBRID_BREAK();
57299 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
57300 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
57301 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57302 				HYBRID_BREAK();
57303 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
57304 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
57305 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57306 				HYBRID_BREAK();
57307 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
57308 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
57309 				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57310 				HYBRID_BREAK();
57311 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
57312 				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
57313 				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57314 				HYBRID_BREAK();
57315 			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
57316 				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
57317 				ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57318 				HYBRID_BREAK();
57319 			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
57320 				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
57321 				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57322 				HYBRID_BREAK();
57323 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
57324 				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
57325 				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57326 				HYBRID_BREAK();
57327 			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
57328 				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
57329 				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57330 				HYBRID_BREAK();
57331 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
57332 				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
57333 				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57334 				HYBRID_BREAK();
57335 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
57336 				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
57337 				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57338 				HYBRID_BREAK();
57339 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
57340 				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
57341 				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57342 				HYBRID_BREAK();
57343 			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
57344 				VM_TRACE(ZEND_POW_SPEC_CV_CV)
57345 				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57346 				HYBRID_BREAK();
57347 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
57348 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
57349 				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57350 				HYBRID_BREAK();
57351 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
57352 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
57353 				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57354 				HYBRID_BREAK();
57355 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
57356 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
57357 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57358 				HYBRID_BREAK();
57359 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
57360 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
57361 				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57362 				HYBRID_BREAK();
57363 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
57364 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
57365 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57366 				HYBRID_BREAK();
57367 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
57368 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
57369 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57370 				HYBRID_BREAK();
57371 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
57372 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
57373 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57374 				HYBRID_BREAK();
57375 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
57376 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
57377 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57378 				HYBRID_BREAK();
57379 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
57380 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
57381 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57382 				HYBRID_BREAK();
57383 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
57384 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
57385 				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57386 				HYBRID_BREAK();
57387 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
57388 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
57389 				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57390 				HYBRID_BREAK();
57391 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
57392 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
57393 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57394 				HYBRID_BREAK();
57395 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
57396 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
57397 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57398 				HYBRID_BREAK();
57399 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
57400 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
57401 				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57402 				HYBRID_BREAK();
57403 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
57404 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
57405 				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57406 				HYBRID_BREAK();
57407 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
57408 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
57409 				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57410 				HYBRID_BREAK();
57411 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
57412 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
57413 				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57414 				HYBRID_BREAK();
57415 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
57416 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
57417 				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57418 				HYBRID_BREAK();
57419 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
57420 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
57421 				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57422 				HYBRID_BREAK();
57423 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
57424 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
57425 				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57426 				HYBRID_BREAK();
57427 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
57428 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
57429 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57430 				HYBRID_BREAK();
57431 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
57432 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
57433 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57434 				HYBRID_BREAK();
57435 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
57436 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
57437 				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57438 				HYBRID_BREAK();
57439 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
57440 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
57441 				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57442 				HYBRID_BREAK();
57443 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
57444 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
57445 				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57446 				HYBRID_BREAK();
57447 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
57448 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
57449 				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57450 				HYBRID_BREAK();
57451 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
57452 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
57453 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57454 				HYBRID_BREAK();
57455 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
57456 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
57457 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57458 				HYBRID_BREAK();
57459 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
57460 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
57461 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57462 				HYBRID_BREAK();
57463 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
57464 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
57465 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57466 				HYBRID_BREAK();
57467 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
57468 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
57469 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57470 				HYBRID_BREAK();
57471 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
57472 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
57473 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57474 				HYBRID_BREAK();
57475 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
57476 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
57477 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57478 				HYBRID_BREAK();
57479 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
57480 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
57481 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57482 				HYBRID_BREAK();
57483 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
57484 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
57485 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57486 				HYBRID_BREAK();
57487 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
57488 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
57489 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57490 				HYBRID_BREAK();
57491 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
57492 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
57493 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57494 				HYBRID_BREAK();
57495 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
57496 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
57497 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57498 				HYBRID_BREAK();
57499 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
57500 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
57501 				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57502 				HYBRID_BREAK();
57503 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
57504 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
57505 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57506 				HYBRID_BREAK();
57507 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
57508 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
57509 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57510 				HYBRID_BREAK();
57511 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
57512 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
57513 				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57514 				HYBRID_BREAK();
57515 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
57516 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
57517 				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57518 				HYBRID_BREAK();
57519 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
57520 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
57521 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57522 				HYBRID_BREAK();
57523 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
57524 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
57525 				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57526 				HYBRID_BREAK();
57527 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
57528 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
57529 				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57530 				HYBRID_BREAK();
57531 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
57532 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
57533 				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57534 				HYBRID_BREAK();
57535 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
57536 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
57537 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57538 				HYBRID_BREAK();
57539 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
57540 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
57541 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57542 				HYBRID_BREAK();
57543 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
57544 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
57545 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57546 				HYBRID_BREAK();
57547 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
57548 				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
57549 				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57550 				HYBRID_BREAK();
57551 			HYBRID_CASE(HYBRID_HALT):
57552 #ifdef ZEND_VM_FP_GLOBAL_REG
57553 				execute_data = orig_execute_data;
57554 #endif
57555 #ifdef ZEND_VM_IP_GLOBAL_REG
57556 				opline = orig_opline;
57557 #endif
57558 				return;
57559 			HYBRID_DEFAULT:
57560 				VM_TRACE(ZEND_NULL)
57561 				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57562 				HYBRID_BREAK(); /* Never reached */
57563 #else
57564 #ifdef ZEND_VM_FP_GLOBAL_REG
57565 			execute_data = orig_execute_data;
57566 # ifdef ZEND_VM_IP_GLOBAL_REG
57567 			opline = orig_opline;
57568 # endif
57569 			return;
57570 #else
57571 			if (EXPECTED(ret > 0)) {
57572 				execute_data = EG(current_execute_data);
57573 				ZEND_VM_LOOP_INTERRUPT_CHECK();
57574 			} else {
57575 # ifdef ZEND_VM_IP_GLOBAL_REG
57576 				opline = orig_opline;
57577 # endif
57578 				return;
57579 			}
57580 #endif
57581 #endif
57582 		}
57583 
57584 	}
57585 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
57586 }
57587 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
57588 # pragma GCC pop_options
57589 #endif
57590 
57591 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
57592 {
57593 	zend_execute_data *execute_data;
57594 	void *object_or_called_scope;
57595 	uint32_t call_info;
57596 
57597 	if (EG(exception) != NULL) {
57598 		return;
57599 	}
57600 
57601 	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
57602 	if (EXPECTED(!object_or_called_scope)) {
57603 		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
57604 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
57605 	} else {
57606 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
57607 	}
57608 	execute_data = zend_vm_stack_push_call_frame(call_info,
57609 		(zend_function*)op_array, 0, object_or_called_scope);
57610 	if (EG(current_execute_data)) {
57611 		execute_data->symbol_table = zend_rebuild_symbol_table();
57612 	} else {
57613 		execute_data->symbol_table = &EG(symbol_table);
57614 	}
57615 	EX(prev_execute_data) = EG(current_execute_data);
57616 	i_init_code_execute_data(execute_data, op_array, return_value);
57617 	zend_execute_ex(execute_data);
57618 	zend_vm_stack_free_call_frame(execute_data);
57619 }
57620 
57621 
57622 void zend_vm_init(void)
57623 {
57624 	static const void * const labels[] = {
57625 		ZEND_NOP_SPEC_HANDLER,
57626 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
57627 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
57628 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
57629 		ZEND_NULL_HANDLER,
57630 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
57631 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
57632 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57633 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57634 		ZEND_NULL_HANDLER,
57635 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57636 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
57637 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57638 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57639 		ZEND_NULL_HANDLER,
57640 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57641 		ZEND_NULL_HANDLER,
57642 		ZEND_NULL_HANDLER,
57643 		ZEND_NULL_HANDLER,
57644 		ZEND_NULL_HANDLER,
57645 		ZEND_NULL_HANDLER,
57646 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
57647 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57648 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57649 		ZEND_NULL_HANDLER,
57650 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57651 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
57652 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
57653 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
57654 		ZEND_NULL_HANDLER,
57655 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
57656 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
57657 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57658 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57659 		ZEND_NULL_HANDLER,
57660 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57661 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
57662 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57663 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57664 		ZEND_NULL_HANDLER,
57665 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57666 		ZEND_NULL_HANDLER,
57667 		ZEND_NULL_HANDLER,
57668 		ZEND_NULL_HANDLER,
57669 		ZEND_NULL_HANDLER,
57670 		ZEND_NULL_HANDLER,
57671 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
57672 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57673 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57674 		ZEND_NULL_HANDLER,
57675 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57676 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
57677 		ZEND_NULL_HANDLER,
57678 		ZEND_NULL_HANDLER,
57679 		ZEND_NULL_HANDLER,
57680 		ZEND_NULL_HANDLER,
57681 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
57682 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57683 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57684 		ZEND_NULL_HANDLER,
57685 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57686 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
57687 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57688 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57689 		ZEND_NULL_HANDLER,
57690 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57691 		ZEND_NULL_HANDLER,
57692 		ZEND_NULL_HANDLER,
57693 		ZEND_NULL_HANDLER,
57694 		ZEND_NULL_HANDLER,
57695 		ZEND_NULL_HANDLER,
57696 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
57697 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57698 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57699 		ZEND_NULL_HANDLER,
57700 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57701 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
57702 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
57703 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
57704 		ZEND_NULL_HANDLER,
57705 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
57706 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
57707 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57708 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57709 		ZEND_NULL_HANDLER,
57710 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
57711 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
57712 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57713 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
57714 		ZEND_NULL_HANDLER,
57715 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
57716 		ZEND_NULL_HANDLER,
57717 		ZEND_NULL_HANDLER,
57718 		ZEND_NULL_HANDLER,
57719 		ZEND_NULL_HANDLER,
57720 		ZEND_NULL_HANDLER,
57721 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
57722 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
57723 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
57724 		ZEND_NULL_HANDLER,
57725 		ZEND_DIV_SPEC_CV_CV_HANDLER,
57726 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
57727 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
57728 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
57729 		ZEND_NULL_HANDLER,
57730 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
57731 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
57732 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57733 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57734 		ZEND_NULL_HANDLER,
57735 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57736 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
57737 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57738 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57739 		ZEND_NULL_HANDLER,
57740 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57741 		ZEND_NULL_HANDLER,
57742 		ZEND_NULL_HANDLER,
57743 		ZEND_NULL_HANDLER,
57744 		ZEND_NULL_HANDLER,
57745 		ZEND_NULL_HANDLER,
57746 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
57747 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57748 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57749 		ZEND_NULL_HANDLER,
57750 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57751 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
57752 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
57753 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
57754 		ZEND_NULL_HANDLER,
57755 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
57756 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
57757 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57758 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57759 		ZEND_NULL_HANDLER,
57760 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57761 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
57762 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57763 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57764 		ZEND_NULL_HANDLER,
57765 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57766 		ZEND_NULL_HANDLER,
57767 		ZEND_NULL_HANDLER,
57768 		ZEND_NULL_HANDLER,
57769 		ZEND_NULL_HANDLER,
57770 		ZEND_NULL_HANDLER,
57771 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
57772 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57773 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57774 		ZEND_NULL_HANDLER,
57775 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57776 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
57777 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
57778 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
57779 		ZEND_NULL_HANDLER,
57780 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
57781 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
57782 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57783 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57784 		ZEND_NULL_HANDLER,
57785 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57786 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
57787 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57788 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57789 		ZEND_NULL_HANDLER,
57790 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57791 		ZEND_NULL_HANDLER,
57792 		ZEND_NULL_HANDLER,
57793 		ZEND_NULL_HANDLER,
57794 		ZEND_NULL_HANDLER,
57795 		ZEND_NULL_HANDLER,
57796 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
57797 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57798 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57799 		ZEND_NULL_HANDLER,
57800 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57801 		ZEND_NULL_HANDLER,
57802 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
57803 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
57804 		ZEND_NULL_HANDLER,
57805 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
57806 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
57807 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
57808 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
57809 		ZEND_NULL_HANDLER,
57810 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
57811 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
57812 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
57813 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
57814 		ZEND_NULL_HANDLER,
57815 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
57816 		ZEND_NULL_HANDLER,
57817 		ZEND_NULL_HANDLER,
57818 		ZEND_NULL_HANDLER,
57819 		ZEND_NULL_HANDLER,
57820 		ZEND_NULL_HANDLER,
57821 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
57822 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
57823 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
57824 		ZEND_NULL_HANDLER,
57825 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
57826 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
57827 		ZEND_NULL_HANDLER,
57828 		ZEND_NULL_HANDLER,
57829 		ZEND_NULL_HANDLER,
57830 		ZEND_NULL_HANDLER,
57831 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
57832 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57833 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57834 		ZEND_NULL_HANDLER,
57835 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57836 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
57837 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57838 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57839 		ZEND_NULL_HANDLER,
57840 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57841 		ZEND_NULL_HANDLER,
57842 		ZEND_NULL_HANDLER,
57843 		ZEND_NULL_HANDLER,
57844 		ZEND_NULL_HANDLER,
57845 		ZEND_NULL_HANDLER,
57846 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
57847 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57848 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57849 		ZEND_NULL_HANDLER,
57850 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57851 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
57852 		ZEND_NULL_HANDLER,
57853 		ZEND_NULL_HANDLER,
57854 		ZEND_NULL_HANDLER,
57855 		ZEND_NULL_HANDLER,
57856 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
57857 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57858 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57859 		ZEND_NULL_HANDLER,
57860 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57861 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
57862 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57863 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57864 		ZEND_NULL_HANDLER,
57865 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57866 		ZEND_NULL_HANDLER,
57867 		ZEND_NULL_HANDLER,
57868 		ZEND_NULL_HANDLER,
57869 		ZEND_NULL_HANDLER,
57870 		ZEND_NULL_HANDLER,
57871 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
57872 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57873 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57874 		ZEND_NULL_HANDLER,
57875 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57876 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
57877 		ZEND_NULL_HANDLER,
57878 		ZEND_NULL_HANDLER,
57879 		ZEND_NULL_HANDLER,
57880 		ZEND_NULL_HANDLER,
57881 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
57882 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57883 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57884 		ZEND_NULL_HANDLER,
57885 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57886 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
57887 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57888 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57889 		ZEND_NULL_HANDLER,
57890 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57891 		ZEND_NULL_HANDLER,
57892 		ZEND_NULL_HANDLER,
57893 		ZEND_NULL_HANDLER,
57894 		ZEND_NULL_HANDLER,
57895 		ZEND_NULL_HANDLER,
57896 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
57897 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57898 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57899 		ZEND_NULL_HANDLER,
57900 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
57901 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
57902 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
57903 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
57904 		ZEND_NULL_HANDLER,
57905 		ZEND_POW_SPEC_CONST_CV_HANDLER,
57906 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
57907 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
57908 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
57909 		ZEND_NULL_HANDLER,
57910 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
57911 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
57912 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
57913 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
57914 		ZEND_NULL_HANDLER,
57915 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
57916 		ZEND_NULL_HANDLER,
57917 		ZEND_NULL_HANDLER,
57918 		ZEND_NULL_HANDLER,
57919 		ZEND_NULL_HANDLER,
57920 		ZEND_NULL_HANDLER,
57921 		ZEND_POW_SPEC_CV_CONST_HANDLER,
57922 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
57923 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
57924 		ZEND_NULL_HANDLER,
57925 		ZEND_POW_SPEC_CV_CV_HANDLER,
57926 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
57927 		ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
57928 		ZEND_BW_NOT_SPEC_TMPVAR_HANDLER,
57929 		ZEND_NULL_HANDLER,
57930 		ZEND_BW_NOT_SPEC_CV_HANDLER,
57931 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
57932 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
57933 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
57934 		ZEND_NULL_HANDLER,
57935 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
57936 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
57937 		ZEND_NULL_HANDLER,
57938 		ZEND_NULL_HANDLER,
57939 		ZEND_NULL_HANDLER,
57940 		ZEND_NULL_HANDLER,
57941 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
57942 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
57943 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
57944 		ZEND_NULL_HANDLER,
57945 		ZEND_NULL_HANDLER,
57946 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
57947 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
57948 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
57949 		ZEND_NULL_HANDLER,
57950 		ZEND_NULL_HANDLER,
57951 		ZEND_NULL_HANDLER,
57952 		ZEND_NULL_HANDLER,
57953 		ZEND_NULL_HANDLER,
57954 		ZEND_NULL_HANDLER,
57955 		ZEND_NULL_HANDLER,
57956 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
57957 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
57958 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
57959 		ZEND_NULL_HANDLER,
57960 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
57961 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
57962 		ZEND_NULL_HANDLER,
57963 		ZEND_NULL_HANDLER,
57964 		ZEND_NULL_HANDLER,
57965 		ZEND_NULL_HANDLER,
57966 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
57967 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
57968 		ZEND_NULL_HANDLER,
57969 		ZEND_NULL_HANDLER,
57970 		ZEND_NULL_HANDLER,
57971 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
57972 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
57973 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
57974 		ZEND_NULL_HANDLER,
57975 		ZEND_NULL_HANDLER,
57976 		ZEND_NULL_HANDLER,
57977 		ZEND_NULL_HANDLER,
57978 		ZEND_NULL_HANDLER,
57979 		ZEND_NULL_HANDLER,
57980 		ZEND_NULL_HANDLER,
57981 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
57982 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
57983 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
57984 		ZEND_NULL_HANDLER,
57985 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
57986 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
57987 		ZEND_NULL_HANDLER,
57988 		ZEND_NULL_HANDLER,
57989 		ZEND_NULL_HANDLER,
57990 		ZEND_NULL_HANDLER,
57991 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
57992 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
57993 		ZEND_NULL_HANDLER,
57994 		ZEND_NULL_HANDLER,
57995 		ZEND_NULL_HANDLER,
57996 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
57997 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
57998 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
57999 		ZEND_NULL_HANDLER,
58000 		ZEND_NULL_HANDLER,
58001 		ZEND_NULL_HANDLER,
58002 		ZEND_NULL_HANDLER,
58003 		ZEND_NULL_HANDLER,
58004 		ZEND_NULL_HANDLER,
58005 		ZEND_NULL_HANDLER,
58006 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
58007 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
58008 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
58009 		ZEND_NULL_HANDLER,
58010 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
58011 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
58012 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
58013 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
58014 		ZEND_NULL_HANDLER,
58015 		ZEND_NULL_HANDLER,
58016 		ZEND_NULL_HANDLER,
58017 		ZEND_NULL_HANDLER,
58018 		ZEND_NULL_HANDLER,
58019 		ZEND_NULL_HANDLER,
58020 		ZEND_NULL_HANDLER,
58021 		ZEND_NULL_HANDLER,
58022 		ZEND_NULL_HANDLER,
58023 		ZEND_NULL_HANDLER,
58024 		ZEND_NULL_HANDLER,
58025 		ZEND_NULL_HANDLER,
58026 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58027 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
58028 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
58029 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58030 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58031 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58032 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58033 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58034 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58035 		ZEND_NULL_HANDLER,
58036 		ZEND_NULL_HANDLER,
58037 		ZEND_NULL_HANDLER,
58038 		ZEND_NULL_HANDLER,
58039 		ZEND_NULL_HANDLER,
58040 		ZEND_NULL_HANDLER,
58041 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58042 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
58043 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
58044 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58045 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58046 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58047 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58048 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58049 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58050 		ZEND_NULL_HANDLER,
58051 		ZEND_NULL_HANDLER,
58052 		ZEND_NULL_HANDLER,
58053 		ZEND_NULL_HANDLER,
58054 		ZEND_NULL_HANDLER,
58055 		ZEND_NULL_HANDLER,
58056 		ZEND_NULL_HANDLER,
58057 		ZEND_NULL_HANDLER,
58058 		ZEND_NULL_HANDLER,
58059 		ZEND_NULL_HANDLER,
58060 		ZEND_NULL_HANDLER,
58061 		ZEND_NULL_HANDLER,
58062 		ZEND_NULL_HANDLER,
58063 		ZEND_NULL_HANDLER,
58064 		ZEND_NULL_HANDLER,
58065 		ZEND_NULL_HANDLER,
58066 		ZEND_NULL_HANDLER,
58067 		ZEND_NULL_HANDLER,
58068 		ZEND_NULL_HANDLER,
58069 		ZEND_NULL_HANDLER,
58070 		ZEND_NULL_HANDLER,
58071 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
58072 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
58073 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
58074 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58075 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
58076 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
58077 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58078 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
58079 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
58080 		ZEND_NULL_HANDLER,
58081 		ZEND_NULL_HANDLER,
58082 		ZEND_NULL_HANDLER,
58083 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
58084 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
58085 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
58086 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
58087 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
58088 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
58089 		ZEND_NULL_HANDLER,
58090 		ZEND_NULL_HANDLER,
58091 		ZEND_NULL_HANDLER,
58092 		ZEND_NULL_HANDLER,
58093 		ZEND_NULL_HANDLER,
58094 		ZEND_NULL_HANDLER,
58095 		ZEND_NULL_HANDLER,
58096 		ZEND_NULL_HANDLER,
58097 		ZEND_NULL_HANDLER,
58098 		ZEND_NULL_HANDLER,
58099 		ZEND_NULL_HANDLER,
58100 		ZEND_NULL_HANDLER,
58101 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58102 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
58103 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
58104 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58105 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58106 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58107 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58108 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58109 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58110 		ZEND_NULL_HANDLER,
58111 		ZEND_NULL_HANDLER,
58112 		ZEND_NULL_HANDLER,
58113 		ZEND_NULL_HANDLER,
58114 		ZEND_NULL_HANDLER,
58115 		ZEND_NULL_HANDLER,
58116 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
58117 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
58118 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
58119 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58120 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58121 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58122 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
58123 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
58124 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
58125 		ZEND_NULL_HANDLER,
58126 		ZEND_NULL_HANDLER,
58127 		ZEND_NULL_HANDLER,
58128 		ZEND_NULL_HANDLER,
58129 		ZEND_NULL_HANDLER,
58130 		ZEND_NULL_HANDLER,
58131 		ZEND_NULL_HANDLER,
58132 		ZEND_NULL_HANDLER,
58133 		ZEND_NULL_HANDLER,
58134 		ZEND_NULL_HANDLER,
58135 		ZEND_NULL_HANDLER,
58136 		ZEND_NULL_HANDLER,
58137 		ZEND_NULL_HANDLER,
58138 		ZEND_NULL_HANDLER,
58139 		ZEND_NULL_HANDLER,
58140 		ZEND_NULL_HANDLER,
58141 		ZEND_NULL_HANDLER,
58142 		ZEND_NULL_HANDLER,
58143 		ZEND_NULL_HANDLER,
58144 		ZEND_NULL_HANDLER,
58145 		ZEND_NULL_HANDLER,
58146 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
58147 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
58148 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
58149 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58150 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
58151 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
58152 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
58153 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
58154 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
58155 		ZEND_NULL_HANDLER,
58156 		ZEND_NULL_HANDLER,
58157 		ZEND_NULL_HANDLER,
58158 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
58159 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
58160 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
58161 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
58162 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
58163 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
58164 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
58165 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58166 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58167 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
58168 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58169 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58170 		ZEND_NULL_HANDLER,
58171 		ZEND_NULL_HANDLER,
58172 		ZEND_NULL_HANDLER,
58173 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
58174 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58175 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58176 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
58177 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58178 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58179 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58180 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58181 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58182 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58183 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58184 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58185 		ZEND_NULL_HANDLER,
58186 		ZEND_NULL_HANDLER,
58187 		ZEND_NULL_HANDLER,
58188 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58189 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58190 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58191 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
58192 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58193 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58194 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58195 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58196 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58197 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58198 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58199 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58200 		ZEND_NULL_HANDLER,
58201 		ZEND_NULL_HANDLER,
58202 		ZEND_NULL_HANDLER,
58203 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58204 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58205 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58206 		ZEND_NULL_HANDLER,
58207 		ZEND_NULL_HANDLER,
58208 		ZEND_NULL_HANDLER,
58209 		ZEND_NULL_HANDLER,
58210 		ZEND_NULL_HANDLER,
58211 		ZEND_NULL_HANDLER,
58212 		ZEND_NULL_HANDLER,
58213 		ZEND_NULL_HANDLER,
58214 		ZEND_NULL_HANDLER,
58215 		ZEND_NULL_HANDLER,
58216 		ZEND_NULL_HANDLER,
58217 		ZEND_NULL_HANDLER,
58218 		ZEND_NULL_HANDLER,
58219 		ZEND_NULL_HANDLER,
58220 		ZEND_NULL_HANDLER,
58221 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
58222 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58223 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58224 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58225 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58226 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58227 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58228 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58229 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58230 		ZEND_NULL_HANDLER,
58231 		ZEND_NULL_HANDLER,
58232 		ZEND_NULL_HANDLER,
58233 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58234 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58235 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58236 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
58237 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
58238 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
58239 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
58240 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58241 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58242 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
58243 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58244 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58245 		ZEND_NULL_HANDLER,
58246 		ZEND_NULL_HANDLER,
58247 		ZEND_NULL_HANDLER,
58248 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
58249 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
58250 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
58251 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
58252 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58253 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58254 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58255 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58256 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58257 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58258 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58259 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58260 		ZEND_NULL_HANDLER,
58261 		ZEND_NULL_HANDLER,
58262 		ZEND_NULL_HANDLER,
58263 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58264 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58265 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58266 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
58267 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58268 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58269 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58270 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58271 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58272 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58273 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58274 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58275 		ZEND_NULL_HANDLER,
58276 		ZEND_NULL_HANDLER,
58277 		ZEND_NULL_HANDLER,
58278 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58279 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58280 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58281 		ZEND_NULL_HANDLER,
58282 		ZEND_NULL_HANDLER,
58283 		ZEND_NULL_HANDLER,
58284 		ZEND_NULL_HANDLER,
58285 		ZEND_NULL_HANDLER,
58286 		ZEND_NULL_HANDLER,
58287 		ZEND_NULL_HANDLER,
58288 		ZEND_NULL_HANDLER,
58289 		ZEND_NULL_HANDLER,
58290 		ZEND_NULL_HANDLER,
58291 		ZEND_NULL_HANDLER,
58292 		ZEND_NULL_HANDLER,
58293 		ZEND_NULL_HANDLER,
58294 		ZEND_NULL_HANDLER,
58295 		ZEND_NULL_HANDLER,
58296 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
58297 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
58298 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
58299 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58300 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58301 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58302 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58303 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58304 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58305 		ZEND_NULL_HANDLER,
58306 		ZEND_NULL_HANDLER,
58307 		ZEND_NULL_HANDLER,
58308 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
58309 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
58310 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
58311 		ZEND_NULL_HANDLER,
58312 		ZEND_NULL_HANDLER,
58313 		ZEND_NULL_HANDLER,
58314 		ZEND_NULL_HANDLER,
58315 		ZEND_NULL_HANDLER,
58316 		ZEND_NULL_HANDLER,
58317 		ZEND_NULL_HANDLER,
58318 		ZEND_NULL_HANDLER,
58319 		ZEND_NULL_HANDLER,
58320 		ZEND_NULL_HANDLER,
58321 		ZEND_NULL_HANDLER,
58322 		ZEND_NULL_HANDLER,
58323 		ZEND_NULL_HANDLER,
58324 		ZEND_NULL_HANDLER,
58325 		ZEND_NULL_HANDLER,
58326 		ZEND_NULL_HANDLER,
58327 		ZEND_NULL_HANDLER,
58328 		ZEND_NULL_HANDLER,
58329 		ZEND_NULL_HANDLER,
58330 		ZEND_NULL_HANDLER,
58331 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
58332 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
58333 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
58334 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
58335 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
58336 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
58337 		ZEND_NULL_HANDLER,
58338 		ZEND_NULL_HANDLER,
58339 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
58340 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
58341 		ZEND_NULL_HANDLER,
58342 		ZEND_NULL_HANDLER,
58343 		ZEND_NULL_HANDLER,
58344 		ZEND_NULL_HANDLER,
58345 		ZEND_NULL_HANDLER,
58346 		ZEND_NULL_HANDLER,
58347 		ZEND_NULL_HANDLER,
58348 		ZEND_NULL_HANDLER,
58349 		ZEND_NULL_HANDLER,
58350 		ZEND_NULL_HANDLER,
58351 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
58352 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
58353 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
58354 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
58355 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
58356 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
58357 		ZEND_NULL_HANDLER,
58358 		ZEND_NULL_HANDLER,
58359 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
58360 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_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_NULL_HANDLER,
58378 		ZEND_NULL_HANDLER,
58379 		ZEND_NULL_HANDLER,
58380 		ZEND_NULL_HANDLER,
58381 		ZEND_NULL_HANDLER,
58382 		ZEND_NULL_HANDLER,
58383 		ZEND_NULL_HANDLER,
58384 		ZEND_NULL_HANDLER,
58385 		ZEND_NULL_HANDLER,
58386 		ZEND_NULL_HANDLER,
58387 		ZEND_NULL_HANDLER,
58388 		ZEND_NULL_HANDLER,
58389 		ZEND_NULL_HANDLER,
58390 		ZEND_NULL_HANDLER,
58391 		ZEND_NULL_HANDLER,
58392 		ZEND_NULL_HANDLER,
58393 		ZEND_NULL_HANDLER,
58394 		ZEND_NULL_HANDLER,
58395 		ZEND_NULL_HANDLER,
58396 		ZEND_NULL_HANDLER,
58397 		ZEND_NULL_HANDLER,
58398 		ZEND_NULL_HANDLER,
58399 		ZEND_NULL_HANDLER,
58400 		ZEND_NULL_HANDLER,
58401 		ZEND_NULL_HANDLER,
58402 		ZEND_NULL_HANDLER,
58403 		ZEND_NULL_HANDLER,
58404 		ZEND_NULL_HANDLER,
58405 		ZEND_NULL_HANDLER,
58406 		ZEND_NULL_HANDLER,
58407 		ZEND_NULL_HANDLER,
58408 		ZEND_NULL_HANDLER,
58409 		ZEND_NULL_HANDLER,
58410 		ZEND_NULL_HANDLER,
58411 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
58412 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
58413 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
58414 		ZEND_NULL_HANDLER,
58415 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
58416 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
58417 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
58418 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58419 		ZEND_NULL_HANDLER,
58420 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58421 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
58422 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
58423 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58424 		ZEND_NULL_HANDLER,
58425 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58426 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
58427 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
58428 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
58429 		ZEND_NULL_HANDLER,
58430 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
58431 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
58432 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
58433 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
58434 		ZEND_NULL_HANDLER,
58435 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_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_NULL_HANDLER,
58453 		ZEND_NULL_HANDLER,
58454 		ZEND_NULL_HANDLER,
58455 		ZEND_NULL_HANDLER,
58456 		ZEND_NULL_HANDLER,
58457 		ZEND_NULL_HANDLER,
58458 		ZEND_NULL_HANDLER,
58459 		ZEND_NULL_HANDLER,
58460 		ZEND_NULL_HANDLER,
58461 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
58462 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
58463 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
58464 		ZEND_NULL_HANDLER,
58465 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
58466 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
58467 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
58468 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58469 		ZEND_NULL_HANDLER,
58470 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58471 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
58472 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
58473 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58474 		ZEND_NULL_HANDLER,
58475 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58476 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
58477 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
58478 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
58479 		ZEND_NULL_HANDLER,
58480 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
58481 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
58482 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
58483 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
58484 		ZEND_NULL_HANDLER,
58485 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
58486 		ZEND_NULL_HANDLER,
58487 		ZEND_NULL_HANDLER,
58488 		ZEND_NULL_HANDLER,
58489 		ZEND_NULL_HANDLER,
58490 		ZEND_NULL_HANDLER,
58491 		ZEND_NULL_HANDLER,
58492 		ZEND_NULL_HANDLER,
58493 		ZEND_NULL_HANDLER,
58494 		ZEND_NULL_HANDLER,
58495 		ZEND_NULL_HANDLER,
58496 		ZEND_NULL_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_NULL_HANDLER,
58528 		ZEND_NULL_HANDLER,
58529 		ZEND_NULL_HANDLER,
58530 		ZEND_NULL_HANDLER,
58531 		ZEND_NULL_HANDLER,
58532 		ZEND_NULL_HANDLER,
58533 		ZEND_NULL_HANDLER,
58534 		ZEND_NULL_HANDLER,
58535 		ZEND_NULL_HANDLER,
58536 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
58537 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
58538 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
58539 		ZEND_NULL_HANDLER,
58540 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
58541 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
58542 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
58543 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58544 		ZEND_NULL_HANDLER,
58545 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58546 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
58547 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
58548 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58549 		ZEND_NULL_HANDLER,
58550 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58551 		ZEND_NULL_HANDLER,
58552 		ZEND_NULL_HANDLER,
58553 		ZEND_NULL_HANDLER,
58554 		ZEND_NULL_HANDLER,
58555 		ZEND_NULL_HANDLER,
58556 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
58557 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
58558 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
58559 		ZEND_NULL_HANDLER,
58560 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
58561 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
58562 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
58563 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
58564 		ZEND_NULL_HANDLER,
58565 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
58566 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
58567 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
58568 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
58569 		ZEND_NULL_HANDLER,
58570 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
58571 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
58572 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
58573 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
58574 		ZEND_NULL_HANDLER,
58575 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
58576 		ZEND_NULL_HANDLER,
58577 		ZEND_NULL_HANDLER,
58578 		ZEND_NULL_HANDLER,
58579 		ZEND_NULL_HANDLER,
58580 		ZEND_NULL_HANDLER,
58581 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
58582 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
58583 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
58584 		ZEND_NULL_HANDLER,
58585 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
58586 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
58587 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
58588 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
58589 		ZEND_NULL_HANDLER,
58590 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
58591 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
58592 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
58593 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58594 		ZEND_NULL_HANDLER,
58595 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58596 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
58597 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
58598 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58599 		ZEND_NULL_HANDLER,
58600 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58601 		ZEND_NULL_HANDLER,
58602 		ZEND_NULL_HANDLER,
58603 		ZEND_NULL_HANDLER,
58604 		ZEND_NULL_HANDLER,
58605 		ZEND_NULL_HANDLER,
58606 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
58607 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
58608 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
58609 		ZEND_NULL_HANDLER,
58610 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
58611 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
58612 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
58613 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
58614 		ZEND_NULL_HANDLER,
58615 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
58616 		ZEND_NULL_HANDLER,
58617 		ZEND_NULL_HANDLER,
58618 		ZEND_NULL_HANDLER,
58619 		ZEND_NULL_HANDLER,
58620 		ZEND_NULL_HANDLER,
58621 		ZEND_NULL_HANDLER,
58622 		ZEND_NULL_HANDLER,
58623 		ZEND_NULL_HANDLER,
58624 		ZEND_NULL_HANDLER,
58625 		ZEND_NULL_HANDLER,
58626 		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
58627 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
58628 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
58629 		ZEND_NULL_HANDLER,
58630 		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
58631 		ZEND_NULL_HANDLER,
58632 		ZEND_NULL_HANDLER,
58633 		ZEND_NULL_HANDLER,
58634 		ZEND_NULL_HANDLER,
58635 		ZEND_NULL_HANDLER,
58636 		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
58637 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
58638 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
58639 		ZEND_NULL_HANDLER,
58640 		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
58641 		ZEND_NULL_HANDLER,
58642 		ZEND_NULL_HANDLER,
58643 		ZEND_NULL_HANDLER,
58644 		ZEND_NULL_HANDLER,
58645 		ZEND_NULL_HANDLER,
58646 		ZEND_NULL_HANDLER,
58647 		ZEND_NULL_HANDLER,
58648 		ZEND_NULL_HANDLER,
58649 		ZEND_NULL_HANDLER,
58650 		ZEND_NULL_HANDLER,
58651 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
58652 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
58653 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
58654 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
58655 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
58656 		ZEND_NULL_HANDLER,
58657 		ZEND_NULL_HANDLER,
58658 		ZEND_NULL_HANDLER,
58659 		ZEND_NULL_HANDLER,
58660 		ZEND_NULL_HANDLER,
58661 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
58662 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
58663 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
58664 		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
58665 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_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_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
58677 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
58678 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
58679 		ZEND_NULL_HANDLER,
58680 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
58681 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
58682 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
58683 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
58684 		ZEND_NULL_HANDLER,
58685 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
58686 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
58687 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
58688 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
58689 		ZEND_NULL_HANDLER,
58690 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
58691 		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
58692 		ZEND_NULL_HANDLER,
58693 		ZEND_NULL_HANDLER,
58694 		ZEND_NULL_HANDLER,
58695 		ZEND_NULL_HANDLER,
58696 		ZEND_NULL_HANDLER,
58697 		ZEND_NULL_HANDLER,
58698 		ZEND_NULL_HANDLER,
58699 		ZEND_NULL_HANDLER,
58700 		ZEND_NULL_HANDLER,
58701 		ZEND_NULL_HANDLER,
58702 		ZEND_NULL_HANDLER,
58703 		ZEND_NULL_HANDLER,
58704 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
58705 		ZEND_NULL_HANDLER,
58706 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
58707 		ZEND_NULL_HANDLER,
58708 		ZEND_NULL_HANDLER,
58709 		ZEND_NULL_HANDLER,
58710 		ZEND_NULL_HANDLER,
58711 		ZEND_NULL_HANDLER,
58712 		ZEND_NULL_HANDLER,
58713 		ZEND_NULL_HANDLER,
58714 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
58715 		ZEND_NULL_HANDLER,
58716 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
58717 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
58718 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
58719 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
58720 		ZEND_NULL_HANDLER,
58721 		ZEND_QM_ASSIGN_SPEC_CV_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_NULL_HANDLER,
58753 		ZEND_NULL_HANDLER,
58754 		ZEND_NULL_HANDLER,
58755 		ZEND_NULL_HANDLER,
58756 		ZEND_NULL_HANDLER,
58757 		ZEND_NULL_HANDLER,
58758 		ZEND_NULL_HANDLER,
58759 		ZEND_NULL_HANDLER,
58760 		ZEND_NULL_HANDLER,
58761 		ZEND_NULL_HANDLER,
58762 		ZEND_NULL_HANDLER,
58763 		ZEND_NULL_HANDLER,
58764 		ZEND_NULL_HANDLER,
58765 		ZEND_NULL_HANDLER,
58766 		ZEND_NULL_HANDLER,
58767 		ZEND_NULL_HANDLER,
58768 		ZEND_NULL_HANDLER,
58769 		ZEND_NULL_HANDLER,
58770 		ZEND_NULL_HANDLER,
58771 		ZEND_NULL_HANDLER,
58772 		ZEND_NULL_HANDLER,
58773 		ZEND_NULL_HANDLER,
58774 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
58775 		ZEND_NULL_HANDLER,
58776 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
58777 		ZEND_NULL_HANDLER,
58778 		ZEND_NULL_HANDLER,
58779 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58780 		ZEND_NULL_HANDLER,
58781 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58782 		ZEND_NULL_HANDLER,
58783 		ZEND_NULL_HANDLER,
58784 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
58785 		ZEND_NULL_HANDLER,
58786 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
58787 		ZEND_NULL_HANDLER,
58788 		ZEND_NULL_HANDLER,
58789 		ZEND_NULL_HANDLER,
58790 		ZEND_NULL_HANDLER,
58791 		ZEND_NULL_HANDLER,
58792 		ZEND_NULL_HANDLER,
58793 		ZEND_NULL_HANDLER,
58794 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
58795 		ZEND_NULL_HANDLER,
58796 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
58797 		ZEND_NULL_HANDLER,
58798 		ZEND_NULL_HANDLER,
58799 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
58800 		ZEND_NULL_HANDLER,
58801 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
58802 		ZEND_NULL_HANDLER,
58803 		ZEND_NULL_HANDLER,
58804 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
58805 		ZEND_NULL_HANDLER,
58806 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
58807 		ZEND_NULL_HANDLER,
58808 		ZEND_NULL_HANDLER,
58809 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
58810 		ZEND_NULL_HANDLER,
58811 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_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_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
58820 		ZEND_NULL_HANDLER,
58821 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
58822 		ZEND_NULL_HANDLER,
58823 		ZEND_NULL_HANDLER,
58824 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
58825 		ZEND_NULL_HANDLER,
58826 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
58827 		ZEND_NULL_HANDLER,
58828 		ZEND_NULL_HANDLER,
58829 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58830 		ZEND_NULL_HANDLER,
58831 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58832 		ZEND_NULL_HANDLER,
58833 		ZEND_NULL_HANDLER,
58834 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
58835 		ZEND_NULL_HANDLER,
58836 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
58837 		ZEND_NULL_HANDLER,
58838 		ZEND_NULL_HANDLER,
58839 		ZEND_NULL_HANDLER,
58840 		ZEND_NULL_HANDLER,
58841 		ZEND_NULL_HANDLER,
58842 		ZEND_NULL_HANDLER,
58843 		ZEND_NULL_HANDLER,
58844 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
58845 		ZEND_NULL_HANDLER,
58846 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
58847 		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
58848 		ZEND_NULL_HANDLER,
58849 		ZEND_NULL_HANDLER,
58850 		ZEND_NULL_HANDLER,
58851 		ZEND_NULL_HANDLER,
58852 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
58853 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
58854 		ZEND_NULL_HANDLER,
58855 		ZEND_NULL_HANDLER,
58856 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
58857 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
58858 		ZEND_NULL_HANDLER,
58859 		ZEND_NULL_HANDLER,
58860 		ZEND_NULL_HANDLER,
58861 		ZEND_NULL_HANDLER,
58862 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
58863 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
58864 		ZEND_NULL_HANDLER,
58865 		ZEND_NULL_HANDLER,
58866 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
58867 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
58868 		ZEND_NULL_HANDLER,
58869 		ZEND_NULL_HANDLER,
58870 		ZEND_POST_INC_SPEC_VAR_HANDLER,
58871 		ZEND_NULL_HANDLER,
58872 		ZEND_POST_INC_SPEC_CV_HANDLER,
58873 		ZEND_NULL_HANDLER,
58874 		ZEND_NULL_HANDLER,
58875 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
58876 		ZEND_NULL_HANDLER,
58877 		ZEND_POST_DEC_SPEC_CV_HANDLER,
58878 		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
58879 		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
58880 		ZEND_JMP_SPEC_HANDLER,
58881 		ZEND_JMPZ_SPEC_CONST_HANDLER,
58882 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
58883 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
58884 		ZEND_NULL_HANDLER,
58885 		ZEND_JMPZ_SPEC_CV_HANDLER,
58886 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
58887 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
58888 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
58889 		ZEND_NULL_HANDLER,
58890 		ZEND_JMPNZ_SPEC_CV_HANDLER,
58891 		ZEND_JMPZNZ_SPEC_CONST_HANDLER,
58892 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
58893 		ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER,
58894 		ZEND_NULL_HANDLER,
58895 		ZEND_JMPZNZ_SPEC_CV_HANDLER,
58896 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
58897 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
58898 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
58899 		ZEND_NULL_HANDLER,
58900 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
58901 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
58902 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
58903 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
58904 		ZEND_NULL_HANDLER,
58905 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
58906 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
58907 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
58908 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
58909 		ZEND_NULL_HANDLER,
58910 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
58911 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
58912 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER,
58913 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER,
58914 		ZEND_CAST_SPEC_CONST_HANDLER,
58915 		ZEND_CAST_SPEC_TMP_HANDLER,
58916 		ZEND_CAST_SPEC_VAR_HANDLER,
58917 		ZEND_NULL_HANDLER,
58918 		ZEND_CAST_SPEC_CV_HANDLER,
58919 		ZEND_BOOL_SPEC_CONST_HANDLER,
58920 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
58921 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
58922 		ZEND_NULL_HANDLER,
58923 		ZEND_BOOL_SPEC_CV_HANDLER,
58924 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
58925 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
58926 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
58927 		ZEND_NULL_HANDLER,
58928 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
58929 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
58930 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58931 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58932 		ZEND_NULL_HANDLER,
58933 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
58934 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
58935 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58936 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
58937 		ZEND_NULL_HANDLER,
58938 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
58939 		ZEND_NULL_HANDLER,
58940 		ZEND_NULL_HANDLER,
58941 		ZEND_NULL_HANDLER,
58942 		ZEND_NULL_HANDLER,
58943 		ZEND_NULL_HANDLER,
58944 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
58945 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58946 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
58947 		ZEND_NULL_HANDLER,
58948 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
58949 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
58950 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
58951 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
58952 		ZEND_NULL_HANDLER,
58953 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
58954 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
58955 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
58956 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
58957 		ZEND_NULL_HANDLER,
58958 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
58959 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
58960 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
58961 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
58962 		ZEND_NULL_HANDLER,
58963 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
58964 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
58965 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
58966 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
58967 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
58968 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
58969 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
58970 		ZEND_RETURN_SPEC_CONST_HANDLER,
58971 		ZEND_RETURN_SPEC_TMP_HANDLER,
58972 		ZEND_RETURN_SPEC_VAR_HANDLER,
58973 		ZEND_NULL_HANDLER,
58974 		ZEND_RETURN_SPEC_CV_HANDLER,
58975 		ZEND_RECV_SPEC_UNUSED_HANDLER,
58976 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
58977 		ZEND_SEND_VAL_SPEC_CONST_HANDLER,
58978 		ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
58979 		ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER,
58980 		ZEND_NULL_HANDLER,
58981 		ZEND_NULL_HANDLER,
58982 		ZEND_NULL_HANDLER,
58983 		ZEND_NULL_HANDLER,
58984 		ZEND_NULL_HANDLER,
58985 		ZEND_NULL_HANDLER,
58986 		ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER,
58987 		ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER,
58988 		ZEND_NULL_HANDLER,
58989 		ZEND_NULL_HANDLER,
58990 		ZEND_SEND_VAR_EX_SPEC_CV_HANDLER,
58991 		ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER,
58992 		ZEND_NULL_HANDLER,
58993 		ZEND_NULL_HANDLER,
58994 		ZEND_SEND_REF_SPEC_VAR_HANDLER,
58995 		ZEND_NULL_HANDLER,
58996 		ZEND_SEND_REF_SPEC_CV_HANDLER,
58997 		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
58998 		ZEND_NULL_HANDLER,
58999 		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
59000 		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
59001 		ZEND_NULL_HANDLER,
59002 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
59003 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
59004 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
59005 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
59006 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
59007 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
59008 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
59009 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
59010 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
59011 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
59012 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
59013 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
59014 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
59015 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
59016 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
59017 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
59018 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
59019 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
59020 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
59021 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
59022 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
59023 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
59024 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
59025 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
59026 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
59027 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
59028 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
59029 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
59030 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
59031 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
59032 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
59033 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
59034 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
59035 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
59036 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
59037 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
59038 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
59039 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
59040 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
59041 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
59042 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
59043 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
59044 		ZEND_NULL_HANDLER,
59045 		ZEND_NULL_HANDLER,
59046 		ZEND_NULL_HANDLER,
59047 		ZEND_NULL_HANDLER,
59048 		ZEND_NULL_HANDLER,
59049 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
59050 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
59051 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
59052 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
59053 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
59054 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
59055 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
59056 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
59057 		ZEND_NULL_HANDLER,
59058 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
59059 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
59060 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59061 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59062 		ZEND_NULL_HANDLER,
59063 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
59064 		ZEND_NULL_HANDLER,
59065 		ZEND_NULL_HANDLER,
59066 		ZEND_NULL_HANDLER,
59067 		ZEND_NULL_HANDLER,
59068 		ZEND_NULL_HANDLER,
59069 		ZEND_NULL_HANDLER,
59070 		ZEND_NULL_HANDLER,
59071 		ZEND_NULL_HANDLER,
59072 		ZEND_NULL_HANDLER,
59073 		ZEND_NULL_HANDLER,
59074 		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
59075 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
59076 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
59077 		ZEND_NULL_HANDLER,
59078 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
59079 		ZEND_NULL_HANDLER,
59080 		ZEND_NULL_HANDLER,
59081 		ZEND_NULL_HANDLER,
59082 		ZEND_NULL_HANDLER,
59083 		ZEND_NULL_HANDLER,
59084 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
59085 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
59086 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
59087 		ZEND_NULL_HANDLER,
59088 		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
59089 		ZEND_NULL_HANDLER,
59090 		ZEND_NULL_HANDLER,
59091 		ZEND_NULL_HANDLER,
59092 		ZEND_NULL_HANDLER,
59093 		ZEND_NULL_HANDLER,
59094 		ZEND_NULL_HANDLER,
59095 		ZEND_NULL_HANDLER,
59096 		ZEND_NULL_HANDLER,
59097 		ZEND_NULL_HANDLER,
59098 		ZEND_NULL_HANDLER,
59099 		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
59100 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59101 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59102 		ZEND_NULL_HANDLER,
59103 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
59104 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
59105 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59106 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59107 		ZEND_NULL_HANDLER,
59108 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
59109 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
59110 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
59111 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
59112 		ZEND_NULL_HANDLER,
59113 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
59114 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
59115 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
59116 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
59117 		ZEND_NULL_HANDLER,
59118 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
59119 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
59120 		ZEND_EXIT_SPEC_HANDLER,
59121 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
59122 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
59123 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
59124 		ZEND_NULL_HANDLER,
59125 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
59126 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
59127 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
59128 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
59129 		ZEND_NULL_HANDLER,
59130 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
59131 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
59132 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59133 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59134 		ZEND_NULL_HANDLER,
59135 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
59136 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
59137 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59138 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59139 		ZEND_NULL_HANDLER,
59140 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
59141 		ZEND_NULL_HANDLER,
59142 		ZEND_NULL_HANDLER,
59143 		ZEND_NULL_HANDLER,
59144 		ZEND_NULL_HANDLER,
59145 		ZEND_NULL_HANDLER,
59146 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
59147 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
59148 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
59149 		ZEND_NULL_HANDLER,
59150 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
59151 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
59152 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
59153 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
59154 		ZEND_NULL_HANDLER,
59155 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
59156 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
59157 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59158 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59159 		ZEND_NULL_HANDLER,
59160 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
59161 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
59162 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59163 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
59164 		ZEND_NULL_HANDLER,
59165 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
59166 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
59167 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
59168 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
59169 		ZEND_NULL_HANDLER,
59170 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
59171 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
59172 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
59173 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
59174 		ZEND_NULL_HANDLER,
59175 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
59176 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
59177 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
59178 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
59179 		ZEND_NULL_HANDLER,
59180 		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
59181 		ZEND_NULL_HANDLER,
59182 		ZEND_NULL_HANDLER,
59183 		ZEND_NULL_HANDLER,
59184 		ZEND_NULL_HANDLER,
59185 		ZEND_NULL_HANDLER,
59186 		ZEND_NULL_HANDLER,
59187 		ZEND_NULL_HANDLER,
59188 		ZEND_NULL_HANDLER,
59189 		ZEND_NULL_HANDLER,
59190 		ZEND_NULL_HANDLER,
59191 		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
59192 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
59193 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
59194 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
59195 		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
59196 		ZEND_NULL_HANDLER,
59197 		ZEND_NULL_HANDLER,
59198 		ZEND_NULL_HANDLER,
59199 		ZEND_NULL_HANDLER,
59200 		ZEND_NULL_HANDLER,
59201 		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
59202 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
59203 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
59204 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
59205 		ZEND_FETCH_DIM_W_SPEC_CV_CV_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_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
59217 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
59218 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
59219 		ZEND_NULL_HANDLER,
59220 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
59221 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
59222 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
59223 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
59224 		ZEND_NULL_HANDLER,
59225 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
59226 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
59227 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
59228 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
59229 		ZEND_NULL_HANDLER,
59230 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
59231 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
59232 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
59233 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
59234 		ZEND_NULL_HANDLER,
59235 		ZEND_FETCH_RW_SPEC_CV_UNUSED_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_NULL_HANDLER,
59243 		ZEND_NULL_HANDLER,
59244 		ZEND_NULL_HANDLER,
59245 		ZEND_NULL_HANDLER,
59246 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
59247 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
59248 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
59249 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
59250 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
59251 		ZEND_NULL_HANDLER,
59252 		ZEND_NULL_HANDLER,
59253 		ZEND_NULL_HANDLER,
59254 		ZEND_NULL_HANDLER,
59255 		ZEND_NULL_HANDLER,
59256 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
59257 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
59258 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
59259 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
59260 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
59261 		ZEND_NULL_HANDLER,
59262 		ZEND_NULL_HANDLER,
59263 		ZEND_NULL_HANDLER,
59264 		ZEND_NULL_HANDLER,
59265 		ZEND_NULL_HANDLER,
59266 		ZEND_NULL_HANDLER,
59267 		ZEND_NULL_HANDLER,
59268 		ZEND_NULL_HANDLER,
59269 		ZEND_NULL_HANDLER,
59270 		ZEND_NULL_HANDLER,
59271 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
59272 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
59273 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
59274 		ZEND_NULL_HANDLER,
59275 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
59276 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
59277 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
59278 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
59279 		ZEND_NULL_HANDLER,
59280 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
59281 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
59282 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
59283 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
59284 		ZEND_NULL_HANDLER,
59285 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
59286 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
59287 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
59288 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
59289 		ZEND_NULL_HANDLER,
59290 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
59291 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
59292 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
59293 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
59294 		ZEND_NULL_HANDLER,
59295 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
59296 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
59297 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59298 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59299 		ZEND_NULL_HANDLER,
59300 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
59301 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
59302 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59303 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59304 		ZEND_NULL_HANDLER,
59305 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
59306 		ZEND_NULL_HANDLER,
59307 		ZEND_NULL_HANDLER,
59308 		ZEND_NULL_HANDLER,
59309 		ZEND_NULL_HANDLER,
59310 		ZEND_NULL_HANDLER,
59311 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
59312 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
59313 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
59314 		ZEND_NULL_HANDLER,
59315 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
59316 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
59317 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
59318 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
59319 		ZEND_NULL_HANDLER,
59320 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
59321 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
59322 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59323 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59324 		ZEND_NULL_HANDLER,
59325 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
59326 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
59327 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59328 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
59329 		ZEND_NULL_HANDLER,
59330 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
59331 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
59332 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
59333 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
59334 		ZEND_NULL_HANDLER,
59335 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
59336 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
59337 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
59338 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
59339 		ZEND_NULL_HANDLER,
59340 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
59341 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
59342 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
59343 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
59344 		ZEND_NULL_HANDLER,
59345 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
59346 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
59347 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
59348 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
59349 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
59350 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
59351 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
59352 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
59353 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
59354 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
59355 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
59356 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
59357 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
59358 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
59359 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
59360 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
59361 		ZEND_NULL_HANDLER,
59362 		ZEND_NULL_HANDLER,
59363 		ZEND_NULL_HANDLER,
59364 		ZEND_NULL_HANDLER,
59365 		ZEND_NULL_HANDLER,
59366 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
59367 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
59368 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
59369 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
59370 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
59371 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
59372 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
59373 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
59374 		ZEND_NULL_HANDLER,
59375 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
59376 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
59377 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
59378 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
59379 		ZEND_NULL_HANDLER,
59380 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
59381 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
59382 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
59383 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
59384 		ZEND_NULL_HANDLER,
59385 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
59386 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
59387 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
59388 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
59389 		ZEND_NULL_HANDLER,
59390 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
59391 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
59392 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
59393 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
59394 		ZEND_NULL_HANDLER,
59395 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
59396 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
59397 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
59398 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
59399 		ZEND_NULL_HANDLER,
59400 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
59401 		ZEND_NULL_HANDLER,
59402 		ZEND_NULL_HANDLER,
59403 		ZEND_NULL_HANDLER,
59404 		ZEND_NULL_HANDLER,
59405 		ZEND_NULL_HANDLER,
59406 		ZEND_NULL_HANDLER,
59407 		ZEND_NULL_HANDLER,
59408 		ZEND_NULL_HANDLER,
59409 		ZEND_NULL_HANDLER,
59410 		ZEND_NULL_HANDLER,
59411 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
59412 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
59413 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
59414 		ZEND_NULL_HANDLER,
59415 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
59416 		ZEND_NULL_HANDLER,
59417 		ZEND_NULL_HANDLER,
59418 		ZEND_NULL_HANDLER,
59419 		ZEND_NULL_HANDLER,
59420 		ZEND_NULL_HANDLER,
59421 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
59422 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
59423 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
59424 		ZEND_NULL_HANDLER,
59425 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_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_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
59437 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
59438 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
59439 		ZEND_NULL_HANDLER,
59440 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
59441 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
59442 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
59443 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
59444 		ZEND_NULL_HANDLER,
59445 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
59446 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
59447 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
59448 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
59449 		ZEND_NULL_HANDLER,
59450 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
59451 		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
59452 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
59453 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
59454 		ZEND_NULL_HANDLER,
59455 		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
59456 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
59457 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59458 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59459 		ZEND_NULL_HANDLER,
59460 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
59461 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
59462 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59463 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59464 		ZEND_NULL_HANDLER,
59465 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
59466 		ZEND_NULL_HANDLER,
59467 		ZEND_NULL_HANDLER,
59468 		ZEND_NULL_HANDLER,
59469 		ZEND_NULL_HANDLER,
59470 		ZEND_NULL_HANDLER,
59471 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
59472 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59473 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
59474 		ZEND_NULL_HANDLER,
59475 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
59476 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
59477 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER,
59478 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER,
59479 		ZEND_EXT_STMT_SPEC_HANDLER,
59480 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
59481 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
59482 		ZEND_EXT_NOP_SPEC_HANDLER,
59483 		ZEND_TICKS_SPEC_HANDLER,
59484 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
59485 		ZEND_CATCH_SPEC_CONST_HANDLER,
59486 		ZEND_THROW_SPEC_CONST_HANDLER,
59487 		ZEND_THROW_SPEC_TMP_HANDLER,
59488 		ZEND_THROW_SPEC_VAR_HANDLER,
59489 		ZEND_NULL_HANDLER,
59490 		ZEND_THROW_SPEC_CV_HANDLER,
59491 		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
59492 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
59493 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
59494 		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
59495 		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
59496 		ZEND_CLONE_SPEC_CONST_HANDLER,
59497 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
59498 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
59499 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
59500 		ZEND_CLONE_SPEC_CV_HANDLER,
59501 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
59502 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
59503 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
59504 		ZEND_NULL_HANDLER,
59505 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
59506 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
59507 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
59508 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
59509 		ZEND_NULL_HANDLER,
59510 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
59511 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
59512 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
59513 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
59514 		ZEND_NULL_HANDLER,
59515 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
59516 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
59517 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
59518 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
59519 		ZEND_NULL_HANDLER,
59520 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
59521 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
59522 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
59523 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
59524 		ZEND_NULL_HANDLER,
59525 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
59526 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
59527 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
59528 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
59529 		ZEND_NULL_HANDLER,
59530 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
59531 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
59532 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
59533 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
59534 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
59535 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
59536 		ZEND_NULL_HANDLER,
59537 		ZEND_NULL_HANDLER,
59538 		ZEND_NULL_HANDLER,
59539 		ZEND_NULL_HANDLER,
59540 		ZEND_NULL_HANDLER,
59541 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
59542 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
59543 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
59544 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
59545 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
59546 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
59547 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
59548 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
59549 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
59550 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
59551 		ZEND_NULL_HANDLER,
59552 		ZEND_NULL_HANDLER,
59553 		ZEND_NULL_HANDLER,
59554 		ZEND_NULL_HANDLER,
59555 		ZEND_NULL_HANDLER,
59556 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
59557 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59558 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
59559 		ZEND_NULL_HANDLER,
59560 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
59561 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
59562 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
59563 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
59564 		ZEND_NULL_HANDLER,
59565 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
59566 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
59567 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59568 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59569 		ZEND_NULL_HANDLER,
59570 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
59571 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
59572 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59573 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59574 		ZEND_NULL_HANDLER,
59575 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
59576 		ZEND_NULL_HANDLER,
59577 		ZEND_NULL_HANDLER,
59578 		ZEND_NULL_HANDLER,
59579 		ZEND_NULL_HANDLER,
59580 		ZEND_NULL_HANDLER,
59581 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
59582 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
59583 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
59584 		ZEND_NULL_HANDLER,
59585 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
59586 		ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER,
59587 		ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER,
59588 		ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER,
59589 		ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER,
59590 		ZEND_NULL_HANDLER,
59591 		ZEND_NULL_HANDLER,
59592 		ZEND_NULL_HANDLER,
59593 		ZEND_NULL_HANDLER,
59594 		ZEND_NULL_HANDLER,
59595 		ZEND_NULL_HANDLER,
59596 		ZEND_NULL_HANDLER,
59597 		ZEND_NULL_HANDLER,
59598 		ZEND_SEND_VAR_SPEC_VAR_HANDLER,
59599 		ZEND_NULL_HANDLER,
59600 		ZEND_SEND_VAR_SPEC_CV_HANDLER,
59601 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
59602 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
59603 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
59604 		ZEND_NULL_HANDLER,
59605 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
59606 		ZEND_SEND_ARRAY_SPEC_HANDLER,
59607 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
59608 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
59609 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
59610 		ZEND_NULL_HANDLER,
59611 		ZEND_SEND_USER_SPEC_CV_HANDLER,
59612 		ZEND_STRLEN_SPEC_CONST_HANDLER,
59613 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
59614 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
59615 		ZEND_NULL_HANDLER,
59616 		ZEND_STRLEN_SPEC_CV_HANDLER,
59617 		ZEND_DEFINED_SPEC_CONST_HANDLER,
59618 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
59619 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
59620 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
59621 		ZEND_NULL_HANDLER,
59622 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
59623 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
59624 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
59625 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
59626 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
59627 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
59628 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
59629 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
59630 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
59631 		ZEND_NULL_HANDLER,
59632 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
59633 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
59634 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
59635 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
59636 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
59637 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
59638 		ZEND_NULL_HANDLER,
59639 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
59640 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
59641 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
59642 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
59643 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
59644 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
59645 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_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_NULL_HANDLER,
59654 		ZEND_NULL_HANDLER,
59655 		ZEND_NULL_HANDLER,
59656 		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
59657 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59658 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59659 		ZEND_NULL_HANDLER,
59660 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
59661 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
59662 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59663 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59664 		ZEND_NULL_HANDLER,
59665 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
59666 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
59667 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
59668 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
59669 		ZEND_NULL_HANDLER,
59670 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_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_NULL_HANDLER,
59679 		ZEND_NULL_HANDLER,
59680 		ZEND_NULL_HANDLER,
59681 		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
59682 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59683 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
59684 		ZEND_NULL_HANDLER,
59685 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
59686 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
59687 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59688 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59689 		ZEND_NULL_HANDLER,
59690 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
59691 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
59692 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
59693 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
59694 		ZEND_NULL_HANDLER,
59695 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
59696 		ZEND_ECHO_SPEC_CONST_HANDLER,
59697 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
59698 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
59699 		ZEND_NULL_HANDLER,
59700 		ZEND_ECHO_SPEC_CV_HANDLER,
59701 		ZEND_NULL_HANDLER,
59702 		ZEND_NULL_HANDLER,
59703 		ZEND_NULL_HANDLER,
59704 		ZEND_NULL_HANDLER,
59705 		ZEND_NULL_HANDLER,
59706 		ZEND_NULL_HANDLER,
59707 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
59708 		ZEND_NULL_HANDLER,
59709 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
59710 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
59711 		ZEND_NULL_HANDLER,
59712 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
59713 		ZEND_NULL_HANDLER,
59714 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
59715 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
59716 		ZEND_NULL_HANDLER,
59717 		ZEND_NULL_HANDLER,
59718 		ZEND_NULL_HANDLER,
59719 		ZEND_NULL_HANDLER,
59720 		ZEND_NULL_HANDLER,
59721 		ZEND_NULL_HANDLER,
59722 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
59723 		ZEND_NULL_HANDLER,
59724 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
59725 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
59726 		ZEND_NULL_HANDLER,
59727 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
59728 		ZEND_NULL_HANDLER,
59729 		ZEND_NULL_HANDLER,
59730 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
59731 		ZEND_NULL_HANDLER,
59732 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
59733 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
59734 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER,
59735 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
59736 		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
59737 		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
59738 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
59739 		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
59740 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
59741 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
59742 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
59743 		ZEND_NULL_HANDLER,
59744 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
59745 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
59746 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59747 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59748 		ZEND_NULL_HANDLER,
59749 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
59750 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
59751 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59752 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
59753 		ZEND_NULL_HANDLER,
59754 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
59755 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
59756 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59757 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
59758 		ZEND_NULL_HANDLER,
59759 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
59760 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
59761 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
59762 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
59763 		ZEND_NULL_HANDLER,
59764 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
59765 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
59766 		ZEND_USER_OPCODE_SPEC_HANDLER,
59767 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
59768 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
59769 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
59770 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
59771 		ZEND_NULL_HANDLER,
59772 		ZEND_JMP_SET_SPEC_CV_HANDLER,
59773 		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
59774 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
59775 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
59776 		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
59777 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
59778 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
59779 		ZEND_NULL_HANDLER,
59780 		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
59781 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
59782 		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
59783 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
59784 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
59785 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
59786 		ZEND_YIELD_SPEC_CONST_TMP_HANDLER,
59787 		ZEND_YIELD_SPEC_CONST_VAR_HANDLER,
59788 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
59789 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
59790 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
59791 		ZEND_YIELD_SPEC_TMP_TMP_HANDLER,
59792 		ZEND_YIELD_SPEC_TMP_VAR_HANDLER,
59793 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
59794 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
59795 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
59796 		ZEND_YIELD_SPEC_VAR_TMP_HANDLER,
59797 		ZEND_YIELD_SPEC_VAR_VAR_HANDLER,
59798 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
59799 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
59800 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
59801 		ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER,
59802 		ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER,
59803 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
59804 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
59805 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
59806 		ZEND_YIELD_SPEC_CV_TMP_HANDLER,
59807 		ZEND_YIELD_SPEC_CV_VAR_HANDLER,
59808 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
59809 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
59810 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
59811 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
59812 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
59813 		ZEND_NULL_HANDLER,
59814 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
59815 		ZEND_FAST_CALL_SPEC_HANDLER,
59816 		ZEND_FAST_RET_SPEC_HANDLER,
59817 		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
59818 		ZEND_SEND_UNPACK_SPEC_HANDLER,
59819 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
59820 		ZEND_YIELD_FROM_SPEC_TMP_HANDLER,
59821 		ZEND_YIELD_FROM_SPEC_VAR_HANDLER,
59822 		ZEND_NULL_HANDLER,
59823 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
59824 		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
59825 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
59826 		ZEND_COALESCE_SPEC_CONST_HANDLER,
59827 		ZEND_COALESCE_SPEC_TMP_HANDLER,
59828 		ZEND_COALESCE_SPEC_VAR_HANDLER,
59829 		ZEND_NULL_HANDLER,
59830 		ZEND_COALESCE_SPEC_CV_HANDLER,
59831 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
59832 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
59833 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
59834 		ZEND_NULL_HANDLER,
59835 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
59836 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
59837 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
59838 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
59839 		ZEND_NULL_HANDLER,
59840 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
59841 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
59842 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
59843 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
59844 		ZEND_NULL_HANDLER,
59845 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
59846 		ZEND_NULL_HANDLER,
59847 		ZEND_NULL_HANDLER,
59848 		ZEND_NULL_HANDLER,
59849 		ZEND_NULL_HANDLER,
59850 		ZEND_NULL_HANDLER,
59851 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
59852 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
59853 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
59854 		ZEND_NULL_HANDLER,
59855 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
59856 		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
59857 		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
59858 		ZEND_NULL_HANDLER,
59859 		ZEND_NULL_HANDLER,
59860 		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
59861 		ZEND_NULL_HANDLER,
59862 		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
59863 		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
59864 		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
59865 		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
59866 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
59867 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
59868 		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
59869 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
59870 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
59871 		ZEND_NULL_HANDLER,
59872 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
59873 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
59874 		ZEND_NULL_HANDLER,
59875 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
59876 		ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
59877 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
59878 		ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER,
59879 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
59880 		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
59881 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59882 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59883 		ZEND_NULL_HANDLER,
59884 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59885 		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
59886 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
59887 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
59888 		ZEND_NULL_HANDLER,
59889 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
59890 		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
59891 		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
59892 		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
59893 		ZEND_NULL_HANDLER,
59894 		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
59895 		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
59896 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
59897 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
59898 		ZEND_NULL_HANDLER,
59899 		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
59900 		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
59901 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
59902 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
59903 		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
59904 		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
59905 		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
59906 		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
59907 		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
59908 		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
59909 		ZEND_NULL_HANDLER,
59910 		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
59911 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
59912 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
59913 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
59914 		ZEND_NULL_HANDLER,
59915 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
59916 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
59917 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
59918 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
59919 		ZEND_NULL_HANDLER,
59920 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
59921 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
59922 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
59923 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
59924 		ZEND_NULL_HANDLER,
59925 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
59926 		ZEND_NULL_HANDLER,
59927 		ZEND_NULL_HANDLER,
59928 		ZEND_NULL_HANDLER,
59929 		ZEND_NULL_HANDLER,
59930 		ZEND_NULL_HANDLER,
59931 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
59932 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
59933 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
59934 		ZEND_NULL_HANDLER,
59935 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
59936 		ZEND_JMP_FORWARD_SPEC_HANDLER,
59937 		ZEND_NULL_HANDLER,
59938 		ZEND_NULL_HANDLER,
59939 		ZEND_NULL_HANDLER,
59940 		ZEND_NULL_HANDLER,
59941 		ZEND_NULL_HANDLER,
59942 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
59943 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59944 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59945 		ZEND_NULL_HANDLER,
59946 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59947 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
59948 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59949 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59950 		ZEND_NULL_HANDLER,
59951 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59952 		ZEND_NULL_HANDLER,
59953 		ZEND_NULL_HANDLER,
59954 		ZEND_NULL_HANDLER,
59955 		ZEND_NULL_HANDLER,
59956 		ZEND_NULL_HANDLER,
59957 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
59958 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59959 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59960 		ZEND_NULL_HANDLER,
59961 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59962 		ZEND_NULL_HANDLER,
59963 		ZEND_NULL_HANDLER,
59964 		ZEND_NULL_HANDLER,
59965 		ZEND_NULL_HANDLER,
59966 		ZEND_NULL_HANDLER,
59967 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59968 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59969 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59970 		ZEND_NULL_HANDLER,
59971 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59972 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59973 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59974 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59975 		ZEND_NULL_HANDLER,
59976 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59977 		ZEND_NULL_HANDLER,
59978 		ZEND_NULL_HANDLER,
59979 		ZEND_NULL_HANDLER,
59980 		ZEND_NULL_HANDLER,
59981 		ZEND_NULL_HANDLER,
59982 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
59983 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59984 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59985 		ZEND_NULL_HANDLER,
59986 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59987 		ZEND_NULL_HANDLER,
59988 		ZEND_NULL_HANDLER,
59989 		ZEND_NULL_HANDLER,
59990 		ZEND_NULL_HANDLER,
59991 		ZEND_NULL_HANDLER,
59992 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
59993 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59994 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59995 		ZEND_NULL_HANDLER,
59996 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59997 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
59998 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
59999 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60000 		ZEND_NULL_HANDLER,
60001 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60002 		ZEND_NULL_HANDLER,
60003 		ZEND_NULL_HANDLER,
60004 		ZEND_NULL_HANDLER,
60005 		ZEND_NULL_HANDLER,
60006 		ZEND_NULL_HANDLER,
60007 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60008 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60009 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60010 		ZEND_NULL_HANDLER,
60011 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60012 		ZEND_NULL_HANDLER,
60013 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
60014 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
60015 		ZEND_NULL_HANDLER,
60016 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
60017 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60018 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60019 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60020 		ZEND_NULL_HANDLER,
60021 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60022 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60023 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60024 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60025 		ZEND_NULL_HANDLER,
60026 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60027 		ZEND_NULL_HANDLER,
60028 		ZEND_NULL_HANDLER,
60029 		ZEND_NULL_HANDLER,
60030 		ZEND_NULL_HANDLER,
60031 		ZEND_NULL_HANDLER,
60032 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60033 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60034 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60035 		ZEND_NULL_HANDLER,
60036 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60037 		ZEND_NULL_HANDLER,
60038 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60039 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60040 		ZEND_NULL_HANDLER,
60041 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60042 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60043 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60044 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60045 		ZEND_NULL_HANDLER,
60046 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60047 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60048 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60049 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60050 		ZEND_NULL_HANDLER,
60051 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60052 		ZEND_NULL_HANDLER,
60053 		ZEND_NULL_HANDLER,
60054 		ZEND_NULL_HANDLER,
60055 		ZEND_NULL_HANDLER,
60056 		ZEND_NULL_HANDLER,
60057 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60058 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60059 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60060 		ZEND_NULL_HANDLER,
60061 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60062 		ZEND_NULL_HANDLER,
60063 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60064 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60065 		ZEND_NULL_HANDLER,
60066 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60067 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60068 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60069 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60070 		ZEND_NULL_HANDLER,
60071 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60072 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60073 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60074 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60075 		ZEND_NULL_HANDLER,
60076 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60077 		ZEND_NULL_HANDLER,
60078 		ZEND_NULL_HANDLER,
60079 		ZEND_NULL_HANDLER,
60080 		ZEND_NULL_HANDLER,
60081 		ZEND_NULL_HANDLER,
60082 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60083 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60084 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60085 		ZEND_NULL_HANDLER,
60086 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60087 		ZEND_NULL_HANDLER,
60088 		ZEND_NULL_HANDLER,
60089 		ZEND_NULL_HANDLER,
60090 		ZEND_NULL_HANDLER,
60091 		ZEND_NULL_HANDLER,
60092 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60093 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60094 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60095 		ZEND_NULL_HANDLER,
60096 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60097 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60098 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60099 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60100 		ZEND_NULL_HANDLER,
60101 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60102 		ZEND_NULL_HANDLER,
60103 		ZEND_NULL_HANDLER,
60104 		ZEND_NULL_HANDLER,
60105 		ZEND_NULL_HANDLER,
60106 		ZEND_NULL_HANDLER,
60107 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
60108 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60109 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60110 		ZEND_NULL_HANDLER,
60111 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60112 		ZEND_NULL_HANDLER,
60113 		ZEND_NULL_HANDLER,
60114 		ZEND_NULL_HANDLER,
60115 		ZEND_NULL_HANDLER,
60116 		ZEND_NULL_HANDLER,
60117 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60118 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60119 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60120 		ZEND_NULL_HANDLER,
60121 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60122 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60123 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60124 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60125 		ZEND_NULL_HANDLER,
60126 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60127 		ZEND_NULL_HANDLER,
60128 		ZEND_NULL_HANDLER,
60129 		ZEND_NULL_HANDLER,
60130 		ZEND_NULL_HANDLER,
60131 		ZEND_NULL_HANDLER,
60132 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60133 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60134 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60135 		ZEND_NULL_HANDLER,
60136 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60137 		ZEND_NULL_HANDLER,
60138 		ZEND_NULL_HANDLER,
60139 		ZEND_NULL_HANDLER,
60140 		ZEND_NULL_HANDLER,
60141 		ZEND_NULL_HANDLER,
60142 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60143 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60144 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60145 		ZEND_NULL_HANDLER,
60146 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60147 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60148 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60149 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60150 		ZEND_NULL_HANDLER,
60151 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60152 		ZEND_NULL_HANDLER,
60153 		ZEND_NULL_HANDLER,
60154 		ZEND_NULL_HANDLER,
60155 		ZEND_NULL_HANDLER,
60156 		ZEND_NULL_HANDLER,
60157 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60158 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60159 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60160 		ZEND_NULL_HANDLER,
60161 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60162 		ZEND_NULL_HANDLER,
60163 		ZEND_NULL_HANDLER,
60164 		ZEND_NULL_HANDLER,
60165 		ZEND_NULL_HANDLER,
60166 		ZEND_NULL_HANDLER,
60167 		ZEND_NULL_HANDLER,
60168 		ZEND_NULL_HANDLER,
60169 		ZEND_NULL_HANDLER,
60170 		ZEND_NULL_HANDLER,
60171 		ZEND_NULL_HANDLER,
60172 		ZEND_NULL_HANDLER,
60173 		ZEND_NULL_HANDLER,
60174 		ZEND_NULL_HANDLER,
60175 		ZEND_NULL_HANDLER,
60176 		ZEND_NULL_HANDLER,
60177 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60178 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60179 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60180 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60181 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60182 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60183 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60184 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60185 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60186 		ZEND_NULL_HANDLER,
60187 		ZEND_NULL_HANDLER,
60188 		ZEND_NULL_HANDLER,
60189 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60190 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60191 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60192 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60193 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60194 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60195 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60196 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60197 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60198 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60199 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60200 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60201 		ZEND_NULL_HANDLER,
60202 		ZEND_NULL_HANDLER,
60203 		ZEND_NULL_HANDLER,
60204 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60205 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60206 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60207 		ZEND_NULL_HANDLER,
60208 		ZEND_NULL_HANDLER,
60209 		ZEND_NULL_HANDLER,
60210 		ZEND_NULL_HANDLER,
60211 		ZEND_NULL_HANDLER,
60212 		ZEND_NULL_HANDLER,
60213 		ZEND_NULL_HANDLER,
60214 		ZEND_NULL_HANDLER,
60215 		ZEND_NULL_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_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60223 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60224 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60225 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60226 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60227 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60228 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60229 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60230 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60231 		ZEND_NULL_HANDLER,
60232 		ZEND_NULL_HANDLER,
60233 		ZEND_NULL_HANDLER,
60234 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60235 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60236 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_NULL_HANDLER,
60244 		ZEND_NULL_HANDLER,
60245 		ZEND_NULL_HANDLER,
60246 		ZEND_NULL_HANDLER,
60247 		ZEND_NULL_HANDLER,
60248 		ZEND_NULL_HANDLER,
60249 		ZEND_NULL_HANDLER,
60250 		ZEND_NULL_HANDLER,
60251 		ZEND_NULL_HANDLER,
60252 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60253 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60254 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60255 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60256 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60257 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60258 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60259 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60260 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60261 		ZEND_NULL_HANDLER,
60262 		ZEND_NULL_HANDLER,
60263 		ZEND_NULL_HANDLER,
60264 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60265 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60266 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60267 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60268 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60269 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60270 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60271 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60272 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60273 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60274 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60275 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60276 		ZEND_NULL_HANDLER,
60277 		ZEND_NULL_HANDLER,
60278 		ZEND_NULL_HANDLER,
60279 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60280 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60281 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60282 		ZEND_NULL_HANDLER,
60283 		ZEND_NULL_HANDLER,
60284 		ZEND_NULL_HANDLER,
60285 		ZEND_NULL_HANDLER,
60286 		ZEND_NULL_HANDLER,
60287 		ZEND_NULL_HANDLER,
60288 		ZEND_NULL_HANDLER,
60289 		ZEND_NULL_HANDLER,
60290 		ZEND_NULL_HANDLER,
60291 		ZEND_NULL_HANDLER,
60292 		ZEND_NULL_HANDLER,
60293 		ZEND_NULL_HANDLER,
60294 		ZEND_NULL_HANDLER,
60295 		ZEND_NULL_HANDLER,
60296 		ZEND_NULL_HANDLER,
60297 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60298 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60299 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60300 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60301 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60302 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60303 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60304 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60305 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60306 		ZEND_NULL_HANDLER,
60307 		ZEND_NULL_HANDLER,
60308 		ZEND_NULL_HANDLER,
60309 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60310 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60311 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60312 		ZEND_NULL_HANDLER,
60313 		ZEND_NULL_HANDLER,
60314 		ZEND_NULL_HANDLER,
60315 		ZEND_NULL_HANDLER,
60316 		ZEND_NULL_HANDLER,
60317 		ZEND_NULL_HANDLER,
60318 		ZEND_NULL_HANDLER,
60319 		ZEND_NULL_HANDLER,
60320 		ZEND_NULL_HANDLER,
60321 		ZEND_NULL_HANDLER,
60322 		ZEND_NULL_HANDLER,
60323 		ZEND_NULL_HANDLER,
60324 		ZEND_NULL_HANDLER,
60325 		ZEND_NULL_HANDLER,
60326 		ZEND_NULL_HANDLER,
60327 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60328 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60329 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60330 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60331 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60332 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60333 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60334 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60335 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60336 		ZEND_NULL_HANDLER,
60337 		ZEND_NULL_HANDLER,
60338 		ZEND_NULL_HANDLER,
60339 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60340 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60341 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60342 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60343 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60344 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60345 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60346 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60347 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60348 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60349 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60350 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60351 		ZEND_NULL_HANDLER,
60352 		ZEND_NULL_HANDLER,
60353 		ZEND_NULL_HANDLER,
60354 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60355 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60356 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60357 		ZEND_NULL_HANDLER,
60358 		ZEND_NULL_HANDLER,
60359 		ZEND_NULL_HANDLER,
60360 		ZEND_NULL_HANDLER,
60361 		ZEND_NULL_HANDLER,
60362 		ZEND_NULL_HANDLER,
60363 		ZEND_NULL_HANDLER,
60364 		ZEND_NULL_HANDLER,
60365 		ZEND_NULL_HANDLER,
60366 		ZEND_NULL_HANDLER,
60367 		ZEND_NULL_HANDLER,
60368 		ZEND_NULL_HANDLER,
60369 		ZEND_NULL_HANDLER,
60370 		ZEND_NULL_HANDLER,
60371 		ZEND_NULL_HANDLER,
60372 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60373 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60374 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60375 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60376 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60377 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60378 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60379 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60380 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60381 		ZEND_NULL_HANDLER,
60382 		ZEND_NULL_HANDLER,
60383 		ZEND_NULL_HANDLER,
60384 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60385 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60386 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60403 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60404 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60405 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60406 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60407 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60408 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60409 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60410 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60411 		ZEND_NULL_HANDLER,
60412 		ZEND_NULL_HANDLER,
60413 		ZEND_NULL_HANDLER,
60414 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60415 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60416 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60417 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60418 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60419 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60420 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60421 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60422 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60423 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60424 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60425 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60426 		ZEND_NULL_HANDLER,
60427 		ZEND_NULL_HANDLER,
60428 		ZEND_NULL_HANDLER,
60429 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60430 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60431 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60432 		ZEND_NULL_HANDLER,
60433 		ZEND_NULL_HANDLER,
60434 		ZEND_NULL_HANDLER,
60435 		ZEND_NULL_HANDLER,
60436 		ZEND_NULL_HANDLER,
60437 		ZEND_NULL_HANDLER,
60438 		ZEND_NULL_HANDLER,
60439 		ZEND_NULL_HANDLER,
60440 		ZEND_NULL_HANDLER,
60441 		ZEND_NULL_HANDLER,
60442 		ZEND_NULL_HANDLER,
60443 		ZEND_NULL_HANDLER,
60444 		ZEND_NULL_HANDLER,
60445 		ZEND_NULL_HANDLER,
60446 		ZEND_NULL_HANDLER,
60447 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60448 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60449 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60450 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60451 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60452 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60453 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60454 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60455 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60456 		ZEND_NULL_HANDLER,
60457 		ZEND_NULL_HANDLER,
60458 		ZEND_NULL_HANDLER,
60459 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60460 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60461 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60462 		ZEND_NULL_HANDLER,
60463 		ZEND_NULL_HANDLER,
60464 		ZEND_NULL_HANDLER,
60465 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60466 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60467 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60468 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60469 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60470 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60471 		ZEND_NULL_HANDLER,
60472 		ZEND_NULL_HANDLER,
60473 		ZEND_NULL_HANDLER,
60474 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60475 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60476 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60477 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60478 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60479 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60480 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60481 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60482 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60483 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60484 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60485 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60486 		ZEND_NULL_HANDLER,
60487 		ZEND_NULL_HANDLER,
60488 		ZEND_NULL_HANDLER,
60489 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60490 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60491 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60492 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60493 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60494 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60495 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60496 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60497 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60498 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60499 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60500 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60501 		ZEND_NULL_HANDLER,
60502 		ZEND_NULL_HANDLER,
60503 		ZEND_NULL_HANDLER,
60504 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60505 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60506 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60507 		ZEND_NULL_HANDLER,
60508 		ZEND_NULL_HANDLER,
60509 		ZEND_NULL_HANDLER,
60510 		ZEND_NULL_HANDLER,
60511 		ZEND_NULL_HANDLER,
60512 		ZEND_NULL_HANDLER,
60513 		ZEND_NULL_HANDLER,
60514 		ZEND_NULL_HANDLER,
60515 		ZEND_NULL_HANDLER,
60516 		ZEND_NULL_HANDLER,
60517 		ZEND_NULL_HANDLER,
60518 		ZEND_NULL_HANDLER,
60519 		ZEND_NULL_HANDLER,
60520 		ZEND_NULL_HANDLER,
60521 		ZEND_NULL_HANDLER,
60522 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60523 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60524 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60525 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60526 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60527 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60528 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60529 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60530 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60531 		ZEND_NULL_HANDLER,
60532 		ZEND_NULL_HANDLER,
60533 		ZEND_NULL_HANDLER,
60534 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60535 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60536 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60537 		ZEND_NULL_HANDLER,
60538 		ZEND_NULL_HANDLER,
60539 		ZEND_NULL_HANDLER,
60540 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60541 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60542 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60543 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60544 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60545 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60546 		ZEND_NULL_HANDLER,
60547 		ZEND_NULL_HANDLER,
60548 		ZEND_NULL_HANDLER,
60549 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60550 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60551 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60552 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60553 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60554 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60555 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60556 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60557 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60558 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60559 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60560 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60561 		ZEND_NULL_HANDLER,
60562 		ZEND_NULL_HANDLER,
60563 		ZEND_NULL_HANDLER,
60564 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60565 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60566 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60567 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60568 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60569 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60570 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60571 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60572 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60573 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60574 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60575 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60576 		ZEND_NULL_HANDLER,
60577 		ZEND_NULL_HANDLER,
60578 		ZEND_NULL_HANDLER,
60579 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60580 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60581 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_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_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60598 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60599 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60600 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60601 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60602 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60603 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60604 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60605 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60606 		ZEND_NULL_HANDLER,
60607 		ZEND_NULL_HANDLER,
60608 		ZEND_NULL_HANDLER,
60609 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60610 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60611 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60612 		ZEND_NULL_HANDLER,
60613 		ZEND_NULL_HANDLER,
60614 		ZEND_NULL_HANDLER,
60615 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60616 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60617 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60618 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60619 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60620 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60621 		ZEND_NULL_HANDLER,
60622 		ZEND_NULL_HANDLER,
60623 		ZEND_NULL_HANDLER,
60624 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
60625 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60626 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60627 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60628 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60629 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60630 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60631 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60632 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60633 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60634 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60635 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60636 		ZEND_NULL_HANDLER,
60637 		ZEND_NULL_HANDLER,
60638 		ZEND_NULL_HANDLER,
60639 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60640 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60641 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60642 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60643 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60644 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60645 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60646 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60647 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60648 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60649 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60650 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60651 		ZEND_NULL_HANDLER,
60652 		ZEND_NULL_HANDLER,
60653 		ZEND_NULL_HANDLER,
60654 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60655 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60656 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60657 		ZEND_NULL_HANDLER,
60658 		ZEND_NULL_HANDLER,
60659 		ZEND_NULL_HANDLER,
60660 		ZEND_NULL_HANDLER,
60661 		ZEND_NULL_HANDLER,
60662 		ZEND_NULL_HANDLER,
60663 		ZEND_NULL_HANDLER,
60664 		ZEND_NULL_HANDLER,
60665 		ZEND_NULL_HANDLER,
60666 		ZEND_NULL_HANDLER,
60667 		ZEND_NULL_HANDLER,
60668 		ZEND_NULL_HANDLER,
60669 		ZEND_NULL_HANDLER,
60670 		ZEND_NULL_HANDLER,
60671 		ZEND_NULL_HANDLER,
60672 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
60673 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60674 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60675 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60676 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60677 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60678 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60679 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60680 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60681 		ZEND_NULL_HANDLER,
60682 		ZEND_NULL_HANDLER,
60683 		ZEND_NULL_HANDLER,
60684 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60685 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60686 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60687 		ZEND_NULL_HANDLER,
60688 		ZEND_NULL_HANDLER,
60689 		ZEND_NULL_HANDLER,
60690 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60691 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60692 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60693 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60694 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60695 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60696 		ZEND_NULL_HANDLER,
60697 		ZEND_NULL_HANDLER,
60698 		ZEND_NULL_HANDLER,
60699 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
60700 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
60701 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
60702 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60703 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60704 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60705 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60706 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60707 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60708 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60709 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60710 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60711 		ZEND_NULL_HANDLER,
60712 		ZEND_NULL_HANDLER,
60713 		ZEND_NULL_HANDLER,
60714 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60715 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60716 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60717 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60718 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60719 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60720 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60721 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60722 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60723 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60724 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60725 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60726 		ZEND_NULL_HANDLER,
60727 		ZEND_NULL_HANDLER,
60728 		ZEND_NULL_HANDLER,
60729 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60730 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60731 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60732 		ZEND_NULL_HANDLER,
60733 		ZEND_NULL_HANDLER,
60734 		ZEND_NULL_HANDLER,
60735 		ZEND_NULL_HANDLER,
60736 		ZEND_NULL_HANDLER,
60737 		ZEND_NULL_HANDLER,
60738 		ZEND_NULL_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_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
60748 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
60749 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
60750 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60751 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60752 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60753 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60754 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60755 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60756 		ZEND_NULL_HANDLER,
60757 		ZEND_NULL_HANDLER,
60758 		ZEND_NULL_HANDLER,
60759 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
60760 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
60761 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
60762 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
60763 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
60764 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
60765 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
60766 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
60767 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
60768 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
60769 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
60770 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
60771 		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
60772 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
60773 		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
60774 		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
60775 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
60776 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
60777 		ZEND_NULL_HANDLER,
60778 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
60779 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
60780 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
60781 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
60782 		ZEND_NULL_HANDLER,
60783 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
60784 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
60785 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
60786 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
60787 		ZEND_NULL_HANDLER,
60788 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
60789 		ZEND_NULL_HANDLER,
60790 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
60791 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
60792 		ZEND_NULL_HANDLER,
60793 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
60794 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
60795 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60796 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60797 		ZEND_NULL_HANDLER,
60798 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60799 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
60800 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60801 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60802 		ZEND_NULL_HANDLER,
60803 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
60804 		ZEND_NULL_HANDLER,
60805 		ZEND_NULL_HANDLER,
60806 		ZEND_NULL_HANDLER,
60807 		ZEND_NULL_HANDLER,
60808 		ZEND_NULL_HANDLER,
60809 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
60810 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
60811 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
60812 		ZEND_NULL_HANDLER,
60813 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
60814 		ZEND_NULL_HANDLER,
60815 		ZEND_NULL_HANDLER,
60816 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
60817 		ZEND_NULL_HANDLER,
60818 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
60819 		ZEND_NULL_HANDLER,
60820 		ZEND_NULL_HANDLER,
60821 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER,
60822 		ZEND_NULL_HANDLER,
60823 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER,
60824 		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
60825 		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
60826 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
60827 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
60828 		ZEND_NULL_HANDLER
60829 	};
60830 	static const uint32_t specs[] = {
60831 		0,
60832 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60833 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60834 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60835 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60836 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60837 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60838 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60839 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60840 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60841 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60842 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60843 		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60844 		301 | SPEC_RULE_OP1,
60845 		306 | SPEC_RULE_OP1,
60846 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60847 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60848 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
60849 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
60850 		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
60851 		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
60852 		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
60853 		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
60854 		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
60855 		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
60856 		986 | SPEC_RULE_OP_DATA,
60857 		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60858 		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60859 		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60860 		1066,
60861 		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60862 		1092 | SPEC_RULE_OP1,
60863 		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
60864 		1222,
60865 		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
60866 		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
60867 		1243 | SPEC_RULE_OP1,
60868 		1248 | SPEC_RULE_OP1,
60869 		1253,
60870 		1253,
60871 		1254,
60872 		1254,
60873 		1255,
60874 		1256 | SPEC_RULE_OP1,
60875 		1261 | SPEC_RULE_OP1,
60876 		1266 | SPEC_RULE_OP1,
60877 		1271 | SPEC_RULE_OP1,
60878 		1276 | SPEC_RULE_OP1,
60879 		1281 | SPEC_RULE_OP2,
60880 		1286,
60881 		1287 | SPEC_RULE_QUICK_ARG,
60882 		1289 | SPEC_RULE_OP1,
60883 		1294 | SPEC_RULE_OP1,
60884 		1299 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60885 		1324 | SPEC_RULE_OP2,
60886 		1329 | SPEC_RULE_OP2,
60887 		1334 | SPEC_RULE_OP2,
60888 		1339,
60889 		1340,
60890 		1341,
60891 		1342 | SPEC_RULE_RETVAL,
60892 		1344,
60893 		1345 | SPEC_RULE_OP1,
60894 		1350,
60895 		1351,
60896 		1352 | SPEC_RULE_OP1,
60897 		1357 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
60898 		1367 | SPEC_RULE_OP1,
60899 		1372 | SPEC_RULE_OP1,
60900 		1377,
60901 		1378,
60902 		1379 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60903 		1404 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60904 		1429 | SPEC_RULE_OP1,
60905 		1434 | SPEC_RULE_OP1,
60906 		1439 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60907 		1464 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60908 		1489 | SPEC_RULE_OP1,
60909 		1494,
60910 		1495,
60911 		1496 | SPEC_RULE_OP1,
60912 		1501 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60913 		1526 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60914 		1551 | SPEC_RULE_OP1,
60915 		1556 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60916 		1581 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60917 		1606 | SPEC_RULE_OP1,
60918 		1611 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60919 		1636 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60920 		1661 | SPEC_RULE_OP1,
60921 		1666 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60922 		1691 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60923 		1716 | SPEC_RULE_OP1,
60924 		1721 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60925 		1746 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60926 		1771 | SPEC_RULE_OP1,
60927 		1776 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60928 		1801 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60929 		1826 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60930 		1851,
60931 		1852 | SPEC_RULE_QUICK_ARG,
60932 		1854,
60933 		1855,
60934 		1856,
60935 		1857,
60936 		1858,
60937 		1859,
60938 		1860,
60939 		1861 | SPEC_RULE_OP1,
60940 		1866 | SPEC_RULE_OP2,
60941 		1871 | SPEC_RULE_OP1,
60942 		1876 | SPEC_RULE_OP1,
60943 		1881 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60944 		1906 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60945 		1931 | SPEC_RULE_OP1,
60946 		1936 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60947 		1961 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG,
60948 		1971 | SPEC_RULE_OP1,
60949 		1976 | SPEC_RULE_OP2,
60950 		1981,
60951 		1982 | SPEC_RULE_OP1,
60952 		1987 | SPEC_RULE_OP1,
60953 		1992,
60954 		1993 | SPEC_RULE_OP1,
60955 		1998 | SPEC_RULE_OP1,
60956 		2003 | SPEC_RULE_OP1,
60957 		2008,
60958 		2009,
60959 		2010 | SPEC_RULE_OP2,
60960 		2015 | SPEC_RULE_RETVAL,
60961 		2017 | SPEC_RULE_RETVAL,
60962 		2019 | SPEC_RULE_RETVAL,
60963 		2021 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60964 		2021 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60965 		2046 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60966 		2046 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60967 		2071 | SPEC_RULE_OP1,
60968 		2076,
60969 		2077 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60970 		2102,
60971 		2103 | SPEC_RULE_OP1,
60972 		2108,
60973 		2109,
60974 		2110,
60975 		2111,
60976 		2112,
60977 		2113,
60978 		2114,
60979 		2115 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60980 		2140,
60981 		2141,
60982 		2142,
60983 		2143 | SPEC_RULE_OP1,
60984 		2148,
60985 		2149 | SPEC_RULE_ISSET,
60986 		2151 | SPEC_RULE_OP2,
60987 		2156,
60988 		2157,
60989 		2158,
60990 		2159,
60991 		2160 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
60992 		2185 | SPEC_RULE_OP1,
60993 		2190,
60994 		2191,
60995 		2192,
60996 		2193,
60997 		2194 | SPEC_RULE_OP1,
60998 		2199,
60999 		2200,
61000 		2201 | SPEC_RULE_OP1,
61001 		2206 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
61002 		2231,
61003 		2232 | SPEC_RULE_OP1,
61004 		2237,
61005 		2238,
61006 		2239,
61007 		2240,
61008 		2241,
61009 		2242,
61010 		2243,
61011 		2244,
61012 		2245 | SPEC_RULE_OP1,
61013 		2250,
61014 		2251,
61015 		2252,
61016 		2253,
61017 		2254,
61018 		2255 | SPEC_RULE_OP1,
61019 		2260 | SPEC_RULE_OP1,
61020 		2265 | SPEC_RULE_OP1,
61021 		2270 | SPEC_RULE_OP1,
61022 		2275 | SPEC_RULE_OP1,
61023 		2280,
61024 		2281 | SPEC_RULE_OP1,
61025 		2286 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
61026 		3203
61027 	};
61028 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
61029 	zend_opcode_handler_funcs = labels;
61030 	zend_spec_handlers = specs;
61031 	execute_ex(NULL);
61032 #else
61033 	zend_opcode_handlers = labels;
61034 	zend_handlers_count = sizeof(labels) / sizeof(void*);
61035 	zend_spec_handlers = specs;
61036 #endif
61037 	VM_TRACE_START();
61038 }
61039 
61040 static HashTable *zend_handlers_table = NULL;
61041 
61042 void zend_vm_dtor(void)
61043 {
61044 	VM_TRACE_END();
61045 	if (zend_handlers_table) {
61046 		zend_hash_destroy(zend_handlers_table);
61047 		free(zend_handlers_table);
61048 		zend_handlers_table = NULL;
61049 	}
61050 }
61051 
61052 static void init_opcode_serialiser(void)
61053 {
61054 	int i;
61055 	zval tmp;
61056 
61057 	zend_handlers_table = malloc(sizeof(HashTable));
61058 	zend_hash_init_ex(zend_handlers_table, zend_handlers_count, NULL, NULL, 1, 0);
61059 	zend_hash_real_init(zend_handlers_table, 0);
61060 	Z_TYPE_INFO(tmp) = IS_LONG;
61061 	for (i = 0; i < zend_handlers_count; i++) {
61062 		Z_LVAL(tmp) = i;
61063 		zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp);
61064 	}
61065 }
61066 
61067 ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
61068 {
61069 	zval *zv;
61070 
61071 	if (!zend_handlers_table) {
61072 		init_opcode_serialiser();
61073 	}
61074 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
61075 	ZEND_ASSERT(zv != NULL);
61076 	op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv);
61077 }
61078 
61079 ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
61080 {
61081 	op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
61082 }
61083 
61084 ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
61085 {
61086 #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
61087 	return op->handler;
61088 #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
61089 	zval *zv;
61090 
61091 	if (!zend_handlers_table) {
61092 		init_opcode_serialiser();
61093 	}
61094 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
61095 	ZEND_ASSERT(zv != NULL);
61096 	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
61097 #else
61098 	return NULL;
61099 #endif
61100 }
61101 
61102 ZEND_API const zend_op *zend_get_halt_op(void)
61103 {
61104 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
61105 	return &hybrid_halt_op;
61106 #else
61107 	return NULL;
61108 #endif
61109 }
61110 
61111 ZEND_API int zend_vm_kind(void)
61112 {
61113 	return ZEND_VM_KIND;
61114 }
61115 
61116 static const void* ZEND_FASTCALL zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)
61117 {
61118 	static const int zend_vm_decode[] = {
61119 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
61120 		_CONST_CODE,  /* 1 = IS_CONST   */
61121 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
61122 		_UNUSED_CODE, /* 3              */
61123 		_VAR_CODE,    /* 4 = IS_VAR     */
61124 		_UNUSED_CODE, /* 5              */
61125 		_UNUSED_CODE, /* 6              */
61126 		_UNUSED_CODE, /* 7              */
61127 		_CV_CODE      /* 8 = IS_CV      */
61128 	};
61129 	uint32_t offset = 0;
61130 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
61131 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
61132 	if (spec & SPEC_EXTRA_MASK) {
61133 		if (spec & SPEC_RULE_RETVAL) {
61134 			offset = offset * 2 + (op->result_type != IS_UNUSED);
61135 		} else if (spec & SPEC_RULE_QUICK_ARG) {
61136 			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
61137 		} else if (spec & SPEC_RULE_OP_DATA) {
61138 			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
61139 		} else if (spec & SPEC_RULE_ISSET) {
61140 			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
61141 		} else if (spec & SPEC_RULE_SMART_BRANCH) {
61142 			offset = offset * 3;
61143 			if ((op+1)->opcode == ZEND_JMPZ) {
61144 				offset += 1;
61145 			} else if ((op+1)->opcode == ZEND_JMPNZ) {
61146 				offset += 2;
61147 			}
61148 		}
61149 	}
61150 	return zend_opcode_handlers[(spec & SPEC_START_MASK) + offset];
61151 }
61152 
61153 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
61154 static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op)
61155 {
61156 	return zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
61157 }
61158 #endif
61159 
61160 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
61161 static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
61162 {
61163 	uint32_t spec = zend_spec_handlers[opcode];
61164 	static const int zend_vm_decode[] = {
61165 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
61166 		_CONST_CODE,  /* 1 = IS_CONST   */
61167 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
61168 		_UNUSED_CODE, /* 3              */
61169 		_VAR_CODE,    /* 4 = IS_VAR     */
61170 		_UNUSED_CODE, /* 5              */
61171 		_UNUSED_CODE, /* 6              */
61172 		_UNUSED_CODE, /* 7              */
61173 		_CV_CODE      /* 8 = IS_CV      */
61174 	};
61175 	uint32_t offset = 0;
61176 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
61177 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
61178 	if (spec & SPEC_EXTRA_MASK) {
61179 		if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
61180 		else if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);
61181 		else if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
61182 		else if (spec & SPEC_RULE_SMART_BRANCH) {
61183 			offset = offset * 3;
61184 			if ((op+1)->opcode == ZEND_JMPZ) {
61185 				offset += 1;
61186 			} else if ((op+1)->opcode == ZEND_JMPNZ) {
61187 				offset += 2;
61188 			}
61189 		}
61190 		else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
61191 	}
61192 	return zend_opcode_handler_funcs[(spec & SPEC_START_MASK) + offset];
61193 }
61194 
61195 #endif
61196 
61197 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
61198 {
61199 	zend_uchar opcode = zend_user_opcodes[op->opcode];
61200 
61201 	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
61202 		if (op->op1_type < op->op2_type) {
61203 			zend_swap_operands(op);
61204 		}
61205 	}
61206 	op->handler = zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
61207 }
61208 
61209 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint32_t op2_info, uint32_t res_info)
61210 {
61211 	zend_uchar opcode = zend_user_opcodes[op->opcode];
61212 	uint32_t spec = zend_spec_handlers[opcode];
61213 	switch (opcode) {
61214 		case ZEND_ADD:
61215 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61216 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61217 					break;
61218 				}
61219 				spec = 2312 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61220 				if (op->op1_type < op->op2_type) {
61221 					zend_swap_operands(op);
61222 				}
61223 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61224 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61225 					break;
61226 				}
61227 				spec = 2337 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61228 				if (op->op1_type < op->op2_type) {
61229 					zend_swap_operands(op);
61230 				}
61231 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61232 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61233 					break;
61234 				}
61235 				spec = 2362 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61236 				if (op->op1_type < op->op2_type) {
61237 					zend_swap_operands(op);
61238 				}
61239 			}
61240 			break;
61241 		case ZEND_SUB:
61242 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61243 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61244 					break;
61245 				}
61246 				spec = 2387 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
61247 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61248 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61249 					break;
61250 				}
61251 				spec = 2412 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
61252 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61253 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61254 					break;
61255 				}
61256 				spec = 2437 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
61257 			}
61258 			break;
61259 		case ZEND_MUL:
61260 			if (op->op1_type < op->op2_type) {
61261 				zend_swap_operands(op);
61262 			}
61263 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61264 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61265 					break;
61266 				}
61267 				spec = 2462 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61268 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61269 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61270 					break;
61271 				}
61272 				spec = 2487 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61273 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61274 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61275 					break;
61276 				}
61277 				spec = 2512 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
61278 			}
61279 			break;
61280 		case ZEND_IS_EQUAL:
61281 			if (op->op1_type < op->op2_type) {
61282 				zend_swap_operands(op);
61283 			}
61284 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61285 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61286 					break;
61287 				}
61288 				spec = 2537 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
61289 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61290 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61291 					break;
61292 				}
61293 				spec = 2612 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
61294 			}
61295 			break;
61296 		case ZEND_IS_NOT_EQUAL:
61297 			if (op->op1_type < op->op2_type) {
61298 				zend_swap_operands(op);
61299 			}
61300 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61301 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61302 					break;
61303 				}
61304 				spec = 2687 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
61305 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61306 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61307 					break;
61308 				}
61309 				spec = 2762 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
61310 			}
61311 			break;
61312 		case ZEND_IS_SMALLER:
61313 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61314 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61315 					break;
61316 				}
61317 				spec = 2837 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
61318 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61319 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61320 					break;
61321 				}
61322 				spec = 2912 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
61323 			}
61324 			break;
61325 		case ZEND_IS_SMALLER_OR_EQUAL:
61326 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
61327 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61328 					break;
61329 				}
61330 				spec = 2987 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
61331 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
61332 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61333 					break;
61334 				}
61335 				spec = 3062 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
61336 			}
61337 			break;
61338 		case ZEND_QM_ASSIGN:
61339 			if (op1_info == MAY_BE_LONG) {
61340 				spec = 3149 | SPEC_RULE_OP1;
61341 			} else if (op1_info == MAY_BE_DOUBLE) {
61342 				spec = 3154 | SPEC_RULE_OP1;
61343 			} else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) {
61344 				spec = 3159 | SPEC_RULE_OP1;
61345 			}
61346 			break;
61347 		case ZEND_PRE_INC:
61348 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
61349 				spec = 3137 | SPEC_RULE_RETVAL;
61350 			} else if (op1_info == MAY_BE_LONG) {
61351 				spec = 3139 | SPEC_RULE_RETVAL;
61352 			}
61353 			break;
61354 		case ZEND_PRE_DEC:
61355 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
61356 				spec = 3141 | SPEC_RULE_RETVAL;
61357 			} else if (op1_info == MAY_BE_LONG) {
61358 				spec = 3143 | SPEC_RULE_RETVAL;
61359 			}
61360 			break;
61361 		case ZEND_POST_INC:
61362 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
61363 				spec = 3145;
61364 			} else if (op1_info == MAY_BE_LONG) {
61365 				spec = 3146;
61366 			}
61367 			break;
61368 		case ZEND_POST_DEC:
61369 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
61370 				spec = 3147;
61371 			} else if (op1_info == MAY_BE_LONG) {
61372 				spec = 3148;
61373 			}
61374 			break;
61375 		case ZEND_JMP:
61376 			if (OP_JMP_ADDR(op, op->op1) > op) {
61377 				spec = 2311;
61378 			}
61379 			break;
61380 		case ZEND_SEND_VAL:
61381 			if (op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
61382 				spec = 3199;
61383 			}
61384 			break;
61385 		case ZEND_SEND_VAR_EX:
61386 			if (op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
61387 				spec = 3194 | SPEC_RULE_OP1;
61388 			}
61389 			break;
61390 		case ZEND_FE_FETCH_R:
61391 			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
61392 				spec = 3201 | SPEC_RULE_RETVAL;
61393 			}
61394 			break;
61395 		case ZEND_FETCH_DIM_R:
61396 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
61397 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
61398 					break;
61399 				}
61400 				spec = 3164 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
61401 			}
61402 			break;
61403 		case ZEND_SEND_VAL_EX:
61404 			if (op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
61405 				spec = 3200;
61406 			}
61407 			break;
61408 		case ZEND_SEND_VAR:
61409 			if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
61410 				spec = 3189 | SPEC_RULE_OP1;
61411 			}
61412 			break;
61413 		case ZEND_BW_OR:
61414 		case ZEND_BW_AND:
61415 		case ZEND_BW_XOR:
61416 		case ZEND_BOOL_XOR:
61417 		case ZEND_IS_IDENTICAL:
61418 		case ZEND_IS_NOT_IDENTICAL:
61419 			if (op->op1_type < op->op2_type) {
61420 				zend_swap_operands(op);
61421 			}
61422 			break;
61423 		case ZEND_USER_OPCODE:
61424 			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
61425 				if (op->op1_type < op->op2_type) {
61426 					zend_swap_operands(op);
61427 				}
61428 			}
61429 			break;
61430 		default:
61431 			break;
61432 	}
61433 	op->handler = zend_vm_get_opcode_handler_ex(spec, op);
61434 }
61435 
61436 ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
61437 {
61438 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
61439 	opcode_handler_t handler;
61440 #endif
61441 	int ret;
61442 #ifdef ZEND_VM_IP_GLOBAL_REG
61443 	const zend_op *orig_opline = opline;
61444 #endif
61445 #ifdef ZEND_VM_FP_GLOBAL_REG
61446 	zend_execute_data *orig_execute_data = execute_data;
61447 	execute_data = ex;
61448 #else
61449 	zend_execute_data *execute_data = ex;
61450 #endif
61451 
61452 	LOAD_OPLINE();
61453 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
61454 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
61455 	handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
61456 	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61457 	if (EXPECTED(opline != &hybrid_halt_op)) {
61458 #else
61459 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61460 	if (EXPECTED(opline)) {
61461 #endif
61462 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
61463 		SAVE_OPLINE();
61464 	} else {
61465 		ret = -1;
61466 	}
61467 #else
61468 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61469 	SAVE_OPLINE();
61470 #endif
61471 #ifdef ZEND_VM_FP_GLOBAL_REG
61472 	execute_data = orig_execute_data;
61473 #endif
61474 #ifdef ZEND_VM_IP_GLOBAL_REG
61475 	opline = orig_opline;
61476 #endif
61477 	return ret;
61478 }
61479 
61480